LINUX.ORG.RU
ФорумAdmin

keepalived и балансировка трафика

 


0

1

Всем привет!

Подскажите, в чем моя ошибка. Пытаюсь настроить keepalived c балансировкой трафика на 2 бэк сервера. VRRP поднялся, кластер собрался с этим всё норм. Но сам кластер не принимает вх подключения указанные в настройках virtual_server. Порты не открыты ни на одной из нод кластера.

Или для целей балансировки необходимо отдельно настраивать HAProxy?

/etc/keepalived/keepalived.conf

vrrp_instance FA_PROXY {
        state MASTER
        interface eth0
        lvs_sync_daemon_inteface eth0
        virtual_router_id 144
        priority 150
        advert_int 1
        authentication {
                auth_type PASS
                auth_pass 12345678
        }

        virtual_ipaddress {
                10.0.28.100/27
        }
}

virtual_server 10.0.28.100 9000 {
        delay_loop 6
        lb_algo rr
        lb_kind DR
        protocol TCP
        real_server 10.0.28.101 9000 {
                weight 1
                TCP_CHECK {
                        connect_timeout 3
                        connect_port 9000
                        #nb_get_retry 3
                        delay_before_retry 3
                }
        }
        real_server 10.0.28.102 9000 {
                weight 1
                TCP_CHECK {
                        connect_timeout 3
                        connect_port 9000
                        #nb_get_retry 3
                        delay_before_retry 3
                }
        }
}

virtual_server 10.0.28.100 9001 {
        delay_loop 6
        lb_algo rr
        lb_kind DR
        protocol TCP
        real_server 10.0.28.101 9001 {
                weight 1
                TCP_CHECK {
                        connect_timeout 3
                        connect_port 9001
                        #nb_get_retry 3
                        delay_before_retry 3
                }
        }
        real_server 10.0.28.102 9001 {
                weight 1
                TCP_CHECK {
                        connect_timeout 3
                        connect_port 9001
                        #nb_get_retry 3
                        delay_before_retry 3
                }
        }
}

Открытые порты

 ss -4tn state listening
Recv-Q                  Send-Q                                    Local Address:Port                                      Peer Address:Port
0                       128                                             0.0.0.0:10050                                          0.0.0.0:*
0                       2048                                          127.0.0.1:46085                                          0.0.0.0:*
0                       3000                                            0.0.0.0:5000                                           0.0.0.0:*
0                       128                                             0.0.0.0:22                                             0.0.0.0:*
0                       2048                                          127.0.0.1:30523                                          0.0.0.0:*


Ответ на: комментарий от vel

да, адрес на мастер ноде есть

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:50:56:87:ea:82 brd ff:ff:ff:ff:ff:ff
    inet 10.0.28.98/27 brd 10.0.28.127 scope global eth0
       valid_lft forever preferred_lft forever
    inet 10.0.28.100/27 scope global secondary eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::250:56ff:fe87:ea82/64 scope link
       valid_lft forever preferred_lft forever


Arasir
() автор топика
Ответ на: комментарий от Arasir

А роутер, который перед этим сервером, согласен с тем, что этот адрес на мастер-ноде есть? Банальный пинг ходит? А то сервер-то думать может что угодно, но пакеты приходят прежде на роутер.

haproxy надо настраивать, чтобы делать L7 балансировку (т.е. смотреть внутрь HTTP, к примеру). L4 (просто TCP-соединения) можно балансировать через keepalived.

vbr ★★★★
()
Последнее исправление: vbr (всего исправлений: 3)
Ответ на: комментарий от vel

По всей видимости ничем хорошим не кончилось.

Пожалуйста, посоветуй, а есть какие то рекомендуемые решения для решения этой задачи? Если просто keepalived-ом обойтись не удастся. Насколько я успел ознакомиться, keepalived + haproxy решают эту задачу?

Arasir
() автор топика
Ответ на: комментарий от Arasir

Там была хитрость - один из real_server распологался на машине с vrrp, а у тебя такого нет.

keepalived не открывает порты а прослушку, т.к. их обслуживает lvs. lvsadm в помощь.

Ну и если всё плохо, то iptables -t raw .... -j TRACE в помощь

vel ★★★★★
()
Ответ на: комментарий от Arasir

Я бы на твоём месте, с учетом своего опыта, сделал так:

cначала попытался настроить keepalived без vrrp

После успешного тестирования без vrrp, пытался бы добавить бы vrrp.

IMHO авторы keepalived очень стрнные люди.

LVS DR это очень хитрая вещь и без внимательной настройки оно не работает.

LVS «сервер» должен откликаться по arp на виртуальный IP. Т.е. он должен быть на сетевом интерфейсе в виде основного или дополнительного IP.

Пакет пришедший на «виртуальный» адрес будет переслан средствами lvs на этот же адрес, но уже на другой mac-адрес (реального сервера) и там его должны принять как локальный адрес, что достигается путём навешивания его на интерфейс lo с соответствующими настройками arp_filter и аrp_announce.

Все статьи которые смотрел достаточно старые и например неправильная настройка rp_filter вполне может нарушить работу этой схемы.

Возможно, tcpdump (на машине с keepalived) не поможет при отладке этого процесса.

vel ★★★★★
()
Ответ на: комментарий от vel

Спасибо!

Изначально делал по этим статьям:

https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/7/html/load_balancer_administration/s1-initial-setup-conf-dr-vsa#s1-initial-setup-conf-DR-VSA

https://www.altlinux.org/Keepalived

но не получилось с наскока.

Попробую таким путём пойти.

Arasir
() автор топика