Hola a todos, aquí les dejo un documento de mi experiencia con apache y balanceo de carga.
Fue una buena experiencia dado que no es tan comun que a uno se le presente este escenario.Como veran use 3 servidores apache.

Primer apache (balancer): utilizado para balancear las peticiones redireccionando al webserver correpondiente.
===========configuracion del balanceador (httpd.conf) =============
LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so
LoadModule proxy_balancer_module /usr/lib/apache2/modules/mod_proxy_balancer.so
LoadModule proxy_http_module /usr/lib/apache2/modules/mod_proxy_http.so
ProxyRequests Off
ServerName excedesoft.com
DocumentRoot /var/www/
ProxyRequests Off
Order deny,allow
Allow from all
ProxyPass /balancer-manager !
ProxyPass / balancer://mycluster/ stickysession=BALANCEID nofailover=Off
ProxyPassReverse / http://192.168.2.197
ProxyPassReverse / http://192.168.2.198
BalancerMember http://192.168.2.197 route=http1
BalancerMember http://192.168.2.198 route=http2
ProxySet lbmethod=byrequests
SetHandler balancer-manager
Order deny,allow
Allow from all
============fin configuracion balanceador===============
Primer webserver apache: este tiene la aplicacion , es un simple webserver, hay dos cosas que lo diferencian de su compañero (segundo webserver), cuando el cliente lo accede le graba una cookie con su propio nombre (http1), este dato sera leido las proximas veces por el balanceador, es un pequeño rastro dejado en cookie para que el balanceador lo redirecciones siempre al mismo.
====config .htacces server 1 ====
RewriteEngine on
RewriteRule .* – [CO=BALANCEID:balancer.http1:.excedesoft.com]
===========================
Segundo webserver apache: solo cambie la cookie por medio de .htacces
====config .htacces ===========
RewriteEngine on
RewriteRule .* – [CO=BALANCEID:balancer.http2:.excedesoft.com]
===========================
mysql y sesiones: las aplicaciones de los dos apaches (http1 y http2) guardan las sesiones en mysql, esto posibilita que ante algun problema en uno de los webserver, las sesiones puedan ser recuperadas por otro webserver del cluster.
Para ello se debe especificar en php.ini esto:
-
aqui decimos que por medio de la funcion “session_set_save_handler” de php vamos a espicificar de que forma vamos a trabajar las sesiones.
setear a user
=======php.ini========
session.save_handler = user
====================
————————————————
Uso de session_set_save_handler (funcion).
aqui se debe respetar el orden de las funciones: ejemplo
session_set_save_handler(“open”, “close”, “read”, “write”, “destroy”, “gc”);
no importa el nombre, solo el orden, la que se especifique primero siempre sera para abrir sesion (open).
Ejemplo:
==========================================================
class Session {
public function __construct(){
session_set_save_handler(array(&$this, ‘open’),array(&$this, ‘close’),array(&$this, ‘read’),array(&$this, ‘write’),array(&$this, ‘destroy’),array(&$this, ‘clean’));
if(!session_id()){
session_start();
}
}
public function open() {
$this->mysql = mysql_connect(’192.168.2.100′, ‘root’, ’123′);
$bSeldb = mysql_select_db(‘excedesoft’, $this->mysql);
if (!$bSeldb) {
die (‘Can’t use Database : ‘ . mysql_error());
}
}
public function write($id, $data) {
$access = time();
$sql = “REPLACE INTO sessions VALUES (‘$id’, ‘$access’, ‘$data’)”;
return mysql_query($sql, $this->mysql) or die(mysql_error());
}
public function read($id) {
$sql = “SELECT data FROM sessions WHERE id = ‘$id’”;
if ($result = mysql_query($sql, $this->mysql)) {
if (mysql_num_rows($result)) {
$record = mysql_fetch_assoc($result);
return $record['data'];
}
}
return ”;
}
public function destroy($id) {
$sql = “DELETE FROM sessions WHERE id = ‘$id’”;
return mysql_query($sql, $this->mysql);
}
public function clean($max) {
$old = time() – $max;
$sql = “DELETE FROM sessions WHERE access mysql);
}
public function close() {
mysql_close($this->mysql);
}
}
$oSession = new Session();
===========================================
Uso
Pues solo queda incluir este archivo en el header de tu aplicacion (para que se ejecute en todas las paginas) y nada mas.
Testing
si entras a http://balanceador_ip/balancer-manager veras el funcionamiento y podras detener algun apache, tambien por ejemplo la forma que se hace el balanceo, pero para es hace falta otro post.
Aqui puedes bajar el apache 1 y veras como trabaja la aplicacion en tu apache 2. lo que deberias hacer es poner un pequeno texto en cada header . server 1 y server 2 por ejemplo asi sabes cual estas viendo.
si borras las cookie “BALANCEID” veras que el balanceador te pasara al otro server en la proxima peticion, asi podras tambien testear.
saludos.