FAQ — questions / réponses du TP

Objet. Ce document recueille les questions posées au fil des sessions et les réponses argumentées, sans modifier le TP lui-même. Les décisions qui en découlent ne sont reportées dans les autres livrables que sur demande explicite.

Chaque entrée indique son statut : Réponse (explication seule) · Décision à reporter (validée, en attente d’intégration) · Reportée (intégrée aux livrables).

Dernière mise à jour : 12/11/2026 (relecture : Q1, Q3 et Q6 remises à jour) ; 11/11/2026


Sommaire

#QuestionDateStatut
Q1Abandonner Windows Server GUI au profit de Core — avec un second DC Core prévu plus tard — peut-on reprendre l’IP et juste renommer les règles ?01/10 Reportée (12/11 : AD-Core-01 seul en 10.0.30.10 ; AD-Core-02 reporté, dette T-8)
Q2Pourquoi 10.0.10.5 se transforme-t-il en nom de domaine, et pourquoi le Lenovo n’y accède pas ?01/10 Réponse
Q3Comment tester le cluster Galera ?01/10 Réponse
Q4La sauvegarde Proxmox est-elle incrémentale ? Sinon, que faire ?15/10 Reportée (MO-12, étape 44)
Q5Quelle différence entre l’iowait et la latence disque ? Faut-il un seuil ?28/10 Reportée (MO-17 §10.5, étape 52)
Q6Si j’ajoute une VM, apparaît-elle toute seule dans le tableau de bord ?28/10 Réponse
Q7Pourquoi le site public de GSB n’a-t-il pas de bandeau de cookies ?11/11 Réponse

Q1 · On abandonne Server 2025 GUI pour du Core — que faut-il changer ?

Question posée. « On laisse tomber le serveur Windows 2025 en interface graphique, on va installer que le Core. Peut-être que l’on peut reprendre l’IP du serveur graphique et changer juste le nom des règles ? »

1 · La réponse courte

Reprendre l’adresse 10.0.30.10 oui, sans aucune difficulté
Renommer les règles de pare-feu rien à renommer — aucune règle ne nomme AD-GUI
Modifier l’alias DC_AD oui, c’est le seul changement pfSense nécessaire
Convertir la VM existante en Core impossible — il faut réinstaller

2 · Le point bloquant : une installation GUI ne se convertit pas en Core

C’est le seul vrai obstacle, et il vaut la peine d’être compris car il revient souvent en entretien.

Jusqu’à Windows Server 2012 R2, les deux modes étaient deux états d’une même installation. On basculait de l’un à l’autre avec :

Remove-WindowsFeature Server-Gui-Shell, Server-Gui-Mgmt-Infra   # 2012 R2 uniquement

Depuis Windows Server 2016, Microsoft a supprimé cette possibilité. Le mode d’installation — Server Core ou Desktop Experience — est choisi au moment de l’installation et devient définitif. La documentation Microsoft est explicite : pour changer de mode, il faut réinstaller.

Raison technique : les deux modes ne partagent plus le même jeu de composants de base. Desktop Experience n’est pas « Core + une interface par-dessus », c’est une image différente.

Conséquence pratique : la VM AD-GUI actuelle ne peut pas devenir AD-Core. Deux options, et la seconde est la bonne.

OptionVerdict
Réinstaller Server 2025 Core dans la VM existante (VMID conservé) possible, mais on garde un nom de VM trompeur et un historique de disque inutile
Supprimer la VM et en créer une neuve nommée AD-Core en 10.0.30.10 plus propre — la VM n’est pas encore promue, elle ne contient rien à préserver

Le fait que AD-GUI ne soit pas encore promue (6.5 toujours ) rend cette décision indolore. Aucun domaine n’existe, aucun objet Active Directory n’est à migrer. Prise aujourd’hui, cette décision coûte une réinstallation ; prise après promotion, elle aurait coûté une démotion, un nettoyage de métadonnées et une recréation de forêt.

3 · Pourquoi l’adresse se reprend sans problème

Une adresse IP n’est « réservée » que par ce qui la mémorise. Inventaire de ce qui connaît 10.0.30.10 aujourd’hui :

Qui connaît l’adresseImpact de la réutilisation
L’alias pfSense DC_ADaucun — l’alias liste des adresses, pas des machines
Le VLAN 30 (statique, pas de DHCP)aucun — pas de bail à libérer
Le DNS Resolver de pfSenseaucun — aucun Host Override ne pointe vers 10.0.30.10
Les tables ARP de pfSensese mettent à jour seules (la MAC changera)
Un éventuel hôte Termixà corriger — la clé d’hôte SSH changera aussi

Rien ne s’oppose donc à la réutilisation. C’est même préférable : le plan d’adressage reste compact et .10 conserve son sens de « premier serveur du VLAN ».

