1

Вступление:

У меня есть следующая конфигурация балансировки нагрузки:10.0.1.31 - фунт
10.0.1.32 - узел1 (tomcat + mysql)10.0.1.33 - узел2 (tomcat + mysql)

Я использую keepalived, который перенаправляет пакеты на активные узлы - общий IP-адрес 10.0.1.35

Конечно, lb требует конфигурации:

echo "net.ipv4.ip_nonlocal_bind = 1" >> /etc/sysctl.conf

узел1 и узел2 для правильной обработки входящих пакетов должны иметь 10.0.1.35

[root@lb-node1 ~]# ip addr list dev lo
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
   inet 127.0.0.1/8 scope host lo
   inet 10.0.1.35/32 scope global lo
   inet6 ::1/128 scope host 
   valid_lft forever preferred_lft forever

Проблема:

Из-за того, что у нас есть 10.0.1.35 на lo, если локаль tomcat пытается соединиться с mysql через lb - соединение установлено с локальным экземпляром.

Я бы хотел скипп ло для исходящих пакетов

Тестовое задание

С узла 1, который отключил службу mysql и 10.0.1.35 ip на интерфейсе lo, я пытаюсь подключиться к mysql на узле 2

телнет 10.0.1.35 3306

к сожалению, результат

   [root@lb-node1 ~]# telnet 10.0.1.35 3306
   Trying 10.0.1.35...
   telnet: connect to address 10.0.1.35: Connection refused 

конечно, если я удаляю 10.0.1.35 IP из интерфейса lo, я могу подключиться к экземпляру mysql на node2

Решение ?

Я пытался добавить маршруты с соответствующими метриками, но это не помогает:/

    [root@lb-node1 ~]# route -n
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    10.0.1.0        0.0.0.0         255.255.255.255 UH    0      0        0 eth0
    10.0.1.0        0.0.0.0         255.255.255.255 UH    100    0        0 lo
    169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0
    0.0.0.0         10.0.1.1        0.0.0.0         UG    0      0        0 eth0

0