#!/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