Un seul réflexe au moment du remplacement : la nouvelle machine aura une MAC et des clés d’hôte différentes pour la même adresse. Si un client a déjà mémorisé l’ancienne, il signalera un changement d’identité. C’est exactement le mécanisme décrit au §3 de MO-4 — et la preuve que les clés d’hôte servent bien à quelque chose.

4 · Côté pare-feu : un seul changement, et aucun renommage

Vérification faite sur l’ensemble des règles : aucune règle pfSense ne mentionne AD-GUI ni AD-Core. Les règles désignent des rôles, pas des machines — c’est précisément l’intérêt des alias, et ça se vérifie ici concrètement.

La seule règle concernée est la règle 3 de l’onglet USERS :

USERS subnets  →  ADM subnets  :  PORTS_DC_AD
« Jonction et authentification domaine sio.internal »

Elle vise ADM subnets et un groupe de ports. Ni l’une ni l’autre ne changent. Son libellé reste exact.

Le seul changement réel : l’alias DC_AD

AvantAprès
TypeHost(s)Host(s) (inchangé)
Contenu10.0.30.10, 10.0.30.1110.0.30.10 seul
Description« Les 2 contrôleurs de domaine »« Contrôleur de domaine sio.internal »

Firewall → Aliases → IP → DC_AD → retirer la ligne 10.0.30.11 → Save → Apply Changes.

Pourquoi vider 10.0.30.11 plutôt que le laisser « au cas où » : un alias est de la documentation exécutable. Une adresse qui y figure sans machine derrière est une autorisation accordée à personne — inoffensive aujourd’hui, mais qui deviendra une autorisation accordée à la prochaine machine qui prendra cette adresse. C’est le même raisonnement qu’au §12.3 de MO-4 sur les clés oubliées dans un authorized_keys.

5 · Le coût de la décision — et sa résolution déjà planifiée

Le plan initial prévoyait deux contrôleurs de domaine : AD-GUI et AD-Core. En supprimant le serveur graphique, il n’en reste qu’un — temporairement.

   PLAN INITIAL              ÉTAT INTERMÉDIAIRE          CIBLE  (décidée le 01/10)

   AD-GUI  .10               AD-Core-01  .10             AD-Core-01  .10  ◄──┐
   AD-Core .11                     │                            │  réplication
                                   └── défaillance unique       │            │
   2 DC, redondance           1 seul DC                AD-Core-02  .11  ◄──┘

                                                         2 DC, redondance rétablie
                                                         — et deux Core, cohérents

Décision du 01/10 : un second contrôleur de domaine en Server Core est prévu, mais pas tout de suite. La période à un seul DC est donc un état transitoire assumé, pas un choix d’architecture définitif.

Pourquoi c’est une bonne décision, et pas seulement un rattrapage

L’abandon de AD-GUI au profit de deux Core est meilleur que le plan initial, pas équivalent :

Plan initialCible décidée
Composition1 GUI + 1 Core2 Core
Cohérencedeux modes d’administration différents à maîtriserun seul — sconfig, PowerShell, RSAT
Surface d’attaquecelle du GUI s’ajoute à celle du Coreréduite des deux côtés
Réalisme professionnelun DC graphique est devenu rareconforme à la pratique

Deux DC identiques, c’est aussi ça la haute disponibilité : si les deux nœuds s’administrent et se corrigent de la même façon, la bascule de l’un vers l’autre n’introduit aucune surprise. C’est exactement le raisonnement appliqué aux trois nœuds Galera — configuration identique, un seul 60-galera.cnf à connaître.

La dette, reformulée en conséquence

T-8Contrôleur de domaine unique — transitoire
PourquoiAbandon de AD-GUI au profit du tout-Core ; le second nœud n’est pas encore déployé
RisquePoint de défaillance unique sur l’authentification Kerberos, le DNS interne et les GPO
Mitigation immédiateSauvegarde de l’état système du DC ; résolution DNS des VM assurée par pfSense, indépendante de l’AD
RésolutionPlanifiée — déploiement de AD-Core-02 en 10.0.30.11, second contrôleur du domaine sio.internal. Échéance non fixée

Une dette datée et planifiée ne se défend pas comme une dette subie. Dire « je sais, c’est prévu, voici l’adresse déjà réservée » montre qu’on pilote son infrastructure.

Conséquence sur 10.0.30.11

L’adresse reste réservée au futur second contrôleur dans le plan d’adressage — avec le suffixe (à créer) du tableau d’adressage.

Mais elle sort quand même de l’alias DC_AD (§4 ci-dessus). Les deux ne se contredisent pas :

RôleDoit-elle y figurer ?
Plan d’adressagedocumenter une intention oui — (à créer)
Alias pfSenseaccorder une autorisation non — tant qu’il n’y a pas de machine

Laisser .11 dans l’alias, c’est ouvrir les ports Active Directory vers la prochaine machine qui prendra cette adresse, quelle qu’elle soit. La remettre le jour du déploiement prend dix secondes — et ces dix secondes font partie de la procédure.

