User Tools

Site Tools


создание_отказоустойчивых_linux_решений_new

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
создание_отказоустойчивых_linux_решений_new [2022/03/19 11:35]
val [Модуль 8. Распределенное отказоустойчивое хранилище Ceph]
— (current)
Line 1: Line 1:
-====== Создание отказоустойчивых Linux решений ====== 
- 
-===== Программа курса ===== 
- 
-  * [[http://​www.specialist.ru/​course/​un5|Linux. Уровень 6. Создание отказоустойчивых кластерных решений.]] 
- 
-===== Ссылка на вебинар ===== 
- 
- 
-===== Цель курса ===== 
- 
-  * Научиться настраивать отказоустойчивую конфигурацию сервисов Linux на "​железном"​ оборудовании в сети предприятия. 
- 
-===== План обновлений ===== 
- 
-  - Прозрачная миграция сети ЛИН2 в ЛИН6 
-  - DRBD без OCFS поскольку с ним будет CEPH 
-  - server1/2 вместо server для демонстрации шаблонов контейнеров 
-===== Модуль 0. Подготовка стенда в классе ===== 
- 
-  * Узнать свой номер стенда 
-  * Удалить виртуалки 
-  * Удалить профили putty 
-  * Отключить не используемые адаптеры 
-  * Записать логин пароль и IP (сообщить преподавателю) рабочей станции 
-  * Проверить наличие дистрибутивов и образов 
- 
- 
- 
- 
-===== Модуль 1. Развертывание систем и сети кластера ===== 
- 
-==== Теория ==== 
- 
-  * [[http://​www.team.ru/​server/​stbl_compare.shtml|Сравнение кластера надежности и "​обычного"​ сервера]] 
-  * [[https://​ru.wikipedia.org/​wiki/​%D0%9E%D1%82%D0%BA%D0%B0%D0%B7%D0%BE%D1%83%D1%81%D1%82%D0%BE%D0%B9%D1%87%D0%B8%D0%B2%D1%8B%D0%B9_%D0%BA%D0%BB%D0%B0%D1%81%D1%82%D0%B5%D1%80|Отказоустойчивый кластер]] 
-  * [[https://​ru.wikipedia.org/​wiki/​%D0%92%D0%B5%D1%80%D0%BE%D1%8F%D1%82%D0%BD%D0%BE%D1%81%D1%82%D1%8C_%D0%B1%D0%B5%D0%B7%D0%BE%D1%82%D0%BA%D0%B0%D0%B7%D0%BD%D0%BE%D0%B9_%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B|Вероятность безотказной работы]] 
-  * [[https://​www.youtube.com/​watch?​v=-izJHCPKvCg|youtube Отказоустойчивый микрокластер своими руками / Виталий Гаврилов (Ленвендо)]] Схема сети на 4-й минуте 
- 
-==== Лабораторные работы ==== 
- 
-=== 1.1 Импорт VM Linux === 
- 
-C:​\cmder\cmder.exe 
- 
-<​code>​ 
-bash 
- 
-cd 
- 
-git clone http://​val.bmstu.ru/​unix/​conf.git 
- 
-cd conf/​virtualbox/​ 
- 
-./setup.sh X 6 
-</​code>​ 
- 
-=== 1.2 Аппаратная настройка систем === 
- 
-  * Адаптер 1 - eth0 - Виртуальный адаптер хоста (LAN) 
-  * Адаптер 2 - eth1 - Сетевой мост (ISP1) только для node1 и node2 
-  * Жесткий диск размер 4G уже добавлен 
- 
-=== 1.3 Импорт VM Windows === 
- 
-=== 1.4 Исходная настройка сети шлюза === 
- 
-<​code>​ 
-ubuntu# sh net_gate.sh 
- 
-ubuntu# init 6 
-</​code>​ 
- 
-<​code>​ 
-gate# sh conf/​dhcp.sh 
-</​code>​ 
- 
-=== 1.5 Тестирование сети === 
-<​code>​ 
-windows> ping 1.1.1.1 
-</​code>​ 
- 
-=== 1.6 Подготовка отказоустойчивой конфигурации === 
- 
-  * [[Сервис Keepalived]] (сервис не перезапускать!) 
- 
-<​code>​ 
-gate# cat /​etc/​network/​interfaces 
-</​code><​code>​ 
-auto lo 
-iface lo inet loopback 
- 
-auto eth0 
-iface eth0 inet static 
-        address 192.168.X.1 
-        netmask 255.255.255.0 
- 
-auto eth1 
-iface eth1 inet manual 
-        up ip link set eth1 up 
- 
-#auto eth2 
-#iface eth2 inet manual 
-#        up ip link set eth2 up 
-</​code>​ 
-<​code>​ 
-gate# cat /​etc/​hostname 
-</​code><​code>​ 
-node1.corpX.un 
-</​code><​code>​ 
-gate# cat /etc/hosts 
-</​code><​code>​ 
-127.0.0.1 ​              ​localhost 
- 
-192.168.X.1 ​            ​node1.corpX.un node1 
-192.168.X.2 ​            ​node2.corpX.un node2 
-</​code><​code>​ 
-gate# init 6 
-</​code>​ 
- 
-=== 1.7 Тестирование сети === 
-<​code>​ 
-node1# ping ya.ru 
- 
-windows> ping 1.1.1.1 
-</​code>​ 
- 
-==== Вопросы ==== 
- 
-  - НА кластер используется для повышения ... 
-  - НP кластер используется для повышения ... 
-  - Вероятность безотказной работы группы объектов равна ... 
- 
-===== Модуль 2. Синхронизация файлов конфигураций узлов ===== 
- 
-==== Теория ==== 
- 
-  * [[https://​habr.com/​en/​post/​120702/​|csync2 или как облегчить работу с кластером]] 
-  * [[https://​ru.wikipedia.org/​wiki/​Ansible|Ansible]] 
- 
-==== Лабораторные работы ==== 
- 
-=== 2.1 Запуск node2 === 
- 
-=== 2.2 Синхронизация с использованием сервиса SSH === 
- 
-  * Настройка доступа по протоколу ssh пользователя root с node1 на node2 ([[Сервис SSH#​Разрешение доступа пользователя root на основании адреса клиента]]) 
-  * Настройка беспарольного доступа пользователя root с node1 на node2 ([[Сервис SSH#​Аутентификация с использованием ключей ssh]]) 
- 
-<​code>​ 
-node2# ifconfig eth0 inet 192.168.X.2/​24 
- 
-node1# ping node2 
- 
-node1# ssh-keygen 
-... 
-Enter passphrase (empty for no passphrase):​ Пароль на ключ пустой!!! 
-... 
- 
-node1# ssh-copy-id node2 
-</​code>​ 
- 
-Проверка:​ 
- 
-<​code>​ 
-node1# ​ 
-scp /etc/hosts node2:/etc/ 
-scp /​etc/​hostname node2:/etc/ 
-scp /​etc/​network/​interfaces node2:/​etc/​network/​ 
- 
-node1# ssh node2 route add default gw 192.168.X.254 
- 
-node1# ssh node2 apt update 
-node1# ssh node2 apt install keepalived 
- 
-scp /​etc/​keepalived/​keepalived.conf node2:/​etc/​keepalived/​keepalived.conf 
-scp /​usr/​local/​bin/​vrrp.sh node2:/​usr/​local/​bin/​vrrp.sh 
-</​code>​ 
- 
-  * Правим файлы конфигурации на node2, перезапускаем,​ тестируем сеть 
- 
-<​code>​ 
-node1# ssh node2 
- 
-node2# cat /​etc/​hostname 
-</​code><​code>​ 
-node2.corp13.un 
-</​code><​code>​ 
-node2# cat /​etc/​network/​interfaces 
-</​code><​code>​ 
-... 
-        address 192.168.X.2 
-... 
-</​code><​code>​ 
-node2# /​etc/​keepalived/​keepalived.conf 
-</​code><​code>​ 
-... 
-    state BACKUP 
-... 
-</​code><​code>​ 
-node2# init 6 
-</​code>​ 
- 
-=== 2.3 Использование BASH алиасов и функций для удобства === 
- 
-  * [[Настройка командных интерпретаторов#​bash]] алиасы и функции 
- 
-<​code>​ 
-node1# scn2 /​etc/​sysctl.conf 
- 
-node1# ssn2 sysctl -f 
-</​code>​ 
- 
-=== 2.4 Синхронизация с использованием пакета CSYNC2 === 
- 
-**Сценарий:​** настроить DNS на node1, на node2 конфигурация появится автоматически ​ 
- 
-  * [[Финальная настройка DNS сервера]] (как это было на "​ЛИН СЕРВ"​) 
-  * Устанавливаем и ЗАПУСКАЕМ на двух узлаx, настраиваем на node1 
-<​code>​ 
-node1# sh conf/dns.sh 
- 
-node1# cat /​etc/​bind/​corpX.un 
-</​code><​code>​ 
-$TTL      3h 
-@         ​SOA ​    ns root.ns ​ 1 1d 12h 1w 3h 
-          NS      ns 
- 
-ns        A       ​192.168.X.1 
-ns        A       ​192.168.X.2 
- 
-;​node1 ​    ​A ​      ​192.168.X.1 
-;​node2 ​    ​A ​      ​192.168.X.2 
-$GENERATE 1-9 node$ A 192.168.X.$ 
- 
-gate      A       ​192.168.X.254 
-</​code><​code>​ 
-node1# ssn2 apt install bind9 
-</​code>​ 
- 
-  * [[Локализация системы#​Локализация временной зоны]] 
-  * [[Пакет CSYNC2]] 
- 
-<​code>​ 
-node1# csync2 -xv 
-</​code>​ 
-<​code>​ 
-nodeN# cat /​etc/​resolv.conf 
-</​code><​code>​ 
-search corpX.un 
-nameserver 192.168.X.1 
-nameserver 192.168.X.2 
-</​code>​ 
-<​code>​ 
-nodeN# host ns node1 
-nodeN# host ns node2 
-</​code>​ 
-=== 2.5 Синхронизация с использованием пакета Ansible === 
- 
-**Сценарий:​** на обоих узлах создаем пользователя user1 с uid=10001 
- 
-**Примечание:​** выполнить в 5-м модуле 
- 
-  * [[Сервис Ansible]] 
- 
-==== Вопросы ==== 
- 
-  - Команда ssh-copy-id копирует ... 
-  - Где располагается файл с публичными ключами пользователей ssh? 
-  - На каком узле будет сохранен файл в результате выполнения команды ssh node2 iptables-save > /​etc/​iptables.rules 
-  - Что определяет параметр конфигурации auto younger в пакете csync2 
-  - Перечислите известные Вам варианты тиражирования файлов конфигурации в кластере?​ 
- 
-===== Модуль 3. Развертывание сервисов с интегрированной поддержкой отказоустойчивости ===== 
- 
-==== Теория ==== 
- 
-  * [[https://​www.communigate.ru/​CommuniGatePro/​russian/​Clusters.html|Кластеры Communigate Pro]] 
-  * man dhcpd.conf (DHCP FAILOVER) 
-==== Лабораторные работы ==== 
- 
-=== 3.1 Отказоустойчивый DHCP сервер === 
- 
-  * [[Сервис DHCP#​Установка]] cервиса DHCP 
-<​code>​ 
-node2# sh conf/​dhcp.sh 
-</​code>​ 
- 
-  * [[Сервис DHCP#​Отказоустойчивая конфигурация]] cервиса DHCP 
-  * [[Сервис DHCP#​Проверка конфигурации и запуск]] cервиса DHCP 
-  * [[Сервис DHCP#​Мониторинг выданных адресов]] cервиса DHCP 
-  
-Примечание:​ в первый момент необходимо запустить оба сервера чтобы они синхронизировались. 
- 
-=== 3.2 Проверка === 
- 
-  * !!! Вместо тестирования отказоустойчивости выпольнить лабораторную работу 4.3.1 
- 
-<​code>​ 
-windows> ipconfig /release 
- 
-windows> ipconfig /renew 
- 
-windows> ipconfig /all 
- 
-windows> ping ya.ru 
-</​code>​ 
- 
-==== Вопросы ==== 
- 
-  - Есть ли необходимость в использовании дополнительного ПО для реализации отказоустойчивой конфигурации пакета isc-dhcp? 
-  - Сколько узлов может быть в отказоустойчивой конфигурации isc-dhcp? 
-  - Какие условия необходимы на начальном этапе развертывания отказоустойчивой конфигурации isc-dhcp? 
-  - Какие преимущества отказоустойчивой конфигурации isc-dhcp перед двумя независимыми dhcp серверами?​ 
- 
-===== Модуль 4. Развертывание отказоустойчивого шлюза в Internet ===== 
- 
-==== Теория ==== 
- 
-  * [[https://​ru.wikipedia.org/​wiki/​CARP|CARP]] 
-  * [[https://​ru.wikipedia.org/​wiki/​VRRP|CARP]] 
-  * [[https://​ru.wikipedia.org/​wiki/​Iproute2|Iproute2]] 
- 
-==== Лабораторные работы ==== 
- 
-==== 4.1 Отказоустойчивый gate ==== 
- 
-  * [[Протокол CARP]] 
-  * [[Сервис Keepalived]] ​ 
- 
-<​code>​ 
-windows> ping gate 
-</​code>​ 
-==== 4.2 Отказоустойчивый nat ==== 
- 
-  * Настроить NAT трансляцию для сети 192.168.X/​24 в реальный адрес ISP ([[Сервис NAT]]) 
- 
-  * !!! Вместо тестирования отказоустойчивости выпольнить лабораторную работу 4.3.1 
- 
-==== 4.3 Балансировка нагрузки и отказоустойчивость при использовании нескольких ISP ==== 
- 
-=== 4.3.1 Добавление сетевых карт для подключения к ISP2 === 
- 
-<​code>​ 
-root@nodeN:​~#​ cat /​etc/​network/​interfaces 
-</​code><​code>​ 
-... 
-auto eth2 
-iface eth2 inet manual 
-        up ip link set eth2 up 
-</​code>​ 
- 
-   * [[Сервис Keepalived]] - добавляем eth2 
-   * По очереди останавливаем узлы и добавляем Адаптер 3 - eth2 - Сетевой мост (ISP2) 
- 
-<​code>​ 
-nodeN# ip a | grep eth2 
-</​code>​ 
- 
-=== 4.3.2 Модификация настроек dns сервера === 
-<​code>​ 
-node1# cat /​etc/​bind/​named.conf 
-</​code><​code>​ 
-... 
-        forwarders { 
-                172.16.1.254;​ 
-                172.16.2.254;​ 
-        }; 
-... 
-</​code><​code>​ 
-node1# csync2 -xv 
-</​code>​ 
- 
-=== 4.3.3 Тестирование ISP2 === 
- 
-<​code>​ 
-node1# ip a | grep 172.16.2 
- 
-node1# ping 172.16.2.254 
- 
-node1# ip route del default 
-node1# ip route add default via 172.16.2.254 
- 
-node1# ping ya.ru 
- 
-node1# tracepath ya.ru 
- 
-node1# ip route del default 
-</​code>​ 
- 
-=== 4.3.4 Использование PBR для балансировки нагрузки === 
- 
-**Сценарий:​** 
- 
-  * Всем настроить NAT на два ISP ([[Сервисы Gateway и routing#​Использование iproute2 для управления выбором ISP]]), iptables-restore можно "​привязать"​ к интерфейсу eth0 
-  * Преподавателю продемонстрировать PBR в "​ручном"​ режиме ([[Сервисы Gateway и routing#​NetFilter iproute2 (Linux)]]) 
- 
- 
-=== 4.3.5 Автоматизация балансировки/​отказоустойчивости выбора ISP === 
- 
-  * [[Сервис Keepalived]] - добавляем таблицы 101 и 102 
- 
-<​code>​ 
-node1# ip route show table 101 
- 
-node1# ip route show table 102 
- 
-nodeN# cat set_isp.sh 
-</​code><​code>​ 
-#!/bin/sh 
- 
-case $1 in 
-        ISP1) 
-                ip rule del from 192.168/16 to 192.168/16 table main 
-                while ip rule del from any table 101;do true;done 
-                while ip rule del from any table 102;do true;done 
-                ip route delete default 
- 
-                ip rule add from 192.168.X.0/​24 table 101 
-                ip rule add from 192.168/16 to 192.168/16 table main 
- 
-                ip route add default via 172.16.1.254 
- 
-                /sbin/ip route flush cache 
-                /​usr/​sbin/​conntrack -F 
-        ;; 
-        ISP2) 
-                ip rule del from 192.168/16 to 192.168/16 table main 
-                while ip rule del from any table 101;do true;done 
-                while ip rule del from any table 102;do true;done 
-                ip route delete default 
- 
-                ip rule add from 192.168.X.0/​24 table 102 
-                ip rule add from 192.168/16 to 192.168/16 table main 
- 
-                ip route add default via 172.16.2.254 
- 
-                /sbin/ip route flush cache 
-                /​usr/​sbin/​conntrack -F 
-        ;; 
-        ISP1ISP2) 
-                ip rule del from 192.168/16 to 192.168/16 table main 
-                while ip rule del from any table 101;do true;done 
-                while ip rule del from any table 102;do true;done 
-                ip route delete default 
- 
-                ip rule add from 192.168.X.0/​25 table 101 
-                ip rule add from 192.168.X.128/​25 table 102 
-                ip rule add from 192.168/16 to 192.168/16 table main 
- 
-                ip route add default via 172.16.1.254 
-                #ip route add default via 172.16.2.254 ​ 
- 
-                /sbin/ip route flush cache 
-                /​usr/​sbin/​conntrack -F 
-        ;; 
-esac 
-</​code><​code>​ 
-nodeN# chmod +x set_isp.sh 
- 
-node1# /​root/​set_isp.sh ISP1ISP2 
- 
-node1# ip rule show 
- 
-node2# tracepath ya.ru 
- 
-windows> tracert ya.ru 
- 
-nodeN# cat select_isp.sh 
-</​code><​code>​ 
-#!/bin/sh 
- 
-TESTIP=1.1.1.1 
- 
-ip a | grep -q '​192.168.*254'​ || exit 0 
- 
-ISP=''​ 
- 
-ip route del $TESTIP 
-ip route add $TESTIP via 172.16.1.254 
-ping -c3 $TESTIP && ISP=ISP1 
- 
-ip route del $TESTIP 
-ip route add $TESTIP via 172.16.2.254 
-ping -c3 $TESTIP && ISP=${ISP}ISP2 
- 
-ip route del $TESTIP 
- 
-echo $ISP 
-# exit 0 
- 
-touch /​tmp/​current_isp 
-test $ISP = "`cat /​tmp/​current_isp`"​ && exit 0 
- 
-echo $ISP > /​tmp/​current_isp 
- 
-/​root/​set_isp.sh $ISP 
- 
-</​code><​code>​ 
-nodeN# chmod +x select_isp.sh 
- 
-node1# /​root/​select_isp.sh 
- 
-node1# cat /​tmp/​current_isp 
- 
-nodeN# crontab -l 
-</​code><​code>​ 
-* * * * * /​root/​select_isp.sh >/​dev/​null 2>&1 
-</​code>​ 
-<​code>​ 
-master_node#​ ip rule show 
-</​code>​ 
- 
-==== Вопросы ==== 
- 
-  - Перечислите протоколы отказоустойчивого шлюза. 
-  - Для какой операционной системы впервые появилась реализация протокола CARP? 
-  - Какая утилита из набора iproute2 позволяет назначить/​удалить IP адрес на интерфейсе?​ 
-  - В чем отличие поведения мастер хоста от других в протоколе CARP/VRRP? 
-  - Поддерживает ли протокол CARP/VRRP отказоустойчивость соединений?​ 
-  - Поддерживает ли протокол CARP/VRRP балансировку нагрузки?​ 
-  - Что такое ucarp? 
-  - В каком пакете в Debian содержатся современные сетевые утилиты,​ пришедшие на смену классическим UNIX утилитам ifconfig, route, arp, netstat? 
-  - Какая утилита из набора iproute2 заменяет команду arp? 
-  - В какой пакет входит утилита send_arp в Debian, для чего нужна и какой вид трафика использует?​ 
-  - Какой командой можно очистить таблицу ARP в Linux? 
-  - В чем принцип работы механизма PBR? 
-  - Можно ли балансировать трафик одного соединения между двумя ISP при использовании NAT? 
-  - Необходим ли маршрут "по умолчанию"​ на шлюзе для прохождения пользовательского трафика?​ 
-  - Согласно какой таблице маршрутизации в Linux обрабатывается пакет, если для него нет правила,​ определяющего обработку в конкретной таблице?​ 
-  - Что следует сделать с текущими активными соединениями после изменения правил PBR? 
- 
-===== Модуль 5. Использование систем управления ресурсами кластера ===== 
- 
-==== Теория ==== 
- 
- 
-  * [[https://​github.com/​voxpupuli/​puppet-corosync/​issues/​32|Corosync vs Pacemaker: wrong usage of "​Corosync"​]] 
-  * [[https://​stackoverflow.com/​questions/​22502495/​which-one-is-the-official-command-line-package-of-pacemaker-crmsh-or-pcs|which one is the official command line package of pacemaker? crmsh or pcs?]] 
-  * [[https://​clusterlabs.org/​pacemaker/​doc/​2.1/​Pacemaker_Administration/​html/​pcs-crmsh.html|Quick Comparison of pcs and crm shell]] 
-  * [[https://​clusterlabs.org/​pacemaker/​doc/​|ClusterLabs Pacemaker Documentation]] 
- 
- 
- 
-==== Лабораторные работы ==== 
- 
-Сценарий:​ отказоустойчивое ftp хранилище пользовательских файлов с web доступом 
- 
-  * Содержимое домашних каталогов мастер сервера периодически копируется на резервный. ​ 
-  * В случае временной остановки или выхода из строя главного сервера автоматически становится доступным резервный. ​ 
-  * Не преднамеренный запуск мастер сервера не должен менять ролей серверов. 
- 
-==== 5.1 Синхронизация каталогов ==== 
- 
-=== 5.1.1 Установка и запуск сервера Apache === 
- 
-  * В зону corpX.un добавляем запись www A 192.168.X.10 
- 
-<​code>​ 
-node1# cat /​etc/​bind/​corpX.un 
-</​code><​code>​ 
-... 
-www       ​A ​      ​192.168.X.10 
-</​code><​code>​ 
-node1# csync2 -xv 
-</​code>​ 
- 
-  * На обоих узлах [[Сервис HTTP#​Установка и запуск сервера Apache]] (можно через Ansible) 
-  * На обоих узлах создаем пользователя user1 с uid=10001 ([[Управление учетными записями в Linux]]) (можно через Ansible) 
-  * На обоих узлах включаем [[Сервис HTTP#​Использование домашних каталогов]] (можно через Ansible) 
-  * Использование [[Сервис Ansible]] для автоматизации задач (финальные работы 8.1 и 8.2 выполнить утром 3-го дня) 
-  * Устанавливаем сервер ftp на node1 и запускаем его ([[Сервис FTP#​Сервер ftp]]) 
-  * Создаем тестовую www страницу для пользователя user1 используя протокол ftp на node1 
- 
-<​code>​ 
-Проводник:​ ftp://node1 
-l: user1 
-p: password1 
- 
-Каталог:​ public_html 
- 
-В Браузере:​ http://​node1/​~user1 
-</​code>​ 
- 
-=== 5.1.2 Синхронизация пользовательских данных === 
- 
-  * [[Пакет RSYNC]] 
-  * Можно автоматизировать,​ ([[Планирование выполнения заданий в Linux]]), но, пока не нужно. 
-==== 5.2 Автоматизация смены ролей узлов кластера ==== 
- 
-=== 5.2.1 Установка и сервера FTP === 
- 
-  * Устанавливаем ftp сервис на node2 ([[Сервис FTP#​Сервер ftp]]) 
-  * На обоих узлах отключаем автоматический запуск ftp сервиса ([[Управление сервисами в Linux]]) 
-  
-<​code>​ 
-nodeN# service proftpd stop 
- 
-nodeN# update-rc.d -f proftpd remove 
-или 
-debian11# systemctl disable proftpd 
-</​code>​ 
- 
-=== 5.2.2 Настройка менеджера кластера === 
- 
-  * [[Пакет HEARTBEAT]] (Демонстрирует преподаватель в методических целях) 
-  * [[Пакет Corosync]] 
-  * [[Пакет Pacemaker]] 
-  * [[Пакет PCS]] (сделать резервную копию /​etc/​corosync/​corosync.conf) 
- 
-<​code>​ 
-Проводник:​ ftp://www 
- 
-В Браузере:​ http://​www.corpX.un/​~user1 
-</​code>​ 
- 
-=== 5.2.3 Автоматическая синхронизация домашних каталогов === 
- 
-  * Настроить автоматическую синхронизацию домашних каталогов с мастер узла на резервный ​ 
-<​code>​ 
-node2# ssh-keygen 
- 
-node2# ssh-copy-id node1 
- 
-nodeN# crontab -l 
-</​code><​code>​ 
-... 
-* * * * * ps ax | grep -v grep | grep -q '​proftpd:​ (accepting connections)'​ && /​usr/​bin/​rsync -az --delete /home/ nodeM:/​home/​ 
-</​code>​ 
-==== Вопросы ==== 
- 
-  - В чем преимущество использования rsync по сравнению с scp? 
-  - Что определяют разделители : и :: в команде rsync? 
-  - Реализацией какой части классического пакета heartbeat является пакет pacemaker? 
-  - Какие задачи классического пакета heartbeat НЕ решает пакет corosync? 
-  - В каком формате хранятся файлы конфигурации пакета corosync? 
-  - В каком формате хранятся файлы конфигурации пакета pacemaker? 
-  - По какой причине не следует редактировать файлы конфигурации пакета pacemaker в текстовом редакторе?​ 
-  - Для чего используется утилита crm должна ли она быть установлена на все узлы кластера?​ 
-  - Для чего используется утилита crm_mon и есть ли она на всех узлах кластера?​ 
-  - Что надо настроить в пакете pacemaker, что бы все части, из которых состоит ресурс,​ запускались на одном узле кластера?​ 
-  - Какой тип трафика может использоваться для связи узлов кластера corosync? 
-  - Что нужно сделать для сервисов,​ управляемых менеджером кластера?​ 
- 
-===== Модуль 6. Развертывание отказоустойчивых файловых сервисов ===== 
- 
-==== Теория ==== 
- 
-  * [[https://​ru.wikipedia.org/​wiki/​DRBD|Distributed Replicated Block Device]] 
-  * [[https://​ru.wikipedia.org/​wiki/​%D0%A1%D0%B5%D1%82%D1%8C_%D1%85%D1%80%D0%B0%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85|Сеть хранения данных (англ. Storage Area Network, SAN)]] 
-  * [[https://​ru.wikipedia.org/​wiki/​NAS|Cервер для хранения данных (англ. Network Attached Storage, NAS)]] 
- 
-==== Лабораторные работы ==== 
- 
-**Сценарий**:​ Создаем отказоустойчивый корпоративный файловый сервер. Первый узел кластера должен использоваться сервером по умолчанию. 
- 
-==== 6.1 Развертывание распределенного RAID 1 ===== 
- 
-  * Подключаем к обоим узлам по дополнительному диску 
-  * [[Решение DRBD]] 
- 
-==== 6.2 Автоматизация смены ролей узлов кластера ​ ==== 
- 
-  * Pacemaker [[Пакет Pacemaker#​Удаление ресурсов]] 
-  * [[Решение DRBD#DRBD и Pacemaker]] (оставить приклрепление к node1) или [[Сервис OCFS2]] 
- 
-==== 6.3 Настройка NAS сервера SMB/CIFS ==== 
- 
-  * В зону corpX.un добавляем запись fs A 192.168.X.20 
- 
-<​code>​ 
-node1# cat /​etc/​bind/​corpX.un 
-</​code><​code>​ 
-... 
-fs        A       ​192.168.X.20 
-</​code><​code>​ 
-node1# csync2 -xv 
-</​code>​ 
- 
-  * Устанавливаем на оба узла (лучше,​ отдельно на каждом) пакет samba ([[Файловый сервер SAMBA]]) 
-  * Отключаем автоматический запуск сервиса 
- 
-<​code>​ 
-root@nodeN:​~#​ 
- 
-service smbd stop 
-service nmbd stop 
- 
-systemctl disable smbd 
-systemctl disable nmbd 
- 
- 
-</​code>​ 
- 
-  * Настраиваем на обоих узлах [[Файловый сервер SAMBA#​Публичный каталог доступный на запись]] 
-  * Создаем каталог /​disk2/​samba на мастер узле 
-  * Настраиваем менеджер кластера на монтирование на мастер узле зеркалируемого раздела в каталог /disk2, назначение ip адреса 192.168.X.20 и запуск сервера samba 
- 
-<​code>​ 
-node1# crm configure 
- 
-crm(live)configure#​ primitive pr_srv_smbd systemd:​smbd 
- 
-crm(live)configure#​ primitive pr_ip_smbd ocf:​heartbeat:​IPaddr2 params ip=192.168.X.20 cidr_netmask=32 nic=eth0 
- 
-crm(live)configure#​ group gr_ip_fs pr_fs_r0 pr_ip_smbd pr_srv_smbd 
- 
-или 
- 
-crm(live)configure#​ group pr_fs_r0 pr_ip_smbd pr_srv_smbd 
- 
-или 
- 
-crm(live)configure#​ edit gr_ip_fs 
- 
-crm(live)configure#​ commit 
-</​code>​ 
- 
-=== Тестирование === 
- 
-<​code>​ 
-master# watch cat /proc/drbd 
- 
-master# crm_mon 
-</​code>​ 
- 
-  * Останавливаем MASTER сервер и дожидаемся монтирования на SLAVE узле "​половины"​ зеркалируемого раздела в каталог /disk2, назначение ip адреса 192.168.X.20 и запуск сервера samba  
-  * Запускаем бывший MASTER узел и дожидаемся восстановления целостности зеркала 
- 
-  * !!! (Лучше после демонстрации SplitBrain) Останавливаем группу ресурсов кластера и [[Пакет Pacemaker#​Удаление ресурсов]] 
-<​code>​ 
-master# crm resource stop pr_srv_smbd pr_ip_smbd 
- 
-master# crm configure delete pr_srv_smbd pr_ip_smbd gr_ip_fs 
-</​code>​ 
- 
-==== Вопросы ==== 
- 
-  - Какое решение можно использовать для блочной синхронизации дисковых устройств по сети? 
-  - При каком условии можно монтировать распределенное блочное хранилище на запись сразу на нескольких,​ содержащих его узлах? 
-  - Что определяет параметр wfc-timeout в пакете DRBD? 
-  - В каком состоянии будет DRBD RAID1 если узлы, входящие в него, в разное время поработали,​ независимо друг от друга, с разделом,​ в течение времени превышающем wfc-timeout?​ 
-  - Чем отличаются системы NAS и SAN 
-  - В чем фундаментальное отличие протоколов CIFS и iSCSI? 
- 
-===== Модуль 7. Развертывание контейнеров в отказоустойчивой конфигурации ===== 
- 
-==== Теория ==== 
- 
-  * [[https://​ru.wikipedia.org/​wiki/​LXC|Linux Containers]] 
-  * [[https://​www.thomas-krenn.com/​en/​wiki/​HA_Cluster_with_Linux_Containers_based_on_Heartbeat,​_Pacemaker,​_DRBD_and_LXC|HA Cluster with Linux Containers based on Heartbeat, Pacemaker, DRBD and LXC]] 
- 
-==== Лабораторные работы ==== 
- 
-==== 7.1 Linux Containers в зеркалируемом разделе ==== 
- 
-  * В зону corpX.un добавляем запись server1 A 192.168.X.31 
- 
-<​code>​ 
-node1# cat /​etc/​bind/​corpX.un 
-</​code><​code>​ 
-... 
-server1 ​  ​A ​      ​192.168.X.31 
-server2 ​  ​A ​      ​192.168.X.32 
-@         ​MX ​ 10  server1 
-</​code><​code>​ 
-node1# csync2 -xv 
-</​code>​ 
- 
- 
-=== 7.1.1 Настройка bridge на узлах и сервисах === 
- 
-  * [[Технология LXC#​Подготовка сети]] для LXC на одной системе 
- 
-<​code>​ 
-nodeN# apt install bridge-utils 
- 
-nodeN# cat /​etc/​network/​interfaces 
-</​code><​code>​ 
-... 
-auto br0 
-iface br0 inet static 
- 
-        bridge_ports eth0 
-        #bridge_hw 08:​00:​27:​12:​34:​0N ​ #if generate same mac on nodes (Debian11) 
- 
-        address 192.168.X.N 
-        ... 
-        ​ 
-</​code>​ 
- 
-  * [[Сервис Keepalived]] и bridge 
-  * Сервис DHCP и bridge 
- 
-<​code>​ 
-nodeN# cat /​etc/​default/​isc-dhcp-server 
-</​code><​code>​ 
-... 
-INTERFACESv4="​br0"​ 
-</​code><​code>​ 
-nodeN# init 0 
-</​code>​ 
- 
-  * Для режима bridge в lxc понадобиться включить "​неразборчивый режим"​ первом адаптере обеих виртуальных машин 
-  * Проверки после запуска 
- 
-<​code>​ 
-nodeN# ip a 
- 
-node1# mount | egrep '​ext|ocfs'​ 
- 
-nodeN# cat /proc/drbd 
-</​code>​ 
- 
-  * Может понадобиться [[Решение DRBD#​Решение ситуации Split-Brain]] или, в нашем случае [[Решение DRBD#​Решение ситуации Split-Brain при использовании Pacemaker]] 
- 
-=== 7.1.2 Подготовка виртуальных машин === 
- 
-  * [[Технология LXC#​Установка и настройка lxc]] на обоих узлах 
-  * Готовимся все, относящееся к виртуальным системам,​ хранить на зеркалируемом разделе 
- 
-<​code>​ 
-root@nodeN:​~#​ rmdir /​var/​lib/​lxc/​ 
- 
-root@nodeN:​~#​ ln -s /​disk2/​var/​lib/​lxc/​ /​var/​lib/​lxc 
-</​code>​ 
- 
-  * Создание ветки дочерней системы/​шаблона 
-  ​ 
-<​code>​ 
-root@node1.corpX.un:​~#​ mkdir -p /​disk2/​var/​lib/​lxc/​ 
- 
-root@node1.corpX.un:​~#​ lxc-create -t download -n server-template -- --no-validate -d ubuntu -r focal -a amd64 
-</​code>​ 
- 
-  * Установка ПО в дочерней системе/​шаблоне 
- 
-<​code>​ 
-root@node1.corpX.un:​~#​ chroot /​var/​lib/​lxc/​server-template/​rootfs/​ /bin/bash 
- 
-root@node1:/#​ PS1='​server-template:​\w#​ ' 
- 
-server-template:/#​ apt update 
- 
-server-template:/#​ apt purge netplan.io 
- 
-server-template:/#​ apt install nano ssh 
-</​code>​ 
- 
-  * !!! Методическая рекомендация - запустить процесс установки Ceph (лабораторная работа 8.3) 
- 
-  * Настраиваем hostname, hosts, DNS client и учетную запись root в гостевой системе/​шаблоне 
- 
-<​code>​ 
-server:/# cat /​etc/​hostname 
-</​code><​code>​ 
-server-template.corpX.un 
-</​code><​code>​ 
-server-template:/#​ cat /etc/hosts 
-</​code><​code>​ 
-127.0.0.1 localhost 
- 
-192.168.X.30 server-template.corpX.un server-template 
-</​code><​code>​ 
-server-template:/#​ cat /​etc/​systemd/​resolved.conf 
-</​code><​code>​ 
-[Resolve] 
-DNS=192.168.X.1 192.168.X.2 
-</​code><​code>​ 
-server-template:/#​ passwd ubuntu 
-</​code>​ 
-Ctrl-D 
- 
-  * Настраиваем lxc для запуска гостевой системы/​шаблона в контейнере 
- 
-<​code>​ 
-root@node1.corpX.un:​~#​ cat /​var/​lib/​lxc/​server-template/​config 
-</​code><​code>​ 
-... 
-lxc.rootfs.path = dir:/​var/​lib/​lxc/​server-template/​rootfs 
-lxc.uts.name = server-template 
-... 
-lxc.net.0.type = veth 
-lxc.net.0.link = br0 
-lxc.net.0.flags = up 
-lxc.net.0.ipv4.address = 192.168.X.30/​24 
-lxc.net.0.ipv4.gateway = 192.168.X.254 
-</​code>​ 
- 
-  * Создание системы из шаблона 
- 
-<​code>​ 
-root@node1.corpX.un:​~# ​ 
- 
-SRC_CONTAINER=server-template 
-DST_CONTAINER=server1 
- 
-SRC_IP=192.168.X.30 
-DST_IP=192.168.X.31 
- 
-time cp -rp /​var/​lib/​lxc/​$SRC_CONTAINER/​ /​var/​lib/​lxc/​$DST_CONTAINER/​ 
- 
-find /​var/​lib/​lxc/​$DST_CONTAINER/​rootfs/​etc/​ -type f -exec sed -i''​ -e "​s/​$SRC_CONTAINER/​$DST_CONTAINER/"​ -e "​s/​$SRC_IP/​$DST_IP/"​ {} \; 
- 
-sed -i''​ -e "​s/​$SRC_CONTAINER/​$DST_CONTAINER/"​ -e "​s/​$SRC_IP/​$DST_IP/"​ /​var/​lib/​lxc/​$DST_CONTAINER/​config 
- 
-</​code>​ 
- 
-  * Тестируем работу виртуальной системе на MASTER узле 
- 
-<​code>​ 
-root@node1.corpX.un:​~#​ lxc-info -n server1 
- 
-root@node1.corpX.un:​~#​ systemctl start lxc@server1 
- 
-root@node1.corpX.un:​~#​ ssh ubuntu@server1 
- 
-root@node1.corpX.un:​~#​ systemctl stop lxc@server1 
-</​code>​ 
- 
-==== 7.2 Интеграция контейнеров с менеджером кластера ==== 
- 
-=== Pacemaker === 
- 
-<​code>​ 
-primitive pr_lxc_server1 systemd:​lxc@server1 meta resource-stickiness=100 
- 
-group gr_fs_lxc pr_fs_r0 pr_lxc_server1 
-</​code>​ 
- 
-==== Настройка виртуальной системы как сервер электронной почты и тестирование отказоустойчивости ==== 
- 
-  * [[Сервис SSH#PuTTY]] 
- 
-<​code>​ 
-server1$ sudo -i 
- 
-server1# apt install ansible git 
-</​code>​ 
- 
-  * Сервис Git [[Сервис Git#​Клонирование и обновление локального репозитория из сетевого]] 
- 
-<​code>​ 
-server1# ansible-playbook conf/​ansible/​roles/​mail.yml 
-</​code>​ 
- 
- 
-  * Roundcube http://​server1.corpX.un/​mail 
-  * [[Thunderbird]] 
- 
-<​code>​ 
-node1# crm resource move gr_fs_lxc node2 
-</​code>​ 
-==== Вопросы ==== 
- 
-  - Что лучше, контейнерная виртуализация или аппаратная?​ 
- 
-===== Модуль 8. Распределенное отказоустойчивое хранилище Ceph ===== 
- 
-  - Настройка IP на node3-7, [[Сервис Ansible#​Настройка групп управляемых систем]],​ [[Сервис Ansible#​Настройка транспорта ssh]] и [[Сервис Ansible#​Использование модулей]] Ansible для тестирования связи с ними 
-  - [[Сервис Ansible#​Использование ролей]] Ansible для настройки файлов конфигурации сети на node3-7 
-  - [[Сервис Ansible#​Использование модулей]] Ansible для инсталляции Ceph на node3-7 
-  - [[Ceph - просто добавь узлов!#​Шаг 2. Установка и настройка Ceph]] 
-  - Добавить 6-й узел как OSD 
-  - [[Сервис iSCSI#iSCSI initiator]] 
-  - [[Сервис multipath]] 
-  - [[Сервис OCFS2]] 
-  - [[Технология KVM]] 
-  - Удалить 3-й узел, дождаться начала и окончания миграции,​ за это время превратить 7-й узел в 3-й 
- 
- 
  
создание_отказоустойчивых_linux_решений_new.1647678913.txt.gz · Last modified: 2022/03/19 11:35 by val