feat(cluster): module Haute Disponibilité (Cluster HA Actif/Passif Keepalived VRRP & Réplication temps réel)
This commit is contained in:
1 parent
bee2055b62
commit
521f21dc9c
10 files changed
+1310
-7
No files matched your search
Executable
+23
@@ -0,0 +1,23 @@
|
||||
#!/usr/bin/env bash
|
||||
# ==============================================================================
|
||||
# NexusPBX HA - Script de surveillance de santé d'Asterisk pour Keepalived VRRP
|
||||
# ==============================================================================
|
||||
set -euo pipefail
|
||||
|
||||
# 1. Vérifie si le binaire et le démon asterisk tournent
|
||||
if ! pidof asterisk >/dev/null 2>&1; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 2. Teste si Asterisk répond aux requêtes AMI/CLI (core ping)
|
||||
PING_RESP=$(asterisk -rx "core ping" 2>/dev/null || true)
|
||||
if echo "$PING_RESP" | grep -q "Pong"; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# 3. Tentative alternative via core show version
|
||||
if asterisk -rx "core show version" >/dev/null 2>&1; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
exit 1
|
||||
Executable
+19
@@ -0,0 +1,19 @@
|
||||
#!/usr/bin/env bash
|
||||
# ==============================================================================
|
||||
# NexusPBX HA - Notification Keepalived : Transition vers l'état BACKUP / STANDBY
|
||||
# ==============================================================================
|
||||
set -euo pipefail
|
||||
|
||||
LOG_FILE="/var/log/nexus_cluster.log"
|
||||
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
|
||||
|
||||
echo "[$TIMESTAMP] [CLUSTER] <<< Transition vers l'état BACKUP / STANDBY (En veille) >>>" >> "$LOG_FILE"
|
||||
|
||||
# 1. Mise à jour de l'état en base locale
|
||||
DB_PATH="/var/www/nexus-pbx/storage/database.sqlite"
|
||||
if [ -f "$DB_PATH" ]; then
|
||||
sqlite3 "$DB_PATH" "UPDATE cluster_settings SET last_sync_status='standby_idle', updated_at=CURRENT_TIMESTAMP WHERE id=1;" 2>/dev/null || true
|
||||
fi
|
||||
|
||||
echo "[$TIMESTAMP] [CLUSTER] Mode Standby actif. En écoute des battements de cœur VRRP." >> "$LOG_FILE"
|
||||
exit 0
|
||||
Executable
+17
@@ -0,0 +1,17 @@
|
||||
#!/usr/bin/env bash
|
||||
# ==============================================================================
|
||||
# NexusPBX HA - Notification Keepalived : Transition vers l'état FAULT / ERREUR
|
||||
# ==============================================================================
|
||||
set -euo pipefail
|
||||
|
||||
LOG_FILE="/var/log/nexus_cluster.log"
|
||||
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
|
||||
|
||||
echo "[$TIMESTAMP] [CLUSTER] [ALERTE] ÉTAT FAULT DÉTECTÉ sur le nœud !" >> "$LOG_FILE"
|
||||
|
||||
DB_PATH="/var/www/nexus-pbx/storage/database.sqlite"
|
||||
if [ -f "$DB_PATH" ]; then
|
||||
sqlite3 "$DB_PATH" "UPDATE cluster_settings SET last_sync_status='fault', updated_at=CURRENT_TIMESTAMP WHERE id=1;" 2>/dev/null || true
|
||||
fi
|
||||
|
||||
exit 0
|
||||
Executable
+32
@@ -0,0 +1,32 @@
|
||||
#!/usr/bin/env bash
|
||||
# ==============================================================================
|
||||
# NexusPBX HA - Notification Keepalived : Transition vers l'état MASTER
|
||||
# ==============================================================================
|
||||
set -euo pipefail
|
||||
|
||||
LOG_FILE="/var/log/nexus_cluster.log"
|
||||
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
|
||||
|
||||
echo "[$TIMESTAMP] [CLUSTER] >>> Transition vers l'état MASTER (VIP active) <<<" >> "$LOG_FILE"
|
||||
|
||||
# 1. Mise à jour de l'état en base de données locale si SQLite disponible
|
||||
DB_PATH="/var/www/nexus-pbx/storage/database.sqlite"
|
||||
if [ -f "$DB_PATH" ]; then
|
||||
sqlite3 "$DB_PATH" "UPDATE cluster_settings SET last_sync_status='master_active', updated_at=CURRENT_TIMESTAMP WHERE id=1;" 2>/dev/null || true
|
||||
fi
|
||||
|
||||
# 2. Réactivation des enregistrements Trunks PJSIP et rechargement de la config
|
||||
if pidof asterisk >/dev/null 2>&1; then
|
||||
asterisk -rx "pjsip reload" >> "$LOG_FILE" 2>&1 || true
|
||||
asterisk -rx "dialplan reload" >> "$LOG_FILE" 2>&1 || true
|
||||
fi
|
||||
|
||||
# 3. Gratuitous ARP optionnel si arping est présent
|
||||
VIP=$(sqlite3 "$DB_PATH" "SELECT virtual_ip FROM cluster_settings WHERE id=1;" 2>/dev/null || echo "")
|
||||
IFACE=$(sqlite3 "$DB_PATH" "SELECT interface FROM cluster_settings WHERE id=1;" 2>/dev/null || echo "eth0")
|
||||
if [ -n "$VIP" ] && command -v arping >/dev/null 2>&1; then
|
||||
arping -c 3 -U -I "$IFACE" "$VIP" >> "$LOG_FILE" 2>&1 || true
|
||||
fi
|
||||
|
||||
echo "[$TIMESTAMP] [CLUSTER] Prise de relais MASTER terminée avec succès." >> "$LOG_FILE"
|
||||
exit 0
|
||||
Reference in new issue
Block a user