GNU/Linux >> Tutoriels Linux >  >> Linux

Utilisation de mod_cluster dans Apache

Le module Apache nouvellement découvert mod_cluster semble offrir de nombreux avantages par rapport à mod_jk qui pourrait être utilisé dans le nouvel environnement Apache/Jboss.

Les fonctionnalités suivantes sont répertoriées :
– Configuration dynamique des travailleurs httpd
– Calcul du facteur d'équilibrage de charge côté serveur
– Contrôle précis du cycle de vie des applications Web
– AJP est facultatif
/>– Compatible à partir de JBoss 4.2.x

Autres liens utiles :
http://www.jboss.org/mod_cluster
http://anonsvn.jboss.org/repos/mod_cluster/tags/release/
http://docs.jboss.org /mod_cluster/1.2.0/html/

Les instructions de démarrage se trouvent à :
http://docs.jboss.org/mod_cluster/1.2.0/html/Quick_Start_Guide.html#d0e357

Environnement de test :
Liste des composants d'un environnement de test :
1 VM avec Apache et mod_cluster nouvellement compilés
2 VM avec une application JBoss identique

Créé trois VM comme suit :
Hostname Function IP HTTP-Port AJP-Port
testweb APACHE 192.168.100.1 80 n/a
backend1 JVM1 192.168.100.2 6003 6001
backend2 JVM2 192.168.100.3 6003 6001

Test manuel de l'accès direct aux backends :
http://backend1.mondomaine.srv:6003/sysnode/
http://backend2.mondomaine.srv:6003/sysnode/

Créez un nouvel hôte virtuel Apache comme suit :
########################
# Relevant part of httpd.conf
#######################
# Extra modules needed for mod_cluster
LoadModule proxy_cluster_module modules/mod_proxy_cluster.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule slotmem_module modules/mod_slotmem.so
LoadModule manager_module modules/mod_manager.so
LoadModule advertise_module modules/mod_advertise.so

Ajout au contenu de /etc/hosts
192.168.100.1 vhost-01
Contenu de vhosts.conf
LogLevel debug
Listen vhost-01:80
NameVirtualHost vhost-01:80
#
#------------ Directives for mod_cluster only---------------
<ifmodule proxy_cluster_module>
# Displays the first 100 sessions IDs in manager interface
# Turn on the session ID display of 100 in the mod_cluster-manager page
MaxsessionId 10000
CreateBalancers 2
MaxContext 10000
</ifmodule>
#
# ------ Build the MCPM Connector and advertize connector on Web server
<ifmodule manager_module>
Listen vhost-01:8081
<Virtualhost vhost-01:8081>
# MCPM configuration
KeepAliveTimeout 60
MaxKeepAliveRequests 0
EnableMCPMReceive
#
CustomLog /www/http_logs/MCPM_connector_acc.log j_common
ErrorLog /www/http_logs/MCPM_connector_err.log
</virtualhost>
</ifmodule>
#
#---------- Managemant console interface ----------------------
<ifmodule manager_module>
Listen vhost-01:8000
<Virtualhost vhost-01:8000>
# mod_cluster Manager interface
<Location /mcm>
SetHandler mod_cluster-manager
Order deny,allow
Deny from all
Allow from env=IP_ALLOWED
# Displays verbose extra info about the mod_cluster config
AllowDisplay On
</Location>
CustomLog /www/http_logs/cluster_manager_acc.log j_common
ErrorLog /www/http_logs/cluster_manager_err.log
</virtualhost>
</ifmodule>
#
# --------------------- CLIENT Virtual Host 1----------------------------
#
# http://test1.mydomain.srv
<Virtualhost vhost-01:80>
ServerName test1.mydomain.srv
DocumentRoot /www/htdocs1
#
#------------ Directives for mod_cluster ---------------
<ifmodule proxy_cluster_module>
ProxyRequests Off
UseCanonicalName On
ProxyPreserveHost On
# Allowing all proxy requests
<proxy balancer://jboss.web1>
AddDefaultCharset off
Order deny,allow
Allow from All
</proxy>
ProxyPass / balancer://jboss.web1/ stickysession=JSESSIONID|jsessionid nofailover=On
ProxyPassReverse / balancer://jboss.web1/
</ifmodule>
#
CustomLog /www/http_logs/test1.mydomain.srv_acc.log j_common
ErrorLog /www/http_logs/test1.mydomain.srv_err.log
</virtualhost>
#
# --------------------- CLIENT Virtual Host 2----------------------------
# http://test2.mydomain.srv
<virtualhost vhost-01:80>
ServerName test2.mydomain.srv
DocumentRoot /www/htdocs2
#
#------------ Directives for mod_cluster ---------------
<ifmodule proxy_cluster_module>
ProxyRequests Off
UseCanonicalName On
ProxyPreserveHost On
# Allowing all proxy requests
<proxy balancer://jboss.web2>
AddDefaultCharset off
Order deny,allow
Allow from All
</proxy>
ProxyPass / balancer://jboss.web2/ stickysession=JSESSIONID|jsessionid nofailover=On
ProxyPassReverse / balancer://jboss.web2/
</ifmodule>
#
CustomLog /www/http_logs/test2.mydomain.srv_acc.log j_common
ErrorLog /www/http_logs/test2.mydomain.srv_err.log
</virtualhost>

