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

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

Моя установка, по сути, состоит из трех устройств, использующих 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"

0
задан 7 February 2019 в 22:01
1 ответ

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

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

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

.
0
ответ дан 5 December 2019 в 04:14

Теги

Похожие вопросы