-
Haute Disponibilité avec HAST et CARP et ZFS
Soit 2 serveurs nX sous FreeBSD 14.0.
On considère la configuration réseau effective sur les serveurs :
10.10.10.10 n1
10.10.10.20 n2
Chaque serveur possède 2 supports de stockage.
- Un support pour le système,
- l'autre pour le stockage des données, qui sera dévolu à HAST (genre 16Go).
Le second support fait la même taille sur les 2 serveurs.
Nous aurons besoin d'une IP libre sur le réseau 10.10.10.0/24 pour notre VIP
Décidons par exemple que la VIP aura pour IP : 10.10.10.50
### SUR n1
- Vérifier le nom de la carte réseau connectée :ifconfig # prenons em0 pour exemple
- Configurer le bon nom d'hôte, la bonne adresse IP et la route par défaut puis redémarrez
sysrc hostname=n1
sysrc ifconfig_em0="inet 10.10.10.10 netmask 255.255.255.0"
sysrc defaultrouter="10.10.10.1"
reboot
### SUR n2
- Vérifier le nom de la carte réseau connectée :ifconfig # prenons em0 pour exemple
- Configurer le bon nom d'hôte, la bonne adresse IP et la route par défaut puis redémarrez
sysrc hostname=n2
sysrc ifconfig_em0="inet 10.10.10.20 netmask 255.255.255.0"
sysrc defaultrouter="10.10.10.1"
eboot
### SUR n1 ET n2 :
- Ajouter le service pour un lancement au démarrage des serveurs :sysrc hastd_enable="YES"
- Renseigner le fichier /etc/hosts pour que chaque nX connaisse l'IP de l'autre :
10.10.10.10 n1
10.10.10.20 n2- Repérer les périphériques de stockage dévolus pour HAST :
camcontrol devlist
(on va dire que sur n1 j'ai ada1 et sur n2 ada1 aussi)
- Créer le fichier de configuration /etc/hast.confresource shared {
on n1 {
local /dev/ada1
remote n2
}
on n2 {
local /dev/ada1
remote n1
}
replication memsync
}
# Démarrer le service HAST :service hastd start
### SUR n1
# Définir n1 comme serveur primaire :hastctl role init shared
hastctl create shared
hastctl role primary shared
### SUR n2
# Définir n2 comme serveur secondaire :hastctl role init shared
hastctl create shared
hastctl role secondary shared
### SUR n1 ET n2
# Vérifier l'état de la configuration HAST :hastctl status shared # il doit être "completed" sur les n1 et n2
# LA CONFIGURATION DE HAST EST TERMINEE.
##############################
# CONFIGURATION DU POOL ZFS
### SUR n1
- Créer le pool ZFS sur le périphérique HAST :zpool create hastpool /dev/hast/shared
- Créer un système de fichiers ZFS
zfs create hastpool/shared
# LA CONFIGURATION ZFS EST TERMINEE.
##############################
# TESTER HAST MANUELLEMENT (AVANT DE METTRE CARP EN PLACE)
### SUR n1
# Créer un fichier de test :echo "Hello from n1" > /hastpool/shared/testfile.txt
- Changer le rôle de n1 à secondaire :
zpool export hastpool
hastctl role secondary shared
### SUR n2
# Changer le rôle de n2 à primaire :hastctl role primary shared
zpool import hastpool
- Regarder si le fichier y est :
cat /hastpool/shared/testfile.txt
# LE TEST EST CONCLUANT
# REFAIRE LE CHEMIN INVERSE POUR REMETTRE n1 EN PRIMARY
##############################
# QUE FAIRE EN CAS DE PLANTAGE ET DE REDEMARRAGE DES 2 SERVEURS :
### SUR n1 ET n2 :
# Démarrer le service HAST :service hastd start
### SUR n1
# Définir n1 comme serveur primairehastctl role init shared
hastctl create shared
hastctl role primary shared
### SUR n2
# Définir n2 comme serveur secondaire :hastctl role init shared
hastctl create shared
hastctl role secondary shared
### SUR n1
# Remonter le poolzpool import hastpool
##############################
# CONFIGURATION DE UCARP POUR LA HAUTE DISPONIBILITE (ECHANGE DE VIP)
### SUR n1 ET n2
- Installer ucarppkg ins -y ucarp
# Créer les scripts de montée et descente de la VIP :
- /usr/local/etc/ucarp-up.sh :#!/bin/sh
/sbin/ifconfig $1 alias $2 netmask 255.255.255.255- /usr/local/etc/ucarp-down.sh :
#!/bin/sh
/sbin/ifconfig $1 -alias $2 2>/dev/null- Ne pas oublier de les rendre exécutables :
chmod +x /usr/local/etc/ucarp-up.sh
chmod +x /usr/local/etc/ucarp-down.sh
- Créer un script de démarrage personnalisé : /usr/local/etc/rc.d/ucarp_custom
#!/bin/sh
# PROVIDE: ucarp_custom
# REQUIRE: NETWORKING
# BEFORE: DAEMON
# KEYWORD: shutdown
. /etc/rc.subr
name="ucarp_custom"
rcvar="ucarp_custom_enable"
start_cmd="${name}_start"
stop_cmd="${name}_stop"
ucarp_custom_start() {
/usr/local/sbin/ucarp -i ${ucarp_if} -s ${ucarp_src} -v ${ucarp_vhid} -p ${ucarp_pass} -a ${ucarp_addr} -b ${ucarp_advbase} -k ${ucarp_advskew} -P -u /usr/local/etc/ucarp-up.sh -d /usr/local/etc/ucarp-down.sh &
echo $! > /var/run/ucarp_${ucarp_vhid}.pid
}
ucarp_custom_stop() {
if [ -f /var/run/ucarp_${ucarp_vhid}.pid ]; then
kill $(cat /var/run/ucarp_${ucarp_vhid}.pid)
rm /var/run/ucarp_${ucarp_vhid}.pid
fi
}
load_rc_config $name
run_rc_command "$1"- Ne pas oublier de le rendre exécutable :
chmod +x /usr/local/etc/rc.d/ucarp_custom
### SUR n1 uniquement :
- Pour un lancement des options de ucarp au démarrage du service :sysrc ucarp_custom_enable="YES"
sysrc ucarp_if="em0"
sysrc ucarp_src="10.10.10.10"
sysrc ucarp_pass="testpass"
sysrc ucarp_vhid="1"
sysrc ucarp_addr="10.10.10.50"
sysrc ucarp_advbase="1"
sysrc ucarp_advskew="1"
### SUR n2 uniquement :
- Pour un lancement des options de ucarp au démarrage du service :sysrc ucarp_custom_enable="YES"
sysrc ucarp_if="em0"
sysrc ucarp_src="10.10.10.20"
sysrc ucarp_pass="testpass"
sysrc ucarp_vhid="1"
sysrc ucarp_addr="10.10.10.50"
sysrc ucarp_advbase="1"
sysrc ucarp_advskew="100"
### SUR n1 PUIS n2 :
# Démarrer le protocole CARP :service ucarp_custom start
# LE SYSTEME DE HA EST EN PLACE
##############################
# TEST FINAL DE LA HA :
### SUR n1service ucarp_custom start
### SUR n2service ucarp_custom start
### SUR n1ifconfig em0
# (vous devez voir l'attribution de la VIP sur em0)
### SUR n1
# A présent, c'est le grand test !
# Eteignez n1 ! et regardez ce qui se passe sur le prompt de n2 :poweroff
### SUR n2
# Regardez l'attribution de la VIPifconfig em0
# LE TEST EST CONCLUANT
### SUR n1
# Rallumer n1 à présent et regarder si la VIP revient sur n1ifconfig em0
# (oui, la VIP est revenue sur n1)
##############################
# importation forcée du pool
# Nous avons un problème.
# Si n1 tombe, n2 prend le relais de la VIP. Cela fonctionne !
# Mais, le pool hastpool ne se réimporte pas automatiquement... Il faut le remonter manuellement pour l'instant (je vous laisse scripter ça !)
Tags : HA, failover, haute, disponibilité, HAST, freebsd, carp
-
Commentaires