6 · Et ce qu’elle apporte

L’abandon de l’interface graphique n’est pas qu’une simplification :

BénéficeDétail
Surface d’attaque réduitepas de navigateur, pas d’Explorateur, bien moins de correctifs
Ressources~2 Go de RAM au lieu de ~4, et un disque plus petit
Administration à distancec’est la pratique professionnelle : sconfig, PowerShell, RSAT et Windows Admin Center depuis un poste d’administration
Cohérence avec le TPsrv-ha, srv-mysql-* et srv-docker sont déjà sans bureau — reste la dette H-3 sur srv-web-01/02

Le vrai apprentissage est là : administrer un serveur sans le voir. C’est la norme en entreprise, et c’est ce qui distingue un administrateur d’un utilisateur avancé.

7 · Récapitulatif des modifications à reporter (reportées : AD-Core-01 en service, AD-Core-02 reporté sans échéance, dette T-8 ; l’alias DC_AD garde 10.0.30.11 en réserve)

LivrableModification
SUIVI-TP.mdtâche 5.3 supprimée · 5.4 devient AD-Core-01 en 10.0.30.10 · 6.5 vise AD-Core-01 · 6.7 conservée mais reportée → AD-Core-02 en 10.0.30.11 · test 7.1 reporté avec elle · recalcul du pourcentage
Documentation-pfSense.mdtableau du plan d’adressage (ligne 127) · alias DC_AD (ligne 611) · schéma du VLAN 30 (ligne 582) · nouvelle dette T-8
Matrice-de-flux.mdalias DC_AD (ligne 44) · test 7.1 retiré · test AD-GUI → srv-web:22 renommé
Architecture.mdschémas des lignes 124-128 et 306-310
tableau d'adressage.xlsxAD-GUI → AD-CORE-01 en 10.0.30.10 · AD-CORE-02 en 10.0.30.11 avec le suffixe (à créer)
Infrastructure-TP.drawiopages 1 et 3 — AD-Core-01 actif, AD-Core-02 en pointillés (prévu) ; page 5 — accès externe par Pangolin
pfSensealias DC_AD → une seule adresse (§4 ci-dessus)

Q2 · Pourquoi 10.0.10.5 devient www.sio.internal ?

Question posée. « Lorsque j’attaque le serveur WordPress via 10.0.10.5, à chaque fois ça me transforme l’adresse IP en nom de domaine. Seulement de mon PC Lenovo je n’ai pas l’accès au domaine. Pourquoi ça fait ça, et que peut-on faire pour avoir accès via l’IP, ou configurer le domaine sur mon PC aussi ? »

1 · Ce n’est pas un bug — c’est WordPress qui fait son travail

Le responsable est une ligne que nous avons écrite nous-mêmes à l’étape 30, dans wp-config.php des deux serveurs web :

define( 'WP_HOME',    'https://www.sio.internal' );
define( 'WP_SITEURL', 'https://www.sio.internal' );

WordPress possède un mécanisme nommé redirection canonique (redirect_canonical). Son principe : un contenu, une seule URL. Si la requête arrive sous une autre forme que l’URL canonique déclarée, WordPress renvoie une redirection permanente 301 vers celle-ci.

2 · Le trajet complet d’une requête vers 10.0.10.5

  1.  Navigateur  ──►  http://10.0.10.5
                       │
  2.  HAProxy :80 ──►  301  « va en HTTPS »          (http-request redirect scheme https)
                       │
  3.  Navigateur  ──►  https://10.0.10.5
                       │
  4.  HAProxy :443      présente le certificat de www.sio.internal
                       → avertissement de sécurité, le nom ne correspond pas
                       │
                       déchiffre, transmet en HTTP à srv-web-0x
                       avec X-Forwarded-Proto: https
                       │
  5.  WordPress        Host demandé  : 10.0.10.5
                       WP_HOME       : www.sio.internal      ← ILS DIFFÈRENT
                       │
                       301  « l'adresse canonique est https://www.sio.internal »
                       │
  6.  Navigateur  ──►  https://www.sio.internal
                       │
                        sur le Lenovo : le nom ne se résout pas

La transformation que tu observes se produit à l’étape 5. Les étapes 1 à 4 fonctionnent parfaitement : l’IP est joignable, c’est WordPress qui refuse de servir le site sous ce nom-là.

La distinction à retenir : « joindre la machine » et « être servi par le site » sont deux choses différentes. Derrière un répartiteur avec terminaison TLS, un site est identifié par son nom — le certificat porte un nom, le Host: HTTP porte un nom, le SNI porte un nom. L’adresse IP n’est qu’un détail de transport.

3 · Pourquoi le Lenovo ne résout pas www.sio.internal

Le nom www.sio.internal n’existe que dans le résolveur de pfSense, sous forme d’un Host Override créé à l’étape 30 :

