Prérequis
- Apache doit être installé sur 2 nœuds ou plus (machines virtuelles ou serveurs physiques).
Installation du package sous Windows
-
Téléchargez la version gratuite de SafeKit sur 2 nœuds Windows (ou plus).
Remarque : la version gratuite inclut toutes les fonctionnalités de SafeKit. À la fin de l'essai, vous pouvez activer des clés de licence permanentes sans désinstaller le package.
-
Pour ouvrir le pare-feu Windows, sur les deux nœuds démarrez un powershell en tant qu'administrateur et tapez
c:/safekit/private/bin/firewallcfg add
-
Pour initialiser le mot de passe de l'utilisateur admin par défaut de la console, sur les deux nœuds démarrez un powershell en tant qu'administrateur et tapez
c:/safekit/private/bin/webservercfg.ps1 -passwd mdp
- Utilisez des caractères alphanumériques pour le mot de passe (pas de caractères spéciaux).
- mdp doit être le même sur les deux nœuds.
-
Exclure des analyses antivirus C:\safekit\ (le répertoire d'installation par défaut) et tous les dossiers répliqués que vous allez définir.
Les antivirus peuvent rencontrer des problèmes de détection avec SafeKit en raison de son intégration étroite avec le système d'exploitation, de ses mécanismes d'IP virtuelle, de sa réplication en temps réel et du redémarrage de services critiques.
Installation du module sous Windows
-
Téléchargez le module apache_farm.safe.
Le module est gratuit. Il contient les fichiers userconfig.xml et les scripts de redémarrage.
- Mettez apache_farm.safe sous C:\safekit\Application_Modules\generic\.
Installation du package sous Linux
-
Installez la version gratuite de SafeKit sur 2 nœuds Linux (ou plus).
Remarque : l'essai gratuit inclut toutes les fonctionnalités de SafeKit. À la fin de l'essai, vous pouvez activer des clés de licence permanentes sans désinstaller le package.
-
Après le téléchargement du package safekit_xx.bin, exécutez-le pour extraire le rpm et le script safekitinstall, puis exécutez le script safekitinstall
-
Répondez oui à la configuration automatique du pare-feu
-
Définissez le mot de passe pour la console Web et l'utilisateur par défaut admin.
- Utilisez des caractères alphanumériques pour le mot de passe (pas de caractères spéciaux).
- Le mot de passe doit être le même sur les deux nœuds.
Installation du module sous Linux
-
Téléchargez le module apache_farm.safe.
Le module est gratuit. Il contient les fichiers userconfig.xml et les scripts de redémarrage.
- Mettre apache_farm.safe sous /opt/safekit/Application_Modules/generic/.
1. Lancez la console SafeKit
- Lancez la console Web dans un navigateur sur un nœud du cluster en vous connectant à
http://localhost:9010
. - Entrez
admin
comme nom d'utilisateur et le mot de passe défini lors de l'installation.
Vous pouvez également exécuter la console dans un navigateur sur un poste de travail externe au cluster.
La configuration de SafeKit se fait sur les deux nœuds à partir d'un seul navigateur.
Pour sécuriser la console Web, consultez 11. Sécurisation du service web de SafeKit dans le Guide de l'utilisateur.
2. Configurer les adresses des nœuds
- Entrez les adresses IP des nœuds et appuyez sur la touche Tabulation pour vérifier la connectivité et remplir le nom des nœuds.
- Ensuite, cliquez sur
Save and apply
pour enregistrer la configuration.
Si le nœud 1 ou le nœud 2 a une couleur rouge, vérifiez la connectivité du navigateur aux deux nœuds et vérifiez le pare-feu sur les deux nœuds pour résoudre le problème.
Dans une architecture ferme, vous pouvez définir plus de 2 nœuds.
Si vous le souhaitez, vous pouvez ajouter un nouveau LAN pour un deuxième heartbeat.
Cette opération placera les adresses IP dans le fichier cluster.xml
sur les deux nœuds (plus d'informations dans le training avec les lignes de commande).
4. Configurer le module
- Choisissez un démarrage
Automatic
du module au boot sans délai dansModule startup at boot
. - Normalement, vous disposez d'un seul réseau
Heartbeat
à moins que vous ayez ajouter un LAN à l'étape 2. - Saisissez une
Virtual IP address
.
Une adresse IP virtuelle est une adresse IP standard dans le même réseau IP (même sous-réseau) que les adresses IP des deux nœuds.
Les clients de l'application doivent être configurés avec l'adresse IP virtuelle (ou le nom DNS associé à l'adresse IP virtuelle). - Définissez le port du service sur lequel réaliser le load balancing (ex. : TCP 80 pour HTTP, TCP 443 pour HTTPS, TCP 9010 dans l'exemple).
- Définissez la règle d'équilibrage de charge,
Source address
ouSource port
:- avec l'adresse IP source du client, le même client sera connecté au même nœud de la ferme sur plusieurs sessions TCP et récupérera son contexte sur le nœud.
- avec le port TCP source du client, le même client sera connecté à différents nœuds de la ferme sur plusieurs sessions TCP (sans retrouver un contexte).
- Notez que si un nom de processus est affiché dans
Monitored processes/services
, il sera surveillé avec une action de redémarrage en cas de panne. La configuration d'un mauvais nom de processus entraînera l'arrêt du module juste après son démarrage.
5. Modifier les scripts (facultatif)
start_both
etstop_both
doivent contenir le démarrage et l'arrêt de l'application Apache (exemple fourni pour Microsoft IIS à droite).- Vous pouvez ajouter de nouveaux services dans ces scripts.
- Vérifiez que les noms des services démarrés dans ces scripts sont ceux installés sur les deux nœuds, sinon modifiez-les dans les scripts.
- Sous Windows et sur les deux nœuds, avec le gestionnaire de services Windows, définissez
Boot Startup Type = Manual
pour tous les services démarrés dansstart_both
(SafeKit contrôle le démarrage des services dansstart_both
).
8. Attendez la transition vers UP (vert) / UP (vert)
- Le nœud 1 et le nœud 2 doivent atteindre l'état UP (vert), ce qui signifie que le script
start_both
a été exécuté sur le nœud 1 et le nœud 2.
Si UP (vert) n’est pas atteint ou si l'application n'est pas démarrée, analysez pourquoi avec le journal du module du nœud 1 ou du nœud 2.
- cliquez sur l'icône « journal » de
node1
ounode2
pour ouvrir le journal du module et recherchez des messages d'erreur tels qu'un checker détectant une erreur et arrêtant le module. - cliquez sur
start_both
dans le journal : les messages de sortie du script sont affichés à droite et des erreurs peuvent être détectées comme un service mal démarré.
9. Test
SafeKit apporte un test intégré dans le produit :
- Configurez une règle pour le port TCP 9010 avec un équilibrage de charge sur le port TCP source.
- Connectez un poste de travail externe en dehors des nœuds de la ferme.
- Démarrez un navigateur sur http://virtual-ip:9010/safekit/mosaic.html.
Vous devriez voir une mosaïque de couleurs en fonction des nœuds répondant aux requêtes HTTP.
- Arrêtez un nœud UP (vert) en faisant défiler son menu contextuel et en cliquant sur Stop.
- Vérifiez qu'il n'y a plus de connexions TCP sur le nœud arrêté et sur l'adresse IP virtuelle.
10. Support
- Pour obtenir du support, prenez deux
snapshots
SafeKit (deux fichiers .zip), un pour chaque nœud. - Si vous avez un compte sur https://support.evidian.com, téléchargez-les dans l'outil call desk.
Fichiers internes de SafeKit pour l'équilibrage de charge de Apache avec haute disponibilité
Allez dans le tab Advanced Configuration dans la console pour modifier les fichiers ci-dessous.Fichiers internes au module Windows apache_farm.safe
userconfig.xml sur Windows (description dans le guide de l'utilisateur)
<!DOCTYPE safe>
<safe>
<macro name="VIRTUAL_IP" value="VIRTUAL_IP_TO_BE_DEFINED" />
<macro name="APACHE_PORT" value="TCP_PORT_TO_BE_DEFINED" />
<service mode="farm" maxloop="3" loop_interval="24">
<!-- Farm topology configuration for the membership protocol -->
<!-- Names or IP addresses on the default network are set during initialization in the console -->
<farm>
<lan name="default" />
</farm>
<!-- Virtual IP Configuration -->
<!-- Use VIRTUAL_IP defined in macro above -->
<vip>
<interface_list>
<interface check="on" arpreroute="on">
<virtual_interface type="vmac_directed">
<virtual_addr addr="%VIRTUAL_IP%" where="alias"/>
</virtual_interface>
</interface>
</interface_list>
<loadbalancing_list>
<group name="APACHE">
<!-- Set load-balancing rule on APACHE_PORT defined in macro above -->
<rule port="%APACHE_PORT%" proto="tcp" filter="on_addr"/>
</group>
</loadbalancing_list>
</vip>
<!-- TCP Checker Configuration -->
<!-- Use VIRTUAL_IP and APACHE_PORT defined in macros above -->
<check>
<tcp ident="HTTP_APACHE" when="both">
<to
addr="%VIRTUAL_IP%"
port="%APACHE_PORT%"
interval="10"
timeout="5"
/>
</tcp>
</check>
<!-- User scripts activation -->
<user nicestoptimeout="300" forcestoptimeout="300" logging="userlog" />
</service>
</safe>
start_both.cmd sur Windows
@echo off
rem Script called on all servers for starting applications
rem For logging into SafeKit log use:
rem "%SAFE%\safekit" printi | printe "message"
rem stdout goes into Application log
echo "Running start_both %*"
set res=0
net start Apache2
if not %errorlevel% == 0 (
%SAFE%\safekit printi "Apache start failed"
) else (
%SAFE%\safekit printi "Apache started"
)
set res=%errorlevel%
if %res% == 0 goto end
:stop
set res=%errorlevel%
"%SAFE%\safekit" printe "start_both failed"
rem uncomment to stop SafeKit when critical
rem "%SAFE%\safekit" stop -i "start_both"
:end
stop_both.cmd sur Windows
@echo off
rem Script called on all servers for stopping application
rem For logging into SafeKit log use:
rem "%SAFE%\safekit" printi | printe "message"
rem ----------------------------------------------------------
rem
rem 2 stop modes:
rem
rem - graceful stop
rem call standard application stop with net stop
rem
rem - force stop (%1=force)
rem kill application's processes
rem
rem ----------------------------------------------------------
rem stdout goes into Application log
echo "Running stop_both %*"
set res=0
rem default: no action on forcestop
if "%1" == "force" goto end
%SAFE%\safekit printi "Stopping Apache..."
net stop Apache2
rem If necessary, uncomment to wait for the real stop of services
rem "%SAFEBIN%\sleep" 10
if %res% == 0 goto end
"%SAFE%\safekit" printe "stop_both failed"
:end
Fichiers internes au module Linux apache_farm.safe
userconfig.xml sur Linux (description dans le guide de l'utilisateur)
<!DOCTYPE safe>
<safe>
<macro name="VIRTUAL_IP" value="VIRTUAL_IP_TO_BE_DEFINED" />
<macro name="APACHE_PORT" value="TCP_PORT_TO_BE_DEFINED" />
<service mode="farm" maxloop="3" loop_interval="24">
<!-- Farm topology configuration for the membership protocol -->
<!-- Names or IP addresses on the default network are set during initialization in the console -->
<farm>
<lan name="default" />
</farm>
<!-- Virtual IP Configuration -->
<!-- Use VIRTUAL_IP defined in macro above -->
<vip>
<interface_list>
<interface check="on" arpreroute="on">
<virtual_interface type="vmac_directed">
<virtual_addr addr="%VIRTUAL_IP%" where="alias"/>
</virtual_interface>
</interface>
</interface_list>
<loadbalancing_list>
<group name="APACHE">
<!-- Set load-balancing rule on APACHE_PORT defined in macro above -->
<rule port="%APACHE_PORT%" proto="tcp" filter="on_addr"/>
</group>
</loadbalancing_list>
</vip>
<!-- TCP Checker Configuration -->
<!-- Use VIRTUAL_IP and APACHE_PORT defined in macros above -->
<check>
<tcp ident="HTTP_APACHE" when="both">
<to
addr="%VIRTUAL_IP%"
port="%APACHE_PORT%"
interval="10"
timeout="5"
/>
</tcp>
</check>
<!-- User scripts activation -->
<user nicestoptimeout="300" forcestoptimeout="300" logging="userlog" />
</service>
</safe>
start_both sur Linux
#!/bin/sh
# Script called on the primary server for starting applications
# For logging into SafeKit log use:
# $SAFE/safekit printi | printe "message"
#---------- Clean Apache residual processes
# Call this function before starting Apache
# to clean eventual resual Apache processes
clean_Apache()
{
retval=0
$SAFE/safekit printw "Cleaning Apache processes"
# kill started Apache processes
ps -e -o pid,comm | grep httpd | $AWK '{print "kill " $1}'| sh >/dev/null 2>&1
return $retval
}
#---------- Apache
# Call this function for starting Apache Server
start_Apache()
{
retval=0
$SAFE/safekit printw "Starting Apache Server"
# Apache - Starting
service httpd start
if [ $? -ne 0 ] ; then
$SAFE/safekit printw "Apache server start failed"
else
$SAFE/safekit printw "Apache server started"
fi
return $retval
}
# stdout goes into Application log
echo "Running start_both $*"
res=0
[ -z "$OSNAME" ] && OSNAME=`uname -s`
OSNAME=`uname -s`
case "$OSNAME" in
Linux)
AWK=/bin/awk
;;
*)
AWK=/usr/bin/awk
;;
esac
# TODO
# remove Apache boot start
# Clean Apache residual processes
clean_Apache || res=$?
# Start Apache
start_Apache || res=$?
if [ $res -ne 0 ] ; then
$SAFE/safekit printi "start_both failed"
# uncomment to stop SafeKit when critical
# $SAFE/safekit stop -i "start_both"
fi
exit 0
stop_both sur Linux
#!/bin/sh
# Script called on the primary server for stopping application services
# For logging into SafeKit log use:
# $SAFE/safekit printi | printe "message"
#----------------------------------------------------------
#
# 2 stop modes:
#
# - graceful stop
# call standard application stop
#
# - force stop ($1=force)
# kill application's processes
#
#----------------------------------------------------------
#---------- Clean Apache residual processes
# Call this function on force stop
# to clean eventual resual Apache processes
clean_Apache()
{
retval=0
$SAFE/safekit printw "Cleaning Apache processes "
# kill started Apache
ps -e -o pid,comm | grep httpd | $AWK '{print "kill -9 " $1}'| sh >/dev/null 2>&1
return $retval
}
#---------- Apache
# Call this function for stopping Apache
stop_Apache()
{
retval=0
if [ "$1" = "force" ] ; then
# Apache force stop
clean_Apache
return $retval
fi
# Apache graceful stop
$SAFE/safekit printw "Stopping Apache server"
service httpd stop
if [ $? -ne 0 ] ; then
$SAFE/safekit printw "Apache server stop failed"
else
$SAFE/safekit printw "Apache server stopped"
fi
return $retval
}
# stdout goes into Application log
echo "Running stop_both $*"
res=0
[ -z "$OSNAME" ] && OSNAME=`uname -s`
case "$OSNAME" in
Linux)
AWK=/bin/awk
;;
*)
AWK=/usr/bin/awk
;;
esac
mode=
if [ "$1" = "force" ] ; then
mode=force
shift
fi
# Stop Apache server
stop_Apache $mode || res=$?
[ $res -ne 0 ] && $SAFE/safekit printi "stop_both failed"
exit 0