Files
proxmox-ha-setup/scripts/test-failover.sh
2025-11-03 16:49:48 +01:00

101 lines
2.6 KiB
Bash
Executable File

#!/bin/bash
# test-failover.sh
# Script per testare il failover automatico
VIP="192.168.1.210"
VM1_IP="192.168.1.201"
VM2_IP="192.168.1.202"
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m'
echo "=== Test Failover HA ==="
echo ""
# Determina chi ha il VIP
if ssh -p 2222 root@$VM1_IP "ip addr show | grep -q $VIP" &>/dev/null; then
MASTER_VM=$VM1_IP
MASTER_NAME="VM1"
BACKUP_VM=$VM2_IP
BACKUP_NAME="VM2"
elif ssh -p 2222 root@$VM2_IP "ip addr show | grep -q $VIP" &>/dev/null; then
MASTER_VM=$VM2_IP
MASTER_NAME="VM2"
BACKUP_VM=$VM1_IP
BACKUP_NAME="VM1"
else
echo -e "${RED}Errore: nessuna VM ha il VIP!${NC}"
exit 1
fi
echo -e "${GREEN}$MASTER_NAME ($MASTER_VM) è attualmente MASTER${NC}"
echo -e "${YELLOW}$BACKUP_NAME ($BACKUP_VM) è attualmente BACKUP${NC}"
echo ""
read -p "Vuoi simulare un failure del MASTER? (y/N) " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
echo "Test annullato"
exit 0
fi
echo ""
echo "1. Stato iniziale:"
echo " VIP su: $MASTER_NAME"
ping -c 1 -W 2 $VIP &>/dev/null && echo -e " ${GREEN}VIP risponde al ping${NC}" || echo -e " ${RED}VIP non risponde${NC}"
echo ""
echo "2. Simulo failure di $MASTER_NAME (stop keepalived)..."
ssh root@$MASTER_VM "docker compose -f /opt/myapp/docker-compose.yml stop keepalived"
echo ""
echo "3. Attendo failover (15 secondi)..."
sleep 15
echo ""
echo "4. Verifico nuovo MASTER:"
if ssh root@$BACKUP_VM "ip addr show | grep -q $VIP" &>/dev/null; then
echo -e " ${GREEN}$BACKUP_NAME ha preso il VIP (FAILOVER RIUSCITO!)${NC}"
else
echo -e " ${RED}$BACKUP_NAME non ha il VIP (FAILOVER FALLITO!)${NC}"
fi
echo ""
echo "5. Test connettività VIP:"
if ping -c 1 -W 2 $VIP &>/dev/null; then
echo -e " ${GREEN}✓ VIP risponde al ping${NC}"
else
echo -e " ${RED}✗ VIP non risponde${NC}"
fi
echo ""
echo "6. Test servizi FTP:"
if timeout 5 bash -c "echo quit | nc $VIP 21" &>/dev/null; then
echo -e " ${GREEN}✓ FTP risponde${NC}"
else
echo -e " ${YELLOW}⚠ FTP non risponde (potrebbe essere normale)${NC}"
fi
echo ""
read -p "Vuoi ripristinare il MASTER originale? (y/N) " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
echo ""
echo "7. Ripristino $MASTER_NAME..."
ssh root@$MASTER_VM "docker compose -f /opt/myapp/docker-compose.yml start keepalived"
echo " Attendo 15 secondi..."
sleep 15
if ssh root@$MASTER_VM "ip addr show | grep -q $VIP" &>/dev/null; then
echo -e " ${GREEN}$MASTER_NAME ha ripreso il VIP${NC}"
else
echo -e " ${YELLOW}$BACKUP_NAME ha ancora il VIP (normale)${NC}"
fi
fi
echo ""
echo "=== Test completato ==="