Sitio personal de Ariel M. Liguori De Gottig

Wednesday, November 26

Contribuciones a LVS

Muchos de ustedes conocerán al famosísimo LVS, el cual nos ayuda básicamente a detectar cuales de nuestros server se encuentran activos y hacer load balancing entre ellos, si alguno cae es eliminado del servicio y no se tiene en cuenta, cuando levanta se incorpora nuevamente y forma parte de los servers activos.
Para la detección de estos cambios, los chequeos, las condiciones, etc. se utiliza un script diseñado en perl llamado ldirectord. Yo he trabajado mucho con este código y he llegado a realizarle modificaciones sustanciales para la incorporación de nuevas funcionalidades según las necesidades que han ido surgiendo, entre ellas cabe destacarse la inclusión de un chequeo del servicio SSH.
Les comparto acá el código de la función encargada de realizar el chequeo del servicio SSH y a la vez la inclusión/exclusión del sistema de balanceo que proporciona el LVS (este código deben incluirlo en el ldirectord y deben algun argumento y asociarlo a esta nueva funcionalidad):

sub check_ssh {

use IO::Socket;
use IO::Select;
my ($v, $r) = @_;
my $sock;
my $s;
my $buf;
my $port=(defined $$v{checkport}?$$v{checkport}:$$r{port});
my $status = 1;

&ld_debug(2, "Checking ssh server=$$r{server} port=$port");

unless ($sock = new IO::Socket::INET(PeerAddr=>$$r{server},PeerPort=>$port,Proto=>'tcp') ){
service_set($v, $r, "down");
return 1;
}

if($sock)
{
service_set($v, $r, "up");
$status = 0;
}
else
{
service_set($v, $r, "down");
}

$s = IO::Select->new();
$s->add($sock);
$s->remove($sock);
$sock->close;


return $status;
}


Oficialmente formo parte de la lista de distribución del proyecto LVS y obviamente continuaré contribuyendo al desarrollo de esta y de muchas más aplicaciones opensource.

Saludos,

0 comentarios: