User Tools

Site Tools


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

Differences

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

Link to this comparison view

создание_отказоустойчивых_linux_решений_2022 [2024/06/04 12:46] (current)
val created
Line 1: Line 1:
 +====== Создание отказоустойчивых Linux решений 2022 ======
 +
 +===== Программа курса =====
 +
 +  * [[http://​www.specialist.ru/​course/​un5|Linux. Уровень 6. Создание отказоустойчивых кластерных решений.]]
 +
 +
 +===== Цель курса =====
 +
 +  * Научиться настраивать отказоустойчивую конфигурацию сервисов Linux на "​железном"​ оборудовании в сети предприятия.
 +
 +
 +===== Модуль 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-й минуте
 +  * [[https://​ru.wikipedia.org/​wiki/​VRRP|VRRP]]
 +
 +==== Лабораторные работы ====
 +
 +=== 1.1 Импорт VM Linux ===
 +
 +<​code>​
 +Запустите с правами Administrator
 +
 +C:​\cmder\cmder.exe
 +
 +bash
 +
 +cd
 +
 +test -d conf && rm -r conf
 +
 +git clone http://​val.bmstu.ru/​unix/​conf.git
 +
 +cd conf/​virtualbox/​
 +
 +!!! 6 - это номер курса, вместо X укажите Ваш номер стенда,​ если не знаете его, спросите преподавателя !!!
 +
 +./setup.sh X 6
 +</​code>​
 +
 +=== 1.2 Аппаратная настройка систем node1 и node2 ===
 +
 +  * Адаптер 1 - eth0 - Виртуальный адаптер хоста (LAN)
 +  * Адаптер 2 - eth1 - Сетевой мост (ISP1) только для node1 и node2
 +  * 2, а если есть возможность,​ 4 Gb RAM
 +  * Жесткий диск размер 4G уже добавлен
 +
 +=== 1.3 Импорт VM Windows ===
 +
 +=== 1.4 Исходная настройка сети шлюза ===
 +
 +<​code>​
 +ubuntu# sh net_gate.sh
 +
 +ubuntu# init 6
 +</​code>​
 +
 +  * PuTTY !!!
 +
 +<​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
 +
 +ubuntu# cat /​etc/​hostname
 +</​code><​code>​
 +node2.corpX.un
 +</​code><​code>​
 +node2# cat /​etc/​network/​interfaces
 +</​code><​code>​
 +...
 +        address 192.168.X.2
 +...
 +</​code><​code>​
 +node2# cat /​etc/​keepalived/​keepalived.conf
 +</​code><​code>​
 +...
 +#    state MASTER
 +    state BACKUP
 +...
 +</​code><​code>​
 +node2# init 6
 +</​code>​
 +
 +=== 2.3 Использование BASH алиасов и функций для удобства ===
 +
 +  * [[Настройка командных интерпретаторов#​bash]] алиасы и функции
 +
 +<​code>​
 +node1# scn2 /​etc/​sysctl.conf
 +
 +node1# ssn2 sysctl -f
 +</​code>​
 +  или
 +<​code>​
 +node1# scn2 /​etc/​sysctl.d/​20-my-forward.conf
 +
 +node1# ssn2 sysctl -p --system
 +</​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# named-checkconf -z
 +
 +node1# ssn2 apt install bind9
 +</​code>​
 +
 +  * [[Локализация системы#​Локализация временной зоны]]
 +  * [[Пакет CSYNC2]]
 +
 +<​code>​
 +node1# csync2 -xv
 +</​code>​
 +<​code>​
 +node1# host ns node1
 +node1# host ns node2
 +</​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 
 +</​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.2
 +
 +<​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/​VRRP|VRRP]]
 +  * [[https://​ru.wikipedia.org/​wiki/​CARP|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]])
 +  * 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 -d ya.ru
 +
 +nodeN# cat select_isp.sh
 +</​code><​code>​
 +#!/bin/sh
 +
 +ip a | grep -q '​192.168.*254'​ || exit 0
 +
 +TESTIP=1.1.1.1
 +
 +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# named-checkconf -z
 +
 +node1# csync2 -xv
 +</​code>​
 +
 +  * На обоих узлах [[Сервис HTTP#​Установка и запуск сервера Apache]] (можно через Ansible)
 +  * На обоих узлах создаем пользователя user1 с uid=10001 ([[Управление учетными записями в Linux]]) (можно через Ansible)
 +  * На обоих узлах включаем [[Сервис HTTP#​Использование домашних каталогов]] (можно через Ansible)
 +  * Использование [[Сервис Ansible]] для автоматизации задач (финальные работы 8.1 и 8.2 выполнить утром 3-го дня)
 +  * Устанавливаем сервер ftp на node1 и запускаем его ([[Сервис FTP#​Сервер ftp]])
 +  * Копируем любые файлы, подключаясь user1 по протоколу протокол ftp на node1
 +
 +<​code>​
 +Проводник:​ ftp://node1
 +l: user1
 +p: password1
 +
 +Каталог:​ public_html
 +
 +В Браузере:​ http://​node1.corpX.un/​~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 -q '​[p]roftpd:​ (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#​Удаление ресурсов]]
 +  * Pacemaker [[Пакет Pacemaker#​Управление конфигурацией]] (уменьшение вероятности split-brain)
 +  * [[Решение DRBD#DRBD и Pacemaker]] (оставить приклрепление к node1) ​
 +  * Можно показать на отдельном стенде [[Решение DRBD#​Конфигурация с двумя primaries]]
 +
 +==== 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# named-checkconf -z
 +
 +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>​
 +slave# watch cat /proc/drbd
 +
 +slave# crm_mon
 +</​code>​
 +
 +  * Останавливаем MASTER сервер и дожидаемся монтирования на SLAVE узле "​половины"​ зеркалируемого раздела в каталог /disk2, назначение ip адреса 192.168.X.20 и запуск сервера samba 
 +  * Запускаем бывший MASTER узел и дожидаемся восстановления целостности зеркала
 +
 +  * !!! (Лучше после демонстрации SplitBrain в конце лабораторной работы 7.1.1) Останавливаем группу ресурсов кластера и [[Пакет 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# named-checkconf -z
 +
 +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]] на обоих узлах
 +  * Готовимся все, относящееся к виртуальным системам,​ хранить на зеркалируемом разделе
 +  * [[https://​www.claudiokuenzler.com/​blog/​1206/​debian-bullseye-11.3-lxc-container-static-ip-config-not-working|LXC containers with static IP in config not working anymore after Debian Bullseye 11.3 update]]
 +
 +<​code>​
 +root@nodeN:​~#​ rmdir /​var/​lib/​lxc/​
 +
 +root@nodeN:​~#​ ln -s /​disk2/​var/​lib/​lxc/​ /​var/​lib/​lxc
 +</​code>​
 +
 +  * Создание ветки дочерней системы/​шаблона (в большой группе занимает 5 минут, попробовать настроить proxy через [[Переменные окружения]])
 +  ​
 +<​code>​
 +root@node1.corpX.un:​~#​ mkdir -p /​disk2/​var/​lib/​lxc/​
 +
 +root@node1.corpX.un:​~#​ lxc-create -t download -n server-template -- -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) настроив proxy через [[Переменные окружения]] и [[Сервис Ansible#​Использование модулей]] Ansible
 +
 +  * Настраиваем 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
 +primitive pr_lxc_server1 systemd:​lxc@server1
 +
 +group gr_fs_lxc pr_fs_r0 pr_lxc_server1
 +</​code>​
 +
 +==== Настройка виртуальной системы как сервер электронной почты и тестирование отказоустойчивости ====
 +
 +  * [[Сервис SSH#PuTTY]]
 +
 +<​code>​
 +server1$ sudo -i
 +
 +server1# apt install ansible git
 +
 +server1# git clone http://​val.bmstu.ru/​unix/​conf.git
 +
 +server1# ansible-playbook conf/​ansible/​roles/​mail.yml
 +</​code>​
 +
 +  * Roundcube http://​server1.corpX.un/​mail
 +
 +<​code>​
 +node1# crm configure delete location cli-prefer-pr_fs_r0
 +
 +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 (в большой группе ставится 45 минут)
 +  - [[Ceph - просто добавь узлов!#​Шаг 2. Установка и настройка Ceph]] сразу добавить 6-й узел как OSD
 +  - [[Сервис iSCSI#iSCSI initiator]]
 +  - [[Сервис multipath]]
 +
 +===== Модуль 9. Кластерная файловая система OCFS2 =====
 +
 +  * !!! Методическая рекомендация - СРАЗУ после установки пакетов для ocfs запустить процесс установки пакетов для kvm
 +  * [[Сервис OCFS2]]
 +
 +===== Модуль 10. Система виртуализации KVM =====
 +
 +  * Методическая рекомендация - выключить win10 clientN (конфликт имен и путаница с ip адресами)
 +  * Проверить,​ включена ли [[Технология VirtualBox#​Вложенная виртуализация]] в VirtualBox
 +  * [[Технология KVM]] (в большой группе ставится 10 минут)
 +
 +===== Модуль 11. Тестирование отказоустойчивости =====
 +
 +  - Переместить все ресурсы на node1, обесточить его и убедиться что все ресурсы (winxp1 и server1) запустились на node2 (на winxp1 может начаться проверка диска)
 +  - Остановить node2 (рекомендуется сперва корректно остановить winxp1)
 +  - запустить node2, убедиться что все ресурсы (winxp1 и server1) запустились (можно node1 и проверить письмо про splitbrain)
 +
 +  - Выяснить,​ через какой узел подключается [[Сервис multipath]] на node2 по iSCSI к RBD Ceph
 +  - Выполнить для этого узла [[Ceph - просто добавь узлов!#​Шаг 4. Сценарий - авария узла]]
 +
 +
  
создание_отказоустойчивых_linux_решений_2022.txt · Last modified: 2024/06/04 12:46 by val