Version 1.7.0: Configuration dynamique Sanoid actif/passif
- Configuration automatique de sanoid.conf selon le role du noeud - Noeud actif: autosnap=yes, autoprune=yes - Noeud passif: autosnap=no, autoprune=yes - Conforme a la documentation officielle Sanoid - Documentation du mount point LXC shared=1 pour la HA
This commit is contained in:
parent
9279932f8b
commit
464540696b
2 changed files with 71 additions and 24 deletions
24
README.md
24
README.md
|
|
@ -112,7 +112,21 @@ Sanoid crée des snapshots selon un calendrier défini :
|
|||
- **Mensuel** : 3 snapshots (rétention de 3 mois)
|
||||
- **Annuel** : 1 snapshot (rétention de 1 an)
|
||||
|
||||
**Activation intelligente** : Sanoid est automatiquement activé uniquement sur le nœud actif (celui qui héberge le LXC) et désactivé sur le nœud passif, évitant ainsi les conflits de snapshots.
|
||||
**Configuration dynamique selon le rôle** (conforme à la [documentation Sanoid](https://github.com/jimsalterjrs/sanoid/wiki/Syncoid#snapshot-management-with-sanoid)) :
|
||||
|
||||
Le script configure automatiquement Sanoid différemment selon le rôle du nœud :
|
||||
|
||||
**Nœud actif** (héberge le LXC) :
|
||||
- `autosnap = yes` : crée les snapshots
|
||||
- `autoprune = yes` : supprime les anciens snapshots selon la politique de rétention
|
||||
- Sanoid.timer activé
|
||||
|
||||
**Nœud passif** (reçoit la réplication) :
|
||||
- `autosnap = no` : ne crée pas de snapshots (ils arrivent via syncoid)
|
||||
- `autoprune = yes` : supprime les anciens snapshots selon la même politique
|
||||
- Sanoid.timer activé
|
||||
|
||||
Cette approche garantit que les deux nœuds convergent vers le même ensemble de snapshots, évitant l'accumulation indéfinie sur le nœud passif tout en maintenant la synchronisation.
|
||||
|
||||
### Détection Automatique de Première Synchronisation
|
||||
|
||||
|
|
@ -150,7 +164,7 @@ Ces protections garantissent qu'un disque vide ne pourra jamais écraser acciden
|
|||
- **Mise à jour automatique** : Le script vérifie et installe automatiquement les nouvelles versions depuis le dépôt Forgejo avant chaque exécution
|
||||
- **Réplication bidirectionnelle automatique** : S'adapte aux migrations Proxmox HA sans intervention manuelle
|
||||
- **Détection automatique première sync/incrémentale** : Bascule automatiquement entre mode initial et mode incrémental
|
||||
- **Gestion automatique de Sanoid** : Active/désactive Sanoid selon le nœud actif pour éviter les conflits de snapshots
|
||||
- **Configuration dynamique de Sanoid** : Configure automatiquement Sanoid en mode actif ou passif selon le rôle du nœud, conformément aux recommandations de la documentation officielle
|
||||
- **Double protection anti-écrasement** : Vérifications de cohérence des tailles et historique pour prévenir toute perte de données
|
||||
- **Synchronisation récursive du pool** : Tous les datasets sous `zpool1` sont automatiquement inclus
|
||||
- **Contrôle de concurrence par verrou** : Empêche les tâches de réplication simultanées
|
||||
|
|
@ -164,7 +178,7 @@ Ces protections garantissent qu'un disque vide ne pourra jamais écraser acciden
|
|||
```
|
||||
.
|
||||
├── README.md # Ce fichier
|
||||
├── zfs-nfs-replica.sh # Script principal de réplication (version 1.6.0)
|
||||
├── zfs-nfs-replica.sh # Script principal de réplication (version 1.7.0)
|
||||
├── zfs-nfs-replica.service # Définition du service systemd
|
||||
└── zfs-nfs-replica.timer # Configuration du timer systemd
|
||||
```
|
||||
|
|
@ -245,6 +259,10 @@ ha-manager migrate ct:103 elitedesk
|
|||
|
||||
- Cluster Proxmox VE (testé sur 8.x)
|
||||
- Pools ZFS nommés `zpool1` sur les nœuds de production
|
||||
- **Configuration du mount point LXC pour HA** : Le mount point dans la configuration du LXC doit avoir l'option `shared=1` pour permettre le montage sur différents nœuds lors des migrations
|
||||
```
|
||||
mp0: /zpool1/data-nfs-share,mp=/data-nfs-share,shared=1
|
||||
```
|
||||
- Sanoid/Syncoid installés depuis le dépôt officiel Sanoid
|
||||
- Paire de clés SSH dédiée pour la réplication
|
||||
- Conteneur LXC avec rootfs sur LINSTOR/DRBD
|
||||
|
|
|
|||
|
|
@ -11,13 +11,13 @@
|
|||
# - Gère l'activation/désactivation de Sanoid selon le nœud actif
|
||||
#
|
||||
# Auteur : BENE Maël
|
||||
# Version : 1.6.0
|
||||
# Version : 1.7.0
|
||||
#
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
# Configuration
|
||||
SCRIPT_VERSION="1.6.0"
|
||||
SCRIPT_VERSION="1.7.0"
|
||||
REPO_URL="https://forgejo.tellserv.fr/Tellsanguis/zfs-sync-nfs-ha"
|
||||
SCRIPT_URL="${REPO_URL}/raw/branch/main/zfs-nfs-replica.sh"
|
||||
SCRIPT_PATH="${BASH_SOURCE[0]}"
|
||||
|
|
@ -176,30 +176,59 @@ verify_lxc_is_active() {
|
|||
fi
|
||||
}
|
||||
|
||||
# Gestion de Sanoid selon le nœud actif
|
||||
manage_sanoid() {
|
||||
local action="$1" # "enable" ou "disable"
|
||||
# Configuration dynamique de Sanoid selon le rôle
|
||||
configure_sanoid() {
|
||||
local role="$1" # "active" ou "passive"
|
||||
|
||||
if [[ "$role" == "active" ]]; then
|
||||
log "info" "Configuration de Sanoid en mode ACTIF (autosnap=yes, autoprune=yes)"
|
||||
cat > /etc/sanoid/sanoid.conf <<'EOF'
|
||||
[zpool1]
|
||||
use_template = production
|
||||
recursive = yes
|
||||
|
||||
[template_production]
|
||||
hourly = 24
|
||||
daily = 7
|
||||
monthly = 3
|
||||
yearly = 1
|
||||
autosnap = yes
|
||||
autoprune = yes
|
||||
EOF
|
||||
|
||||
if [[ "$action" == "enable" ]]; then
|
||||
# Activer Sanoid sur le nœud actif
|
||||
if systemctl is-enabled sanoid.timer &>/dev/null; then
|
||||
if ! systemctl is-active sanoid.timer &>/dev/null; then
|
||||
log "info" "Activation de Sanoid sur le nœud actif"
|
||||
log "info" "Demarrage de Sanoid sur le noeud actif"
|
||||
systemctl start sanoid.timer
|
||||
fi
|
||||
else
|
||||
log "info" "Activation et démarrage de Sanoid sur le nœud actif"
|
||||
log "info" "Activation et demarrage de Sanoid sur le noeud actif"
|
||||
systemctl enable --now sanoid.timer
|
||||
fi
|
||||
elif [[ "$action" == "disable" ]]; then
|
||||
# Désactiver Sanoid sur le nœud passif
|
||||
if systemctl is-active sanoid.timer &>/dev/null; then
|
||||
log "info" "Désactivation de Sanoid sur le nœud passif"
|
||||
systemctl stop sanoid.timer
|
||||
fi
|
||||
elif [[ "$role" == "passive" ]]; then
|
||||
log "info" "Configuration de Sanoid en mode PASSIF (autosnap=no, autoprune=yes)"
|
||||
cat > /etc/sanoid/sanoid.conf <<'EOF'
|
||||
[zpool1]
|
||||
use_template = production
|
||||
recursive = yes
|
||||
|
||||
[template_production]
|
||||
hourly = 24
|
||||
daily = 7
|
||||
monthly = 3
|
||||
yearly = 1
|
||||
autosnap = no
|
||||
autoprune = yes
|
||||
EOF
|
||||
|
||||
if systemctl is-enabled sanoid.timer &>/dev/null; then
|
||||
log "info" "Désactivation permanente de Sanoid sur le nœud passif"
|
||||
systemctl disable sanoid.timer
|
||||
if ! systemctl is-active sanoid.timer &>/dev/null; then
|
||||
log "info" "Demarrage de Sanoid sur le noeud passif"
|
||||
systemctl start sanoid.timer
|
||||
fi
|
||||
else
|
||||
log "info" "Activation et demarrage de Sanoid sur le noeud passif"
|
||||
systemctl enable --now sanoid.timer
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
|
@ -432,13 +461,13 @@ log "info" "Nœud distant configuré: ${REMOTE_NODE_NAME} (${REMOTE_NODE_IP})"
|
|||
# Triple vérification de sécurité
|
||||
if ! verify_lxc_is_active; then
|
||||
log "info" "Le LXC ${CTID} n'est pas actif sur ce nœud. Pas de réplication nécessaire."
|
||||
# Désactiver Sanoid sur le nœud passif
|
||||
manage_sanoid "disable"
|
||||
# Configurer Sanoid en mode passif
|
||||
configure_sanoid "passive"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Le LXC est actif ici : activer Sanoid sur ce nœud
|
||||
manage_sanoid "enable"
|
||||
# Le LXC est actif ici : configurer Sanoid en mode actif
|
||||
configure_sanoid "active"
|
||||
|
||||
# Vérification de l'existence du pool
|
||||
if ! zpool list "$ZPOOL" &>/dev/null; then
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue