This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
создание_отказоустойчивых_linux_решений [2020/09/10 16:09] val [4.3 Балансировка нагрузки и отказоустойчивость при использовании нескольких ISP] |
создание_отказоустойчивых_linux_решений [2022/11/25 14:38] val [Настройка виртуальной системы как сервер электронной почты и тестирование отказоустойчивости] |
||
---|---|---|---|
Line 3: | Line 3: | ||
===== Программа курса ===== | ===== Программа курса ===== | ||
- | * https://global.gotomeeting.com/join/531493949 | ||
* [[http://www.specialist.ru/course/un5|Linux. Уровень 6. Создание отказоустойчивых кластерных решений.]] | * [[http://www.specialist.ru/course/un5|Linux. Уровень 6. Создание отказоустойчивых кластерных решений.]] | ||
+ | |||
===== Цель курса ===== | ===== Цель курса ===== | ||
- | Научиться настраивать отказоустойчивую конфигурацию сервисов Linux. | + | * Научиться настраивать отказоустойчивую конфигурацию сервисов Linux на "железном" оборудовании в сети предприятия. |
===== Модуль 0. Подготовка стенда в классе ===== | ===== Модуль 0. Подготовка стенда в классе ===== | ||
Line 18: | Line 19: | ||
* Записать логин пароль и IP (сообщить преподавателю) рабочей станции | * Записать логин пароль и IP (сообщить преподавателю) рабочей станции | ||
* Проверить наличие дистрибутивов и образов | * Проверить наличие дистрибутивов и образов | ||
+ | |||
+ | |||
+ | |||
===== Модуль 1. Развертывание систем и сети кластера ===== | ===== Модуль 1. Развертывание систем и сети кластера ===== | ||
Line 26: | Line 30: | ||
* [[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%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://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.0 Импорт VM Linux === | + | === 1.1 Импорт VM Linux === |
- | === 1.1 Аппаратная настройка систем === | + | <code> |
+ | Запустите с правами Administrator | ||
- | * Адаптер 1 - eth0 - Внутренняя сеть (LAN) | + | C:\cmder\cmder.exe |
- | * Адаптер 2 - eth1 - Сетевой мост (ISP1) | + | |
- | * Адаптер 3 - eth2 - Сетевой мост (класс) | + | |
- | * Адаптер 4 - eth3 - Сетевой мост (ISP2) | + | |
- | * Добавить жесткий диск 2Gb | + | |
- | === 1.2 Настройка сети систем === | + | bash |
- | * Методическая рекомендация - настроить только первый узел (node1). Второй узел настроить в следующем модуле. | + | cd |
+ | |||
+ | test -d conf && rm -r conf | ||
+ | |||
+ | git clone http://val.bmstu.ru/unix/conf.git | ||
+ | |||
+ | cd conf/virtualbox/ | ||
+ | |||
+ | ./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> | <code> | ||
- | node1# ifconfig eth2 inet 10.10.144.100+X/24 | + | ubuntu# sh net_gate.sh |
- | nodeN# cat /etc/hostname | + | ubuntu# init 6 |
- | </code><code> | + | </code> |
- | nodeN.corpX.un | + | |
- | </code><code> | + | |
- | nodeN# cat /etc/hosts | + | |
- | </code><code> | + | |
- | 127.0.0.1 localhost | + | |
- | 192.168.X.1 node1.corpX.un node1 | + | * PuTTY !!! |
- | 192.168.X.2 node2.corpX.un node2 | + | |
- | 10.10.144.130 proxy | + | <code> |
- | </code><code> | + | gate# sh conf/dhcp.sh |
- | nodeN# cat /etc/resolv.conf | + | </code> |
- | </code><code> | + | |
- | search corpX.un | + | === 1.5 Тестирование сети === |
- | nameserver 192.168.X.1 | + | <code> |
- | nameserver 192.168.X.2 | + | windows> ping 1.1.1.1 |
- | </code><code> | + | </code> |
- | nodeN# cat /etc/network/interfaces | + | |
+ | === 1.6 Подготовка отказоустойчивой конфигурации === | ||
+ | |||
+ | * [[Сервис Keepalived]] (сервис не перезапускать!) | ||
+ | |||
+ | <code> | ||
+ | gate# cat /etc/network/interfaces | ||
</code><code> | </code><code> | ||
auto lo | auto lo | ||
Line 72: | Line 95: | ||
auto eth0 | auto eth0 | ||
iface eth0 inet static | iface eth0 inet static | ||
- | address 192.168.X.N | + | address 192.168.X.1 |
netmask 255.255.255.0 | netmask 255.255.255.0 | ||
Line 79: | Line 102: | ||
up ip link set eth1 up | up ip link set eth1 up | ||
- | auto eth2 | + | #auto eth2 |
- | iface eth2 inet static | + | #iface eth2 inet manual |
- | address 10.10.144.N*100+X | + | # up ip link set eth2 up |
- | netmask 255.255.255.0 | + | </code> |
- | + | <code> | |
- | auto eth3 | + | gate# cat /etc/hostname |
- | iface eth3 inet manual | + | |
- | up ip link set eth3 up | + | |
</code><code> | </code><code> | ||
- | nodeN# cat /etc/sysctl.conf | + | node1.corpX.un |
</code><code> | </code><code> | ||
- | ... | + | gate# cat /etc/hosts |
- | net.ipv4.ip_forward=1 | + | |
- | ... | + | |
</code><code> | </code><code> | ||
- | nodeN# cat .bashrc | + | 127.0.0.1 localhost |
+ | |||
+ | 192.168.X.1 node1.corpX.un node1 | ||
+ | 192.168.X.2 node2.corpX.un node2 | ||
</code><code> | </code><code> | ||
- | ... | + | gate# init 6 |
- | export http_proxy=http://proxy:3128/ | + | |
- | export EDITOR=nano | + | |
- | ... | + | |
- | </code><code> | + | |
- | nodeN# init 6 | + | |
</code> | </code> | ||
- | + | === 1.7 Тестирование сети === | |
- | === 1.3 Тестирование настроек сети === | + | |
<code> | <code> | ||
- | nodeN# ping proxy | + | node1# ping ya.ru |
- | nodeN# apt update | + | windows> ping 1.1.1.1 |
</code> | </code> | ||
Line 122: | Line 138: | ||
==== Теория ==== | ==== Теория ==== | ||
- | * [[http://habrahabr.ru/tag/csync2/|csync2 или как облегчить работу с кластером]] | + | * [[https://habr.com/en/post/120702/|csync2 или как облегчить работу с кластером]] |
* [[https://ru.wikipedia.org/wiki/Ansible|Ansible]] | * [[https://ru.wikipedia.org/wiki/Ansible|Ansible]] | ||
==== Лабораторные работы ==== | ==== Лабораторные работы ==== | ||
- | === 2.1 С использованием сервиса SSH === | + | === 2.1 Запуск node2 === |
+ | |||
+ | === 2.2 Синхронизация с использованием сервиса SSH === | ||
* Настройка доступа по протоколу ssh пользователя root с node1 на node2 ([[Сервис SSH#Разрешение доступа пользователя root на основании адреса клиента]]) | * Настройка доступа по протоколу ssh пользователя root с node1 на node2 ([[Сервис SSH#Разрешение доступа пользователя root на основании адреса клиента]]) | ||
- | * Настройка безпарольного доступа пользователя root с node1 на node2 ([[Сервис SSH#Аутентификация с использованием ключей ssh]]) | + | * Настройка беспарольного доступа пользователя root с node1 на node2 ([[Сервис SSH#Аутентификация с использованием ключей ssh]]) |
<code> | <code> | ||
Line 149: | Line 167: | ||
<code> | <code> | ||
node1# | node1# | ||
- | |||
scp /etc/hosts node2:/etc/ | scp /etc/hosts node2:/etc/ | ||
- | scp /etc/resolv.conf node2:/etc/ | ||
- | scp /etc/sysctl.conf node2:/etc/ | ||
- | scp .bashrc node2: | ||
scp /etc/hostname node2:/etc/ | scp /etc/hostname node2:/etc/ | ||
scp /etc/network/interfaces node2:/etc/network/ | 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> | </code> | ||
- | * Павим файлы конфигурации на node2, перезапускаем, тестируем сеть | + | * Правим файлы конфигурации на 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 BACKUP | ||
+ | ... | ||
+ | </code><code> | ||
+ | node2# init 6 | ||
+ | </code> | ||
+ | |||
+ | === 2.3 Использование BASH алиасов и функций для удобства === | ||
* [[Настройка командных интерпретаторов#bash]] алиасы и функции | * [[Настройка командных интерпретаторов#bash]] алиасы и функции | ||
- | === 2.2 С использованием пакета CSYNC2 === | + | <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 на node1, на node2 конфигурация появится автоматически | ||
- | * [[Финальная настройка DNS сервера]] | + | * [[Финальная настройка DNS сервера]] (как это было на "ЛИН СЕРВ") |
* Устанавливаем и ЗАПУСКАЕМ на двух узлаx, настраиваем на node1 | * Устанавливаем и ЗАПУСКАЕМ на двух узлаx, настраиваем на node1 | ||
<code> | <code> | ||
Line 179: | Line 236: | ||
ns A 192.168.X.1 | ns A 192.168.X.1 | ||
ns A 192.168.X.2 | ns A 192.168.X.2 | ||
- | node1 A 192.168.X.1 | + | |
- | node2 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 | gate A 192.168.X.254 | ||
</code><code> | </code><code> | ||
- | node1# ssn2 apt update | + | node1# named-checkconf -z |
node1# ssn2 apt install bind9 | node1# ssn2 apt install bind9 | ||
Line 193: | Line 253: | ||
<code> | <code> | ||
node1# csync2 -xv | node1# csync2 -xv | ||
- | |||
- | nodeN# host ns | ||
</code> | </code> | ||
- | === 2.3 С использованием пакета Ansible === | + | <code> |
+ | nodeN# host ns node1 | ||
+ | nodeN# 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 | **Сценарий:** на обоих узлах создаем пользователя user1 с uid=10001 | ||
Line 216: | Line 288: | ||
==== Теория ==== | ==== Теория ==== | ||
- | * [[http://www.communigate.com/CommunigatePro/russian/Clusters.html|Кластеры Communigate Pro]] | + | * [[https://www.communigate.ru/CommuniGatePro/russian/Clusters.html|Кластеры Communigate Pro]] |
- | * man dhcpd.conf (Dhcp Failover) | + | * man dhcpd.conf (DHCP FAILOVER) |
==== Лабораторные работы ==== | ==== Лабораторные работы ==== | ||
- | |||
- | === 3.0 Импорт VM Windows === | ||
=== 3.1 Отказоустойчивый DHCP сервер === | === 3.1 Отказоустойчивый DHCP сервер === | ||
Line 226: | Line 296: | ||
* [[Сервис DHCP#Установка]] cервиса DHCP | * [[Сервис DHCP#Установка]] cервиса DHCP | ||
<code> | <code> | ||
- | nodeN# sh conf/dhcp.sh | + | node2# sh conf/dhcp.sh |
</code> | </code> | ||
Line 233: | Line 303: | ||
* [[Сервис DHCP#Мониторинг выданных адресов]] cервиса DHCP | * [[Сервис DHCP#Мониторинг выданных адресов]] cервиса DHCP | ||
- | Примечания: | + | Примечание: в первый момент необходимо запустить оба сервера чтобы они синхронизировались. |
- | + | ||
- | * В качестве шлюза указан не существующий ip адрес 192.168.X.254, он будет назначаться в следующей лабораторной работе. | + | |
- | * В первый момент необходимо запустить оба сервера чтобы они синхронизировались. | + | |
=== 3.2 Проверка === | === 3.2 Проверка === | ||
- | * Добавляем в стенд Windows client1, останавливаем по очереди узлы, перезагружаем client1. Должен выдаваться один и тот же адрес (можно отключать интерфейс Windows, ipconfig /renew не использовать) | + | * !!! Тестирование отказоустойчивости выполнить в лабораторной работе 4.2 |
- | === 3.3 Отладка === | ||
- | |||
<code> | <code> | ||
- | # ntpdate -u proxy | + | windows> ipconfig /release |
- | # grep dhcp /var/log/syslog | + | windows> ipconfig /renew |
+ | |||
+ | windows> ipconfig /all | ||
+ | |||
+ | windows> ping ya.ru | ||
</code> | </code> | ||
+ | |||
==== Вопросы ==== | ==== Вопросы ==== | ||
Line 260: | Line 330: | ||
==== Теория ==== | ==== Теория ==== | ||
+ | * [[https://ru.wikipedia.org/wiki/VRRP|VRRP]] | ||
* [[https://ru.wikipedia.org/wiki/CARP|CARP]] | * [[https://ru.wikipedia.org/wiki/CARP|CARP]] | ||
* [[https://ru.wikipedia.org/wiki/Iproute2|Iproute2]] | * [[https://ru.wikipedia.org/wiki/Iproute2|Iproute2]] | ||
Line 268: | Line 339: | ||
* [[Протокол CARP]] | * [[Протокол CARP]] | ||
+ | * [[Сервис Keepalived]] | ||
<code> | <code> | ||
- | C:\>ping gate | + | windows> ping gate |
</code> | </code> | ||
==== 4.2 Отказоустойчивый nat ==== | ==== 4.2 Отказоустойчивый nat ==== | ||
- | |||
- | **Сценарий**: | ||
* Настроить NAT трансляцию для сети 192.168.X/24 в реальный адрес ISP ([[Сервис NAT]]) | * Настроить NAT трансляцию для сети 192.168.X/24 в реальный адрес ISP ([[Сервис NAT]]) | ||
- | * Модифицировать скрипты up и down с целью назначения/удаления реального адреса ISP на внешнем интерфейсе и указания маршрута по умолчанию через провайдера для мастер узла и через мастер узел для резервного. | + | * После этого **преподавателю** отключить маршруты в локальные сети стендов |
- | <code> | + | * !!! Либо протестировать отказоустойчивый шлюз с одним провайдером на этом этапе, либо совместить с выполнением лабораторной работы 4.3.1 |
- | nodeN# apt install fake | + | ==== 4.3 Балансировка нагрузки и отказоустойчивость при использовании нескольких ISP ==== |
- | nodeN# cat /usr/share/ucarp/vip-up | + | * Дополнительная лабораторная работа |
- | </code><code> | + | |
- | #!/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 | + | |
- | route delete default | + | |
- | route add default gw 172.16.1.254 | + | |
- | </code><code> | + | |
- | nodeN# cat /usr/share/ucarp/vip-down | + | |
- | </code><code> | + | |
- | #!/bin/sh | + | |
- | + | ||
- | /sbin/ifdown $1:ucarp | + | |
- | + | ||
- | ip addr del 172.16.1.X/24 dev eth1 | + | |
- | route add default gw 192.168.X.254 | + | |
- | </code><code> | + | |
- | masternode# killall -USR2 ucarp | + | |
- | или | + | |
- | masternode# init 6 | + | |
- | </code> | + | |
- | ==== 4.3 Балансировка нагрузки и отказоустойчивость при использовании нескольких ISP ==== | + | |
=== 4.3.1 Добавление сетевых карт для подключения к ISP2 === | === 4.3.1 Добавление сетевых карт для подключения к ISP2 === | ||
- | |||
- | * eth3 isp2 bridge to nic 172.16.2/24 | ||
<code> | <code> | ||
Line 316: | Line 360: | ||
</code><code> | </code><code> | ||
... | ... | ||
- | auto eth3 | + | auto eth2 |
- | iface eth3 inet manual | + | iface eth2 inet manual |
- | up ip link set eth3 up | + | up ip link set eth2 up |
+ | </code> | ||
+ | |||
+ | * [[Сервис Keepalived]] - добавляем eth2 | ||
+ | * По очереди останавливаем узлы и добавляем Адаптер 3 - eth2 - Сетевой мост (ISP2) | ||
+ | |||
+ | <code> | ||
+ | nodeN# ip a | grep eth2 | ||
</code> | </code> | ||
=== 4.3.2 Модификация настроек dns сервера === | === 4.3.2 Модификация настроек dns сервера === | ||
<code> | <code> | ||
- | # cat /etc/bind/named.conf | + | node1# cat /etc/bind/named.conf |
</code><code> | </code><code> | ||
... | ... | ||
Line 331: | Line 382: | ||
}; | }; | ||
... | ... | ||
+ | </code><code> | ||
+ | node1# csync2 -xv | ||
</code> | </code> | ||
- | === 4.3.3 Подключение шлюзов и тестирование ISP2 === | + | === 4.3.3 Тестирование ISP2 === |
<code> | <code> | ||
- | nodeN# cat /usr/share/ucarp/vip-up | + | node1# ip a | grep 172.16.2 |
- | </code><code> | + | |
- | #!/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 | + | |
- | </code><code> | + | |
- | nodeN# cat /usr/share/ucarp/vip-down | + | |
- | </code><code> | + | |
- | ... | + | |
- | ip addr del 172.16.2.X/24 dev eth3 | + | |
- | ... | + | |
- | </code><code> | + | |
- | masternode# killall -USR2 ucarp | + | |
- | ... | + | |
- | masternode# grep carp /var/log/syslog | + | |
- | masternode# ip a | grep 172.16.2 | + | node1# ping 172.16.2.254 |
- | </code> | + | |
- | * [[Настройка сети в Linux]] | + | node1# ip route del default |
- | <code> | + | node1# ip route add default via 172.16.2.254 |
- | masternode# ping 172.16.2.254 | + | |
- | masternode# ip route add default via 172.16.2.254 | + | node1# ping ya.ru |
- | masternode# ping ya.ru | + | node1# tracepath ya.ru |
- | masternode# ip route delete default | + | node1# ip route del default |
</code> | </code> | ||
Line 378: | Line 412: | ||
=== 4.3.5 Автоматизация балансировки/отказоустойчивости выбора ISP === | === 4.3.5 Автоматизация балансировки/отказоустойчивости выбора ISP === | ||
+ | |||
+ | * [[Сервис Keepalived]] - добавляем таблицы 101 и 102 | ||
<code> | <code> | ||
- | nodeN# cat /usr/share/ucarp/vip-up | + | node1# ip route show table 101 |
- | </code><code> | + | |
- | ... | + | |
- | ip route add default via 172.16.1.254 table 101 | + | |
- | ip route add default via 172.16.2.254 table 102 | + | |
- | </code><code> | + | |
- | masternode# killall -USR2 ucarp | + | |
- | ... | + | |
- | masternode# grep carp /var/log/syslog | + | |
- | masternode# ip route show table all | grep 'table 10[12]' | + | node1# ip route show table 102 |
- | </code><code> | + | |
- | # cat set_isp.sh | + | nodeN# cat set_isp.sh |
</code><code> | </code><code> | ||
#!/bin/sh | #!/bin/sh | ||
Line 401: | Line 429: | ||
while ip rule del from any table 101;do true;done | while ip rule del from any table 101;do true;done | ||
while ip rule del from any table 102;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.X.0/24 table 101 | ||
ip rule add from 192.168/16 to 192.168/16 table main | 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 | /sbin/ip route flush cache | ||
Line 412: | Line 443: | ||
while ip rule del from any table 101;do true;done | while ip rule del from any table 101;do true;done | ||
while ip rule del from any table 102;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.X.0/24 table 102 | ||
ip rule add from 192.168/16 to 192.168/16 table main | 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 | /sbin/ip route flush cache | ||
Line 423: | Line 457: | ||
while ip rule del from any table 101;do true;done | while ip rule del from any table 101;do true;done | ||
while ip rule del from any table 102;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.0/25 table 101 | ||
ip rule add from 192.168.X.128/25 table 102 | 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 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 | /sbin/ip route flush cache | ||
Line 435: | Line 473: | ||
nodeN# chmod +x set_isp.sh | nodeN# chmod +x set_isp.sh | ||
- | masternode# grep carp /var/log/syslog | + | node1# /root/set_isp.sh ISP1ISP2 |
- | masternode# /root/set_isp.sh ISP1ISP2 | + | node1# ip rule show |
- | backupnode# traceroute -n ya.ru | + | node2# tracepath ya.ru |
- | C:\Users\student>tracert ya.ru | + | windows> tracert -d ya.ru |
nodeN# cat select_isp.sh | nodeN# cat select_isp.sh | ||
Line 447: | Line 485: | ||
#!/bin/sh | #!/bin/sh | ||
- | export PATH=/bin:/sbin:/usr/bin:/usr/sbin:$PATH | + | ip a | grep -q '192.168.*254' || exit 0 |
- | ip a | grep -q 'eth0:ucarp' || exit 0 | + | TESTIP=1.1.1.1 |
- | + | ||
- | ip route delete default | + | |
ISP='' | ISP='' | ||
- | ip route add default via 172.16.1.254 | + | ip route del $TESTIP |
- | + | ip route add $TESTIP via 172.16.1.254 | |
- | ping -c3 ya.ru && ISP=ISP1 | + | ping -c3 $TESTIP && ISP=ISP1 |
- | + | ||
- | ip route delete default | + | |
- | + | ||
- | ip route add default via 172.16.2.254 | + | |
- | ping -c3 ya.ru && ISP=${ISP}ISP2 | + | ip route del $TESTIP |
+ | ip route add $TESTIP via 172.16.2.254 | ||
+ | ping -c3 $TESTIP && ISP=${ISP}ISP2 | ||
- | ip route delete default | + | ip route del $TESTIP |
echo $ISP | echo $ISP | ||
Line 476: | Line 510: | ||
/root/set_isp.sh $ISP | /root/set_isp.sh $ISP | ||
+ | |||
</code><code> | </code><code> | ||
nodeN# chmod +x select_isp.sh | nodeN# chmod +x select_isp.sh | ||
- | masternode# /root/select_isp.sh | + | node1# /root/select_isp.sh |
- | masternode# cat /tmp/current_isp | + | node1# cat /tmp/current_isp |
nodeN# crontab -l | nodeN# crontab -l | ||
Line 488: | Line 523: | ||
</code> | </code> | ||
<code> | <code> | ||
- | master_node# ip route show table 101 | ||
- | |||
- | master_node# ip route show table 102 | ||
- | |||
master_node# ip rule show | master_node# ip rule show | ||
</code> | </code> | ||
Line 500: | Line 531: | ||
- Для какой операционной системы впервые появилась реализация протокола CARP? | - Для какой операционной системы впервые появилась реализация протокола CARP? | ||
- Какая утилита из набора iproute2 позволяет назначить/удалить IP адрес на интерфейсе? | - Какая утилита из набора iproute2 позволяет назначить/удалить IP адрес на интерфейсе? | ||
- | - В чем отличие поведения мастер хоста от других в протоколе CARP? | + | - В чем отличие поведения мастер хоста от других в протоколе CARP/VRRP? |
- | - Поддерживает ли протокол CARP отказоустойчивость соединений? | + | - Поддерживает ли протокол CARP/VRRP отказоустойчивость соединений? |
- | - Поддерживает ли протокол CARP балансировку нагрузки? | + | - Поддерживает ли протокол CARP/VRRP балансировку нагрузки? |
- Что такое ucarp? | - Что такое ucarp? | ||
- В каком пакете в Debian содержатся современные сетевые утилиты, пришедшие на смену классическим UNIX утилитам ifconfig, route, arp, netstat? | - В каком пакете в Debian содержатся современные сетевые утилиты, пришедшие на смену классическим UNIX утилитам ifconfig, route, arp, netstat? | ||
Line 518: | Line 549: | ||
==== Теория ==== | ==== Теория ==== | ||
- | * [[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"]] | * [[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]] | ||
+ | |||
+ | |||
==== Лабораторные работы ==== | ==== Лабораторные работы ==== | ||
- | Сценарий: отказоустойчивый www хостинг | + | Сценарий: отказоустойчивое ftp хранилище пользовательских файлов с web доступом |
* Содержимое домашних каталогов мастер сервера периодически копируется на резервный. | * Содержимое домашних каталогов мастер сервера периодически копируется на резервный. | ||
Line 540: | Line 575: | ||
</code><code> | </code><code> | ||
... | ... | ||
- | www A 192.168.X.10 | + | www A 192.168.X.10 |
</code><code> | </code><code> | ||
+ | node1# named-checkconf -z | ||
+ | |||
node1# csync2 -xv | node1# csync2 -xv | ||
</code> | </code> | ||
Line 548: | Line 585: | ||
* На обоих узлах создаем пользователя user1 с uid=10001 ([[Управление учетными записями в Linux]]) (можно через Ansible) | * На обоих узлах создаем пользователя user1 с uid=10001 ([[Управление учетными записями в Linux]]) (можно через Ansible) | ||
* На обоих узлах включаем [[Сервис HTTP#Использование домашних каталогов]] (можно через Ansible) | * На обоих узлах включаем [[Сервис HTTP#Использование домашних каталогов]] (можно через Ansible) | ||
- | * [[Сервис Ansible]] | + | * Использование [[Сервис Ansible]] для автоматизации задач (финальные работы 8.1 и 8.2 выполнить утром 3-го дня) |
* Устанавливаем сервер ftp на node1 и запускаем его ([[Сервис FTP#Сервер ftp]]) | * Устанавливаем сервер ftp на node1 и запускаем его ([[Сервис FTP#Сервер ftp]]) | ||
- | * Создаем тестовую www страницу для пользователя user1 используя протокол ftp на node1 | + | * Копируем любые файлы, подключаясь user1 по протоколу протокол ftp на node1 |
<code> | <code> | ||
+ | Проводник: ftp://node1 | ||
+ | l: user1 | ||
+ | p: password1 | ||
+ | |||
Каталог: public_html | Каталог: public_html | ||
- | Файл: index.html | + | |
+ | В Браузере: http://node1/~user1 | ||
</code> | </code> | ||
Line 572: | Line 615: | ||
nodeN# update-rc.d -f proftpd remove | nodeN# update-rc.d -f proftpd remove | ||
или | или | ||
- | nodeN# systemctl disable proftpd | + | debian11# systemctl disable proftpd |
</code> | </code> | ||
- | |||
- | * Представим, что узлы соединены кросс кабелем через eth2 интерфейсы | ||
=== 5.2.2 Настройка менеджера кластера === | === 5.2.2 Настройка менеджера кластера === | ||
Line 581: | Line 622: | ||
* [[Пакет HEARTBEAT]] (Демонстрирует преподаватель в методических целях) | * [[Пакет HEARTBEAT]] (Демонстрирует преподаватель в методических целях) | ||
* [[Пакет Corosync]] | * [[Пакет Corosync]] | ||
- | * [[Пакет Pacemaker]] (для pacemaker 2.X выполните начало лабораторной 5.2.3) | + | * [[Пакет Pacemaker]] |
+ | * [[Пакет PCS]] (сделать резервную копию /etc/corosync/corosync.conf) | ||
- | === 5.2.3 Автоматическую синхронизация домашних каталогов === | + | <code> |
+ | Проводник: ftp://www | ||
+ | |||
+ | В Браузере: http://www.corpX.un/~user1 | ||
+ | </code> | ||
+ | |||
+ | === 5.2.3 Автоматическая синхронизация домашних каталогов === | ||
* Настроить автоматическую синхронизацию домашних каталогов с мастер узла на резервный | * Настроить автоматическую синхронизацию домашних каталогов с мастер узла на резервный | ||
Line 594: | Line 642: | ||
</code><code> | </code><code> | ||
... | ... | ||
- | * * * * * ps ax | grep -v grep | grep -q 'proftpd: (accepting connections)' && /usr/bin/rsync -az --delete /home/ nodeM:/home/ | + | * * * * * ps ax | grep -q '[p]roftpd: (accepting connections)' && /usr/bin/rsync -az --delete /home/ nodeM:/home/ |
</code> | </code> | ||
==== Вопросы ==== | ==== Вопросы ==== | ||
Line 616: | Line 664: | ||
* [[https://ru.wikipedia.org/wiki/DRBD|Distributed Replicated Block Device]] | * [[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)]] | ||
==== Лабораторные работы ==== | ==== Лабораторные работы ==== | ||
Line 621: | Line 671: | ||
**Сценарий**: Создаем отказоустойчивый корпоративный файловый сервер. Первый узел кластера должен использоваться сервером по умолчанию. | **Сценарий**: Создаем отказоустойчивый корпоративный файловый сервер. Первый узел кластера должен использоваться сервером по умолчанию. | ||
- | ==== 6.1 Синхронизация файловых систем ===== | + | ==== 6.1 Развертывание распределенного RAID 1 ===== |
- | * Подключаем к обоим узлам по дополнительному диску (2Gb) | + | * Подключаем к обоим узлам по дополнительному диску |
* [[Решение DRBD]] | * [[Решение DRBD]] | ||
Line 629: | Line 679: | ||
* Pacemaker [[Пакет Pacemaker#Удаление ресурсов]] | * Pacemaker [[Пакет Pacemaker#Удаление ресурсов]] | ||
- | * [[Решение DRBD#DRBD и Pacemaker]] | + | * Pacemaker [[Пакет Pacemaker#Управление конфигурацией]] (уменьшение вероятности split-brain) |
+ | * [[Решение DRBD#DRBD и Pacemaker]] (оставить приклрепление к node1) | ||
+ | * Можно показать на отдельном стенде [[Решение DRBD#Конфигурация с двумя primaries]] | ||
- | ==== 6.3 Настройка SAN сервера iSCSI ==== | + | ==== 6.3 Настройка NAS сервера SMB/CIFS ==== |
- | + | ||
- | * Демонстрирует преподаватель | + | |
- | * Устанавливаем на оба узла пакет [[Сервис iSCSI#iSCSI target]] | + | |
- | + | ||
- | <code> | + | |
- | nodeN# systemctl disable istgt | + | |
- | + | ||
- | node1# crm configure | + | |
- | + | ||
- | crm(live)configure# primitive pr_srv_istgt lsb:istgt | + | |
- | + | ||
- | crm(live)configure# primitive pr_ip_istgt ocf:heartbeat:IPaddr2 params ip=192.168.X.15 cidr_netmask=32 nic=eth0 | + | |
- | + | ||
- | crm(live)configure# group gr_ip_fs pr_fs_r0 pr_ip_istgt pr_srv_istgt | + | |
- | + | ||
- | crm(live)configure# commit | + | |
- | </code> | + | |
- | + | ||
- | * Настраиваем [[Сервис iSCSI#iSCSI initiator]] для Windows | + | |
- | + | ||
- | ==== 6.4 Настройка NAS сервера SMB/CIFS ==== | + | |
* В зону corpX.un добавляем запись fs A 192.168.X.20 | * В зону corpX.un добавляем запись fs A 192.168.X.20 | ||
Line 660: | Line 691: | ||
</code><code> | </code><code> | ||
... | ... | ||
- | fs A 192.168.X.20 | + | fs A 192.168.X.20 |
</code><code> | </code><code> | ||
+ | node1# named-checkconf -z | ||
+ | |||
node1# csync2 -xv | node1# csync2 -xv | ||
</code> | </code> | ||
Line 669: | Line 702: | ||
<code> | <code> | ||
- | root@nodeN:~# service smbd stop | + | root@nodeN:~# |
- | root@nodeN:~# service nmbd stop | + | |
+ | service smbd stop | ||
+ | service nmbd stop | ||
+ | |||
+ | systemctl disable smbd | ||
+ | systemctl disable nmbd | ||
- | root@nodeN:~# systemctl disable smbd | ||
- | root@nodeN:~# systemctl disable nmbd | ||
</code> | </code> | ||
- | * Настраиваем на МАСТЕР узле [[Файловый сервер SAMBA#Публичный каталог доступный на запись]] в каталоге /disk2/samba | + | * Настраиваем на обоих узлах [[Файловый сервер SAMBA#Публичный каталог доступный на запись]] |
- | * Копируем на BACKUP узел файл конфигурации samba | + | * Создаем каталог /disk2/samba на мастер узле |
* Настраиваем менеджер кластера на монтирование на мастер узле зеркалируемого раздела в каталог /disk2, назначение ip адреса 192.168.X.20 и запуск сервера samba | * Настраиваем менеджер кластера на монтирование на мастер узле зеркалируемого раздела в каталог /disk2, назначение ip адреса 192.168.X.20 и запуск сервера samba | ||
Line 688: | Line 725: | ||
crm(live)configure# group gr_ip_fs pr_fs_r0 pr_ip_smbd pr_srv_smbd | 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 | ||
или | или | ||
Line 699: | Line 740: | ||
<code> | <code> | ||
- | master# cat /proc/drbd | + | slave# watch cat /proc/drbd |
- | master# crm_mon -1 | + | slave# crm_mon |
</code> | </code> | ||
* Останавливаем MASTER сервер и дожидаемся монтирования на SLAVE узле "половины" зеркалируемого раздела в каталог /disk2, назначение ip адреса 192.168.X.20 и запуск сервера samba | * Останавливаем MASTER сервер и дожидаемся монтирования на SLAVE узле "половины" зеркалируемого раздела в каталог /disk2, назначение ip адреса 192.168.X.20 и запуск сервера samba | ||
* Запускаем бывший MASTER узел и дожидаемся восстановления целостности зеркала | * Запускаем бывший MASTER узел и дожидаемся восстановления целостности зеркала | ||
- | * Останавливаем группу ресурсов кластера и удаляем ее [[Пакет Pacemaker#Удаление ресурсов]] | + | |
+ | * !!! (Лучше после демонстрации SplitBrain в конце лабораторной работы 7.1.1) Останавливаем группу ресурсов кластера и [[Пакет Pacemaker#Удаление ресурсов]] | ||
<code> | <code> | ||
master# crm resource stop pr_srv_smbd pr_ip_smbd | master# crm resource stop pr_srv_smbd pr_ip_smbd | ||
Line 733: | Line 775: | ||
==== 7.1 Linux Containers в зеркалируемом разделе ==== | ==== 7.1 Linux Containers в зеркалируемом разделе ==== | ||
- | * В зону corpX.un добавляем запись server A 192.168.X.30 | + | * В зону corpX.un добавляем запись server1 A 192.168.X.31 |
<code> | <code> | ||
Line 739: | Line 781: | ||
</code><code> | </code><code> | ||
... | ... | ||
- | server A 192.168.X.30 | + | server1 A 192.168.X.31 |
+ | server2 A 192.168.X.32 | ||
+ | @ MX 10 server1 | ||
</code><code> | </code><code> | ||
+ | node1# named-checkconf -z | ||
+ | |||
node1# csync2 -xv | node1# csync2 -xv | ||
</code> | </code> | ||
Line 747: | Line 793: | ||
=== 7.1.1 Настройка bridge на узлах и сервисах === | === 7.1.1 Настройка bridge на узлах и сервисах === | ||
- | * [[Технология LXC#Подготовка сети]] для LXC | + | * [[Технология LXC#Подготовка сети]] для LXC на одной системе |
- | * Сервис CARP и bridge | + | |
<code> | <code> | ||
nodeN# apt install bridge-utils | nodeN# apt install bridge-utils | ||
Line 759: | Line 805: | ||
bridge_ports eth0 | bridge_ports eth0 | ||
+ | #bridge_hw 08:00:27:12:34:0N #if generate same mac on nodes (Debian11) | ||
address 192.168.X.N | address 192.168.X.N | ||
- | netmask 255.255.255.0 | + | ... |
| | ||
- | ... | ||
- | |||
- | iface br0:ucarp inet static | ||
- | address 192.168.X.254 | ||
- | netmask 255.255.255.255 | ||
- | ... | ||
</code> | </code> | ||
+ | * [[Сервис Keepalived]] и bridge | ||
* Сервис DHCP и bridge | * Сервис DHCP и bridge | ||
Line 777: | Line 819: | ||
</code><code> | </code><code> | ||
... | ... | ||
- | INTERFACES="br0" | + | INTERFACESv4="br0" |
</code><code> | </code><code> | ||
nodeN# init 0 | nodeN# init 0 | ||
Line 786: | Line 828: | ||
<code> | <code> | ||
- | nodeN# ps ax | grep carp | + | nodeN# ip a |
- | nodeN# ps ax | grep dhcp | + | node1# mount | egrep 'ext|ocfs' |
- | + | ||
- | node1# mount | grep ext | + | |
nodeN# cat /proc/drbd | nodeN# cat /proc/drbd | ||
</code> | </code> | ||
- | * Может понадобиться [[Решение DRBD#Решение ситуации Split-Brain]] | + | * Может понадобиться [[Решение DRBD#Решение ситуации Split-Brain]] или, в нашем случае [[Решение DRBD#Решение ситуации Split-Brain при использовании Pacemaker]] |
=== 7.1.2 Подготовка виртуальных машин === | === 7.1.2 Подготовка виртуальных машин === | ||
Line 808: | Line 848: | ||
</code> | </code> | ||
- | * Создание ветки дочерней системы | + | * Создание ветки дочерней системы/шаблона (в большой группе занимает 5 минут, попробовать настроить proxy через [[Переменные окружения]]) |
| | ||
<code> | <code> | ||
root@node1.corpX.un:~# mkdir -p /disk2/var/lib/lxc/ | root@node1.corpX.un:~# mkdir -p /disk2/var/lib/lxc/ | ||
- | root@node1.corpX.un:~# lxc-create -t debian -n server | + | root@node1.corpX.un:~# lxc-create -t download -n server-template -- -d ubuntu -r focal -a amd64 |
</code> | </code> | ||
- | * Установка ПО в дочерней системе на MASTER узле | + | * Установка ПО в дочерней системе/шаблоне |
<code> | <code> | ||
- | root@node1.corpX.un:~# cp /etc/ssh/sshd_config /var/lib/lxc/server/rootfs/etc/ssh/sshd_config | + | root@node1.corpX.un:~# chroot /var/lib/lxc/server-template/rootfs/ /bin/bash |
- | root@node1.corpX.un:~# cp /etc/hosts /var/lib/lxc/server/rootfs/etc/ | + | root@node1:/# PS1='server-template:\w# ' |
- | root@node1.corpX.un:~# chroot /var/lib/lxc/server/rootfs/ /bin/bash | + | server-template:/# apt update |
- | root@node1:/# PS1='server:\w# ' | + | server-template:/# apt purge netplan.io |
- | server:/# apt update | + | server-template:/# apt install nano ssh |
- | + | ||
- | server:/# apt purge isc-dhcp-client | + | |
- | + | ||
- | server:/# apt install nano vim iputils-ping | + | |
</code> | </code> | ||
- | * Настраиваем hostname, hosts, DNS client и учетную запись root в гостевой системе | + | * !!! Методическая рекомендация - запустить процесс установки Ceph (лабораторная работа 8.3) настроив proxy через [[Переменные окружения]] |
+ | |||
+ | * Настраиваем hostname, hosts, DNS client и учетную запись root в гостевой системе/шаблоне | ||
<code> | <code> | ||
server:/# cat /etc/hostname | server:/# cat /etc/hostname | ||
</code><code> | </code><code> | ||
- | server.corpX.un | + | server-template.corpX.un |
</code><code> | </code><code> | ||
- | server:/# cat /etc/hosts | + | server-template:/# cat /etc/hosts |
</code><code> | </code><code> | ||
127.0.0.1 localhost | 127.0.0.1 localhost | ||
- | 192.168.X.30 server.corpX.un | + | 192.168.X.30 server-template.corpX.un server-template |
</code><code> | </code><code> | ||
- | server:/# passwd | + | 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> | </code> | ||
+ | Ctrl-D | ||
- | * Настраиваем lxc для запуска гостевой системы в контейнере на MASTER узле | + | * Настраиваем lxc для запуска гостевой системы/шаблона в контейнере |
<code> | <code> | ||
- | root@node1.corpX.un:~# cat /var/lib/lxc/server/config | + | root@node1.corpX.un:~# cat /var/lib/lxc/server-template/config |
</code><code> | </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.type = veth | ||
Line 861: | Line 908: | ||
lxc.net.0.ipv4.address = 192.168.X.30/24 | lxc.net.0.ipv4.address = 192.168.X.30/24 | ||
lxc.net.0.ipv4.gateway = 192.168.X.254 | lxc.net.0.ipv4.gateway = 192.168.X.254 | ||
- | ... | ||
</code> | </code> | ||
- | * Тестируем работу виртуальной системе на MASTER узле | + | * Создание системы из шаблона |
<code> | <code> | ||
- | root@node1.corpX.un:~# lxc-info -n server | + | root@node1.corpX.un:~# |
- | root@node1.corpX.un:~# lxc-start -n server | + | SRC_CONTAINER=server-template |
+ | DST_CONTAINER=server1 | ||
- | root@node1.corpX.un:~# lxc-info -n server | + | SRC_IP=192.168.X.30 |
+ | DST_IP=192.168.X.31 | ||
- | root@node1.corpX.un:~# lxc-attach -n server -- ps ax | + | time cp -rp /var/lib/lxc/$SRC_CONTAINER/ /var/lib/lxc/$DST_CONTAINER/ |
- | root@node1.corpX.un:~# ssh server | + | 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/" {} \; |
- | root@node1.corpX.un:~# lxc-stop -n server | + | sed -i'' -e "s/$SRC_CONTAINER/$DST_CONTAINER/" -e "s/$SRC_IP/$DST_IP/" /var/lib/lxc/$DST_CONTAINER/config |
- | root@node1.corpX.un:~# systemctl start lxc@server | + | </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@server | + | root@node1.corpX.un:~# systemctl stop lxc@server1 |
</code> | </code> | ||
Line 889: | Line 946: | ||
<code> | <code> | ||
- | primitive pr_lxc_server systemd:lxc@server | + | #primitive pr_lxc_server1 systemd:lxc@server1 meta resource-stickiness=100 |
- | group gr_fs_lxc pr_fs_r0 pr_lxc_server | + | primitive pr_lxc_server1 systemd:lxc@server1 |
+ | |||
+ | group gr_fs_lxc pr_fs_r0 pr_lxc_server1 | ||
</code> | </code> | ||
- | ==== Настройка виртуальной системы как сервер электронной почты ==== | + | ==== Настройка виртуальной системы как сервер электронной почты и тестирование отказоустойчивости ==== |
- | * [[Сервис MTA]] | + | * [[Сервис SSH#PuTTY]] |
- | * [[UA mail]] | + | |
- | * [[Сервер dovecot]] | + | |
+ | <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. Сценарий - авария узла]] | ||
+ | |||
- | * Настроить в виртуальной системе сервисы 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]]) |