Haute disponibilité du service DHCP : Deuxième solution : configuration du service DHCP en Failover/Load-balancing

Pour avoir une vrai haute disponibilité, il faut bien disposer d’un seul service DHCP mais réparti sur 2 serveurs.

Cela présente deux avantages :

la continuité du service en cas de panne du serveur primaire (FAILOVER) ;

la répartition des charges au niveau des baux attribués (LOAD-BALANCING).

Vous allez configurer REZOLAB comme serveur primaire.

Contenu du fichier de configuration du service DHCP de REZOLAB /etc/dhcp/dhcpd.conf :

# Declaration du FAILOVER DHCP pour le serveur primaire#
failover peer "GSB" {
primary; # Déclare ce serveur comme primaire
address 192.168.150.1; # Adresse du serveur primaire
port 647; # Port d'écoute du serveur primaire.
peer address 192.168.150.2; # Adresse du serveur secondaire.
peer port 847; # Port d'écoute du serveur secondaire.
max-response-delay 60; # Temps de non réponse en secondes.
max-unacked-updates 10;
mclt 3; # Temps de renouvellement du service
# en cas d'incertitude.
split 128; # Répartition des plages d'adresses.
load balance max seconds 3;
}
# Les lignes suivantes servent à l'initialisation des deux serveurs DHCP.
#failover peer "GSB" state {
# my state partner-down;
#}
ddns-update-style none;
option domain-name "gsb.local";
option domain-name-servers 172.16.0.10;
default-lease-time 600;
max-lease-time 7200;
authoritative;
log-facility local7;
# reseau VLAN Visiteurs
subnet 192.168.150.0 netmask 255.255.255.0 {
pool {
failover peer "GSB";
range 192.168.150.50 192.168.150.100;
}
option routers 192.168.150.1;
option broadcast-address 192.168.150.255;
}

Quelques précisions sur ce qui change :

En début de fichier est déclaré le Failover ; en précisant :

le nom du Failover : GSB ;

que ce serveur est le serveur primaire : primary ;

l’adresse IP de ce serveur primaire (192.168.150.1) et celle du serveur secondaire (192.168.150.2) ;

la valeur de split détermine ici le découpage en 2 de la plage d’adresse IP.

Dans la définition du sous-réseau, la plage d’adresse est définie comme un pool d’adresse du Failover GSB.

Vous allez configurer REZOLAB2 comme serveur secondaire.

Contenu du fichier de configuration du service DHCP de REZOLAB2 /etc/dhcp/dhcpd.conf :

# Declaration du FAILOVER DHCP pour le serveur secondaire#
failover peer "GSB" {
secondary; # Déclare ce serveur comme secondaire
address 192.168.150.2;
port 847;
peer address 192.168.150.1;
peer port 647;
max-response-delay 60;
max-unacked-updates 10;
load balance max seconds 3;
}
# Les lignes suivantes servent à l'initialisation des deux serveurs DHCP.
#failover peer "GSB" state {
# my state partner-down;
#}
ddns-update-style none;
option domain-name "gsb.local";
option domain-name-servers 172.16.0.10;
default-lease-time 600;
max-lease-time 7200;
#authoritative;
log-facility local7;
# reseau VLAN Visiteurs
subnet 192.168.150.0 netmask 255.255.255.0 {
pool {
failover peer "GSB";
range 192.168.150.50 192.168.150.100;
}
option routers 192.168.150.1;
option broadcast-address 192.168.150.255;
}

Quelques précisions sur ce qui change :

La définition du failover change :

ce serveur est le serveur secondaire : secondary ;

l’inversion des adresses IP et des ports entre serveur primaire et secondaire.

La directive authoritative est commentée.

Pour initialiser les serveurs DHCP en Failover, vous devez respecter une procédure précise.

Pourquoi ?

Les serveurs DHCP dialoguent entre eux pour échanger des signaux de vie et leur base de données.

Ils allouent indifféremment les adresses IP sur la plage d’adresses définie.

Lorsque l’un d’eux ne répond plus, l’autre renouvelle les baux de l’autre pendant le temps mtcl.

Une fois cette durée révolue, le serveur restant réalloue lui-même les baux.

Lorsque le serveur tombé en panne réapparaît, il synchronise sa base de données avec le serveur restant. De plus, il ne répond pas aux demandes d’adresses IP pendant le temps mtcl.

Les baux alloués ainsi que la trace des évènements se situent dans le fichier dhcpd.leases.

Lors du premier démarrage, le fichier dhcpd.leases doit être créé manuellement et doit être vide.

