Назад | Перейти на главную страницу

Как заставить 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 или 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'.

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. Мой лучший совет - следить за своими журналами. Убедитесь, что идентификаторы маршрутизатора идентичны между главным и резервным маршрутизаторами и что резервная копия имеет более низкий приоритет, чем мастер. Я, честно говоря, не помню, нужно ли вам разрешить спуфинг Mac или что-то подобное в переключателе для работы VRRP (протокола, используемого keepalived).