Я хочу реализовать «плавающий» IP между двумя узлами, используя pcs+corosync+pacemaker. Я прочитал десятки руководств и документации ClusterLabs, но, похоже, я сделал что-то не так. Помоги мне, пожалуйста.
Я хочу следующую вещь - плавающий IP и его маршрут SRC запускаются на узле1. Если узел 1 теряет сетевое подключение к узлу 2, узел 1 должен немедленно удалить плавающий IP-адрес и восстановить маршрут по умолчанию.
node2 поднимает эти вещи. И наоборот, когда node1 возвращается. Статические IP-адреса должны быть целыми в любом случае.
узел 1 статический 192.168.80.21/24
node2 статический 192.168.80.22/24
плавающий IP 192.168.80.23/24
шлюз 192.168.80.1/24
Чистый 64-битный Debian 10 с последними обновлениями, стандартными кардиостимуляторами, без стороннего или пользовательского программного обеспечения
/etc/hosts на обоих узлах:
127.0.0.1 локальный хост.локальный домен локальный хост
192.168.80.21 узел1
192.168.80.22 узел2
# Следующие строки желательны для хостов с поддержкой IPv6
::1 локальный хост ip6-localhost ip6-loopback
ff02::1 ip6-все узлы
ff02::2 ip6-все маршрутизаторы
# ip р
по умолчанию через 192.168.80.1 dev ens192
10.10.10.2 dev gre_node2 ссылка на область ядра proto src 10.10.10.1 (на этот раз, я думаю, не имеет значения)
192.168.80.0/24 dev ens192 ссылка на объем
Служба pcsd запущена, corosync и кардиостимулятор включены в systemD, но в это время остановлены
оба узла пингуются друг к другу, сеть и брандмауэр работают правильно
На node1 делается следующее:
# # шт статус
Ошибка: кластер в данный момент не работает на этом узле
# шт кластер уничтожить
Отключение служб кардиостимулятора/коросинхронизации...
Уничтожение всех оставшихся служб...
Удаление всех файлов конфигурации кластера...
# pcs host auth node1 node2
Имя пользователя: хакластер
Пароль:
node2: Авторизованный
node1: Авторизованный
# Настройка кластера ПК my_cluster node1 node2 --force
Для хоста «node1» не указаны адреса, используется «node1»
Не указаны адреса для хоста «node2», используется «node2»
Уничтожение кластера на хостах: 'node1', 'node2'...
node1: успешно уничтоженный кластер
node2: успешно уничтоженный кластер
Запрос на удаление «настроек pcsd» с «node1», «node2»
node1: успешное удаление файла «Настройки pcsd»
node2: успешное удаление файла «Настройки pcsd»
Отправка «corosync authkey», «pacemaker authkey» на «node1», «node2»
node2: успешное распространение файла «corosync authkey»
node2: успешное распространение файла «ключ авторизации кардиостимулятора»
node1: успешное распространение файла «corosync authkey»
node1: успешное распространение файла «ключ авторизации кардиостимулятора»
Синхронизация SSL-сертификатов pcsd на узлах 'node1', 'node2'...
node1: успех
node2: успех
Отправка «corosync.conf» на «node1», «node2»
node1: успешное распространение файла «corosync.conf»
node2: успешное распространение файла «corosync.conf»
Кластер успешно настроен.
# pcs кластер start node1 node2 - OK
node2: Запуск кластера...
node1: Запуск кластера...
# набор свойств pcs stonith-enabled=false - OK
# набор свойств pcs no-quorum-policy=ignore - OK
# статус ПК (на обоих узлах):
Имя кластера: my_cluster
Стек: коросинк
Текущий контроллер домена: node1 (версия 2.0.1-9e909a5bdd) — раздел с кворумом
Последнее обновление: вторник, 15 марта, 13:15:03 2022 г.
Последнее изменение: вторник, 15 марта, 13:15:00 2022, от root через cibadmin на узле 1.
настроено 2 узла
0 ресурсов настроено
В сети: [ узел1 узел2 ]
Нет ресурсов
Статус демона:
коросинк: активен/отключен
кардиостимулятор: активен/отключен
pcsd: активен/включен
А теперь с чего начинаются мои заморочки — добавляем плавающий IP и маршрутизируем ресурсы SRC IP в кластер:
# ресурс pcs create virtip ocf:heartbeat:IPaddr2 ip=192.168.80.23 cidr_netmask=24 op monitor interval=30s
# ресурс pcs create virtsrc ocf:heartbeat:IPsrcaddr ipaddress=192.168.80.23 cidr_netmask=24 op monitor interval=30
# колокация ограничения количества компьютеров добавить virtip с помощью virtsrc
# порядок ограничения количества штук virtip, затем virtsrc
Добавление virtip virtsrc (вид: обязательно) (варианты: первое действие=начало, затем действие=начало)
# шт статус
Имя кластера: my_cluster
Стек: коросинк
Текущий контроллер домена: node1 (версия 2.0.1-9e909a5bdd) — раздел с кворумом
Последнее обновление: вторник, 15 марта, 13:17:34 2022 г.
Последнее изменение: вторник, 15 марта, 13:17:07 2022, от root через cibadmin на узле 1.
настроено 2 узла
настроено 2 ресурса
В сети: [ узел1 узел2 ]
Полный список ресурсов:
virtip (ocf::heartbeat:IPaddr2): запущен node1
virtsrc (ocf::heartbeat:IPsrcaddr): запущен node1
Неудачные действия с ресурсами:
* virtsrc_start_0 на node2 'не установлен' (5): call=10, status=complete, exitreason='Мы не обслуживаем [192.168.80.23], поэтому не можем сделать его предпочтительным исходным адресом',
last-rc-change='Вт, 15 марта, 13:16:47 2022', queued=0ms, exec=21ms
Статус демона:
коросинк: активен/отключен
кардиостимулятор: активен/отключен
pcsd: активен/включен
node1:~# ip r
по умолчанию через 192.168.80.1 dev ens192 src 192.168.80.23 onlink
10.10.10.2 dev gre_node2 прото-ссылка на область ядра src 10.10.10.1
192.168.80.0/24 dev ens192 ссылка на объем src 192.168.80.23
node2:~# ip r
по умолчанию через 192.168.80.1 dev ens192 onlink
10.10.10.1 dev gre_node1 прото-ссылка на область ядра src 10.10.10.2
192.168.80.0/24 dev ens192 прото-ссылка на область ядра src 192.168.80.22
node2:~# пинг 192.168.80.23
PING 192.168.80.23 (192.168.80.23) 56 (84) байт данных.
64 байта от 192.168.80.23: icmp_seq=1 ttl=64 время=0,154 мс
^ С
Вроде все в порядке, но теперь давайте эмулируем сетевой сбой и происходит хаос:
node1:~# ip link set ens192 down; спать 60; ip link set ens192 вверх
root@node1:~# ip r
10.10.10.2 dev gre_node2 прото-ссылка на область ядра src 10.10.10.1
192.168.80.0/24 dev ens192 прото-ссылка на область ядра src 192.168.80.21
root@node1: статус ~# ПК
Имя кластера: my_cluster
Стек: коросинк
Текущий контроллер домена: node1 (версия 2.0.1-9e909a5bdd) — раздел с кворумом
Последнее обновление: вторник, 15 марта, 13:32:56 2022 г.
Последнее изменение: вторник, 15 марта, 13:17:07 2022, от root через cibadmin на узле 1.
настроено 2 узла
настроено 2 ресурса
В сети: [ узел1 узел2 ]
Полный список ресурсов:
virtip (ocf::heartbeat:IPaddr2): запущен node1
virtsrc (ocf::heartbeat:IPsrcaddr): FAILED node1 (заблокирован)
Неудачные действия с ресурсами:
* virtsrc_start_0 на node2 'не установлен' (5): call=10, status=complete, exitreason='Мы не обслуживаем [192.168.80.23], поэтому не можем сделать его предпочтительным исходным адресом',
last-rc-change='Вт, 15 марта, 13:16:47 2022', queued=0ms, exec=21ms
* virtsrc_stop_0 на node1 'неизвестная ошибка' (1): call=15, status=complete, exitreason='маршрут по умолчанию не существует',
last-rc-change='Вт, 15 марта, 13:31:26 2022', в очереди=0 мс, exec=24 мс
* virtip_monitor_30000 на node1 'неизвестная ошибка' (1): call=7, status=complete, exitreason='[findif] failed',
last-rc-change='Вт, 15 марта, 13:30:36 2022', queued=0ms, exec=0ms
Статус демона:
коросинк: активен/отключен
кардиостимулятор: активен/отключен
pcsd: активен/включен
@node2:~# ip r
10.10.10.1 dev gre_node1 прото-ссылка на область ядра src 10.10.10.2
192.168.80.0/24 dev ens192 прото-ссылка на область ядра src 192.168.80.22
root@node2: статус ~# ПК
Имя кластера: my_cluster
Стек: коросинк
Текущий контроллер домена: node1 (версия 2.0.1-9e909a5bdd) — раздел с кворумом
Последнее обновление: вторник, 15 марта, 13:34:03 2022 г.
Последнее изменение: вторник, 15 марта, 13:17:07 2022, от root через cibadmin на узле 1.
настроено 2 узла
настроено 2 ресурса
В сети: [узел1 узел2]
Полный список ресурсов:
virtip (ocf::heartbeat:IPaddr2): запущен node1
virtsrc (ocf::heartbeat:IPsrcaddr): FAILED node1 (заблокирован)
Неудачные действия с ресурсами:
* virtsrc_start_0 на node2 'не установлен' (5): call=10, status=complete, exitreason='Мы не обслуживаем [192.168.80.23], поэтому не можем сделать его предпочтительным исходным адресом',
last-rc-change='Вт, 15 марта, 13:16:47 2022', queued=0ms, exec=21ms
* virtsrc_stop_0 на node1 'неизвестная ошибка' (1): call=15, status=complete, exitreason='маршрут по умолчанию не существует',
last-rc-change='Вт, 15 марта, 13:31:26 2022', в очереди=0 мс, exec=24 мс
* virtip_monitor_30000 на node1 'неизвестная ошибка' (1): call=7, status=complete, exitreason='[findif] failed',
last-rc-change='Вт, 15 марта, 13:30:36 2022', queued=0ms, exec=0ms
Статус демона:
коросинк: активен/отключен
кардиостимулятор: активен/отключен
pcsd: активен/включен
Что не так? Как заставить его работать правильно?