Réplication de nœuds : réseau et DNS par l'API, multipath, chrony, sysctl par SSH
Deuxième mode de réplication, séparé de la réplication cluster vers cluster
(sélecteur « Clusters (API) | Nœuds (fichiers) » en haut de page) : un profil
réplique la configuration système d'un nœud maître vers des nœuds cibles.
- réseau par /nodes/{node}/network (interfaces.new puis rechargement), adresses
et passerelles propres à chaque nœud, mapping des noms d'interfaces par cible ;
DNS par /nodes/{node}/dns ; multipath.conf, wwids (ajout seul), chrony,
sysctl.d, interfaces.d (hors sdn) par SSH
- découverte des nœuds (/cluster/status), accès SSH par nœud (mot de passe du
cluster ou propre), clé d'hôte épinglée, contrôle du nom du nœud
- dry-run avec diff des fichiers ; apply (admin) avec contrôle SHA-256,
sauvegarde et restore.sh sur le nœud, écriture atomique, rechargements,
restauration si un rechargement échoue, timer systemd de restauration si le
nœud est injoignable après le rechargement du réseau, confirmation tapée
- vue Nœuds et profils, journal séparé par mode, démo avec nœuds simulés
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
dc1a7ff40e
commit
1e667ce8b9
24 files changed
+4973
-65
No files matched your search
@@ -31,6 +31,40 @@ avec un avertissement), firewall, storage, pools, ACL, jobs, comptes `@pam` et a
|
||||
|
||||
Détail des routes, schémas et accès, avec les sources : [docs/api-pve.md](docs/api-pve.md).
|
||||
|
||||
## Réplication de nœuds
|
||||
|
||||
Deuxième mode, séparé du premier dans l'interface (sélecteur « Clusters (API) | Nœuds
|
||||
(fichiers) » en haut de page) : un **profil** réplique la configuration système d'un
|
||||
**nœud maître** vers des **nœuds cibles**, du même cluster ou d'un autre.
|
||||
|
||||
| Élément | Accès | Rechargement | Particularités |
|
||||
|---|---|---|---|
|
||||
| `network` | API `/nodes/{node}/network` (écrit `interfaces.new`) | `PUT /nodes/{node}/network` (ifreload -a) | `cidr`, `cidr6`, `gateway`, `gateway6` en `override` : chaque nœud garde ses adresses ; mapping des noms d'interfaces par cible (eno1=enp65s0f0, VLAN suivis) ; interface physique absente = bloquant ; options que l'API n'écrit pas (bond-miimon, post-up…) signalées, non répliquées |
|
||||
| `dns` | API `/nodes/{node}/dns` | aucun | domaine de recherche obligatoire pour l'API |
|
||||
| `multipath` | SSH `/etc/multipath.conf` | `multipathd reconfigure` | |
|
||||
| `wwids` | SSH `/etc/multipath/wwids` | `multipathd reconfigure` | ajout seul des WWID du maître |
|
||||
| `chrony` | SSH `/etc/chrony/chrony.conf`, `sources.d/*.sources` | `systemctl restart chrony` | |
|
||||
| `sysctl` | SSH `/etc/sysctl.d/*.conf` | `sysctl --system` | |
|
||||
| `interfaces-d` | SSH `/etc/network/interfaces.d/*` | `ifreload -a` | `interfaces.d/sdn` (généré par le SDN) jamais touché |
|
||||
|
||||
Jamais répliqués : `/etc/pve`, corosync, hostname, machine-id, clés SSH, IQN iSCSI, `/etc/frr`.
|
||||
|
||||
- **Accès** : « Découvrir les nœuds » lit `/cluster/status` de chaque cluster (adresse de
|
||||
chaque nœud). SSH en root sur chaque nœud, avec le mot de passe de son cluster ou le sien ;
|
||||
clé d'hôte épinglée au premier test, qui vérifie aussi que le nœud répond bien sous son nom.
|
||||
- **Règles** : politiques par champ (réseau, DNS), lignes protégées par expression régulière
|
||||
pour les fichiers (gardées de la cible), valeurs propres à une cible (`vmbr1 cidr=…`).
|
||||
- **Apply** (administrateurs), un nœud après l'autre, arrêt au premier échec : un script SSH
|
||||
vérifie que chaque fichier est celui du dry-run (SHA-256), sauvegarde dans
|
||||
`/var/lib/pve-confsync/backup/<date>/` avec un `restore.sh`, écrit de façon atomique
|
||||
(fichier temporaire puis `mv`, droits et propriétaire gardés) ; l'API écrit les interfaces
|
||||
et le DNS ; les rechargements suivent. Un rechargement en échec restaure les sauvegardes.
|
||||
- **Filet réseau** : avant de recharger le réseau, un timer systemd est armé sur le nœud
|
||||
(`pve-confsync-restore-<date>`) : sans nouvelle connexion SSH et API dans les 120 s, le nœud
|
||||
relance `restore.sh` et `ifreload -a` de lui-même. Confirmation tapée (nom du nœud, ou du
|
||||
profil en global) dès qu'un plan recharge le réseau. Refus si la cible a déjà des
|
||||
changements réseau en attente (`interfaces.new`).
|
||||
|
||||
## Fonctionnement
|
||||
|
||||
```
|
||||
@@ -152,6 +186,7 @@ internal/model/ objets génériques, valeurs canoniques
|
||||
internal/adapter/ un adaptateur par type : routes, champs calculés, locaux, immuables
|
||||
internal/config/ configuration en mémoire : clusters, politiques, mappings, sélection
|
||||
internal/engine/ lecture, plan, apply (verrou SDN, rollback), vérification
|
||||
internal/nodesync/ réplication de nœuds : réseau et DNS (API), fichiers (SSH), diff, sauvegarde, restauration
|
||||
docs/api-pve.md routes et schémas vérifiés dans les sources PVE
|
||||
```
|
||||
|
||||
|
||||
Reference in new issue
Block a user