L'objectif de cet article est de mettre en place un service de load balancer en primaire / secondaire sur deux datacenter. Les exemples ici se mettent en place chez OVH.

Préparer les vms

A faire sur toutes les vms :

  • configuration de la timezone
  • configuration du ntp
  • configuration du réseau local
  • configuration des noms d'hôtes sur le réseau local

Mise en place de la dernière version de HaProxy

Ici on applique simplement la doc officielle de HaProxy : https://haproxy.debian.net/#?distribution=Debian&release=bullseye&version=2.5

Mise en place du cluster

Sur les deux machines :

apt install pacemaker corosync pcs psmisc pacemaker-cli-utils

Configuration du fichier /etc/corosync/corosync.conf

totem {
    version: 2
    cluster_name: lbtest
    crypto_cipher: none
    crypto_hash: none
}

logging {
    fileline: off
    to_stderr: yes
    to_logfile: yes
    logfile: /var/log/corosync/corosync.log
    to_syslog: yes
    debug: off
    logger_subsys {
        subsys: QUORUM
        debug: off
    }
}

quorum {
    provider: corosync_votequorum
}

nodelist {

    node {
        name: lb01-gra
        nodeid: 1
        ring0_addr: 192.168.85.1
    }

    node {
        name: lb02-sbg
        nodeid: 2
        ring0_addr: 192.168.85.2
    }

}

Redémarrage des services :

systemctl restart corosync
systemctl restart pacemaker

Définition du mot de passe de l'utilisateur hacluster :

passwd hacluster

Ajout des noeuds dans le cluster (sur une seule machine) :

pcs cluster auth -u hacluster -p azertyuiop

Pour un cluster à deux noeuds :

pcs property set stonith-enabled=false
pcs property set no-quorum-policy=ignore

Vérifications :

pcs status

Le cluster est prêt à accepter les ressources.

Créer les ressources

A faire depuis une seule machine

VIP privée

pcs resource create VIP1 ocf:heartbeat:IPaddr2 ip=192.168.85.10 cidr_netmask=32 op monitor interval=30s

VIP FO

pcs resource create VIP2 ocf:heartbeat:IPaddr2 ip="178.33.106.238" cidr_netmask="32" broadcast="178.33.106.238" nic="ens3" 

Regrouper les 2 Ips ensemble :

pcs constraint colocation add VIP1 with VIP2 INFINITY

Déplacer une ressource :

pcs resource move VIP2 lb01-gra

Gérer haproxy en master / slave

Supprimer la gestion de haproxy par systemd

systemctl stop haproxy
systemctl disable haproxy

Pensez à reconfigurer haproxy pour le binder sur l'ipfo.

Créer la ressource haproxy :

pcs resource create haproxy systemd:haproxy

La regrouper avec la VIP2 :

pcs constraint colocation add haproxy with VIP2 INFINITY

Ne pas oublier en cas de besoins :

pcs resource cleanup haproxy

A ce point les services VIP1, VIP2 et haproxy sont liés et si le premier serveur tombe les services sont redémarrés sur le second serveur.

Il me manque juste maintenant un script pour renvoyer l'info à l'api OVH pour basculer l'ip sur le second serveur côté OVH.