Вступление:
У меня есть следующая конфигурация балансировки нагрузки: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