Installer et configurer mod_cluster

Cette page a été rédigée il y a fort fort longtemps, et n'a pas tellement été mise à jour.

 

Vous savez, moi je ne crois pas qu'il y ait de bonne ou de mauvaise page. Moi, si je devais résumer mon wiki aujourd'hui avec vous, je dirais que c'est d'abord des rencontres. Des gens qui m'ont tendu la main, peut-être à un moment où je ne pouvais pas, où j'étais seul chez moi. Et c'est assez curieux de se dire que les hasards, les rencontres forgent une destinée... Parce que quand on a le goût de la chose, quand on a le goût de la chose bien faite, le beau geste, parfois on ne trouve pas l'interlocuteur en face je dirais, le miroir qui vous aide à avancer. Alors ça n'est pas mon cas, comme je disais là, puisque moi au contraire, j'ai pu ; et je dis merci au wiki, je lui dis merci, je chante le wiki, je danse le wiki... je ne suis qu'amour ! Et finalement, quand des gens me disent « Mais comment fais-tu pour avoir cette humanité ? », je leur réponds très simplement que c'est ce goût de l'amour, ce goût donc qui m'a poussé aujourd'hui à entreprendre une construction logicielle... mais demain qui sait ? Peut-être simplement à me mettre au service de la communauté, à faire le don, le don de soi.

Installation (Apache Web Server 2.2)

Télécharger mod_cluster sur http://mod-cluster.jboss.org/downloads/

Sur la page de téléchargement, sont mélangés trois types de distributions :

  • java bundles : inutile pour WildFly puisque cette partie y est déjà intégrée

  • mod_cluster native bundles with httpd : c’est un Apache Web Server avec le module mod_cluster intégré ; pourquoi pas mais ce n’est pas le sujet ici

  • mod_cluster modules for httpd : c’est le module mod_cluster dans sa plus simple forme

Nous allons donc utiliser le module mod_cluster que nous intégrerons dans un Apache Web Server déjà installé. Avant de télécharger, vérifiez bien lequel correspond à votre couple OS / httpd ; pour mod_cluster 12.x, seul Apache Web Server 2.2 est supporté ; ça ne fonctionne pas avec Apache 2.4 (testé avec mod_cluster 1.2.6) . L’archive contient 4 fichiers .so qu’on copie dans le répertoire des modules de Apache Web Server.

Il faut charger les quatre modules (fichier httpd.conf) :

LoadModule slotmem_module modules/mod_slotmem.so
LoadModule manager_module modules/mod_manager.so
LoadModule proxy_cluster_module modules/mod_proxy_cluster.so
LoadModule advertise_module modules/mod_advertise.so

De plus, mod_proxy doit être activé, avec le transport AJP :

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so

Installation (Apache Web Server 2.4)

Les distributions binaires de mod_cluster 1.2 fonctionnent uniquement avec Apache Web Server 2.2. Si vous voulez utiliser Apache Web Server 2.4, vous devrez compiler mod_cluster vous-même. L’exemple ci-dessous fonctionne avec Ubuntu 14.04.

On commence par installer Apache et quelques prérequis :

apt-get update
apt-get install -y autoconf libtool apache2 git
apt-get remove apache2-threaded-dev
apt-get install apache2-prefork-dev

Puis on récupère le code source :

git clone link:https://github.com/modcluster/mod_cluster.git[https://github.com/modcluster/mod_cluster.git]
cd mod_cluster

Puis on compile les modules un à un :

cd native/advertise
./buildconf; ./configure --with-apxs=/usr/bin/apxs; make; cp *.so /usr/lib/apache2/modules/
echo "LoadModule advertise_module /usr/lib/apache2/modules/mod_advertise.so" >> /etc/apache2/mods-available/proxy_cluster.load
cd ../manager
./buildconf; ./configure --with-apxs=/usr/bin/apxs; make; cp *.so /usr/lib/apache2/modules/
echo "LoadModule manager_module /usr/lib/apache2/modules/mod_manager.so" >> /etc/apache2/mods-available/proxy_cluster.load
cd ../mod_proxy_cluster
./buildconf; ./configure --with-apxs=/usr/bin/apxs; make; cp *.so /usr/lib/apache2/modules/
echo "LoadModule proxy_cluster_module /usr/lib/apache2/modules/mod_proxy_cluster.so" >> /etc/apache2/mods-available/proxy_cluster.load
cd ../mod_cluster_slotmem
./buildconf; ./configure --with-apxs=/usr/bin/apxs; make; cp *.so /usr/lib/apache2/modules/
echo "LoadModule slotmem_module /usr/lib/apache2/modules/mod_cluster_slotmem.so" >> /etc/apache2/mods-available/proxy_cluster.load

On charge les modules :

ln -s /etc/apache2/mods-available/proxy.load /etc/apache2/mods-enabled/
ln -s /etc/apache2/mods-available/proxy_ajp.load /etc/apache2/mods-enabled/
ln -s /etc/apache2/mods-available/proxy_cluster.load /etc/apache2/mods-enabled/

Et comme avec Apache 2.2, mod_proxy doit être activé, avec le transport AJP :

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so

Configuration

Le but est de faire communiquer le mod_cluster avec WildFly. On va le faire sur le port 6666. Dans l’exemple ci-dessous, WildFly et Apache Web Server sont sur la même machine et communiquent en localhost.

On va placer la configuration dans un fichier httpd-cluster.conf, qui devra être en include dans le fichier de configuration principal httpd.conf.

Listen 127.0.0.1:6666
<VirtualHost 127.0.0.1:6666>

  <Location />
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
  </Location>

  KeepAliveTimeout 60
  MaxKeepAliveRequests 0

  ManagerBalancerName mycluster
  ServerAdvertise On
  EnableMCPMReceive

</VirtualHost>
MemManagerFile /var/log/apache2/

La dernière ligne est utile dans certaines configuration d’Apache pour le stockage de certains fichiers, comme la mémoire partagée ou de locks. Par défaut, ces fichiers sont placés dans $server_root/logs/ ; par exemple, sur Ubuntu 14.04, Apache ne démarre pas parce que ce répertoire est /etc/apache2/logs/ et qu’il n’existe pas.

Activer le gestionnaire (pour Apache 2.2)

<Location /cluster-manager>
  SetHandler mod_cluster-manager
  Order deny,allow
  Deny from all
  Allow from 127.0.0.1
</Location>

Activer le gestionnaire (pour Apache 2.4)

<Location /cluster-manager>
  SetHandler mod_cluster-manager
  Require ip 127.0.0.1
</Location>

WildFly

Le module mod_cluster peut être utilisé avec JBoss AS, en version 7 ou plus ancienne, ou avec Tomcat. Avec WildFly 8, la configuration est très simple. Il suffit de le lancer dans un profil HA, avec un binding réseau plus large que celui par défaut. En standalone, on peut le lancer comme ça :

bin/standalone.sh -c standalone-ha.xml -b 0.0.0.0

Vérifications

Si tout va bien, on devrait voir apparaître une trace de ce type dans les logs de WildFly :

08:21:56,960 INFO  [org.jboss.modcluster] (UndertowEventHandlerAdapter - 1) MODCLUSTER000012: default-server connector will use /127.0.0.1

Et en consultant la page du cluster-mnager (http://localhost/cluster-manager), on devrait voir apparaître le node dans la liste.