Я новичок в этом, поэтому, пожалуйста, наберитесь терпения.
Моя установка, по сути, состоит из трех устройств, использующих mqtt, соединяющихся через двух брокеров, оба из которых работают с emqx. Оба брокера emqx также должны быть настроены как балансировщики нагрузки haproxy с поддержкой keepalived в случае отказа одного из них.
IP-адрес брокера 1 - 192.168.1.201
IP-адрес брокера 2 - 192.168.1.202
виртуальный IP-адрес keepalived. 192.168.1.200
haproxy.cfg
frontend emqx_tcp
bind *:1883
option tcplog
mode tcp
default_backend emqx_tcp_back
backend emqx_tcp_back
balance roundrobin
server emqx_node_1 192.168.1.201:1883 check
server emqx_node_2 192.168.1.202:1883 check
keepalived.conf
global_defs {
lvs_id haproxy01
}
vrrp_sync_group SyncGroup01 {
group {
VI_1
}
}
vrrp_script chkhaproxy {
script "/usr/bin/killall -0 haproxy"
script "/usr/sbin/service haproxy start"
interval 9
timeout 3
weight 20
rise 2
fall 4
}
vrrp_instance VI_1 {
interface eth0 # interface to monitor
state MASTER
virtual_router_id 51 # Assign one ID for this route
priority 101 # 101 on MASTER, 100 on BACKUP
advert_int 5
authentication {
auth_type PASS
auth_pass password
}
virtual_ipaddress {
192.168.1.200 # the virtual IP
}
track_script {
chkhaproxy
}
}
Проблема в том, что я не могу заставить haproxy или keepalived работать должным образом. Когда у меня брокер 1 работает только с haproxy (keepalived не работает) и подключается напрямую к IP-адресу брокера 1 от клиента, кажется, что он пересылает соединения только брокеру 2. Кажется, он не может подключиться к брокеру 1. (и да, я проверил, работают ли они оба. Если работает только брокер 2, клиент просто не подключается). Покопавшись, я подумал, что это может быть потому, что haproxy и брокер используют один и тот же IP-адрес. Итак, я попытался использовать виртуальный IP-адрес от keepalived. Но попробовав это, я обнаружил, что не могу даже подключиться к виртуальному IP. Клиент при попытке подключиться к нему выдавал мне ошибку «OSError: [Errno 113] No route to host».
Что мне не хватает?
Изменить: после обработки журналов с помощью tailf / var / log / syslog это результат
7 февраля 14:56:19 pi01 Keepalived_healthcheckers [10453]: Открытие файла '/etc/keepalived/keepalived.conf'.
Feb 7 14:56:19 pi01 Keepalived_healthcheckers [10453]: Неизвестное ключевое слово 'lvs_id'
7 февраля, 14:56:19 pi01 Keepalived_vrrp [10454]: интерфейс по умолчанию eth0 не существует и интерфейс не указан. Пропуск статического адреса 192.168.1.200.
7 февраля, 14:56:19 pi01 Keepalived_vrrp [10454]: невозможно загрузить ipset библиотека - libipset.so.3: невозможно открыть файл общих объектов: такого файла нет или каталог
7 февраля, 14:56:19 pi01 Keepalived_vrrp [10454]: VRRP_Instance (VI_1) Неизвестный интерфейс! 7 февраля 14:56:19 pi01 Keepalived_healthcheckers [10453]: Использование netlink ядра LinkWatch отражатель ...
7 февраля, 14:56:20 pi01 Keepalived_vrrp [10454]: Остановлен
7 февраля 14:56:20 pi01 Keepalived [10450]: Keepalived_vrrp завершился с постоянная ошибка CONFIG. Завершение
7 февраля 14:56:20 pi01 Keepalived [10450]: Остановка
7 февраля 14:56:20 pi01 Keepalived_healthcheckers [10453]: Остановлено
7 февраля 14:56:25 pi01 Keepalived [10450] : Остановлен Keepalived v1.3.2 (25/12/2016)
Кажется, что эта строка постоянно выходит из строя. Использование "отражателя netlink ядра LinkWatch"
Первая проблема: HAProxy настроен на прослушивание всех интерфейсов на одном порту, используемом emqx. Это должно вызвать проблемы.
Либо настройте конкретную сетевую карту для прослушивателя keepalived/haproxy, если хотите, чтобы они использовали один и тот же порт, либо заставьте HAProxy и emqx прослушивать на разных портах.
Как только это сработает, настало время посмотреть на Keepalived. Мой лучший совет - следить за вашими логами. Убедитесь, что ID маршрутизатора идентичен между ведущим и резервной копией, и что резервная копия получает более низкий приоритет, чем ведущий. Честно говоря, я не помню с самого начала, нужно ли разрешать mac-спуфинг или что-то подобное в коммутаторе, чтобы VRRP (протокол, используемый keepalived) работал.
.