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

Table of Contents

Создание отказоустойчивых Linux решений

Программа курса

Цель курса

  • Научиться настраивать отказоустойчивую конфигурацию сервисов Linux на “железном” оборудовании в сети предприятия.

Модуль 0. Подготовка стенда в классе

  • Узнать свой номер стенда
  • Удалить виртуалки
  • Удалить профили putty
  • Отключить не используемые адаптеры
  • Записать логин пароль и IP (сообщить преподавателю) рабочей станции
  • Проверить наличие дистрибутивов и образов

Модуль 1. Развертывание систем и сети кластера

Теория

Лабораторные работы

1.1 Импорт VM Linux

Запустите с правами 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/

./setup.sh X 6

1.2 Аппаратная настройка систем node1 и node2

  • Адаптер 1 - eth0 - Виртуальный адаптер хоста (LAN)
  • Адаптер 2 - eth1 - Сетевой мост (ISP1) только для node1 и node2
  • 2, а если есть возможность, 4 Gb RAM
  • Жесткий диск размер 4G уже добавлен

1.3 Импорт VM Windows

1.4 Исходная настройка сети шлюза

ubuntu# sh net_gate.sh

ubuntu# init 6
  • PuTTY !!!
gate# sh conf/dhcp.sh

1.5 Тестирование сети

windows> ping 1.1.1.1

1.6 Подготовка отказоустойчивой конфигурации

gate# cat /etc/network/interfaces
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
gate# cat /etc/hostname
node1.corpX.un
gate# cat /etc/hosts
127.0.0.1               localhost

192.168.X.1             node1.corpX.un node1
192.168.X.2             node2.corpX.un node2
gate# init 6

1.7 Тестирование сети

node1# ping ya.ru

windows> ping 1.1.1.1

Вопросы

  1. НА кластер используется для повышения …
  2. НP кластер используется для повышения …
  3. Вероятность безотказной работы группы объектов равна …

Модуль 2. Синхронизация файлов конфигураций узлов

Теория

Лабораторные работы

2.1 Запуск node2

2.2 Синхронизация с использованием сервиса SSH

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

Проверка:

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
  • Правим файлы конфигурации на node2, перезапускаем, тестируем сеть
node1# ssh node2

ubuntu# cat /etc/hostname
node2.corpX.un
node2# cat /etc/network/interfaces
...
        address 192.168.X.2
...
node2# cat /etc/keepalived/keepalived.conf
...
    state BACKUP
...
node2# init 6

2.3 Использование BASH алиасов и функций для удобства

  • bash алиасы и функции
node1# scn2 /etc/sysctl.conf

node1# ssn2 sysctl -f
или
node1# scn2 /etc/sysctl.d/20-my-forward.conf

node1# ssn2 sysctl -p --system

2.4 Синхронизация с использованием пакета CSYNC2

Сценарий: настроить DNS на node1, на node2 конфигурация появится автоматически

node1# sh conf/dns.sh

node1# cat /etc/bind/corpX.un
$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
node1# named-checkconf -z

node1# ssn2 apt install bind9
node1# csync2 -xv
nodeN# host ns node1
nodeN# host ns node2
nodeN# cat /etc/resolv.conf
search corpX.un
nameserver 192.168.X.1
nameserver 192.168.X.2
nodeN# host ns 

2.5 Синхронизация с использованием пакета Ansible

Сценарий: на обоих узлах создаем пользователя user1 с uid=10001

Примечание: выполнить в 5-м модуле

Вопросы

  1. Команда ssh-copy-id копирует …
  2. Где располагается файл с публичными ключами пользователей ssh?
  3. На каком узле будет сохранен файл в результате выполнения команды ssh node2 iptables-save > /etc/iptables.rules
  4. Что определяет параметр конфигурации auto younger в пакете csync2
  5. Перечислите известные Вам варианты тиражирования файлов конфигурации в кластере?

Модуль 3. Развертывание сервисов с интегрированной поддержкой отказоустойчивости

Теория

Лабораторные работы

3.1 Отказоустойчивый DHCP сервер

node2# sh conf/dhcp.sh

Примечание: в первый момент необходимо запустить оба сервера чтобы они синхронизировались.

3.2 Проверка

  • !!! Тестирование отказоустойчивости выполнить в лабораторной работе 4.2
windows> ipconfig /release

windows> ipconfig /renew

windows> ipconfig /all

windows> ping ya.ru

