====== Создание отказоустойчивых Linux решений 2020 ======
===== Программа курса =====
* https://global.gotomeeting.com/join/531493949
* [[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|Вероятность безотказной работы]]
==== Лабораторные работы ====
=== 1.1 Настройка систем ===
* Адаптер 1 - eth0 - Внутренняя сеть (LAN)
* Адаптер 2 - eth1 - Сетевой мост (ISP1)
* Адаптер 3 - eth2 - Сетевой мост (класс)
* Адаптер 4 - eth3 - Сетевой мост (ISP2)
* Добавить жесткий диск 2Gb
nodeN# cat /etc/hostname
nodeN.corpX.un
nodeN# cat /etc/hosts
127.0.0.1 localhost
192.168.X.1 node1.corpX.un node1
192.168.X.2 node2.corpX.un node2
10.5.6.254 proxy
nodeN# cat /etc/resolv.conf
search corpX.un
nameserver 192.168.X.1
nameserver 192.168.X.2
nodeN# cat /etc/network/interfaces
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.X.N
netmask 255.255.255.0
auto eth1
iface eth1 inet manual
up ip link set eth1 up
auto eth2
iface eth2 inet static
address 10.5.6.N*100+X
netmask 255.255.255.0
auto eth3
iface eth3 inet manual
up ip link set eth3 up
nodeN# cat /etc/sysctl.conf
...
net.ipv4.ip_forward=1
...
nodeN# cat .bashrc
...
export http_proxy=http://proxy:3128/
export EDITOR=nano
...
nodeN# init 6
...
nodeN# apt update
=== 1.2 Тестирование ===
nodeN# ping node1
nodeN# ping node2
nodeN# ping proxy
==== Вопросы ====
- НА кластер используется для повышения ...
- НP кластер используется для повышения ...
- Вероятность безотказной работы группы объектов равна ...
===== Модуль 2. Синхронизация файлов конфигураций узлов =====
==== Теория ====
* [[http://habrahabr.ru/tag/csync2/|csync2 или как облегчить работу с кластером]]
* [[https://ru.wikipedia.org/wiki/Ansible|Ansible]]
==== Лабораторные работы ====
=== 2.1 С использованием сервиса SSH ===
* Настройка доступа по протоколу ssh пользователя root с node1 на node2 ([[Сервис SSH#Разрешение доступа пользователя root на основании адреса клиента]])
* Настройка безпарольного доступа пользователя root с node1 на node2 ([[Сервис SSH#Аутентификация с использованием ключей ssh]])
node1# ssh-keygen
...
Enter passphrase (empty for no passphrase): Пароль на ключ пустой!!!
...
node1# ssh-copy-id node2
Проверка:
node1# scp /etc/hosts node2:/etc/
=== 2.2 С использованием пакета CSYNC2 ===
**Сценарий:** настроить DNS на node1, на node2 конфигурация появится автоматически
* [[Финальная настройка DNS сервера]]
* Устанавливаем и ЗАПУСКАЕМ на двух узлаx, настраиваем на node1
node1# sh 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
gate A 192.168.X.254
node2# apt install bind9
* [[Локализация системы#Локализация временной зоны]]
* [[Пакет CSYNC2]]
node1# csync2 -xv
node1# host node1
node1# host node2
node1# host ns
=== 2.3 С использованием пакета Ansible ===
**Сценарий:** на обоих узлах создаем пользователя user1 с uid=10001
**Примечание:** выполнить в 5-м модуле
* [[Сервис Ansible]]
==== Вопросы ====
- Команда ssh-copy-id копирует ...
- Где располагается файл с публичными ключами пользователей ssh?
- На каком узле будет сохранен файл в результате выполнения команды ssh node2 iptables-save > /etc/iptables.rules
- Что определяет параметр конфигурации auto younger в пакете csync2
- Перечислите известные Вам варианты тиражирования файлов конфигурации в кластере?
===== Модуль 3. Развертывание сервисов с интегрированной поддержкой отказоустойчивости =====
==== Теория ====
* [[http://www.communigate.com/CommunigatePro/russian/Clusters.html|Кластеры Communigate Pro]]
* man dhcpd.conf (Dhcp Failover)
==== Лабораторные работы ====
=== 3.1 Отказоустойчивый DHCP сервер ===
* [[Сервис DHCP#Установка]] cервиса DHCP
nodeN# sh dhcp.sh
* [[Сервис DHCP#Отказоустойчивая конфигурация]] cервиса DHCP
* [[Сервис DHCP#Проверка конфигурации и запуск]] cервиса DHCP
* [[Сервис DHCP#Мониторинг выданных адресов]] cервиса DHCP
Примечания:
* В качестве шлюза указан не существующий ip адрес 192.168.X.254, он будет назначаться в следующей лабораторной работе.
* В первый момент необходимо запустить оба сервера чтобы они синхронизировались.
=== 3.2 Проверка ===
* Добавляем в стенд Windows client1, останавливаем по очереди узлы, перезагружаем client1. Должен выдаваться один и тот же адрес (можно отключать интерфейс Windows, ipconfig /renew не использовать)
=== 3.3 Отладка ===
# ntpdate -u proxy
# grep dhcp /var/log/syslog
==== Вопросы ====
- Есть ли необходимость в использовании дополнительного ПО для реализации отказоустойчивой конфигурации пакета isc-dhcp?
- Сколько узлов может быть в отказоустойчивой конфигурации isc-dhcp?
- Какие условия необходимы на начальном этапе развертывания отказоустойчивой конфигурации isc-dhcp?
- Какие преимущества отказоустойчивой конфигурации isc-dhcp перед двумя независимыми dhcp серверами?
===== Модуль 4. Развертывание отказоустойчивого шлюза в Internet =====
==== Теория ====
* [[https://ru.wikipedia.org/wiki/CARP|CARP]]
* [[https://ru.wikipedia.org/wiki/Iproute2|Iproute2]]
==== Лабораторные работы ====
==== 4.1 Отказоустойчивый gate ====
* [[Протокол CARP]]
C:\>ping gate
==== 4.2 Отказоустойчивый nat ====
**Сценарий**:
* Настроить NAT трансляцию для сети 192.168.X/24 в реальный адрес ISP ([[Сервис NAT]])
* Модифицировать скрипты up и down с целью назначения/удаления реального адреса ISP на внешнем интерфейсе и указания маршрута по умолчанию через провайдера для мастер узла и через мастер узел для резервного.
nodeN# apt install fake
nodeN# cat /usr/share/ucarp/vip-up
#!/bin/sh
/sbin/ifup $1:ucarp
ip addr add 172.16.1.X/24 dev eth1
send_arp 172.16.1.X `cat /sys/class/net/eth1/address` 172.16.1.254 ff:ff:ff:ff:ff:ff eth1
ip route delete default
ip route add default via 172.16.1.254
nodeN# cat /usr/share/ucarp/vip-down
#!/bin/sh
/sbin/ifdown $1:ucarp
ip addr del 172.16.1.X/24 dev eth1
ip route add default via 192.168.X.254
masternode# killall -USR2 ucarp
или
masternode# init 6
==== 4.3 Балансировка нагрузки и отказоустойчивость при использовании нескольких ISP ====
=== 4.3.1 Добавление сетевых карт для подключения к ISP2 ===
* eth3 isp2 bridge to nic 172.16.2/24
root@nodeN:~# cat /etc/network/interfaces
...
auto eth3
iface eth3 inet manual
up ip link set eth3 up
=== 4.3.2 Модификация настроек dns сервера ===
# cat named.conf
...
forwarders {
172.16.1.254;
172.16.2.254;
};
...
=== 4.3.3 Подключение шлюзов и тестирование ISP2 ===
nodeN# cat /usr/share/ucarp/vip-up
#!/bin/sh
...
ip addr add 172.16.2.X/24 dev eth3
send_arp 172.16.2.X `cat /sys/class/net/eth3/address` 172.16.2.254 ff:ff:ff:ff:ff:ff eth3
...
route delete default
#route add default gw 172.16.1.254
nodeN# cat /usr/share/ucarp/vip-down
...
ip addr del 172.16.2.X/24 dev eth3
...
masternode# killall -USR2 ucarp
...
masternode# grep carp /var/log/syslog
masternode# ip a | grep 172.16.2
* [[Настройка сети в Linux]]
masternode# ping 172.16.2.254
masternode# ip route add default via 172.16.2.254
masternode# ping ya.ru
masternode# ip route delete default
=== 4.3.4 Использование PBR для балансировки нагрузки ===
**Сценарий:**
* Всем настроить NAT на два ISP ([[Сервисы Gateway и routing#Использование iproute2 для управления выбором ISP]]), iptables-restore можно "привязать" к интерфейсу eth0
* Преподавателю продемонстрировать PBR в "ручном" режиме ([[Сервисы Gateway и routing#NetFilter iproute2 (Linux)]])
=== 4.3.5 Автоматизация балансировки/отказоустойчивости выбора ISP ===
# cat /etc/network/interfaces
...
iface eth0 inet static
pre-up iptables-restore < /etc/iptables.rules
post-up ip rule add prio 100 from 192.168.X.0/24 to 192.168.X.0/24 table main
...
nodeN# cat /usr/share/ucarp/vip-up
...
ip route add default via 172.16.1.254 table 101
ip route add default via 172.16.2.254 table 102
masternode# killall -USR2 ucarp
...
masternode# grep carp /var/log/syslog
masternode# ip route show table all | grep 'table 10[12]'
# cat set_isp.sh
#!/bin/sh
case $1 in
ISP1)
while ip rule del from any table 101;do true;done
while ip rule del from any table 102;do true;done
ip rule add prio 200 from 192.168.X.0/24 table 101
/sbin/ip route flush cache
/usr/sbin/conntrack -F
;;
ISP2)
while ip rule del from any table 101;do true;done
while ip rule del from any table 102;do true;done
ip rule add prio 200 from 192.168.X.0/24 table 102
/sbin/ip route flush cache
/usr/sbin/conntrack -F
;;
ISP1ISP2)
while ip rule del from any table 101;do true;done
while ip rule del from any table 102;do true;done
ip rule add prio 200 from 192.168.X.0/25 table 101
ip rule add prio 200 from 192.168.X.128/25 table 102
/sbin/ip route flush cache
/usr/sbin/conntrack -F
;;
esac
nodeN# chmod +x set_isp.sh
masternode# grep carp /var/log/syslog
masternode# /root/set_isp.sh ISP1ISP2
backupnode# traceroute -n ya.ru
C:\Users\student>tracert ya.ru
nodeN# cat select_isp.sh
#!/bin/sh
export PATH=/bin:/sbin:/usr/bin:/usr/sbin:$PATH
ip addr | grep -q 192.168.X.254 || exit 0
ip route delete default
ISP=''
ip route add default via 172.16.1.254
ping -c3 ya.ru && ISP=ISP1
ip route delete default
ip route add default via 172.16.2.254
ping -c3 ya.ru && ISP=${ISP}ISP2
ip route delete default
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
masternode# /root/select_isp.sh
nodeN# crontab -l
* * * * * /root/select_isp.sh >/dev/null 2>&1
master_node# ip route show table 101
master_node# ip route show table 102
master_node# ip rule show
==== Вопросы ====
- Перечислите протоколы отказоустойчивого шлюза.
- Для какой операционной системы впервые появилась реализация протокола CARP?
- Какая утилита из набора iproute2 позволяет назначить/удалить IP адрес на интерфейсе?
- В чем отличие поведения мастер хоста от других в протоколе CARP?
- Поддерживает ли протокол CARP отказоустойчивость соединений?
- Поддерживает ли протокол CARP балансировку нагрузки?
- Что такое ucarp?
- В каком пакете в Debian содержатся современные сетевые утилиты, пришедшие на смену классическим UNIX утилитам ifconfig, route, arp, netstat?
- Какая утилита из набора iproute2 заменяет команду arp?
- В какой пакет входит утилита send_arp в Debian, для чего нужна и какой вид трафика использует?
- Какой командой можно очистить таблицу ARP в Linux?
- В чем принцип работы механизма PBR?
- Можно ли балансировать трафик одного соединения между двумя ISP при использовании NAT?
- Необходим ли маршрут "по умолчанию" на шлюзе для прохождения пользовательского трафика?
- Согласно какой таблице маршрутизации в Linux обрабатывается пакет, если для него нет правила, определяющего обработку в конкретной таблице?
- Что следует сделать с текущими активными соединениями после изменения правил PBR?
===== Модуль 5. Использование систем управления ресурсами кластера =====
==== Теория ====
* [[http://blog.clusterlabs.org/blog/2010/pacemaker-heartbeat-corosync-wtf|Pacemaker, Heartbeat, Corosync, WTF?]]
* [[http://www.linux-ha.org/wiki/Haresources|linux-ha Haresources]]
* [[https://github.com/voxpupuli/puppet-corosync/issues/32|Corosync vs Pacemaker: wrong usage of "Corosync"]]
==== Лабораторные работы ====
Сценарий: отказоустойчивый www хостинг
* Содержимое домашних каталогов мастер сервера периодически копируется на резервный.
* В случае временной остановки или выхода из строя главного сервера автоматически становится доступным резервный.
* Не преднамеренный запуск мастер сервера не должен менять ролей серверов.
==== 5.1 Синхронизация каталогов ====
=== 5.1.1 Установка и запуск сервера Apache ===
* В зону corpX.un добавляем запись www A 192.168.X.10
node1# cat corpX.un
...
www A 192.168.X.10
node1# csync2 -xv
* На обоих узлах [[Сервис HTTP#Установка и запуск сервера Apache]] (можно через Ansible)
* На обоих узлах создаем пользователя user1 с uid=10001 ([[Управление учетными записями в Linux]]) (можно через Ansible)
* На обоих узлах включаем [[Сервис HTTP#Использование домашних каталогов]] (можно через Ansible)
* [[Сервис Ansible]]
* Устанавливаем сервер ftp на node1 и запускаем его ([[Сервис FTP#Сервер ftp]])
* Создаем тестовую www страницу для пользователя user1 используя протокол ftp на node1
=== 5.1.2 Синхронизация пользовательских данных ===
* [[Пакет RSYNC]]
* Можно автоматизировать, ([[Планирование выполнения заданий в Linux]]), но, пока не нужно.
==== 5.2 Автоматизация смены ролей узлов кластера ====
=== 5.2.1 Установка и сервера FTP ===
* Устанавливаем ftp сервис на node2 ([[Сервис FTP#Сервер ftp]])
* На обоих узлах отключаем автоматический запуск ftp сервиса ([[Управление сервисами в Linux]])
nodeN# service proftpd stop
nodeN# update-rc.d -f proftpd remove
или
nodeN# systemctl disable proftpd
* Представим, что узлы соединены кросс кабелем через eth2 интерфейсы
=== 5.2.2 Настройка менеджера кластера ===
* [[Пакет HEARTBEAT]] (Демонстрирует преподаватель в методических целях)
* [[Пакет Corosync]]
* [[Пакет Pacemaker]]
=== 5.2.3 Автоматическую синхронизация домашних каталогов ===
* Настроить автоматическую синхронизацию домашних каталогов с мастер узла на резервный
nodeN# crontab -l
...
* * * * * ps ax | grep -v grep | grep -q 'proftpd: (accepting connections)' && /usr/bin/rsync -az --delete /home/ nodeM:/home/
==== Вопросы ====
- В чем преимущество использования 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]]
==== Лабораторные работы ====
**Сценарий**: Создаем отказоустойчивый корпоративный файловый сервер. Первый узел кластера должен использоваться сервером по умолчанию.
==== 6.1 Синхронизация файловых систем =====
* Подключаем к обоим узлам по дополнительному диску (2Gb)
* [[Решение DRBD]]
==== 6.2 Автоматизация смены ролей узлов кластера ====
* Пакет Pacemaker [[Пакет Pacemaker#Удаление ресурсов]]
* [[Решение DRBD#DRBD и Pacemaker]]
==== 6.3 Настройка SAN сервера iSCSI ====
* Определяем, на каком узле смонтирован зеркалируемый раздел
* Устанавливаем на оба узла пакет [[Сервис iSCSI#iSCSI target]]
* Отключаем авто запуск сервиса
nodeN# systemctl disable istgt
node1# crm configure
crm(live)configure# primitive pr_istgt lsb:istgt
crm(live)configure# primitive pr_ip ocf:heartbeat:IPaddr2 params ip=192.168.X.15 cidr_netmask=32 nic=eth0
crm(live)configure# group gr_ip_fs pr_ip pr_fs_r0 pr_istgt
crm(live)configure# commit
* Настраиваем [[Сервис iSCSI#iSCSI initiator]] для Windows
==== 6.4 Настройка NAS сервера SMB/CIFS ====
* Устанавливаем на оба узла пакет samba ([[Файловый сервер SAMBA]])
* Отключаем автоматический запуск сервиса
root@nodeN:~# service smbd stop
root@nodeN:~# service nmbd stop
root@nodeN:~# systemctl disable smbd
root@nodeN:~# systemctl disable nmbd
* Настраиваем на МАСТЕР узле [[Файловый сервер SAMBA#Публичный каталог доступный на запись]] в каталоге /disk2/samba
* Копируем на BACKUP узел файл конфигурации samba
* Настраиваем менеджер кластера на монтирование на мастер узле зеркалируемого раздела в каталог /disk2, назначение ip адреса 192.168.X.20 и запуск сервера samba
* Останавливаем группу ресурсов кластера и удаляем ее [[Пакет Pacemaker#Управление ресурсами]]
crm(live)configure# primitive pr_smbd systemd:smbd
crm(live)configure# edit gr_ip_fs
или
crm(live)configure# group gr_ip_fs pr_ip pr_fs_r0 pr_smbd
crm(live)configure# commit
=== Тестирование ===
master# cat /proc/drbd
* Останавливаем MASTER сервер и дожидаемся монтирования на SLAVE узле "половины" зеркалируемого раздела в каталог /disk2, назначение ip адреса 192.168.X.20 и запуск сервера samba
* Запускаем бывший MASTER узел и дожидаемся восстановления целостности зеркала
==== Вопросы ====
- Какое решение можно использовать для блочной синхронизации дисковых устройств по сети?
- При каком условии можно монтировать распределенное блочное хранилище на запись сразу на нескольких, содержащих его узлах?
- Что определяет параметр 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 в зеркалируемом разделе ====
=== 7.1.1 Настройка bridge на узлах и сервисах ===
* Отключение всех сервисов (особенно, ip, привязанного к eth), кроме зеркалируемого раздела [[Пакет Pacemaker#Управление ресурсами]]
node1# crm resource stop pr_ip pr_smbd pr_istgt
node1# crm configure delete pr_ip pr_smbd gr_ip_fs pr_istgt
* [[Технология LXC#Подготовка сети]] для LXC
* Сервис CARP и bridge
nodeN# cat /etc/network/interfaces
...
auto br0
iface br0 inet static
pre-up iptables-restore < /etc/iptables.rules
post-up ip rule add prio 100 from 192.168.X.0/24 to 192.168.X.0/24 table main
address 192.168.X.N
netmask 255.255.255.0
ucarp-vid 1
ucarp-vip 192.168.X.254
ucarp-password secret
bridge_ports eth0
iface br0:ucarp inet static
address 192.168.X.254
netmask 255.255.255.255
...
* Сервис DHCP и bridge
nodeN# cat /etc/default/isc-dhcp-server
...
INTERFACES="br0"
nodeN# init 0
* Для режима bridge в lxc понадобиться включить "неразборчивый режим" первом адаптере обеих виртуальных машин
* Проверки после запуска
nodeN# ps ax | grep carp
nodeN# ip a | grep carp
nodeN# ps ax | grep dh
nodeN# crm status
nodeN# mount | grep ext
* [[Решение DRBD#Решение ситуации Split-Brain при использовании Pacemaker]]
=== 7.1.2 Подготовка виртуальных машин ===
* [[Технология LXC#Установка и настройка lxc]] на обоих узлах
* Готовимся все, относящееся к виртуальным системам, хранить на зеркалируемом разделе
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/
root@node1.corpX.un:~# lxc-create -t debian -n server
* Установка ПО в дочерней системе на MASTER узле
root@node1.corpX.un:~# cp /etc/ssh/sshd_config /var/lib/lxc/server/rootfs/etc/ssh/sshd_config
root@node1.corpX.un:~# cp /etc/hosts /var/lib/lxc/server/rootfs/etc/
root@node1.corpX.un:~# chroot /var/lib/lxc/server/rootfs/ /bin/bash
root@node1:/# PS1='server:\w# '
server:/# apt update
server:/# apt purge isc-dhcp-client
server:/# apt install nano vim iputils-ping
* Настраиваем hostname, hosts, DNS client и учетную запись root в гостевой системе
server:/# cat /etc/hostname
server.corpX.un
server:/# cat /etc/hosts
127.0.0.1 localhost
192.168.X.30 server.corpX.un
10.Z.M.254 proxy
server:/# cat /etc/resolv.conf
search corpX.un
nameserver 192.168.X.1
nameserver 192.168.X.2
server:/# passwd
* Настраиваем lxc для запуска гостевой системы в контейнере на MASTER узле
root@node1.corpX.un:~# cat /var/lib/lxc/server/config
...
#debian9
lxc.network.type = veth
lxc.network.link = br0
lxc.network.flags = up
lxc.network.ipv4 = 192.168.X.30/24
lxc.network.ipv4.gateway = 192.168.X.254
#debian10
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
...
* Тестируем работу виртуальной системе на MASTER узле
root@node1.corpX.un:~# lxc-info -n server
root@node1.corpX.un:~# lxc-start -n server
root@node1.corpX.un:~# lxc-info -n server
root@node1.corpX.un:~# lxc-attach -n server -- ps ax
root@node1.corpX.un:~# lxc-attach -n server -- bash
root@node1.corpX.un:~# ssh server
root@node1.corpX.un:~# lxc-stop -n server
debian9_nodeN# mkdir /etc/systemd/system/lxc@server.service.d/
debian9_nodeN# cat /etc/systemd/system/lxc@server.service.d/kill_signal_fix.conf
[Service]
KillSignal=SIGRTMIN+3
root@node1.corpX.un:~# systemctl start lxc@server
root@node1.corpX.un:~# systemctl stop lxc@server
==== 7.2 Интеграция контейнеров с менеджером кластера ====
=== Pacemaker ===
node1# crm configure show | grep order # у некоторых слушателей "исчезает" из конфигурации )
node1# crm configure
primitive pr_lxc_server systemd:lxc@server
group gr_fs_lxc pr_fs_r0 pr_lxc_server
==== Настройка виртуальной системы как сервер электронной почты ====
* [[Сервис MTA]]
* [[UA mail]]
* [[Сервер dovecot]]
==== Вопросы ====
- Что лучше, контейнерная виртуализация или аппаратная?
==== Дополнительные задания ====
* Настроить в виртуальной системе сервисы www и samba
* В зоне corpX.un заменить записи (www A 192.168.X.30) и (samba A 192.168.X.30)
* Настроить редирект tcp пакетов идущих на 25,80,110,143 порты внешнего IP адреса ISP в адрес 192.168.X.30 ([[Сервис NAT]]). Примечание: проблема возникает когда с точки зрения CARP/VRRP мастером является один хост, а с точки зрения heartbeat другой. Решение или административно исключить такую ситуацию или автоматически менять шлюз по умолчанию на вторичном с точки зрения CARP/VRRP узле через мастер (еще надо исключить ip из сети ISP на внешнем интерфейсе вторичного узла, иначе пакеты будут возвращаться в сеть ISP напрямую а не через мастер).
* Настроить DNS View для внешних пользователей зоны corpX.un и запись A для mail.corpX.un и mail.corpX.un указать на адрес выданный ISP
* ([[Сервис DNS]])