P18 - Haute disponibilité : stockage, bases de données, réseau
Objectif
Supprimer les SPOF (Single Point Of Failure, point unique de défaillance) d’une infrastructure : stockage partagé (NAS / SAN), adresse IP flottante (keepalived), base de données en cluster (Galera), réplication de disque (DRBD), agrégation de cartes réseau (bonding).
Source
Fiche rédigée à partir de cours de lidstah (cours « Maintenance opérationnelle et haute disponibilité »). Le RAID est déjà dans ST01 - RAID, keepalived/VRRP dans R07 - Redondance des passerelles (HSRP, CARP, Keepalived), HAProxy dans SV03 - HAProxy (reverse proxy et répartition de charge).
1. La démarche
flowchart TB U["Utilisateurs"] --> VIP["IP flottante 192.168.1.70<br/>(keepalived / VRRP)"] VIP --> LB1["HAProxy 1 (MASTER)"] VIP -.->|"si LB1 tombe"| LB2["HAProxy 2 (BACKUP)"] LB1 & LB2 --> W1["Web 1"] & W2["Web 2"] W1 & W2 --> DB1["MariaDB 1"] <-->|"Galera"| DB2["MariaDB 2"] W1 & W2 --> NAS["Stockage partagé<br/>NFS / iSCSI"]
À chaque étage on se demande : « si cette machine tombe, est-ce que le service tombe ? ». Si oui, on la double.
2. Stockage partagé : NAS ou SAN ?
| NAS | SAN | |
|---|---|---|
| Ce qu’on voit | Un partage de fichiers (dossier réseau) | Un disque brut (bloc), qu’on formate soi-même |
| Protocoles | NFS (Linux, port 2049), SMB/CIFS (Windows, Samba) | iSCSI (sur IP), Fibre Channel (réseau dédié) |
| Usage | Partages, sauvegardes, disques de VM | Bases de données, datastores d’hyperviseurs |
| Exemples | Synology, TrueNAS, NetApp | Baies Dell EMC, NetApp, HPE |
- NFSv3 : sans état, sécurité faible, données en clair → réseau de confiance uniquement. NFSv4 : avec état, reprise après incident, Kerberos possible.
- iSCSI : l’initiator (le serveur qui utilise le disque, identifié par un IQN) se connecte à une target (la baie qui fournit le disque). Idéalement sur un réseau ou VLAN dédié.
- Fibre Channel : très rapide (jusqu’à 128 Gbit/s), cartes et switchs spécifiques, chers.
# client NFS (Debian)
sudo apt install nfs-common
sudo mount -t nfs 192.168.1.10:/export/donnees /mnt/donnees
# dans /etc/fstab (0 en dernière colonne : jamais de fsck sur du réseau)
192.168.1.10:/export/donnees /mnt/donnees nfs defaults,_netdev 0 03. IP flottante avec keepalived (VRRP)
Deux répartiteurs HAProxy partagent une IP virtuelle. Le MASTER la porte ; s’il tombe (ou si HAProxy s’arrête), le BACKUP la reprend en quelques secondes.
sudo apt install keepalived haproxy
# autoriser HAProxy à écouter sur une IP que la machine n'a pas (encore)
echo "net.ipv4.ip_nonlocal_bind = 1" | sudo tee /etc/sysctl.d/90-keepalived.conf && sudo sysctl --system/etc/keepalived/keepalived.conf sur le MASTER :
vrrp_script check_haproxy {
script "/usr/bin/systemctl is-active --quiet haproxy"
interval 2
weight 2
}
vrrp_instance VI_01 {
state MASTER # BACKUP sur la seconde machine
interface ens18
virtual_router_id 51 # identique sur les deux
priority 101 # plus bas sur le BACKUP (ex. 100)
virtual_ipaddress {
192.168.1.70
}
track_script {
check_haproxy
}
}
Test : sudo systemctl stop haproxy sur le MASTER, puis ip a sur le BACKUP : l’IP 192.168.1.70 doit y apparaître.
4. Bases de données
| Notion | Explication |
|---|---|
| ACID | Atomicité, Cohérence, Isolation, Durabilité : une transaction est fiable (Jim Gray) |
| Maître / réplica (actif/passif) | Un serveur écrit, les réplicas copient et servent la lecture |
| En cascade | Un réplica sert lui-même de maître à d’autres (PostgreSQL) |
| Multi-maître (actif/actif) | Tous les nœuds acceptent les écritures : Galera (MariaDB), CockroachDB |
Cluster MariaDB Galera (2 nœuds en labo, 3 en production pour le quorum)
/etc/mysql/conf.d/galera.cnf (sur chaque nœud, avec son IP et son nom) :
[mysqld]
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_cluster_name="moncluster"
wsrep_cluster_address="gcomm://192.168.1.43,192.168.1.27"
wsrep_sst_method=rsync
wsrep_node_address="192.168.1.43"
wsrep_node_name="sql1"sudo galera_new_cluster # sur le PREMIER nœud uniquement (démarre le cluster)
sudo systemctl start mariadb # sur les autres nœuds
sudo mysql -e "SHOW STATUS LIKE 'wsrep_cluster_size';" # doit afficher 2 (ou 3)Le cluster est « cassé » (tous les nœuds arrêtés)
Sur le nœud le plus à jour :
sudo galera_recoverydonneUUID:seqno. Dans/var/lib/mysql/grastate.dat, mettre ceuuid, ceseqnoetsafe_to_bootstrap: 1, puisgalera_new_clustersur ce nœud et démarrer les autres normalement.
Devant le cluster : deux HAProxy en mode TCP + keepalived → répartition de charge et bascule.
5. Réseau : bonding
Plusieurs cartes réseau vues comme une seule (une seule MAC, une seule IP).
# /etc/network/interfaces (paquet ifenslave)
auto bond0
iface bond0 inet static
address 192.168.1.20/24
gateway 192.168.1.254
bond-slaves eno1 ens1f0
bond-mode active-backup
bond-miimon 100
bond-mode active-backup = mode 1 ; bond-miimon 100 = vérifier l’état des liens toutes les 100 ms. (Dans ce fichier, un commentaire # doit être seul sur sa ligne.)
| Mode | Nom | Fonctionnement |
|---|---|---|
| 1 | active-backup | Un seul lien actif, l’autre prend le relais (marche avec n’importe quel switch) |
| 2 | balance-xor | Répartition selon les adresses MAC |
| 4 | 802.3ad (LACP) | Tous les liens actifs, le switch doit être configuré (EtherChannel chez Cisco) |
| 5 | balance-tlb | Répartition adaptative selon la charge |
6. Réplication de disque : DRBD
DRBD recopie un disque bloc d’un serveur sur un autre, en temps réel et de façon transparente (RAID 1 à travers le réseau).
| Mode | Acquittement de l’écriture | Risque |
|---|---|---|
| Synchrone | Quand les deux disques ont écrit | Aucune perte, mais plus lent (latence réseau) |
| Asynchrone | Dès l’écriture locale | Peut perdre les dernières écritures en cas de panne |
Outils : drbdadm, drbdsetup, drbdmeta.
7. Hyperviseurs et conteneurs
- Les clusters (Proxmox, VMware, XCP-ng) migrent à chaud et relancent automatiquement une VM si son hôte tombe → V06 - Proxmox VE.
- ⚠ Piège du split-brain : l’hôte en panne revient et relance aussi la VM → deux copies écrivent sur le même disque. Parade : fencing (couper électriquement le nœud douteux) et quorum (au moins 3 nœuds).
- Kubernetes (ou K3s) relance seul les conteneurs en panne ; il faut 3 control-planes minimum pour le quorum → P19 - Kubernetes.
Exercices
- Ton site a 2 serveurs web derrière un seul HAProxy. Où est le SPOF, et comment le supprimer ?
- NAS ou SAN pour stocker les disques de VM d’un cluster Proxmox ?
- Pourquoi Galera conseille-t-il 3 nœuds plutôt que 2 ?
Correction
- Le HAProxy unique. Solution : un second HAProxy + keepalived avec une IP flottante.
- Les deux sont possibles : NAS en NFS (simple, fichiers qcow2) ou SAN en iSCSI (disques blocs, souvent plus performant). Ceph (stockage distribué) est l’option intégrée à Proxmox.
- Pour le quorum : si le lien entre 2 nœuds coupe, aucun ne sait qui a raison (split-brain). Avec 3, la majorité (2) continue et le nœud isolé s’arrête.
Erreurs fréquentes / dépannage
| Symptôme | Cause probable |
|---|---|
| Les deux keepalived ont l’IP | Ils ne se voient pas (pare-feu bloque VRRP, protocole 112, ou virtual_router_id différent) |
| HAProxy refuse de démarrer sur le BACKUP | ip_nonlocal_bind pas activé |
| Galera : le 2e nœud ne rejoint pas | Ports 4567, 4568, 4444 fermés, ou galera_new_cluster lancé sur les deux |
| Bond LACP qui ne monte pas | Le switch n’est pas configuré en LACP |
Voir aussi
- ST01 - RAID · ST02 - Stratégies de sauvegarde · R07 - Redondance des passerelles (HSRP, CARP, Keepalived) · SV03 - HAProxy (reverse proxy et répartition de charge) · B07 - MariaDB et MySQL · P14 - Disques, partitions, fstab et LVM
- Cours complet : cours de lidstah · cours de lidstah · cours de lidstah · cours de lidstah
- Retour : P00 - Programme pas encore vu