Aller au contenu principal

Squid - Cluster

1. Description​

  • Mise en place d'un cluster pour assurer la haute disponibilité
             [Clients]
|
Virtual IP (ex: 192.168.38.16)
|
----------------------------
| |
[Squid1] (Master) [Squid2] (Backup)
| |
↘ Internet ↙

1.1. squid2.home.lab​

Caractéristiques
RAM2 Go
CPU2 coeurs
Disque10 Go
IP admin192.168.38.15squid2.home.lab
VIP192.168.38.16squid.home.lab
BriqueBC3b

2. Installation​

2.1. Cloner la VM squid1.home.lab​

  • Cloner la VM squid1.home.lab
  • Configurer la nouvelle adresse IP : 192.168.38.15
  • Vérifier le fonctionnement du proxy

3. Haute disponibillité avec Keepalived​

3.1. Installer keepalived​

$ sudo yum install keepalived
  • J'ai eu pas mal de problème pour trouver les bonnes priorités pour le MASTER et le BACKUP afin que la bascule s'effectue correctement entre les 2 noeuds du cluster de haute disponibilité
    • Master squid OK : priority = 100 + 0 = 100
    • Master squid KO : priority = 100 - 20 = 80
    • Backup squid OK : priority = 90 + 0 = 90
    • Backup squid KO : priority = 90 - 20 = 70

3.2. Configurer keepalived sur squid1​

  • Modifier le fichier /etc/keepalived/keepalived.conf
global_defs {
router_id SQUID1
enable_script_security
script_user squid
}

vrrp_script chk_squid {
script "/opt/keepalived_check_squid.sh"
interval 5
weight -20
fall 3
rise 2
}

vrrp_instance VI_SQUID {
state MASTER
interface eth0
virtual_router_id 16
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass secret123
}
virtual_ipaddress {
192.168.38.16/24 dev eth0
}
track_script {
chk_squid
}
}

3.3. Configurer keepalived sur squid2​

global_defs {
router_id SQUID2
enable_script_security
script_user squid
}

vrrp_script chk_squid {
script "/opt/keepalived_check_squid.sh"
interval 5
weight -20
fall 3
rise 2
}

vrrp_instance VI_SQUID {
state BACKUP
interface eth0
virtual_router_id 16
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass secret123
}
virtual_ipaddress {
192.168.38.16/24 dev eth0
}
track_script {
chk_squid
}
}

3.4. Créer le script check_squid.sh​

  • Sur les deux serveurs, créer le script /opt/keepalived_check_squid.sh
/opt/keepalived_check_squid.sh
#!/bin/bash

# Configuration
SQUID_PORT=3128
TEST_URL="http://www.google.com"
TIMEOUT=5
LOG_FILE="/var/log/squid/keepalived.log"

# Fonction de log
log_message() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> $LOG_FILE
}

# Test 1: Vérifier si le processus Squid est actif
if ! pgrep -x "squid" > /dev/null; then
log_message "CRITICAL: Processus Squid non trouvé"
exit 1
fi

# Test 5: Vérifier l'espace disque du cache
CACHE_USAGE=$(df /var/spool/squid | awk 'NR==2 {print $5}' | sed 's/%//')
if [ "$CACHE_USAGE" -gt 90 ]; then
log_message "WARNING: Espace cache faible: ${CACHE_USAGE}%"
fi

log_message "INFO: Tous les tests passés avec succès"
exit 0
  • Changer les permissions du script
$ sudo chmod a+x /opt/keepalived_check_squid.sh
$ sudo chown squid:root /opt/keepalived_check_squid
  • Activer keepalived
$ sudo systemctl enable --now keepalived

3.5. Configurer les règles de firewall​

$ sudo firewall-cmd --permanent --add-rich-rule='rule protocol value="ah" accept'
$ sudo firewall-cmd --reload

3.6. Configurer la rotation des logs​

  • Créer le fichier /etc/logrotate.d/keepalived_squid
/var/log/squid/keepalived.log {
weekly
missingok
rotate 4
copytruncate
minsize 1M
}

4. Test de l'installation​

  • Pinguer l'adresse IP virtuelle : 192.168.38.16
$ ping 192.168.38.16
  • Stopper squid sur le le serveur squid1
$ sudo systemctl stop squid
  • L'adresse IP virtuelle devrait basculer sur le serveur squid2

5. Monitoring avec Prometheus+Grafana​

  • Créer le script /opt/metrics_keepalived_squid.sh
/opt/metrics_keepalived_squid.sh
#!/bin/bash
OUTFILE="/var/lib/node_exporter/cluster.prom"
mkdir -p "$(dirname "$OUTFILE")"

# Squid
if systemctl is-active --quiet squid; then
echo 'squid_status 1' > "$OUTFILE"
else
echo 'squid_status 0' > "$OUTFILE"
fi

# Keepalived
if systemctl is-active --quiet keepalived; then
echo 'keepalived_status 1' >> "$OUTFILE"
else
echo 'keepalived_status 0' >> "$OUTFILE"
fi

# VIP presence
if ip addr | grep -q "192.168.1.100"; then
echo 'vip_present 1' >> "$OUTFILE"
else
echo 'vip_present 0' >> "$OUTFILE"
fi
  • Changer les permissions du script
$ sudo chmod a+x /opt/metrics_keepalived_squid.sh
  • Ajouter le script dans la crontab
* * * * * root /opt/metrics_keepalived_squid.sh