Guides

VRRP

Passerelle redondante via un routeur virtuel partagé (bascule master/backup).

VRRP permet à deux appliances SiHA de partager une adresse IP virtuelle sur un segment, de sorte que les clients disposent toujours d’une passerelle joignable — même si un nœud tombe en panne. Une appliance est élue master et possède l’adresse virtuelle ; l’autre reste backup et prend le relais automatiquement si elle cesse d’entendre les annonces du master.

L’unité de configuration est un VirtualRouter : il déclare un VRID (identifiant de routeur virtuel), une liste d’adresses virtuelles et une priorité. Deux nœuds forment une paire redondante en déclarant chacun un VirtualRouter avec le même VRID et les mêmes adresses virtuelles sur le même segment L2, mais avec des priorités différentes — la priorité la plus élevée devient master.

Configuration

Paire unique, une seule adresse virtuelle

# On the primary node (higher priority → master)
type: VirtualRouters.vrrp.siha
metadata: { namespace: vrrp, id: ext-vr }
spec:
  interface: ext           # COSI id of a link.siha Interface
  vrId: 10                 # VRID 1–255, shared by both nodes
  priority: 200            # higher wins (default VRRP master priority is 100)
  addresses:
    - 10.0.0.1             # the floating gateway address clients use
---
# On the backup node (lower priority → backup)
type: VirtualRouters.vrrp.siha
metadata: { namespace: vrrp, id: ext-vr }
spec:
  interface: ext
  vrId: 10
  priority: 100
  addresses:
    - 10.0.0.1

Les deux ressources portent les mêmes id, vrId et addresses. Seule la priority diffère. Le nœud avec priority: 200 gagne l’élection et devient master ; le nœud avec priority: 100 devient backup.

Plusieurs adresses virtuelles

Vous pouvez déclarer plus d’une adresse flottante par VRID. Toutes les adresses de la liste doivent appartenir à la même famille d’adresses (toutes IPv4 ou toutes IPv6) :

spec:
  interface: ext
  vrId: 20
  priority: 200
  addresses:
    - 203.0.113.1
    - 203.0.113.2

Champs optionnels

spec:
  interface: ext
  vrId: 10
  priority: 200
  addresses: [10.0.0.1]
  intervalCs: 100     # advertisement interval in centiseconds (default: 100 = 1 s)
  preempt: true       # allow a higher-priority node to reclaim master (default: false)
  accept: true        # master accepts packets addressed to the virtual IP (default: false)

vrId doit être compris entre 1 et 255. priority doit être comprise entre 1 et 255 (255 est le propriétaire de l’adresse IP, validé séparément). Omettre intervalCs et preempt est sûr pour la plupart des déploiements.

Exigences L2

Les annonces VRRP sont des trames multicast (IPv4 : 224.0.0.18, IPv6 : ff02::12). Le segment entre les deux appliances doit les acheminer.

Sur un segment L2 virtualisé (un pont Linux en labo), le multicast VRRP simple passe généralement, mais un pont avec vlan_filtering=1 jette les trames marquées 802.1Q — y compris les annonces VRRP envoyées sur des sous-interfaces VLAN. Si vous faites tourner VRRP sur une interface VLAN, désactivez le filtrage VLAN sur le pont :

ip link set <bridge-name> type bridge vlan_filtering 0

Sur un fabric cloud, le multicast VRRP est généralement bloqué par les règles anti-usurpation des ports à moins que vous n’autorisiez explicitement 224.0.0.18 dans les paires d’adresses autorisées du port.

Exploitation

S="sihactl --sihaconfig ~/.siha/config --addr <node-ip>:6443"

$S get virtualrouter                 # list all virtual routers + live state
$S get virtualrouter ext-vr -o yaml  # full spec + status (state, swIfIndex, lastError)

La table par défaut montre les colonnes les plus utiles :

ColonneSourceNotes
interfacespecla ressource Interface à laquelle le VR est rattaché
vrIdspecVRID partagé par les deux nœuds
priorityspecla priorité de ce nœud
addressesspecla (les) adresse(s) flottante(s)
statestatusMASTER, BACKUP, INIT, ou INTERFACE_DOWN
errorstatusdernière erreur remontée par le vrrp_plugin de VPP, le cas échéant

Une paire active/veille saine montre un nœud en MASTER et l’autre en BACKUP. INIT signifie que le plugin est encore en train de négocier. INTERFACE_DOWN signifie que l’interface déclarée n’est pas opérationnellement up — remontez d’abord l’interface.

Pour vérifier les deux nœuds simultanément :

# On the primary:
$S get virtualrouter ext-vr -o yaml

# On the backup (separate --addr):
sihactl --sihaconfig ~/.siha/config --addr <backup-ip>:6443 get virtualrouter ext-vr -o yaml

Alias acceptés par sihactl get : virtualrouters, virtualrouter, vr.