Вопросы

  1. Есть ли необходимость в использовании дополнительного ПО для реализации отказоустойчивой конфигурации пакета isc-dhcp?
  2. Сколько узлов может быть в отказоустойчивой конфигурации isc-dhcp?
  3. Какие условия необходимы на начальном этапе развертывания отказоустойчивой конфигурации isc-dhcp?
  4. Какие преимущества отказоустойчивой конфигурации isc-dhcp перед двумя независимыми dhcp серверами?

Модуль 4. Развертывание отказоустойчивого шлюза в Internet

Теория

Лабораторные работы

4.1 Отказоустойчивый gate

4.2 Отказоустойчивый nat

  • Настроить NAT трансляцию для сети 192.168.X/24 в реальный адрес ISP (Сервис NAT)
  • После этого преподавателю отключить маршруты в локальные сети стендов
  • !!! Либо протестировать отказоустойчивый шлюз с одним провайдером на этом этапе, либо совместить с выполнением лабораторной работы 4.3.1

4.3 Балансировка нагрузки и отказоустойчивость при использовании нескольких ISP

  • Дополнительная лабораторная работа

4.3.1 Добавление сетевых карт для подключения к ISP2

root@nodeN:~# cat /etc/network/interfaces
...
auto eth2
iface eth2 inet manual
        up ip link set eth2 up
  • Сервис Keepalived - добавляем eth2
  • По очереди останавливаем узлы и добавляем Адаптер 3 - eth2 - Сетевой мост (ISP2)
nodeN# ip a | grep eth2

4.3.2 Модификация настроек dns сервера

node1# cat /etc/bind/named.conf
...
        forwarders {
                172.16.1.254;
                172.16.2.254;
        };
...
node1# csync2 -xv

4.3.3 Тестирование ISP2

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

4.3.4 Использование PBR для балансировки нагрузки

Сценарий:

4.3.5 Автоматизация балансировки/отказоустойчивости выбора ISP

node1# ip route show table 101

node1# ip route show table 102

nodeN# cat set_isp.sh
#!/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
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
#!/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
nodeN# chmod +x select_isp.sh

node1# /root/select_isp.sh

node1# cat /tmp/current_isp

nodeN# crontab -l
* * * * * /root/select_isp.sh >/dev/null 2>&1
master_node# ip rule show

Вопросы

  1. Перечислите протоколы отказоустойчивого шлюза.
  2. Для какой операционной системы впервые появилась реализация протокола CARP?
  3. Какая утилита из набора iproute2 позволяет назначить/удалить IP адрес на интерфейсе?
  4. В чем отличие поведения мастер хоста от других в протоколе CARP/VRRP?
  5. Поддерживает ли протокол CARP/VRRP отказоустойчивость соединений?
  6. Поддерживает ли протокол CARP/VRRP балансировку нагрузки?
  7. Что такое ucarp?
  8. В каком пакете в Debian содержатся современные сетевые утилиты, пришедшие на смену классическим UNIX утилитам ifconfig, route, arp, netstat?
  9. Какая утилита из набора iproute2 заменяет команду arp?
  10. В какой пакет входит утилита send_arp в Debian, для чего нужна и какой вид трафика использует?
  11. Какой командой можно очистить таблицу ARP в Linux?
  12. В чем принцип работы механизма PBR?
  13. Можно ли балансировать трафик одного соединения между двумя ISP при использовании NAT?
  14. Необходим ли маршрут “по умолчанию” на шлюзе для прохождения пользовательского трафика?
  15. Согласно какой таблице маршрутизации в Linux обрабатывается пакет, если для него нет правила, определяющего обработку в конкретной таблице?
  16. Что следует сделать с текущими активными соединениями после изменения правил PBR?

Модуль 5. Использование систем управления ресурсами кластера

Теория

Лабораторные работы

Сценарий: отказоустойчивое ftp хранилище пользовательских файлов с web доступом

  • Содержимое домашних каталогов мастер сервера периодически копируется на резервный.
  • В случае временной остановки или выхода из строя главного сервера автоматически становится доступным резервный.
  • Не преднамеренный запуск мастер сервера не должен менять ролей серверов.

5.1 Синхронизация каталогов

5.1.1 Установка и запуск сервера Apache

  • В зону corpX.un добавляем запись www A 192.168.X.10
node1# cat /etc/bind/corpX.un
...
www       A       192.168.X.10
node1# named-checkconf -z

node1# csync2 -xv
Проводник: ftp://node1
l: user1
p: password1

