Introdução:
Tenho a seguinte configuração de balanceamento de carga:
10.0.1.31 - lb
10.0.1.32 - node1 (tomcat + mysql)
10.0.1.33 - node2 (tomcat + mysql)
Estou usando keepalived, que está redirecionando pacotes para nós ativos - o endereço IP compartilhado é 10.0.1.35
é claro que lb precisou de configuração:
echo "net.ipv4.ip_nonlocal_bind = 1" >> /etc/sysctl.conf
node1 e node2 para manipular corretamente pacotes de entrada precisam ter 10.0.1.35 no lo
[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
Problema:
Devido ao fato de que temos 10.0.1.35 no lo se o tomcat locale estiver tentando se conectar ao mysql via lb - a conexão é estabelecida para a instância local.
Eu gostaria de ignorar lo para pacotes de saída
Teste
Do node1 que desabilitou o serviço mysql e 10.0.1.35 ip na interface lo estou tentando acessar o mysql no node2
telnet 10.0.1.35 3306
infelizmente o resultado é
[root@lb-node1 ~]# telnet 10.0.1.35 3306
Trying 10.0.1.35...
telnet: connect to address 10.0.1.35: Connection refused
é claro que se eu remover 10.0.1.35 da interface lo sou capaz de conectar a instância do mysql no node2
Solução?
Eu estava tentando adicionar rotas com métricas apropriadas, mas isso não ajuda: /
[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
Tags networking routing linux