Table of Contents

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

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

Цель курса

Презентация

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

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

Слайд

Теория

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

1.1 Импорт VM Linux

Запустите с правами Administrator

C:\cmder\cmder.exe

bash

cd

test -d conf && rm -rf conf

git clone http://val.bmstu.ru/unix/conf.git

cd conf/virtualbox/

!!! 6 - это номер курса, вместо X укажите Ваш номер стенда, если не знаете его, спросите преподавателя !!!

./setup.sh X 6

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

1.3 Импорт VM Windows

1.4 Исходная настройка сети шлюза (запускаем только node1)

debian# sh net_gate.sh

debian# init 6

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

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.6 Тестирование сети

node1# ping ya.ru

Практикум

Вопросы

  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/
scp /etc/resolv.conf node2:/etc/

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
node1# ssh node2

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

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

node1# 
scn2 /etc/resolv.conf
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
node1# host ns node1
node1# 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 сервер

node1# sh conf/dhcp.sh

node2# sh conf/dhcp.sh

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

3.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

windows> ping gate

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

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
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# apt install conntrack

nodeN# cat set_isp.sh
#!/bin/sh

ip rule del from 192.168/16 to 192.168/16 table main 2>/dev/null
while ip rule del from any table 101 2>/dev/null; do true; done
while ip rule del from any table 102 2>/dev/null; do true; done
ip route delete default 2>/dev/null

case $1 in
    ISP1)
        ip rule add from 192.168.X.0/24 table 101
        ip route add default via 172.16.1.254
        ;;
    ISP2)
        ip rule add from 192.168.X.0/24 table 102
        ip route add default via 172.16.2.254
        ;;
    ISP1ISP2)
        ip rule add from 192.168.X.0/25 table 101
        ip rule add from 192.168.X.128/25 table 102
        ip route add default via 172.16.1.254
        ;;
esac

ip rule add from 192.168/16 to 192.168/16 table main
ip route flush cache
conntrack -F 2>/dev/null
nodeN# chmod +x set_isp.sh

node1# /root/set_isp.sh ISP1ISP2

node1# ip rule show

node2# apt install iputils-tracepath
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 2>/dev/null
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

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.corpX.un/~user1

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

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

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

nodeN# systemctl disable proftpd --now

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

node1# cat /etc/bind/corpX.un
...
fs        A       192.168.X.20
node1# named-checkconf -z

node1# csync2 -xv
root@nodeN:~#
systemctl disable smbd --now
systemctl disable nmbd --now

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# 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 в зеркалируемом разделе

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
        #For VBox clones
        #bridge_hw 08:00:27:23:45:0N

        address 192.168.X.N
        ...
        
nodeN# cat /etc/default/isc-dhcp-server
...
INTERFACESv4="br0"
nodeN# init 0
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
root@node1.corpX.un:~# mkdir -p /disk2/var/lib/lxc/

node1_debian12# lxc-create -t debian -n server-template

node1_debian13# lxc-create -t download -n server-template -- -d debian -r trixie -a amd64
node1_debian13# cp --remove-destination /etc/resolv.conf /var/lib/lxc/server-template/rootfs/etc/resolv.conf
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 isc-dhcp-client

server-template:/# apt install nano ssh iputils-ping sudo
server:/# more /etc/resolv.conf

server_debian13:/# rm -v /etc/systemd/network/*.network

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:/# useradd -m -s /bin/bash -G sudo student

server-template:/# passwd student

Ctrl-D

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

# Network configuration
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 -rpT /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/g" -e "s/$SRC_IP/$DST_IP/g" {} \;

sed -i -e "s/$SRC_CONTAINER/$DST_CONTAINER/g" -e "s/$SRC_IP/$DST_IP/g" /var/lib/lxc/$DST_CONTAINER/config
root@node1.corpX.un:~# lxc-info -n server1

root@node1.corpX.un:~# systemctl start lxc@server1

root@node1.corpX.un:~# ssh student@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

Практикум

Вопросы

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

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

Слайд

  1. Настройка MAC адресов 08:00:27:12:34:5N (для получения назначенного IP через Сервис DHCP) и запуск node3-7
  2. Настройка IP на node3-7, Настройка групп управляемых систем, Настройка транспорта ssh и Использование модулей Ansible для тестирования связи с ними
  3. Использование ролей Ansible для настройки файлов конфигурации сети на node3-7
  4. Использование модулей Ansible для инсталляции Ceph на node3-7 (в большой группе ставится 45 минут)
  5. Развертывание Ceph MON
  6. Запуск Ceph MGR
  7. Добавление OSD (сразу добавить 6-й узел)
  8. Создание OSD POOL
  9. Инициализация RBD POOL
  1. Включение TGT-RBD для iSCSI доступа к хранилищу
  2. Подключение к linux через iSCSI initiator
  3. Настрока Сервис multipath доступа

Практикум

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

Слайд

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

Практикум

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

Слайд

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

Практикум

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

Слайд

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

  1. Переместить все ресурсы на node1, обесточить его и убедиться что все ресурсы (winxp1 и server1) запустились на node2 (на winxp1 может начаться проверка диска)
  2. Остановить node2 (рекомендуется сперва корректно остановить winxp1)
  3. Запустить node2, убедиться что все ресурсы (winxp1 и server1) запустились
  4. Выяснить, через какой узел подключается (Сервис multipath или Использование Ceph RBD в качестве диска) node2 к RBD Ceph

Модуль 12. Дополнительные материалы

Слайд

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