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