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
создание_отказоустойчивых_linux_решений [2020/06/17 13:21]
val [Лабораторные работы]
создание_отказоустойчивых_linux_решений [2023/10/05 09:43] (current)
val [4.3 Балансировка нагрузки и отказоустойчивость при использовании нескольких ISP]
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 373: Line 410:
 **Сценарий:​** **Сценарий:​**
  
-  * Всем настроить NAT на два ISP ([[Сервисы Gateway и routing#​Использование iproute2 для управления выбором ISP]]), iptables-restore можно "​привязать"​ к интерфейсу eth0 +  * Настроить NAT на два ISP ([[Сервисы Gateway и routing#​Использование iproute2 для управления выбором ISP]]) 
-  * Преподавателю продемонстрировать ​PBR в "​ручном"​ режиме ([[Сервисы Gateway и routing#​NetFilter iproute2 (Linux)]])+  * PBR в "​ручном"​ режиме ([[Сервисы Gateway и routing#​NetFilter iproute2 (Linux)]])
  
  
 === 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_решений.1592389301.txt.gz · Last modified: 2020/06/17 13:21 by val