Voilà un résumé de ce que j'en ai compris.

Routeur A (192.168.0.11) et Routeur B (192.168.0.12) sont connectés au même LAN. Ils ont passerelles de sortie du LAN l'un en secours de l'autre. Les machines connectées au LAN doivent utiliser une adresse de passerelle de sortie (et une seule). Celle-ci sera donc une interface virtuelle (VIP) (192.168.0.1) qui se promènera sur les deux passerelles.

CARP crée une interface réseau "virtuelle", avec son adresse MAC virtuelle sur chacun des routeurs

Le protocole CARP s'appuie sur des échanges multicast IP sécurisés entre les machines partageant la VIP, dans mon exemple, routeurs A et B.

CARP peut adopter deux fonctionnements :

  1. CARP élit un MASTER parmi les noeuds. Les autres sont des BACKUP prêts à devenir MASTER en cas de problème sur le serveur MASTER. Il s'agit du fonctionnement standard.
  2. CARP répartit la charge entre les noeuds grâce à la fonction arpbalance (je n'ai pas encore testé).

Concrètement le paramétrage est assez simple. Reprenons mon exemple avec Routeur A et Routeur B et considérons que leur interface connectée au LAN sont fxp0.

routeurA #sysctl net.inet.carp.allow=1
routeurA #sysctl net.inet.ip.forwarding=1
routeurA #ifconfig carp0 create
routeurA #ifconfig carp0 192.168.1.254 255.255.255.128 192.168.1.255 \
advbase 1 advskew 1 carpdev fxp0 vhid 1 pass 'secret-partage'
routeurB #sysctl net.inet.carp.allow=1
routeurB #sysctl net.inet.ip.forwarding=1
routeurB #ifconfig carp0 create
routeurB #ifconfig carp0 192.168.1.254 255.255.255.128 192.168.1.255 \
advbase 1 advskew 1 carpdev fxp0 vhid 1 pass 'secret-partage'

Cette configuration qu'on pourrait qualifier de "Regular/Backup" ne favorise aucun routeur lors des élections (aucune préférence n'est définie pour le MASTER). De plus, après une bascule, et même si l'ancien MASTER redevient opérationnel, la bascule arrière n'aura pas lieue tant que le nouveau MASTER ne sera pas défaillant.

On peut favoriser un noeud lors de l'élection du master (raaaah de la fraude électorale !) simplement en augmentant la valeur du paramètre advskew des backup.

On peut forcer une ré-élection lors de l'arrivée d'un noeud, en particulier pour forcer le retour sur le serveur préféré. Pour cela, il faut lancer la commande sysctl net.inet.carp.preempt=1 sur le(s) noeud(s) dont le retour doit provoquer la réelection. Cette même option semble utilisée pour les routeurs disposant de plusieurs VIP : si l'une des VIP n'est plus master, toutes les autres interfaces carp passent également à l'état backup. Mais je ne l'ai pas vérifié.


Sources :