User Tools

Site Tools


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

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Last revision Both sides next revision
создание_отказоустойчивых_linux_решений [2020/06/17 13:21]
val [Лабораторные работы]
создание_отказоустойчивых_linux_решений [2023/10/04 15:10]
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.Импорт VM Linux ===+=== 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/​ 
 + 
 +!!! 6 - это номер курса, вместо X укажите Ваш номер стенда, если не знаете его, спросите преподавателя !!! 
 + 
 +./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>​
-node1ifconfig eth2 inet 10.5.7.100+X/​24+ubuntush net_gate.sh
  
-nodeNcat /​etc/​hostname +ubuntuinit 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.7.254 ​             proxy +<​code>​ 
-</​code>​<​code>​ +gatesh conf/dhcp.sh 
-nodeNcat /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 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 79: 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.7.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.Тестирование сети ===
-=== 1.Тестирование ​настроек ​сети ===+
 <​code>​ <​code>​
-nodeN# ping proxy+node1# ping ya.ru
  
-nodeN# apt update+windows> ping 1.1.1.1
 </​code>​ </​code>​
  
Line 122: 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 на основании адреса клиента]])
-  * Настройка безпарольного доступа пользователя root с node1 на node2 ([[Сервис SSH#​Аутентификация с использованием ключей ssh]])+  * Настройка беспарольного доступа пользователя root с node1 на node2 ([[Сервис SSH#​Аутентификация с использованием ключей ssh]])
  
 <​code>​ <​code>​
Line 148: Line 168:
  
 <​code>​ <​code>​
-node1# scp /etc/hosts node2:/etc/+node1# ​ 
 +scp /etc/hosts node2:/etc
 +scp /​etc/​hostname node2:/​etc/​ 
 +scp /​etc/​network/​interfaces node2:/​etc/​network/
  
-node1# ​scp /​etc/​resolv.conf ​node2:/etc/+node1# ​ssh node2 route add default gw 192.168.X.254
  
-node1# ​scp /​etc/​sysctl.conf ​node2:/etc/+node1# ​ssh node2 apt update 
 +node1# ssh node2 apt install keepalived
  
-node1# ​scp .bashrc ​node2:+scp /​etc/​keepalived/​keepalived.conf node2:/​etc/​keepalived/​keepalived.conf 
 +scp /​usr/​local/​bin/​vrrp.sh node2:/​usr/​local/​bin/​vrrp.sh 
 +</​code>​
  
-node1# scp /​etc/​hostname ​node2:/etc/+  * Правим файлы конфигурации на node2, перезапускаем,​ тестируем сеть
  
-node1# ​scp /​etc/​network/​interfaces node2:/etc/network/+<​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 MASTER 
 +    state BACKUP 
 +... 
 +</​code><​code>​ 
 +node2# init 6
 </​code>​ </​code>​
  
-  * Павим файлы конфигурации ​на node2, перезапускаем, тестируем сеть+=== 2.3 Использование BASH алиасов и функций для ​удобства === 
   * [[Настройка командных интерпретаторов#​bash]] алиасы и функции   * [[Настройка командных интерпретаторов#​bash]] алиасы и функции
  
-=== 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.Синхронизация с использованием пакета CSYNC2 ===
  
 **Сценарий:​** настроить DNS на node1, на node2 конфигурация появится автоматически ​ **Сценарий:​** настроить DNS на node1, на node2 конфигурация появится автоматически ​
  
-  * [[Финальная настройка DNS сервера]] ​+  * [[Финальная настройка DNS сервера]] ​(как это было на "​ЛИН СЕРВ"​)
   * Устанавливаем и ЗАПУСКАЕМ на двух узлаx, настраиваем на node1   * Устанавливаем и ЗАПУСКАЕМ на двух узлаx, настраиваем на node1
 <​code>​ <​code>​
Line 181: Line 239:
 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# named-checkconf -z
 +
 node1# ssn2 apt install bind9 node1# ssn2 apt install bind9
 </​code>​ </​code>​
Line 193: Line 256:
 <​code>​ <​code>​
 node1# csync2 -xv node1# csync2 -xv
- 
-nodeN# host ns 
 </​code>​ </​code>​
-=== 2.С использованием пакета Ansible ===+<​code>​ 
 +node1# host ns node1 
 +node1# 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.Синхронизация с использованием пакета Ansible ===
  
 **Сценарий:​** на обоих узлах создаем пользователя user1 с uid=10001 **Сценарий:​** на обоих узлах создаем пользователя user1 с uid=10001
Line 216: Line 291:
 ==== Теория ==== ==== Теория ====
  
-  * [[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 299:
   * [[Сервис DHCP#​Установка]] cервиса DHCP   * [[Сервис DHCP#​Установка]] cервиса DHCP
 <​code>​ <​code>​
-nodeN# sh conf/​dhcp.sh+node2# sh conf/​dhcp.sh
 </​code>​ </​code>​
  
Line 233: Line 306:
   * [[Сервис 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 333:
 ==== Теория ==== ==== Теория ====
  
 +  * [[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 342:
  
   * [[Протокол 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 363:
 </​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 385:
         };         };
 ... ...
 +</​code><​code>​
 +node1# csync2 -xv
 </​code>​ </​code>​
  
-=== 4.3.3 Подключение шлюзов и тестирование ISP2 ===+=== 4.3.3 Тестирование ISP2 ===
  
 <​code>​ <​code>​
-nodeNcat /​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+
  
-masternodeip a | grep 172.16.2 +node1ping 172.16.2.254 
-</​code>​ + 
-  * [[Настройка сети в Linux]] +node1# ip route del default 
-<​code>​ +node1ip route add default via 172.16.2.254
-masternodeping 172.16.2.254+
  
-masternodeip route add default via 172.16.2.254+node1ping ya.ru
  
-masternodeping ya.ru+node1tracepath ​ya.ru
  
-masternode# ip route delete ​default+node1# ip route del default
 </​code>​ </​code>​
  
Line 378: Line 415:
  
 === 4.3.5 Автоматизация балансировки/​отказоустойчивости выбора ISP === === 4.3.5 Автоматизация балансировки/​отказоустойчивости выбора ISP ===
 +
 +  * [[Сервис Keepalived]] - добавляем таблицы 101 и 102
  
 <​code>​ <​code>​
-nodeNcat /​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 398: Line 429:
 case $1 in case $1 in
         ISP1)         ISP1)
-                ip rule del from 192.168.X/24 to 192.168.X/24 table main+                ip rule del from 192.168/16 to 192.168/16 table main
                 while ip rule del from any table 101;do true;done                 while ip rule del from any table 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.X/24 to 192.168.X/24 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 409: Line 443:
         ;;         ;;
         ISP2)         ISP2)
-                ip rule del from 192.168.X/24 to 192.168.X/24 table main+                ip rule del from 192.168/16 to 192.168/16 table main
                 while ip rule del from any table 101;do true;done                 while ip rule del from any table 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.X/24 to 192.168.X/24 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 420: Line 457:
         ;;         ;;
         ISP1ISP2)         ISP1ISP2)
-                ip rule del from 192.168.X/24 to 192.168.X/24 table main+                ip rule del from 192.168/16 to 192.168/16 table main
                 while ip rule del from any table 101;do true;done                 while ip rule del from any table 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.X/24 to 192.168.X/24 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 476:
 nodeN# chmod +x set_isp.sh nodeN# chmod +x set_isp.sh
  
-masternodegrep carp /var/log/syslog+node1# /root/set_isp.sh ISP1ISP2
  
-masternode/​root/​set_isp.sh ISP1ISP2+node1ip rule show
  
-backupnodetraceroute -n ya.ru+node2tracepath ​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 488:
 #!/bin/sh #!/bin/sh
  
-export PATH=/​bin:/​sbin:/​usr/​bin:/​usr/​sbin:​$PATH+ip a | grep -q '​192.168.*254'​ || exit 0
  
-ifconfig | grep -q 192.168.X.254 || exit 0 +TESTIP=1.1.1.1
- +
-route delete default+
  
 ISP=''​ ISP=''​
  
-route add default gw 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
- +
-route delete default +
- +
-route add default gw 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
  
-route delete default+ip route del $TESTIP
  
 echo $ISP echo $ISP
-#exit 0+# exit 0
  
 touch /​tmp/​current_isp touch /​tmp/​current_isp
Line 476: Line 513:
  
 /​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 526:
 </​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 534:
   - Для какой операционной системы впервые появилась реализация протокола 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 552:
 ==== Теория ==== ==== Теория ====
  
-  * [[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 578:
 </​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 588:
   * На обоих узлах создаем пользователя 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.corpX.un/~user1
 </​code>​ </​code>​
  
Line 572: Line 618:
 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 625:
   * [[Пакет 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 645:
 </​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 667:
  
   * [[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 674:
 **Сценарий**:​ Создаем отказоустойчивый корпоративный файловый сервер. Первый узел кластера должен использоваться сервером по умолчанию. **Сценарий**:​ Создаем отказоустойчивый корпоративный файловый сервер. Первый узел кластера должен использоваться сервером по умолчанию.
  
-==== 6.1 Синхронизация файловых ​систем =====+==== 6.1 Развертывание распределенного RAID 1 =====
  
-  * Подключаем к обоим узлам по дополнительному диску ​(2Gb)+  * Подключаем к обоим узлам по дополнительному диску
   * [[Решение DRBD]]   * [[Решение DRBD]]
  
Line 629: Line 682:
  
   * 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 694:
 </​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 705:
  
 <​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 728:
  
 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 743:
  
 <​code>​ <​code>​
-master# cat /proc/drbd+slavewatch 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 778:
 ==== 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 784:
 </​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 796:
 === 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 808:
  
         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 822:
 </​code><​code>​ </​code><​code>​
 ... ...
-INTERFACES="​br0"​+INTERFACESv4="​br0"​
 </​code><​code>​ </​code><​code>​
 nodeN# init 0 nodeN# init 0
Line 786: Line 831:
  
 <​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 801: Line 844:
   * [[Технология LXC#​Установка и настройка lxc]] на обоих узлах   * [[Технология LXC#​Установка и настройка lxc]] на обоих узлах
   * Готовимся все, относящееся к виртуальным системам,​ хранить на зеркалируемом разделе   * Готовимся все, относящееся к виртуальным системам,​ хранить на зеркалируемом разделе
 +  * [[https://​www.claudiokuenzler.com/​blog/​1206/​debian-bullseye-11.3-lxc-container-static-ip-config-not-working|LXC containers with static IP in config not working anymore after Debian Bullseye 11.3 update]]
  
 <​code>​ <​code>​
Line 808: Line 852:
 </​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 через [[Переменные окружения]] и [[Сервис Ansible#​Использование модулей]] Ansible 
 + 
 +  ​* Настраиваем 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 912:
 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 950:
  
 <​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]]) 
создание_отказоустойчивых_linux_решений.txt · Last modified: 2023/10/05 09:43 by val