Prérequis
- Vous avez besoin de NGINX 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 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.
Remarque : le module générique farm.safe que vous allez configurer est livré dans le package.
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 NGINX (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 NGINX avec haute disponibilité
Allez dans le tab Advanced Configuration de la console pour modifier les fichiers ci-dessous.Fichiers internes au module Windows farm.safe
userconfig.xml (description dans le guide de l'utilisateur)
<!DOCTYPE safe>
<safe>
<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 -->
<!-- Replace
* VIRTUAL_IP_ADDR_TO_BE_DEFINED by the IP address of your virtual server
-->
<vip>
<interface_list>
<interface check="on" arpreroute="on">
<virtual_interface type="vmac_directed">
<virtual_addr addr="VIRTUAL_IP_ADDR_TO_BE_DEFINED" where="alias"/>
</virtual_interface>
</interface>
</interface_list>
<loadbalancing_list>
<group name="Windows_Appli">
<!-- Set load-balancing rule on the TCP port of the service to load balance -->
<rule port="TCP_PORT_TO_BE_DEFINED" proto="tcp" filter="on_addr"/>
</group>
</loadbalancing_list>
</vip>
<!-- TCP Checker Configuration -->
<!-- Replace
* VIRTUAL_IP_ADDR_TO_BE_DEFINED by the IP address of your virtual server
* TCP_PORT_TO_BE_DEFINED by the TCP port of the service to check
-->
<check>
<tcp ident="Check_Appli" when="both">
<to
addr="VIRTUAL_IP_ADDR_TO_BE_DEFINED"
port="TCP_PORT_TO_BE_DEFINED"
interval="10"
timeout="5"
/>
</tcp>
</check>
<!-- User scripts activation -->
<user nicestoptimeout="300" forcestoptimeout="300" logging="userlog" />
</service>
</safe>
start_both.cmd
@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
rem Fill with your services start call
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
@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
rem Fill with your services stop call
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 farm.safe
userconfig.xml (description dans le guide de l'utilisateur)
<!DOCTYPE safe>
<safe>
<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 -->
<!-- Replace
* VIRTUAL_IP_ADDR_TO_BE_DEFINED by the IP address of your virtual server
-->
<vip>
<interface_list>
<interface check="on" arpreroute="on">
<virtual_interface type="vmac_directed">
<virtual_addr addr="VIRTUAL_IP_ADDR_TO_BE_DEFINED" where="alias"/>
</virtual_interface>
</interface>
</interface_list>
<loadbalancing_list>
<group name="Windows_Appli">
<!-- Set load-balancing rule on the TCP port of the service to load balance -->
<rule port="TCP_PORT_TO_BE_DEFINED" proto="tcp" filter="on_addr"/>
</group>
</loadbalancing_list>
</vip>
<!-- TCP Checker Configuration -->
<!-- Replace
* VIRTUAL_IP_ADDR_TO_BE_DEFINED by the IP address of your virtual server
* TCP_PORT_TO_BE_DEFINED by the TCP port of the service to check
-->
<check>
<tcp ident="Check_Appli" when="both">
<to
addr="VIRTUAL_IP_ADDR_TO_BE_DEFINED"
port="TCP_PORT_TO_BE_DEFINED"
interval="10"
timeout="5"
/>
</tcp>
</check>
<!-- User scripts activation -->
<user nicestoptimeout="300" forcestoptimeout="300" logging="userlog" />
</service>
</safe>
start_both
#!/bin/sh
# Script called on the primary server for starting application
# For logging into SafeKit log use:
# $SAFE/safekit printi | printe "message"
# stdout goes into Application log
echo "Running start_both $*"
res=0
# Fill with your application start call
if [ $res -ne 0 ] ; then
$SAFE/safekit printe "start_both failed"
# uncomment to stop SafeKit when critical
# $SAFE/safekit stop -i "start_both"
fi
stop_both
#!/bin/sh
# Script called on the primary server for stopping application
# 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
#
#----------------------------------------------------------
# stdout goes into Application log
echo "Running stop_both $*"
res=0
# default: no action on forcestop
[ "$1" = "force" ] && exit 0
# Fill with your application stop call
[ $res -ne 0 ] && $SAFE/safekit printe "stop_both failed"