Как заставить haproxy и keepalived работать на одном устройстве с брокером emqx

Я довольно новичок в этом, поэтому, пожалуйста, будьте терпеливы.

Моя установка по существу состоит из трех устройств, использующих mqtt, которые подключаются через двух брокеров, оба из которых работают с emqx. Оба emqx-брокера также должны быть настроены как распределители нагрузки haproxy, с поддержкой активности на случай, если один из них выйдет из строя.

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, ни заставлять работать так, как задумано. Когда у брокера 1 работает только haproxy (keepalived не запущен) и я подключаюсь напрямую к IP-адресу брокера 1 от клиента, кажется, что он только перенаправляет соединения на брокер 2. Похоже, он не может подключиться к брокеру 1 (и да, я проверил, что они оба работали. Если работает только брокер 2, клиент просто не подключается). После некоторых копаний я подумал, что это может быть из-за того, что haproxy и брокер используют один и тот же IP. Поэтому я попытался использовать виртуальный IP-адрес от keepalived. Но после этого я обнаружил, что не могу даже подключиться к виртуальному IP. Клиент, при попытке подключиться к нему, выдаст мне ошибку "OSError: [Errno 113] Нет маршрута к хосту".

что мне не хватает?

Редактировать: после записи логов с помощью tailf /var/log/syslog это результат

7 февраля 14:56:19 pi01 Keepalived_healthcheckers[10453]: открытие файла '/etc/keepalived/keepalived.conf'.

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 (12/25,2016)

Похоже, что на линии постоянно происходит сбой Использование "Отражатель netlink ядра LinkWatch"

1 ответ

Первая проблема: HAProxy настроен на прослушивание всех интерфейсов на одном и том же порту, используемом emqx. Это должно вызвать у вас проблемы.

Либо настройте конкретную NIC для прослушивателя keepalived/haproxy, если вы хотите, чтобы они использовали один и тот же порт, либо заставьте HAProxy и emqx прослушивать разные порты.

Как только у вас это заработает, пришло время взглянуть на Keepalived. Мой лучший совет там, чтобы хвост ваши журналы. Убедитесь, что идентификатор маршрутизатора идентичен между главным и резервным копиями, а резервная копия имеет более низкий приоритет, чем основной. Честно говоря, я не помню, чтобы вы работали с VRFP (протоколом, используемым keepalived), чтобы разрешить подмену Mac или подобное в коммутаторе.

Другие вопросы по тегам