Каталог: public_html

В Браузере: http://node1/~user1

5.1.2 Синхронизация пользовательских данных

5.2 Автоматизация смены ролей узлов кластера

5.2.1 Установка и сервера FTP

nodeN# service proftpd stop

nodeN# update-rc.d -f proftpd remove
или
debian11# systemctl disable proftpd

5.2.2 Настройка менеджера кластера

Проводник: ftp://www

В Браузере: http://www.corpX.un/~user1

5.2.3 Автоматическая синхронизация домашних каталогов

  • Настроить автоматическую синхронизацию домашних каталогов с мастер узла на резервный
node2# ssh-keygen

node2# ssh-copy-id node1

nodeN# crontab -l
...
* * * * * ps ax | grep -q '[p]roftpd: (accepting connections)' && /usr/bin/rsync -az --delete /home/ nodeM:/home/

Вопросы

  1. В чем преимущество использования rsync по сравнению с scp?
  2. Что определяют разделители : и :: в команде rsync?
  3. Реализацией какой части классического пакета heartbeat является пакет pacemaker?
  4. Какие задачи классического пакета heartbeat НЕ решает пакет corosync?
  5. В каком формате хранятся файлы конфигурации пакета corosync?
  6. В каком формате хранятся файлы конфигурации пакета pacemaker?
  7. По какой причине не следует редактировать файлы конфигурации пакета pacemaker в текстовом редакторе?
  8. Для чего используется утилита crm должна ли она быть установлена на все узлы кластера?
  9. Для чего используется утилита crm_mon и есть ли она на всех узлах кластера?
  10. Что надо настроить в пакете pacemaker, что бы все части, из которых состоит ресурс, запускались на одном узле кластера?
  11. Какой тип трафика может использоваться для связи узлов кластера corosync?
  12. Что нужно сделать для сервисов, управляемых менеджером кластера?

Модуль 6. Развертывание отказоустойчивых файловых сервисов

Теория

Лабораторные работы

Сценарий: Создаем отказоустойчивый корпоративный файловый сервер. Первый узел кластера должен использоваться сервером по умолчанию.

6.1 Развертывание распределенного RAID 1

  • Подключаем к обоим узлам по дополнительному диску

6.2 Автоматизация смены ролей узлов кластера

6.3 Настройка NAS сервера SMB/CIFS

  • В зону corpX.un добавляем запись fs A 192.168.X.20
node1# cat /etc/bind/corpX.un
...
fs        A       192.168.X.20
node1# named-checkconf -z

node1# csync2 -xv
  • Устанавливаем на оба узла (лучше, отдельно на каждом) пакет samba (Файловый сервер SAMBA)
  • Отключаем автоматический запуск сервиса
root@nodeN:~#

service smbd stop
service nmbd stop

systemctl disable smbd
systemctl disable nmbd

  • Настраиваем на обоих узлах Публичный каталог доступный на запись
  • Создаем каталог /disk2/samba на мастер узле
  • Настраиваем менеджер кластера на монтирование на мастер узле зеркалируемого раздела в каталог /disk2, назначение ip адреса 192.168.X.20 и запуск сервера samba
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

Тестирование

slave# watch cat /proc/drbd

slave# crm_mon
  • Останавливаем MASTER сервер и дожидаемся монтирования на SLAVE узле “половины” зеркалируемого раздела в каталог /disk2, назначение ip адреса 192.168.X.20 и запуск сервера samba
  • Запускаем бывший MASTER узел и дожидаемся восстановления целостности зеркала
  • !!! (Лучше после демонстрации SplitBrain в конце лабораторной работы 7.1.1) Останавливаем группу ресурсов кластера и Удаление ресурсов
master# crm resource stop pr_srv_smbd pr_ip_smbd

master# crm configure delete pr_srv_smbd pr_ip_smbd gr_ip_fs

Вопросы

  1. Какое решение можно использовать для блочной синхронизации дисковых устройств по сети?
  2. При каком условии можно монтировать распределенное блочное хранилище на запись сразу на нескольких, содержащих его узлах?
  3. Что определяет параметр wfc-timeout в пакете DRBD?
  4. В каком состоянии будет DRBD RAID1 если узлы, входящие в него, в разное время поработали, независимо друг от друга, с разделом, в течение времени превышающем wfc-timeout?
  5. Чем отличаются системы NAS и SAN
  6. В чем фундаментальное отличие протоколов CIFS и iSCSI?

