Mise en place d’un cluster Heartbeat Apache

Mise en place d’un cluster Heartbeat Apache sur Linux Debian pour mettre en place une solution de haute disponibilité.

Publié le 19/12/2014

Afin d’obtenir un objectif de haute disponibilité pour un serveur web, nous allons mettre en place un fail-over via un cluster heartbeat pour le service apache.

Ce cluster sera constitué de deux machines virtuelles Linux Debian 7 avec Apache et Heartbeat. Le cluster répondra à l’IP virtuelle 192.168.0.49 et c’est avec cette adresse que l’on pourra on observer la bascule lors de l’indisponibilité de l’un de nos serveurs.

1 - Installation et paramétrage de VM Linux Debian 7

Nous allons mettre en place 2 VM Linux Debian 7 :

- front-srv-01 :

IP : 192.168.0.50

hostname : front-srv-01

- front-srv-02 :

IP : 192.168.0.51

hostname : front-srv-02

Chacune des VM aura le nom de l’autre machine dans son fichier /etc/hosts de façon à pouvoir résoudre le nom l’autre machine sans passer par un serveur DNS.

- Sur front-srv-01 :

nano /etc/hosts 127.0.0.1 front-srv-01 192.168.0.51 front-srv-02

- Sur front-srv-02 :

nano /etc/hosts


127.0.0.1       front-srv-02
192.168.0.50   front-srv-01

2 - Installation d’Apache et Heartbeat

Nous allons installer les paquets suivants sur chacune des VM :

apt-get install apache2 apache2-doc apache2-mpm-prefork apache2-utils heartbeat

3 - Paramétrage d’Apache

Nous allons configurer Apache sur chacune de nos VM de façon à avoir le même fichier VHOST sur nos deux machines. A ce fichier VHOST correspondra à une IP virtuelle déclarée dans Heartbeat comme IP de notre cluster virtuel. On choisira l’ip 192.168.0.49 et on y associera le nom d’hôte : front-srv-cluster :

Création du vhost sur front-srv-01 :

nano /etc/apache2/sites-available/webapp


<VirtualHost *:80>
        ServerName front-srv-cluster
        ServerAdmin webmaster@localhost

        DocumentRoot /var/www/webapp
        <Directory />
                Options FollowSymLinks
                AllowOverride all
        </Directory>
        <Directory /var/www/webapp/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride all
                Order allow,deny
                allow from all
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Puis on active le VHOST et on relance apache :


a2ensite webapp
service apache2 restart

Création du VHOST sur front-srv-02 :

nano /etc/apache2/sites-available/webapp


<VirtualHost *:80>
        ServerName front-srv-cluster
        ServerAdmin webmaster@localhost

        DocumentRoot /var/www
        <Directory />
                Options FollowSymLinks
                AllowOverride all
        </Directory>
        <Directory /var/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride all
                Order allow,deny
                allow from all
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Puis on active le VHOST et on relance apache :


a2ensite webapp
service apache2 restart

On va ensuite modifier les pages d’accueil dos nos deux serveurs apache de façon à pouvoir voir la bascule lors de notre test de fonctionnement :

Sur front-srv-01 :

nano /var/www/index.html <p>front-srv-01</p>

Sur front-srv-02 :

nano /var/www/index.html <p>front-srv-02</p>

4 - Paramétrage d’Heartbeat

Sur la VM maitre front-srv-01 end nous allons créer les fichiers de configuration d’heartbeat :

Création du fichier ha.cf :

nano /etc/ha.d/ha.cf


logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 30
initdead 120
bcast eth0
udpport 694
auto_failback on
node front-srv-01
node front-srv-02

Création du fichier haresources :

nano /etc/ha.d/haresources front-srv-01 IPaddr::192.168.0.49/24/eth0:0 apache2

Création du fichier authkeys :

nano /etc/ha.d/authkeys


auth 2
2 sha1 test-ha

Paramétrage des droits sur le fichier authkeys :

chmod 600 /etc/ha.d/authkeys

Copie des fichiers de configurations heartbeat sur la machine front-srv-02 :


scp /etc/ha.d/authkeys root@192.168.0.51:/etc/ha.d/authkeys
scp /etc/ha.d/ha.cf root@192.168.0.51:/etc/ha.d/ha.cf
scp /etc/ha.d/haresources root@192.168.0.51:/etc/ha.d/haresources

4 - Démarrage des serveurs et test

Nous allons démarrer les serveurs sur chacune des machines :

service heartbeat start

On va pouvoir tester notre cluster en appelant le site via l’IP virtuelle 192.168.0.49 dans notre navigateur.

On va arrêter le serveur front-srv-01 et constater la bascule en rechargeant la page dans le navigateur par l’affichage du index.html qui diffère sur chacune d’entre elles.