Files
proxmox-ha-setup/scripts/test-failover.sh
2025-11-03 17:36:44 +01:00

117 lines
3.3 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 -p 2222 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 -p 2222 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 e SFTP:"
# Test FTP (porta 21) - verifica solo che il server risponda
if timeout 2 bash -c "echo -e 'QUIT\r' | nc -w 1 $VIP 21 2>/dev/null | grep -q '220'" 2>/dev/null; then
echo -e " ${GREEN}✓ FTP risponde sulla porta 21${NC}"
else
echo -e " ${RED}✗ FTP non risponde${NC}"
fi
# Test SFTP (porta 22) - verifica che il server SSH/SFTP risponda
if timeout 2 bash -c "echo '' | nc -w 1 $VIP 22 2>/dev/null | grep -q 'SSH'" 2>/dev/null; then
echo -e " ${GREEN}✓ SFTP risponde sulla porta 22${NC}"
else
echo -e " ${RED}✗ SFTP non risponde${NC}"
fi
# Test MySQL (porta 3306) - verifica che il server risponda
if timeout 2 bash -c "echo '' | nc -w 1 $VIP 3306 2>/dev/null" >/dev/null 2>&1; then
echo -e " ${GREEN}✓ MySQL risponde sulla porta 3306${NC}"
else
echo -e " ${RED}✗ MySQL non risponde${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 -p 2222 root@$MASTER_VM "docker compose -f /opt/myapp/docker-compose.yml start keepalived"
echo " Attendo 15 secondi..."
sleep 15
if ssh -p 2222 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 ==="