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