Services → DNS Resolver → Host Overrides
www.sio.internal  →  10.0.10.5
MachineDNS interrogéRésultat
poste-win11 (VLAN 40)10.0.40.1 = pfSense 10.0.10.5
srv-web-01, srv-ha…10.0.x.1 = pfSense 10.0.10.5
ag-lenovo (poste physique)DNS de l’établissement / du FAI NXDOMAIN

Le Lenovo joint le laboratoire par Tailscale, qui lui donne la connectivité réseau — mais Tailscale ne lui donne pas le DNS du laboratoire. Il continue d’interroger le résolveur qu’il utilisait avant.

C’est exactement le point ③ du §2.7 de la documentation, vu sous un autre angle : « une machine ne connaît que les noms que son résolveur connaît ». Centraliser le DNS sur pfSense est la bonne décision — encore faut-il que les clients interrogent pfSense.

4 · Les solutions, de la plus rapide à la plus canonique

Solution A — Fichier hosts sur le Lenovo (1 minute, local)

Le plus court chemin. Le fichier hosts est consulté avant le DNS.

PowerShell en administrateur :

Add-Content -Path "$env:SystemRoot\System32\drivers\etc\hosts" -Value "`n10.0.10.5`twww.sio.internal"

Vérification :

Resolve-DnsName www.sio.internal
Avantages Limites
immédiat, aucune infrastructure à toucherune machine à la fois, et à refaire sur chaque poste
fonctionne même si pfSense changedevient faux si l’adresse de srv-ha change — personne ne pense à le corriger

À connaître : le fichier hosts est le premier endroit où regarder quand un nom se résout « bizarrement » sur une machine. C’est aussi, pour cette raison, une cible classique de détournement.

Solution B — DNS fractionné via Tailscale (la version canonique)

Tailscale sait pousser un résolveur limité à un domaine sur tous les nœuds du tailnet. C’est la réponse propre : le Lenovo interrogera pfSense pour *.sio.internal et uniquement pour ça, en gardant son DNS habituel pour le reste.

   ag-lenovo
      │
      ├── *.sio.internal  ──►  100.84.62.27  (pfSense sur le tailnet)
      │                              └──► Host Override → 10.0.10.5
      │
      └── tout le reste   ──►  DNS habituel de la machine

Deux côtés à configurer — dans cet ordre :

① Côté pfSense — autoriser le tailnet à interroger unbound

C’est l’étape qu’on oublie. Par défaut, le résolveur de pfSense n’accepte les requêtes que des réseaux directement connectés ; la plage Tailscale n’en fait pas partie et les requêtes seraient refusées sans explication.

Services → DNS Resolver → Access Lists → Add

ChampValeur
Network100.64.0.0 / 10
ActionAllow
DescriptionTailnet — resolution des noms du laboratoire

Vérifier aussi, dans l’onglet General Settings, que Network Interfaces vaut All (ou inclut l’interface Tailscale) — sinon unbound n’écoute pas de ce côté.

② Côté Tailscale — déclarer le résolveur fractionné

Admin console → DNS → Nameservers → Add nameserver → Custom

ChampValeur
Nameserver100.84.62.27 (pfSense sur le tailnet)
Restrict to search domain coché — sio.internal

Pourquoi « restrict to search domain » est indispensable. Sans cette case, tout le trafic DNS de tous les nœuds du tailnet partirait vers pfSense. Le Lenovo perdrait la résolution des noms de l’établissement dès que le laboratoire serait éteint. Le DNS fractionné dit : « pour ce domaine-là, ce serveur-là ; pour le reste, ne change rien ».

Vérification :

Resolve-DnsName www.sio.internal

→ doit répondre 10.0.10.5, et https://www.sio.internal doit afficher le site.

Avantages Limites
vaut pour tous les nœuds du tailnet, présents et futursdépend de Tailscale — c’est déjà le cas de tout l’accès distant
une seule source de vérité : le Host Override de pfSenseélargit encore le rôle du tailnet → dette T-6

Solution C — Forcer l’accès par l’IP (déconseillé)

Techniquement possible en retirant WP_HOME / WP_SITEURL de wp-config.php. À éviter, pour trois raisons qui se cumulent :

  1. On réintroduit le problème que l’étape 30 avait réglé : WordPress reconstruirait ses URL depuis l’en-tête Host:, donc différemment selon le point d’entrée — liens, images et feuilles de style finiraient mélangés entre 10.0.10.5 et www.sio.internal.
  2. Le certificat porte le nom www.sio.internal : l’accès par IP produira toujours un avertissement de sécurité, quoi qu’on fasse côté WordPress.
  3. C’est traiter le symptôme. Le problème n’est pas la redirection — elle est correcte — mais l’absence de résolution de nom sur un poste.

Solution D — Pour un test ponctuel, sans rien configurer

Quand il s’agit juste de vérifier que le site répond, on résout le nom le temps d’une commande :