Lorsque les serveurs démarrent :

ils voient que leur base de données est vide.

Ils croient alors tous qu’ils sont tombés précédemment en panne et attendent.

Pour palier ce problème, il faut décommenter sur le primaire les lignes « failover … state ». Elles ont pour effet de dire au serveur que le serveur secondaire est en panne. Ainsi, le serveur primaire remplit sa base de données et l’on peut démarrer le secondaire si ce n’est pas déjà fait.

On arrête alors le primaire pour commenter les lignes « failover … state » et on le redémarre.

Les deux serveurs sont maintenant démarrés et échangent leurs informations.

La procédure à suivre est donc :

1) Lancez les serveurs DHCP sans activer le service DHCP

# update-rc.d isc-dhcp-server remove # reboot

Pour vérifier que le service n'est plus lancé au démarrage de votre serveur, visualisez les ports actifs. Le port 67 (port utilisé par le service DHCP) ne doit plus apparaître :

# ss -nlut

Pour permettre à nouveau le lancement du service DHCP au démarrage du serveur utilisez la commande suivante : # update-rc.d isc-dhcp-server defaults # reboot

2) Décommentez ces trois lignes sur les deux serveurs DHCP REZOLAB et REZOLAB2.

# Les lignes suivantes servent à l'initialisation des deux serveurs DHCP.
failover peer "GSB" state {
my state partner-down;
}

3) Lancer le service DHCP sur le serveur primaire REZOLAB seulement.

REZOLAB:~# service isc-dhcp-server start

Le fichier /var/lib/dhcp/dhcpd.leases contient les informations suivantes :

# The format of this file is documented in the dhcpd.leases(5) manual page.
# This lease file was written by isc-dhcp-V3.1.1
failover peer "GSB" state {
my state partner-down at 6 2012/10/27 15:24:56;
partner state unknown-state at 6 2012/10/27 15:24:56;
}

4) Vos STAs Portable1 et Portable 2 ont dû obtenir une adresse IP. Si ce n’est pas le cas lancez la commande ifdown eth0 suivi de ifup eth0 ou ipconfig /renew. Cela doit permettre de remplir la base du serveur primaire. Visualisez cela dans le fichier dhcpd.leases.

REZOLAB:~# cat /var/lib/dhcp/dhcpd.leases
Contenu du fichier dhcpd.leases
# The format of this file is documented in the dhcpd.leases(5) manual page.
# This lease file was written by isc-dhcp-V3.1.1
failover peer "GSB" state {
my state partner-down at 6 2012/10/27 15:24:56;
partner state unknown-state at 6 2012/10/27 15:24:56;
}
lease 192.168.150.50 {
starts 6 2012/10/27 15:25:47;
ends 6 2012/10/27 15:35:47;
tstp 6 2012/10/27 15:40:47;
cltt 6 2012/10/27 15:25:47;
binding state active;
next binding state expired;
hardware ethernet 96:21:9d:a1:69:db;
}
lease 192.168.150.51 {
starts 6 2012/10/27 15:28:16;
ends 6 2012/10/27 15:38:16;
tstp 6 2012/10/27 15:43:16;
cltt 6 2012/10/27 15:28:16;
binding state active;
next binding state expired;
hardware ethernet 22:4e:a6:ec:58:0e;
}

5) Démarrez le serveur secondaire REZOLAB2.

REZOLAB2:~# service isc-dhcp-server start

6) Arrêtez le serveur primaire REZOLAB.

REZOLAB:~# service isc-dhcp-server stop

7) Commentez les lignes sur le serveur primaire REZOLAB.

# Les lignes suivantes servent à l'initialisation des deux serveurs DHCP.
#failover peer "GSB" state {
# my state partner-down;
#}

8) Démarrez le serveur primaire REZOLAB.

REZOLAB:~# service isc-dhcp-server start

9) Arrêtez le serveur secondaire REZOLAB2.

REZOLAB2:~# service isc-dhcp-server stop

10) Commentez les lignes sur le serveur secondaire REZOLAB2.

# Les lignes suivantes servent à l’initialisation des deux serveurs DHCP.
#failover peer "GSB" state {
# my state partner-down;
#}

11) Démarrez le serveur secondaire REZOLAB2.

REZOLAB2:~# service isc-dhcp-server start

Faites des essais de renouvellement de configuration IP pour Portable1 Portable2 et vous constaterez les échanges d’informations entre les serveurs DHCP :