Модуль 7. Развертывание контейнеров в отказоустойчивой конфигурации

Теория

Лабораторные работы

7.1 Linux Containers в зеркалируемом разделе

  • В зону corpX.un добавляем запись server1 A 192.168.X.31
node1# cat /etc/bind/corpX.un
...
server1   A       192.168.X.31
server2   A       192.168.X.32
@         MX  10  server1
node1# named-checkconf -z

node1# csync2 -xv

7.1.1 Настройка bridge на узлах и сервисах

nodeN# apt install bridge-utils

nodeN# cat /etc/network/interfaces
...
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
        ...
        
nodeN# cat /etc/default/isc-dhcp-server
...
INTERFACESv4="br0"
nodeN# init 0
  • Для режима bridge в lxc понадобиться включить “неразборчивый режим” первом адаптере обеих виртуальных машин
  • Проверки после запуска
nodeN# ip a

node1# mount | egrep 'ext|ocfs'

nodeN# cat /proc/drbd

7.1.2 Подготовка виртуальных машин

  • Готовимся все, относящееся к виртуальным системам, хранить на зеркалируемом разделе
root@nodeN:~# rmdir /var/lib/lxc/

root@nodeN:~# ln -s /disk2/var/lib/lxc/ /var/lib/lxc
  • Создание ветки дочерней системы/шаблона (в большой группе занимает 5 минут, попробовать настроить proxy через Переменные окружения)
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
  • Установка ПО в дочерней системе/шаблоне
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
  • !!! Методическая рекомендация - запустить процесс установки Ceph (лабораторная работа 8.3) настроив proxy через Переменные окружения
  • Настраиваем hostname, hosts, DNS client и учетную запись root в гостевой системе/шаблоне
server:/# cat /etc/hostname
server-template.corpX.un
server-template:/# cat /etc/hosts
127.0.0.1 localhost

192.168.X.30 server-template.corpX.un server-template
server-template:/# cat /etc/systemd/resolved.conf
[Resolve]
DNS=192.168.X.1 192.168.X.2
server-template:/# passwd ubuntu

Ctrl-D

  • Настраиваем lxc для запуска гостевой системы/шаблона в контейнере
root@node1.corpX.un:~# cat /var/lib/lxc/server-template/config
...
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
  • Создание системы из шаблона
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
  • Тестируем работу виртуальной системе на MASTER узле
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

7.2 Интеграция контейнеров с менеджером кластера

Pacemaker

#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

Настройка виртуальной системы как сервер электронной почты и тестирование отказоустойчивости

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
node1# crm configure delete location cli-prefer-pr_fs_r0

node1# crm resource move gr_fs_lxc node2

Вопросы

  1. Что лучше, контейнерная виртуализация или аппаратная?

Модуль 8. Распределенное отказоустойчивое хранилище Ceph

  1. Настройка IP на node3-7, Настройка групп управляемых систем, Настройка транспорта ssh и Использование модулей Ansible для тестирования связи с ними
  2. Использование ролей Ansible для настройки файлов конфигурации сети на node3-7
  3. Использование модулей Ansible для инсталляции Ceph на node3-7 (в большой группе ставится 45 минут)
  4. Шаг 2. Установка и настройка Ceph сразу добавить 6-й узел как OSD

Модуль 9. Кластерная файловая система OCFS2

  • !!! Методическая рекомендация - СРАЗУ после установки пакетов для ocfs запустить процесс установки пакетов для kvm

Модуль 10. Система виртуализации KVM

  • Методическая рекомендация - выключить win10 clientN (конфликт имен и путаница с ip адресами)
  • Проверить, включена ли Вложенная виртуализация в VirtualBox
  • Технология KVM (в большой группе ставится 10 минут)

Модуль 11. Тестирование отказоустойчивости

  1. Переместить все ресурсы на node1, обесточить его и убедиться что все ресурсы (winxp1 и server1) запустились на node2 (на winxp1 может начаться проверка диска)
  2. Остановить node2 (рекомендуется сперва корректно остановить winxp1)
  3. запустить node2, убедиться что все ресурсы (winxp1 и server1) запустились (можно node1 и проверить письмо про splitbrain)
  1. Выяснить, через какой узел подключается Сервис multipath на node2 по iSCSI к RBD Ceph
  2. Выполнить для этого узла Шаг 4. Сценарий - авария узла
создание_отказоустойчивых_linux_решений.txt · Last modified: 2022/11/25 14:38 by val