curl -k --resolve www.sio.internal:443:10.0.10.5 https://www.sio.internal/ -I

--resolve dit à curl : « pour ce nom et ce port, utilise cette adresse ». -k accepte le certificat auto-signé.

C’est l’outil de diagnostic idéal : il permet de tester le répartiteur avant que le DNS soit en place, et de distinguer un problème de résolution d’un problème de service.

5 · Recommandation

BesoinSolution
Voir le site maintenant depuis le LenovoA — fichier hosts
La bonne pratique, pour tout le tailnetB — DNS fractionné Tailscale
Vérifier que HAProxy répond, sans DNSD — curl --resolve
Accéder par IP à ne pas chercher — le site est servi par son nom

Les deux ne s’excluent pas : A débloque tout de suite, B se met en place tranquillement et rend A inutile.

6 · Un piège à connaître avant de tester

Les navigateurs mettent en cache les redirections 301 de façon très agressive, parfois jusqu’à la fin de la session, parfois davantage. Après un changement de configuration, un navigateur peut continuer à rediriger sans même interroger le serveur.

Tester systématiquement en navigation privée, ou vider le cache, avant de conclure que la modification n’a pas fonctionné. Plus d’une heure de diagnostic s’est déjà perdue sur une redirection qui n’existait plus que dans le navigateur.


Q3 · Comment tester le cluster Galera ?

Question posée. « J’aimerais pouvoir faire des tests sur le cluster Galera, et comment faire ? »

1 · Où on en est — trois tests sur six sont déjà faits (au 01/10)

Au 12/11 : les six tests sont faits — 7.10 le 29/10 (WordPress continue, MariaDB arrêté sur le nœud 1), 7.11 le 02/11 (perte de quorum, écritures refusées, étape 58), 7.13 le 30/10 (poste-win11 toujours refusé sur 3306).

#TestÉtat
7.9INSERT sur le nœud 2, SELECT sur le nœud 3 validé — la réplication fonctionne
7.10Arrêt de mariadb sur le nœud 1 → WordPress continue à faire
7.11Arrêt de 2 nœuds sur 3 → écritures refusées à faire
7.13Rejouer 7.3 : poste-win11 → 10.0.20.10:3306 toujours refusé à faire

Il reste donc trois tests, et ce sont les plus intéressants : le 7.9 prouvait que le cluster réplique, les 7.10 et 7.11 prouvent comment il réagit quand il casse.

La différence entre les deux familles de tests. Un test de fonctionnement montre que l’architecture marche. Un test de défaillance montre qu’on l’a comprise. Le second a infiniment plus de valeur en soutenance — et c’est le seul qui révèle les erreurs de conception.

2 · Avant de commencer — le tableau de bord

Cinq variables suffisent à connaître l’état d’un cluster Galera. À exécuter sur n’importe quel nœud :

sudo mariadb -e "SHOW STATUS WHERE Variable_name IN (
  'wsrep_cluster_size',
  'wsrep_cluster_status',
  'wsrep_local_state_comment',
  'wsrep_connected',
  'wsrep_ready');"

Résultat d’un cluster en bonne santé :

VariableValeur saineCe qu’elle dit
wsrep_cluster_size3combien de nœuds composent le groupe
wsrep_cluster_statusPrimary le groupe a le quorum — il a le droit de travailler
wsrep_local_state_commentSyncedce nœud-ci est à jour et sert les requêtes
wsrep_connectedONla couche réseau de réplication est établie
wsrep_readyONle nœud accepte les requêtes

Ne pas confondre cluster_status et local_state_comment. Le premier décrit le groupe (« avons-nous le quorum ? »), le second décrit ce nœud (« suis-je à jour ? »). Un nœud peut être Synced dans un groupe non-Primary : il a les données, mais il n’a pas le droit de s’en servir. C’est toute la subtilité du test 7.11.

Garde cette commande sous la main — tu vas la relancer après chaque étape. Pour aller plus vite, crée un alias sur chaque nœud :

echo "alias gstat='sudo mariadb -e \"SHOW STATUS WHERE Variable_name IN (\\\"wsrep_cluster_size\\\",\\\"wsrep_cluster_status\\\",\\\"wsrep_local_state_comment\\\",\\\"wsrep_ready\\\");\"'" >> ~/.bashrc
source ~/.bashrc

→ gstat suffira ensuite.

3 · Deux précautions avant de casser quelque chose

① Une sauvegarde logique de la base, depuis srv-mysql-01 :

sudo mariadb-dump --single-transaction wp_lab > ~/wp_lab_avant_tests_$(date +%F).sql
ls -lh ~/wp_lab_avant_tests_*.sql

② Choisir le bon moment. Le test 7.11 rend le site indisponible pendant plusieurs minutes — c’est précisément ce qu’il démontre. À ne pas lancer pendant qu’on a besoin de WordPress pour autre chose.

