Por defecto, Keepalived siempre funciona en modo multicast, es decir, un emisor (Master) envía un mensaje VRRP y son uno o varios los receptores (Backups/Slaves) que reciben el mismo. Como si fuera una conferencia, una comunicación de uno a varios.
En el caso de que nos encontremos en una infraestructura de red que no permita la comunicación Multicast, será necesario hacer el cambio a Unicast, de modo que la comunicación entre nodos sea de uno a uno y directa.
Importante indicar que Keepalived permite establecer el tráfico VRRP por Unicast a partir de la versión 1.2.8 (es vieja ya, así que no debería ser problema).
Ejemplo de comunicación VRRP por multicast:
15:45:20.455857 IP 192.168.33.183 > vrrp.mcast.net: VRRPv2, Advertisement, vrid 50, prio 100, authtype simple, intvl 3s, length 28 15:45:23.460853 IP 192.168.33.183 > vrrp.mcast.net: VRRPv2, Advertisement, vrid 50, prio 100, authtype simple, intvl 3s, length 28 15:45:26.465665 IP 192.168.33.183 > vrrp.mcast.net: VRRPv2, Advertisement, vrid 50, prio 100, authtype simple, intvl 3s, length 28 15:45:29.460852 IP 192.168.33.183 > vrrp.mcast.net: VRRPv2, Advertisement, vrid 50, prio 100, authtype simple, intvl 3s, length 28
Para pasar a Unicast, es necesario especificar en cada uno de los nodos de keepalived, quien es el PEER con el que se va a comunicar. En un entorno de dos nodos (Master/Backup), es sencillo, pues se comunicarán el único con el otro. Estableceremos la configuración dentro del bloque VRRP correspondiente
Nodo 1:
vrrp_instance foo {
interface eth0
state MASTER
virtual_router_id 10
priority 50
unicast_src_ip 10.0.0.200
unicast_peer {
10.0.0.100
}
virtual_ipaddress {
10.0.0.5 dev eth0
}
}
Nodo 2:
vrrp_instance foo {
interface eth0
state BACKUP
virtual_router_id 10
priority 100
unicast_src_ip 10.0.0.100
unicast_peer {
10.0.0.200
}
virtual_ipaddress {
10.0.0.5 dev eth0
}
}
Como veis, es tan sencillo como especificar:
- unicast_src_ip: IP/interfaz del nodo por la que se transimitirá el tráfico Unicast
- unicast_peer: IP del Peer
Tras reiniciar Keepalived en ambos nodos, si analizamos el tráfico de red veremos que ya no hay tráfico Multicast para VRRP:
# tcpdump -vvv -n -i eth0 host 224.0.0.18