![Keepalived + LVS não funciona em outros hosts, mas funciona em localhost no LB](https://rvso.com/image/632757/Keepalived%20%2B%20LVS%20n%C3%A3o%20funciona%20em%20outros%20hosts%2C%20mas%20funciona%20em%20localhost%20no%20LB.png)
Eu tenho um keepalived + LVS configurado, estou tentando começar a trabalhar
Clientes, LB e servidores reais estão todos na mesma sub-rede.
Configuração mantida viva:
global_defs {
notification_email {
[email protected]
}
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id ukld5p500x
}
vrrp_instance some_service {
state MASTER
interface em1
virtual_router_id 100
priority 100
virtual_ipaddress {
10.0.0.75
}
track_script {
chk_fail
}
}
virtual_server 10.0.0.75 58563 {
delay_loop 10
lb_algo rr
lb_kind DR
protocol TCP
real_server 10.0.0.70 58563 {
weight 1
TCP_CHECK {
connect_timeout 3
connect_port 58563
}
}
... more real_servers ...
}
Portanto, se eu definir lb_type como nat, posso conectar-me do próprio LB ao VIP/porta e as coisas passam, mas não de um host externo (cliente). Se eu definir lb_type como DR, nem o LB conectado a si mesmo nem um cliente externo poderão se conectar.
sys.net.ipv4.ip_forward está definido como 1 e há apenas um atm LB configurado.
Responder1
Não sei se você recebeu essa resposta desde que é tão antigo, mas DR (Roteamento Direto) é muito diferente do NAT. O NAT faz com que o balanceador de carga (LB) atue como um roteador, passando o pacote para o servidor real, e o servidor real o repassa ao LB para devolvê-lo ao cliente.
Com DR, o LB é apenas um pseudo-intermediário. Quando um pacote chega no VIP que o LB possui, ele decide para qual RS (servidor real) enviá-lo ereescreveo cabeçalho do pacote alterando o endereço MAC. Em seguida, ele passa o pacote de volta ao switch e o switch o entrega ao RS com o endereço MAC correspondente.
Você então terá que enganar seu RS para que aceite um pacote destinado à sua interface. Normalmente, você faz isso adicionando o VIP a um adaptador de loopback e atribuindo a ele uma máscara de rede 255.255.255.255. Seu daemon de serviço também precisará ser configurado para escutar neste VIP (no Apache você apenas adiciona uma linha Listen xxxx:80 adicional).
Para completar, você tem que lidar com o problema do ARP. Normalmente, adicionando
net.ipv4.conf.eth0.arp_announce = 2
net.ipv4.conf.eth0.arp_ignore = 1
para o seu sysctl.conf cuidará disso