Ouvre trois sessions côte à côte — une par nœud — plus la page de statistiques HAProxy (http://10.0.10.5:8404). Voir les trois états changer en même temps est ce qui fait comprendre le mécanisme. C’est aussi la capture d’écran qui vaut le plus cher dans le dossier.

4 · Test 7.10 — bascule de la base

Ce qu’il prouve : HAProxy détecte la perte du nœud actif et bascule sur un nœud backup, sans que WordPress s’en aperçoive.

Étape 1 — état initial

Sur le poste, ouvrir https://www.sio.internal : le site répond. Sur la page de statistiques HAProxy, la section galera montre mysql-01 UP et les deux autres en backup.

Étape 2 — arrêter le nœud actif

Sur srv-mysql-01 :

sudo systemctl stop mariadb

Étape 3 — observer, dans cet ordre

# depuis srv-mysql-02
sudo mariadb -e "SHOW STATUS LIKE 'wsrep_cluster_size';"
Où regarderAttendu
wsrep_cluster_size sur le nœud 22 — le groupe s’est réduit
wsrep_cluster_status sur le nœud 2Primary — 2 sur 3, le quorum tient
Statistiques HAProxymysql-01 passe DOWN (rouge), mysql-02 prend le relais
Le site WordPresscontinue de répondre — recharger pour confirmer

La bascule n’est pas instantanée. HAProxy ne déclare un serveur DOWN qu’après l’échec de sa sonde — par défaut toutes les 2 s. Un rechargement immédiat peut tomber sur une erreur de base de données. Attendre 5 secondes et recharger : c’est le comportement normal d’un répartiteur, pas un défaut. Le noter tel quel dans la documentation.

Étape 4 — remettre le nœud en service

sudo systemctl start mariadb
sudo mariadb -e "SHOW STATUS LIKE 'wsrep_local_state_comment';"

Le nœud revient, rattrape son retard par IST (incrémental — il ne lui manque que quelques transactions, pas toute la base) et repasse Synced. wsrep_cluster_size retourne à 3.

C’est ici qu’on voit l’intérêt de l’IST. Quelques secondes d’arrêt → rattrapage incrémental, quasi instantané. Si on avait vidé /var/lib/mysql, il aurait fallu un SST — copie complète. Les deux mécanismes sont détaillés au §2 de MO-2.

Un point à vérifier en direct

Avec option mysql-check, HAProxy valide la poignée de main MySQL. La question ouverte : détecte-t-il un nœud démarré mais pas encore synchronisé ? Probablement pas — un nœud en train de rattraper accepte la connexion tout en refusant les requêtes.

Si c’est bien ce qu’on observe, cela justifie expérimentalement le passage à clustercheck évoqué dans MO-3 : argument bien plus solide qu’une citation de documentation.

Tranché le 05/11/2026 (étape 62, capture 191) : un nœud mis hors synchronisation par SET GLOBAL wsrep_desync=ON répond toujours (SELECT 1 → 1), donc mysql-check l’aurait gardé. HAProxy contrôle désormais une sonde de synchronisation sur le port 9200 : le nœud est passé DOWN en quelques secondes, puis UP une fois resynchronisé.

5 · Test 7.11 — le quorum

Le test le plus formateur du TP. Il montre qu’un cluster bien conçu refuse délibérément de fonctionner plutôt que de risquer deux moitiés divergentes.

Le raisonnement, avant la manipulation

   3 nœuds, le réseau se coupe en deux :

   ┌─ nœud 1 ─┐          ┌─ nœud 2 ─ nœud 3 ─┐
   │  1 / 3   │    ╳     │       2 / 3       │
   │   33 %   │  coupure │        67 %       │
   └──────────┘          └───────────────────┘
    MINORITÉ                  MAJORITÉ
    → se tait                 → continue

   Si les deux côtés continuaient : écritures divergentes des deux
   côtés, impossibles à réconcilier → SPLIT-BRAIN.

La règle Galera : un groupe ne travaille que s’il détient strictement plus de la moitié des nœuds. C’est aussi la réponse à « pourquoi 3 nœuds et pas 2 » — avec 2 nœuds, chaque moitié en vaut exactement la moitié, aucune n’a la majorité, et la perte d’un seul nœud arrête tout. Un nombre impair est la règle.

La manipulation

Sur srv-mysql-02, puis sur srv-mysql-03 :

sudo systemctl stop mariadb

Puis, sur le survivant srv-mysql-01 :

sudo mariadb -e "SHOW STATUS LIKE 'wsrep_cluster_status';"

Ce qu’on doit observer

ObservationAttendu
wsrep_cluster_statusnon-Primary ← le cœur du test
wsrep_cluster_size1
Une requête quelconqueERROR 1047 (08S01): WSREP has not yet prepared node for application use
Le site WordPress erreur de connexion à la base

Essayer explicitement une lecture et une écriture :

sudo mariadb -e "SELECT COUNT(*) FROM wp_lab.wp_posts;"
sudo mariadb -e "INSERT INTO wp_lab.wp_options (option_name, option_value) VALUES ('test_quorum','x');"

Le point contre-intuitif, et c’est tout le sujet : le nœud 1 a les données. Il est en parfait état de marche. Il refuse quand même — parce qu’il ne peut pas savoir si les deux autres sont morts ou simplement injoignables. S’ils étaient vivants de leur côté et qu’il acceptait des écritures, les deux versions de la base divergeraient irrémédiablement.

Il préfère l’indisponibilité à l’incohérence. C’est un choix d’architecture explicite — le fameux arbitrage du théorème CAP, visible ici en une commande.

Capture obligatoire : wsrep_cluster_status = non-Primary à côté du message ERROR 1047. C’est la capture la plus parlante de tout le TP.

Le retour à la normale

Il suffit de redémarrer un seul des deux nœuds arrêtés — 2 sur 3 rétablissent la majorité :

# sur srv-mysql-02
sudo systemctl start mariadb

Puis vérifier sur le nœud 1 :

sudo mariadb -e "SHOW STATUS LIKE 'wsrep_cluster_status';"   # → Primary

Redémarrer ensuite le nœud 3, et contrôler que wsrep_cluster_size vaut de nouveau 3 sur les trois nœuds. Enfin, effacer la trace du test si l’INSERT était passé :

sudo mariadb -e "DELETE FROM wp_lab.wp_options WHERE option_name='test_quorum';"

Ne pas confondre avec l’arrêt complet du cluster. Ici le nœud 1 n’a jamais été arrêté : la reprise est automatique, il n’y a rien à forcer. C’est seulement quand les trois nœuds sont arrêtés qu’il faut aller lire grastate.dat et son indicateur safe_to_bootstrap pour savoir lequel redémarrer en premier — procédure décrite au §8 de MO-2.

Et surtout : ne pas forcer pc.bootstrap=YES sur le nœud 1 pendant le test. Cette commande dit « considère que tu as le quorum à toi seul ». Elle existe pour les situations de reprise après sinistre, quand on est certain que les autres nœuds sont morts. Utilisée ici, elle fabriquerait exactement le split-brain que le test cherche à démontrer.

6 · Test 7.13 — la non-régression du cloisonnement

Ce qu’il prouve : avoir ajouté trois machines, un répartiteur et quatre ports au plan n’a pas ouvert de brèche. C’est le test qu’on oublie toujours, et celui qui rassure un jury.

Depuis poste-win11, en PowerShell :

Test-NetConnection -ComputerName 10.0.20.10 -Port 3306
ChampAttendu
PingSucceededTrue — l’ICMP reste autorisé (dette T-4)
TcpTestSucceededFalse ← le résultat recherché

Puis, pour la preuve complète, le journal : Status → System Logs → Firewall, filtre sur 10.0.20.10. Un test de blocage sans sa ligne de journal n’est pas une preuve — c’est la règle posée depuis le test 7.3.

Et tant qu’on y est, vérifier aussi le nouveau nœud :

Test-NetConnection -ComputerName 10.0.20.11 -Port 3306

→ également refusé. Les trois nœuds Galera sont couverts par le même cloisonnement.

7 · Ordre conseillé et durée

  1. Sauvegarde logique de wp_lab                            2 min
  2. Tableau de bord sur les 3 nœuds — état initial          2 min   
  3. Test 7.10 — bascule                                     10 min  
  4. Retour à 3 nœuds Synced, vérifié                        3 min
  5. Test 7.11  — quorum                                   15 min  
  6. Retour à 3 nœuds Synced, vérifié                        5 min
  7. Test 7.13 — non-régression + journal pfSense            5 min   

Compter 45 minutes sans se presser. Les captures sont nommées selon la convention habituelle NN-description.png.

La règle du TP s’applique ici comme ailleurs : on ne documente que ce qu’on a vu. Si un test donne autre chose que l’attendu, c’est le résultat observé qui part dans la documentation, avec l’explication. Les trois quarts des incidents du fichier Troubleshooting.md sont nés comme ça.


Q4 · La sauvegarde Proxmox est-elle incrémentale ?

1 · La réponse courte

Non, pas avec vzdump vers un NAS : chaque nuit, chaque VM est recopiée en entier dans une nouvelle archive. Constat du 15/10 : l’archive de srv-web-01 était identique à l’octet à celle de la veille, et le NAS a grossi d’environ 85 Go en une nuit pour 11 VM.

2 · Ce qui le rend incrémental : Proxmox Backup Server

vzdump vers un NASProxmox Backup Server
Ce qui est écrit chaque nuittout le disque (compressé)seulement les blocs nouveaux
Ce qui est lu chaque nuittout le disqueseulement les zones modifiées, tant que la VM n’a pas redémarré
Restaurationune archive = une VMchaque sauvegarde reste complète (index vers des blocs partagés)
Mesure sur srv-web-0110 min 58 s2 s (104 Mio lus, 99 % réutilisé)

3 · Ce qui a été décidé

Passer à PBS (VM srv-pbs, 10.0.30.13), garder 7 jours de sauvegardes, sans chiffrement côté client. Réalisé et documenté le 15/10 : MO-12, étape 44 de Documentation-pfSense.md.


Q5 · Iowait ou latence disque : quelle différence ?

Question posée. « C’est quoi la différence entre iowait et latence en termes d’interprétation ? Faut-il définir un seuil ? » (28/10, en construisant le bloc « disques » du tableau de production)

Latence disqueIowait
Ce qu’elle mesurele temps moyen d’une lecture ou écriture, en msla part du temps où le processeur, inactif, attend le disque, en %
Question« le stockage est-il lent ? »« la machine est-elle bloquée par lui ? »
Point de vuecelui du disquecelui du processeur
SystèmesLinux et WindowsLinux seulement (Windows et FreeBSD ne la mesurent pas)
Son piègeune latence élevée sur très peu d’opérations ne gêne presque personnefaible sur une machine qui calcule beaucoup, même si le disque est lent ; ne dit pas de combien il est lent

Ce qui a été retenu : le tableau affiche la latence, comparable sur toutes les machines ; l’iowait reste interrogeable dans Explore. Seuils : 20 ms (orange) et 50 ms (rouge), repères courants (Microsoft notamment), sur une échelle logarithmique pour qu’un pic de plusieurs secondes n’écrase pas les valeurs normales (1 à 10 ms). Constat : de 100 ms à 1 s du 21 au 24/10 (migration des disques), 1 à 10 ms ensuite.


Q6 · Une nouvelle VM apparaît-elle toute seule dans le tableau de bord ?

Question posée. « Si j’ajoute une VM, avec l’exporteur qui va bien grâce au script, ça s’ajoutera automatiquement au tableau dans chaque bloc ? » (28/10)

ajouter-machine.sh (VM Linux, lancé depuis le bastion) installe node_exporter et rsyslog, puis déclare la machine dans Prometheus avec son nom (host) et sa zone (zone). Ensuite :

BlocAutomatique ?Condition
Machines (en ligne, processeur, mémoire, disque, latence) ; filtresaucune
Journaux et sécuritérsyslog installé par le script
Colonne « Réglé (Proxmox) » si…la VM est dans le pool SIO2527_Axel et s’appelle SIO2527-<nom>-Axel ; sinon, une ligne de correspondance à ajouter dans la requête
Sauvegardes si…la VM est dans le pool (la tâche de sauvegarde porte sur le pool) ; la ligne apparaît après sa première nuit
Disponibilité des servicesseulement si une sonde est ajoutée pour son service
Galeraréservé aux 3 nœuds de base

VM Windows : installer-windows-exporter.ps1 installe l’exporteur et ouvre le port 9182 pour srv-metriques seulement, mais ne déclare pas la machine : il faut ajouter un fichier de cible dans /etc/prometheus/cibles/windows/.

Depuis le 11/11 (phase 21) : un poste Windows du domaine reçoit l’exporteur par la GPO GPO-Ordi-Poste-Pret, et sa déclaration se fait en une commande depuis le bastion : bash ~/supervision/ajouter-poste-windows.sh <nom> <adresse> (étape 74). Les règles d’alerte sont génériques : le poste est couvert dès qu’il est « up ».


Q7 · Pourquoi le site public de GSB n’a-t-il pas de bandeau de cookies ?

Réponse courte — Parce que la mesure d’audience de ce site entre dans l’exception prévue par la CNIL : elle peut se faire sans consentement si elle reste strictement limitée à la mesure de fréquentation du seul site, avec des réglages précis. Un bandeau n’est donc pas obligatoire ; en échange, le site doit informer les visiteurs et leur donner un moyen simple de refuser.

Les conditions, et ce qui a été fait (détail et preuves : Justification-RGPD-Matomo.md) :

ConditionRéglage dans le laboratoire
finalité limitée à la fréquentation du siteun seul site mesuré ; profils, journal des visites, cartes de chaleur et e-commerce coupés
adresse IP tronquéemasquée avant l’enregistrement
durées limitéescookies de 13 mois au plus ; données détaillées gardées 180 jours
aucun croisement, aucun tiersMatomo est hébergé dans le laboratoire ; rien n’est envoyé à l’extérieur
information et refuspage « Mentions légales et confidentialité » avec une case d’opposition

Ce que ça ne couvre pas — un cookie qui servirait à la publicité, à un profil ou à un outil tiers redemanderait un consentement. Et la dispense est à justifier par l’éditeur (c’est l’objet de la justification écrite) : elle n’a pas été validée par un juriste.