Load-balancing simple entre Apache HTTP Server 2.2 et Oracle WebLogic Server 12c

Origine du besoin

Vous êtes content, vous venez de doubler le nombre de serveurs de votre plateforme d’échanges. Vous venez de passer de 1 serveur OSB à 2 serveurs OSB !
Au passage, cela vous facilite bien la vie :

  1. meilleures performances globales
  2. moins sensible aux interruptions de service
  3. redémarrage nœud par nœud = redémarrage « quand on veut » !
  4. et bien d’autres avantages…
Cela implique cependant d’avoir un serveur HTTP, répartiteur de charge (load balancer) pour :
  • constituer un unique point d’entrée pour les clients de vos web services
  • répartir uniformément les requêtes entre vos 2 serveurs OSB

Il fait ce qu’on veut, il est gratuit, reconnu et maintenu, nous choisissons donc peut-être le plus connu de tous : Apache HTTP Server (https://httpd.apache.org/).
Il est aussi connu sous le nom de Apache « httpd« , il devra être installé sur une machine tierce, distincte des deux machines OSB.
Ici, nous faisons l’opération sur un serveur Linux dont voici la configuration :

[orasoa@httpdhost1 logs]$ lsb_release -a
LSB Version:    :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch
Distributor ID: RedHatEnterpriseServer
Description:    Red Hat Enterprise Linux Server release 6.5 (Santiago)
Release:        6.5
Codename:       Santiago

Et comme la plupart du temps sur les serveurs Linux, Apache httpd est déjà installé, vérifions la version :

[orasoa@httpdhost1 logs]$ httpd -v
Server version: Apache/2.2.15 (Unix)
Server built:   Aug  2 2013 08:02:15

Vous pourrez lire ailleurs que l’on peut utiliser Oracle WebLogic Server plug-in for Apache HTTP Server (mod_wl) pour faire interagir Apache et WebLogic. Cela équivaut a utiliser Oracle HTTP Server, basé sur Apache HTTP Server et embarquant des modules d’intégration spécifiques à Oracle Fusion Middleware. Mais notre besoin étant très basique ici, nous nous contenterons du serveur HTTP original (Apache).

Notre besoin en une phrase

Nous souhaitons rediriger uniformément les requêtes reçues sur le port 9001 du serveur HTTP vers le port 8001 de nos serveurs OSB.
Il nous faut simplement éditer correctement un fichier de conf et à démarrer le serveur… that’s all!

Configuration de Apache HTTP Server

Tout se situe dans le fichier /etc/httpd/conf/httpd.conf

Mettre le serveur à l’écoute

Indiquons à notre serveur qu’il doit écouter le port 9001 en ajoutant la ligne suivante :
#
# Listen: Allows you to bind Apache to specific IP addresses and/or
# ports, in addition to the default. See also the <virtualhost>
# directive.
#
# Change this to Listen on specific IP addresses as shown below to
# prevent Apache from glomming onto all bound IP addresses (0.0.0.0)
#
#Listen 12.34.56.78:80
 
Listen 9001

Rediriger les requêtes

#
#
# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for requests without a known
# server name.
#
#<VirtualHost *:80>
#    ServerAdmin webmaster@dummy-host.example.com
#    DocumentRoot /www/docs/dummy-host.example.com
#    ServerName dummy-host.example.com
#    ErrorLog logs/dummy-host.example.com-error_log
#    CustomLog logs/dummy-host.example.com-access_log common
#</VirtualHost>
 
<VirtualHost *:9001>
  <Proxy balancer://mycluster>
    BalancerMember http://osbhost1:8001
    BalancerMember http://osbhost2:8001
  </Proxy>
  ProxyPass / balancer://mycluster/
</VirtualHost>

Nous venons de définir une règle répartissant uniformément chaque requête reçu sur le port 9001 vers le port 8001 de nos 2 serveurs osbhost1 et osbhost2 en load balancing.

Démarrage de Apache HTTP Server

Il ne nous reste plus qu’à démarrer le serveur HTTP.
Lancez la commande suivante :
[orasoa@httpdhost1 home]$ sudo service httpd start
Starting httpd:                                            [  OK  ]

Vérifiez qu’il a bien démarré :

[orasoa@httpdhost1 home]$ sudo service httpd status
httpd (pid  8483) is running...

Terminé !

Si vous envoyez une requête HTTP sur le port 9001 du serveur sur lequel est configuré Apache httpd, elle sera redirigé vers le port 8001 de l’un des deux serveurs OSB.