Dans le fichier /var/lib/dhcp/dhcpd.leases de REZOLAB vous voyez les baux pour les adresses allant de 192.168.150.50 à 192.168.150.75, deux de ces adresses étant attribuées aux portables (192.168.150.50 et 192.168.150.51) :

Lease 192.168.150.50 {
starts 6 2012/10/27 15:48:55;
ends 6 2012/10/27 15:58:55;
tstp 6 2012/10/27 16:03:55;
tsfp 6 2012/10/27 16:03:55;
atsfp 6 2012/10/27 16:03:55;
cltt 6 2012/10/27 15:48:55;
binding state active;
next binding state expired;
hardware ethernet 96:21:9d:a1:69:db;
}
lease 192.168.150.51 {
starts 6 2012/10/27 15:52:28;
ends 6 2012/10/27 16:02:28;
tstp 6 2012/10/27 16:07:28;
tsfp 6 2012/10/27 16:07:28;
atsfp 6 2012/10/27 16:07:28;
cltt 6 2012/10/27 15:52:28;
binding state active;
next binding state expired;
hardware ethernet 22:4e:a6:ec:58:0e;
}
lease 192.168.150.52 {
starts 6 2012/10/27 15:37:03;
tstp 6 2012/10/27 15:37:03;
tsfp 6 2012/10/27 15:37:03;
atsfp 6 2012/10/27 15:37:03;
binding state backup;
}
}
lease 192.168.150.75 {
starts 6 2012/10/27 15:37:03;
tstp 6 2012/10/27 15:37:03;
tsfp 6 2012/10/27 15:37:03;
atsfp 6 2012/10/27 15:37:03;
binding state backup;
}

Dans le fichier /var/lib/dhcp/dhcpd.leases de REZOLAB2 vous voyez que le serveur à repris les informations du serveur DHCP primaire, c’est à dire .les baux pour les adresses allant de 192.168.150.50 à 192.168.150.75, plus les baux accordés aux deux portables (192.168.150.50 et 192.168.150.51) par l’autre serveur DHCP REZOLAB :

lease 192.168.150.51 {
starts 6 2012/10/27 15:37:32;
ends 6 2012/10/27 15:47:32;
tstp 6 2012/10/27 15:52:32;
tsfp 6 2012/10/27 15:52:32;
atsfp 6 2012/10/27 15:52:32;
cltt 6 2012/10/27 15:37:32;
binding state active;
next binding state expired;
hardware ethernet 22:4e:a6:ec:58:0e;
}
lease 192.168.150.50 {
starts 6 2012/10/27 15:38:25;
ends 6 2012/10/27 15:48:25;
tstp 6 2012/10/27 15:53:25;
tsfp 6 2012/10/27 15:53:25;
atsfp 6 2012/10/27 15:53:25;
cltt 6 2012/10/27 15:38:25;
binding state active;
next binding state expired;
hardware ethernet 96:21:9d:a1:69:db;
}
lease 192.168.150.52 {
starts 6 2012/10/27 15:37:03;
tsfp 6 2012/10/27 15:37:03;
atsfp 6 2012/10/27 15:37:03;
binding state backup;
}
}
lease 192.168.150.75 {
starts 6 2012/10/27 15:37:03;
tsfp 6 2012/10/27 15:37:03;
atsfp 6 2012/10/27 15:37:03;
binding state backup;
}

Que ce soit en arrêtant REZOLAB ou REZOLAB2, les portables auront la même adresse renouvelée.

De même, en ajoutant de nouveaux hôtes sur ce VLAN Visiteurs et en arrêtant ou tel serveur DHCP, il n’y aura pas d’adresses attribuées en double sur le réseau.

Vous pouvez maintenant réaliser l’infrastructure présentée en début d’activité avec les deux serveurs DHCP situés dans le VLAN Serveurs. Pour que l’agent relais transmettent bien les requêtes des clients à l’un ou l’autre des serveurs DHCP disponible, il suffira d’indiquer les deux adresses IP des serveurs DHCP dans la configuration du fichier /etc/default/isc-dhcp-relay. # Defaults for isc-dhcp-relay initscript # sourced by /etc/init.d/isc-dhcp-relay # installed at /etc/default/isc-dhcp-relay by the maintainer scripts # # This is a POSIX shell fragment # # What servers should the DHCP relay forward requests to? SERVERS="172.16.0.10 172.16.0.11" # On what interfaces should the DHCP relay (dhrelay) serve DHCP requests? INTERFACES="" # Additional options that are passed to the DHCP relay daemon? OPTIONS=""

Retour à l'activité

Activité : mettre en oeuvre une haute disponibilité de service DHCP (contexte GSB)