Le mod-cluster a maintenant été testé avec les conditions suivantes :
– Lorsqu'une application a fini de démarrer, il faut environ 3 à 5 secondes avant qu'Apache n'enregistre l'APP
– Le les requêtes envoyées à Apache étaient alors bien équilibrées entre les applications enregistrées et envoyées au client d'applications vhost.

Mise à niveau en direct d'un serveur d'application principal :
Enregistrez les 4 APP sur le même cluster et testez les performances de l'enregistrement des nouvelles APP et de la désinscription des APP en cours d'exécution.

Méthode suggérée pour effectuer une mise à niveau de l'APP.
– Démarrez les nouvelles applications et attendez qu'elles soient toutes opérationnelles.
– Les nouvelles demandes seront dirigées vers les anciennes et les nouvelles applications.
– Désactivez les anciennes applications avec élégance depuis la gestion console. Cela empêchera les nouvelles requêtes d'être envoyées aux anciennes applications.
– À partir de ce moment, toutes les nouvelles requêtes ne seront envoyées qu'aux nouvelles applications.
– Ensuite, le nombre de connexions encore ouvertes vers les anciennes applications augmentera dynamiquement affiché jusqu'à ce que les anciennes applications ne reçoivent plus de nouvelles demandes.
– Lorsque ces chiffres pour toutes les anciennes applications sont réduits à '0', vous pouvez supprimer les anciennes applications.

REMARQUE 1 :
Pendant le test, nous avons eu des problèmes pour rediriger l'ancien SSID vers de nouveaux nœuds lorsque l'ancien nœud servant le SSID n'était plus disponible.
Le mod_cluster créait une erreur "Service indisponible".

Pour résoudre ce problème, les propriétés JBOSS suivantes (postSetEnv.sh) ont été définies :
export JAVA_OPTS="${JAVA_OPTS} -Djboss.mod_cluster.stickySessionRemove=true"
export JAVA_OPTS="${JAVA_OPTS} -Djboss.mod_cluster.stickySessionForce=false"

Voici l'ensemble complet des propriétés liées à mod_cluster :
export JAVA_OPTS="${JAVA_OPTS} -Djboss.mod_cluster.balancer=jboss.web1"
(value here has to be modified to a node name variable)
export JAVA_OPTS="${JAVA_OPTS} -Djboss.mod_cluster.proxyList=192.168.100.1:8081"
(values to be set to the proper web server's internal LAN IP)

VALEURS FIXES
export JAVA_OPTS="${JAVA_OPTS} -Djboss.mod_cluster.enable=true"
export JAVA_OPTS="${JAVA_OPTS} -Djboss.mod_cluster.advertise=false"
export JAVA_OPTS="${JAVA_OPTS} -Djboss.mod_cluster.excludedContexts="
export JAVA_OPTS="${JAVA_OPTS} -Djboss.mod_cluster.stickySessionRemove=true"
export JAVA_OPTS="${JAVA_OPTS} -Djboss.mod_cluster.stickySessionForce=false"


Linux
  1. Comment recompiler Apache avec EasyApache de WHM ?

  2. Comment rediriger http vers https en utilisant .htaccess ?

  3. Désactiver la compression HTTP sur les serveurs Apache

  4. Comment configurer le bloc GeoIP à l'aide d'Apache

  5. Comment ajouter des en-têtes http avec Plesk

Comment bloquer XML-RPC dans WordPress en utilisant Nginx/Apache

Comment activer la prise en charge HTTP/2.0 sur Apache

Comment configurer WebDAV à l'aide d'Apache sur CentOS 7

Comment activer HTTP/2 dans Apache sur Ubuntu

Comment mettre à niveau Apache avec EasyApache ?

Comment activer HTTP/2 avec Apache dans Ubuntu