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_решений [2021/12/16 10:45] val [Лабораторные работы] |
создание_отказоустойчивых_linux_решений [2023/02/06 15:38] val |
||
---|---|---|---|
Line 4: | Line 4: | ||
* [[http://www.specialist.ru/course/un5|Linux. Уровень 6. Создание отказоустойчивых кластерных решений.]] | * [[http://www.specialist.ru/course/un5|Linux. Уровень 6. Создание отказоустойчивых кластерных решений.]] | ||
- | |||
- | ===== Ссылка на вебинар ===== | ||
Line 11: | Line 9: | ||
* Научиться настраивать отказоустойчивую конфигурацию сервисов Linux на "железном" оборудовании в сети предприятия. | * Научиться настраивать отказоустойчивую конфигурацию сервисов Linux на "железном" оборудовании в сети предприятия. | ||
+ | |||
===== Модуль 0. Подготовка стенда в классе ===== | ===== Модуль 0. Подготовка стенда в классе ===== | ||
Line 20: | Line 19: | ||
* Записать логин пароль и IP (сообщить преподавателю) рабочей станции | * Записать логин пароль и IP (сообщить преподавателю) рабочей станции | ||
* Проверить наличие дистрибутивов и образов | * Проверить наличие дистрибутивов и образов | ||
+ | |||
+ | |||
+ | |||
===== Модуль 1. Развертывание систем и сети кластера ===== | ===== Модуль 1. Развертывание систем и сети кластера ===== | ||
Line 28: | 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 === |
+ | |||
+ | <code> | ||
+ | Запустите с правами Administrator | ||
C:\cmder\cmder.exe | C:\cmder\cmder.exe | ||
- | <code> | ||
bash | bash | ||
cd | cd | ||
+ | |||
+ | test -d conf && rm -r conf | ||
git clone http://val.bmstu.ru/unix/conf.git | git clone http://val.bmstu.ru/unix/conf.git | ||
Line 44: | Line 52: | ||
cd conf/virtualbox/ | cd conf/virtualbox/ | ||
+ | !!! 6 - это номер курса, вместо X укажите Ваш номер стенда, если не знаете его, спросите преподавателя !!! | ||
- | ./setup.sh X | + | ./setup.sh X 6 |
- | + | ||
- | ### setup.sh X 6 | + | |
</code> | </code> | ||
- | === 1.1 Аппаратная настройка систем === | + | === 1.2 Аппаратная настройка систем node1 и node2 === |
- | * Адаптер 1 - eth0 - Внутренняя сеть (LAN) | + | * Адаптер 1 - eth0 - Виртуальный адаптер хоста (LAN) |
- | * Адаптер 2 - eth1 - Сетевой мост (ISP1) | + | * Адаптер 2 - eth1 - Сетевой мост (ISP1) только для node1 и node2 |
- | * Адаптер 3 - eth2 - Сетевой мост (класс) | + | * 2, а если есть возможность, 4 Gb RAM |
- | * Адаптер 4 - eth3 - Сетевой мост (ISP2) | + | |
* Жесткий диск размер 4G уже добавлен | * Жесткий диск размер 4G уже добавлен | ||
- | === 1.2 Настройка сети систем === | + | === 1.3 Импорт VM Windows === |
- | * Методическая рекомендация - настроить только первый узел (node1). Второй узел настроить в следующем модуле. | + | === 1.4 Исходная настройка сети шлюза === |
<code> | <code> | ||
- | node1# ifconfig eth2 inet 10.5.5.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.5.5.254 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 91: | Line 97: | ||
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 98: | Line 104: | ||
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.5.5.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/ | + | |
- | ... | + | |
- | </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 140: | Line 140: | ||
==== Теория ==== | ==== Теория ==== | ||
- | * [[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 на основании адреса клиента]]) | ||
Line 166: | Line 168: | ||
<code> | <code> | ||
- | node1# ssh node2 hostname | + | 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 205: | Line 245: | ||
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 215: | Line 255: | ||
<code> | <code> | ||
node1# csync2 -xv | node1# csync2 -xv | ||
+ | </code> | ||
+ | <code> | ||
nodeN# host ns node1 | nodeN# host ns node1 | ||
nodeN# host ns node2 | nodeN# host ns node2 | ||
</code> | </code> | ||
- | === 2.3 С использованием пакета Ansible === | + | <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 242: | Line 293: | ||
* man dhcpd.conf (DHCP FAILOVER) | * man dhcpd.conf (DHCP FAILOVER) | ||
==== Лабораторные работы ==== | ==== Лабораторные работы ==== | ||
- | |||
- | === 3.0 Импорт VM Windows === | ||
=== 3.1 Отказоустойчивый DHCP сервер === | === 3.1 Отказоустойчивый DHCP сервер === | ||
Line 249: | Line 298: | ||
* [[Сервис DHCP#Установка]] cервиса DHCP | * [[Сервис DHCP#Установка]] cервиса DHCP | ||
<code> | <code> | ||
- | nodeN# sh conf/dhcp.sh | + | node2# sh conf/dhcp.sh |
</code> | </code> | ||
Line 256: | Line 305: | ||
* [[Сервис DHCP#Мониторинг выданных адресов]] cервиса DHCP | * [[Сервис DHCP#Мониторинг выданных адресов]] cервиса DHCP | ||
- | Примечания: | + | Примечание: в первый момент необходимо запустить оба сервера чтобы они синхронизировались. |
- | + | ||
- | * В качестве шлюза указан не существующий ip адрес 192.168.X.254, он будет назначаться в следующей лабораторной работе. | + | |
- | * В первый момент необходимо запустить оба сервера чтобы они синхронизировались. | + | |
=== 3.2 Проверка === | === 3.2 Проверка === | ||
- | * Добавляем в стенд Windows client1, останавливаем по очереди узлы, перезагружаем client1. Должен выдаваться один и тот же адрес (можно отключать интерфейс Windows или ipconfig /release ... /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 283: | Line 332: | ||
==== Теория ==== | ==== Теория ==== | ||
+ | * [[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 291: | Line 341: | ||
* [[Протокол CARP]] | * [[Протокол CARP]] | ||
- | * [[Протокол VRRP]] и [[Сервис Keepalived]] | + | * [[Сервис 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 | + | === 4.3.1 Добавление сетевых карт для подключения к ISP2 === |
- | ip addr add 172.16.1.X/24 dev eth1 | + | <code> |
- | # send_arp 172.16.1.X `cat /sys/class/net/eth1/address` 172.16.1.254 ff:ff:ff:ff:ff:ff eth1 | + | root@nodeN:~# cat /etc/network/interfaces |
- | + | ||
- | ip route delete default | + | |
- | ip route add default via 172.16.1.254 | + | |
</code><code> | </code><code> | ||
- | nodeN# cat /usr/share/ucarp/vip-down | + | ... |
- | </code><code> | + | auto eth2 |
- | #!/bin/sh | + | iface eth2 inet manual |
- | + | up ip link set eth2 up | |
- | /sbin/ifdown $1:ucarp | + | |
- | + | ||
- | ip addr del 172.16.1.X/24 dev eth1 | + | |
- | ip route add default via 192.168.X.254 | + | |
</code> | </code> | ||
- | * [[Сигналы#Отправка сигнала]] | + | * [[Сервис Keepalived]] - добавляем eth2 |
+ | * По очереди останавливаем узлы и добавляем Адаптер 3 - eth2 - Сетевой мост (ISP2) | ||
<code> | <code> | ||
- | masternode# killall -USR2 ucarp | + | nodeN# ip a | grep eth2 |
- | или | + | |
- | masternode# init 6 | + | |
- | </code> | + | |
- | ==== 4.3 Балансировка нагрузки и отказоустойчивость при использовании нескольких ISP ==== | + | |
- | + | ||
- | === 4.3.1 Добавление сетевых карт для подключения к ISP2 === | + | |
- | + | ||
- | * eth3 isp2 bridge to nic 172.16.2/24 | + | |
- | + | ||
- | <code> | + | |
- | root@nodeN:~# cat /etc/network/interfaces | + | |
- | </code><code> | + | |
- | ... | + | |
- | auto eth3 | + | |
- | iface eth3 inet manual | + | |
- | up ip link set eth3 up | + | |
</code> | </code> | ||
Line 364: | Line 388: | ||
</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 | + | |
- | ... | + | |
- | ip route delete default | + | |
- | #ip route add default via 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 409: | Line 414: | ||
=== 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 | + | |
- | #### /root/select_isp.sh | + | node1# ip route show table 102 |
- | </code><code> | + | |
- | masternode# killall -USR2 ucarp | + | |
- | ... | + | |
- | masternode# grep carp /var/log/syslog | + | |
- | masternode# ip route show table all | grep 'table 10[12]' | + | nodeN# cat set_isp.sh |
- | </code><code> | + | |
- | # cat set_isp.sh | + | |
</code><code> | </code><code> | ||
#!/bin/sh | #!/bin/sh | ||
Line 434: | Line 431: | ||
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 445: | Line 445: | ||
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 456: | Line 459: | ||
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 468: | Line 475: | ||
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 |
- | masternode# ip rule show | + | node2# tracepath ya.ru |
- | backupnode# traceroute -n ya.ru | + | windows> tracert -d ya.ru |
- | + | ||
- | C:\Users\student>tracert ya.ru | + | |
nodeN# cat select_isp.sh | nodeN# cat select_isp.sh | ||
Line 484: | Line 489: | ||
ip a | grep -q '192.168.*254' || exit 0 | ip a | grep -q '192.168.*254' || exit 0 | ||
- | ip route delete default | + | TESTIP=1.1.1.1 |
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 509: | Line 512: | ||
/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 521: | Line 525: | ||
</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 533: | Line 533: | ||
- Для какой операционной системы впервые появилась реализация протокола 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 561: | Line 561: | ||
==== Лабораторные работы ==== | ==== Лабораторные работы ==== | ||
- | Сценарий: отказоустойчивый www хостинг или web хранилище пользовательских файлов | + | Сценарий: отказоустойчивое ftp хранилище пользовательских файлов с web доступом |
* Содержимое домашних каталогов мастер сервера периодически копируется на резервный. | * Содержимое домашних каталогов мастер сервера периодически копируется на резервный. | ||
Line 577: | Line 577: | ||
</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 585: | Line 587: | ||
* На обоих узлах создаем пользователя 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> | ||
Line 595: | Line 597: | ||
Каталог: public_html | Каталог: public_html | ||
- | Файл: index.html (Можно любой :) | ||
В Браузере: http://node1/~user1 | В Браузере: http://node1/~user1 | ||
Line 618: | Line 619: | ||
debian11# systemctl disable proftpd | debian11# systemctl disable proftpd | ||
</code> | </code> | ||
- | |||
- | * Представим, что узлы соединены кросс кабелем через eth2 интерфейсы | ||
=== 5.2.2 Настройка менеджера кластера === | === 5.2.2 Настройка менеджера кластера === | ||
Line 626: | Line 625: | ||
* [[Пакет Corosync]] | * [[Пакет Corosync]] | ||
* [[Пакет Pacemaker]] | * [[Пакет Pacemaker]] | ||
- | * [[Пакет PCS]] | + | * [[Пакет PCS]] (сделать резервную копию /etc/corosync/corosync.conf) |
<code> | <code> | ||
Line 645: | Line 644: | ||
</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 676: | Line 675: | ||
==== 6.1 Развертывание распределенного RAID 1 ===== | ==== 6.1 Развертывание распределенного RAID 1 ===== | ||
- | * Подключаем к обоим узлам по дополнительному диску (размер по умолчанию) | + | * Подключаем к обоим узлам по дополнительному диску |
* [[Решение DRBD]] | * [[Решение DRBD]] | ||
Line 682: | Line 681: | ||
* Pacemaker [[Пакет Pacemaker#Удаление ресурсов]] | * Pacemaker [[Пакет Pacemaker#Удаление ресурсов]] | ||
- | * [[Решение DRBD#DRBD и Pacemaker]] (оставить приклрепление к node1) | + | * 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 713: | Line 693: | ||
</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 722: | Line 704: | ||
<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 741: | Line 727: | ||
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 752: | Line 742: | ||
<code> | <code> | ||
- | master# cat /proc/drbd | + | slave# watch cat /proc/drbd |
- | master# crm_mon -1 | + | slave# crm_mon |
</code> | </code> | ||
Line 760: | Line 750: | ||
* Запускаем бывший MASTER узел и дожидаемся восстановления целостности зеркала | * Запускаем бывший MASTER узел и дожидаемся восстановления целостности зеркала | ||
- | * !!! (Лучше после демонстрации SplitBrain) Останавливаем группу ресурсов кластера и удаляем ее [[Пакет 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 787: | Line 777: | ||
==== 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 793: | Line 783: | ||
</code><code> | </code><code> | ||
... | ... | ||
- | server A 192.168.X.30 | + | server1 A 192.168.X.31 |
- | @ MX 10 server | + | 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 802: | Line 795: | ||
=== 7.1.1 Настройка bridge на узлах и сервисах === | === 7.1.1 Настройка bridge на узлах и сервисах === | ||
- | * [[Технология LXC#Подготовка сети]] для LXC | + | * [[Технология LXC#Подготовка сети]] для LXC на одной системе |
- | * Сервис CARP/[[Сервис Keepalived]] и bridge | + | |
<code> | <code> | ||
nodeN# apt install bridge-utils | nodeN# apt install bridge-utils | ||
Line 814: | Line 807: | ||
bridge_ports eth0 | bridge_ports eth0 | ||
- | #bridge_hw 08:00:27:12:34:0N #Debian11 generate same mac on nodes | + | #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 842: | Line 830: | ||
<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]] |
- | + | ||
- | <code> | + | |
- | node2# service pacemaker stop | + | |
- | + | ||
- | node2# drbdadm invalidate r0 | + | |
- | + | ||
- | node2# service pacemaker start | + | |
- | </code> | + | |
=== 7.1.2 Подготовка виртуальных машин === | === 7.1.2 Подготовка виртуальных машин === | ||
Line 872: | Line 850: | ||
</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/ | ||
- | node1 debian10 # lxc-create -t debian -n server -- -r buster | + | root@node1.corpX.un:~# lxc-create -t download -n server-template -- -d ubuntu -r focal -a amd64 |
- | root@node1.corpX.un:~# lxc-create -t debian -n server | + | |
</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 |
+ | </code> | ||
- | server:/# apt purge isc-dhcp-client | + | * !!! Методическая рекомендация - запустить процесс установки Ceph (лабораторная работа 8.3) настроив proxy через [[Переменные окружения]] |
- | + | ||
- | server:/# apt install nano vim iputils-ping | + | |
- | </code> | + | |
- | * Настраиваем hostname, hosts, DNS client и учетную запись root в гостевой системе | + | * Настраиваем 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 server | + | 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 928: | Line 912: | ||
</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 953: | Line 948: | ||
<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 |
- | </code> | + | |
- | ==== Настройка виртуальной системы как сервер электронной почты ==== | + | group gr_fs_lxc pr_fs_r0 pr_lxc_server1 |
- | + | ||
- | <code> | + | |
- | server# apt install ansible git | + | |
</code> | </code> | ||
- | * [[Сервис Ansible]] | + | ==== Настройка виртуальной системы как сервер электронной почты и тестирование отказоустойчивости ==== |
- | * [[Сервис Ansible#Использование ролей]] | + | |
- | * [[Сервис Git#Клонирование и обновление локального репозитория из сетевого]] | + | * [[Сервис SSH#PuTTY]] |
<code> | <code> | ||
- | server# ansible-playbook conf/ansible/roles/mail.yml | + | server1$ sudo -i |
- | или | + | server1# apt install ansible git |
- | node1# nano conf/ansible/roles/mail.yml | + | server1# git clone http://val.bmstu.ru/unix/conf.git |
- | node1# nano /etc/ansible/hosts | + | server1# ansible-playbook conf/ansible/roles/mail.yml |
- | + | ||
- | node1# ansible-playbook conf/ansible/roles/mail.yml | + | |
</code> | </code> | ||
- | ==== Тестирование отказоустойчивости ==== | ||
- | * [[Сервис SSH#PuTTY]] | + | * Roundcube http://server1.corpX.un/mail |
- | * Roundcube http://server.corpX.un/mail | + | |
- | * [[Thunderbird]] | + | |
<code> | <code> | ||
+ | node1# crm configure delete location cli-prefer-pr_fs_r0 | ||
+ | |||
node1# crm resource move gr_fs_lxc node2 | node1# crm resource move gr_fs_lxc node2 | ||
</code> | </code> | ||
Line 993: | Line 981: | ||
===== Модуль 8. Распределенное отказоустойчивое хранилище Ceph ===== | ===== Модуль 8. Распределенное отказоустойчивое хранилище Ceph ===== | ||
- | * [[Сервис Ansible#Использование модулей]] | + | - Настройка IP на node3-7, [[Сервис Ansible#Настройка групп управляемых систем]], [[Сервис Ansible#Настройка транспорта ssh]] и [[Сервис Ansible#Использование модулей]] Ansible для тестирования связи с ними |
- | * [[Ceph - просто добавь узлов!#Шаг 2. Установка и настройка Ceph]] | + | - [[Сервис 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. Сценарий - авария узла]] | ||
- | ==== Дополнительные задания ==== | ||