Skip navigation

Debian 9 : Haute disponibilité

Mise en place d’un cluster à 2 nœud Debian 9

La mise en place d’un cluster Debian 9 permet, entre autre, d’avoir de la haute disponibilité pour les services dans ce cluster.

Pour plus d’information sur cette procédure, voir la documentation officiel, qui, au moment de la rédaction de cet article s’appuyaient sur une Debian 8.

Environement

IP Nom de l’hôte Rôle
172.16.0.10/24 IP flotante (entre les nœuds)
172.16.0.11/24 node1.stan.local Nœud
172.16.0.12/24 node2.stan.local Nœud

Prérequis

: sur tous les nœuds

Configuration de /etc/hosts.

root@debian~#: vim /etc/hosts

Pour le node1
aperçu du contenu du fichier

[…]
127.0.1.1   node1.server.lan
10.0.0.15   node1.server.lan
10.0.0.16   node2.server.lan
[…]

Pour le node1
aperçu du contenu du fichier

[…]
127.0.1.1   node2.server.lan
10.0.0.15   node1.server.lan
10.0.0.16   node2.server.lan
[…]

Installation et configuration de corosync

Installation de pacemaker et de crmsh.

root@debian~#: apt install pacemaker crmsh

Stopper et désactiver le lancement de pacemaker et de corosync au boot (pour le moment).

root@debian~#: systemctl stop pacemaker corosync
root@debian~#: systemctl disable pacemaker corosync

: sur un seul nœud

Configuration de corosync.

root@debian~#: vim /etc/corosync/corosync.conf

contenu du fichier

totem {
    version: 2
    cluster_name: debian
    token: 3000
    token_retransmits_before_loss_const: 10
    clear_node_high_bit: yes
    crypto_cipher: aes256
    crypto_hash: sha1
    interface {
    ringnumber: 0
    bindnetaddr: 172.16.0.11
    mcastaddr: 239.255.1.1
    mcastport: 5405
    ttl: 1
}
}
logging {
    fileline: off
    to_stderr: no
    to_logfile: no # comment this line and uncomment to 2 next lines to get logs
    #to_logfile: yes
    #logfile: /var/log/corosync/corosync.log
    to_syslog: yes
    syslog_facility: daemon
    debug: off
    timestamp: on
    logger_subsys {
        subsys: QUORUM
        debug: off
    }
}
quorum {
    provider: corosync_votequorum
    two_node: 1
    expected_votes: 2
}

: l’IP renseigné pour bindetaddr doit être la même sur tous les nœuds d’un même cluster.

Générer la clé d’authentification.

root@debian~#: corosync-keygen

sortie

Corosync Cluster Engine Authentication key generator.
Gathering 1024 bits for key from /dev/random.
Press keys on your keyboard to generate entropy.
Press keys on your keyboard to generate entropy (bits = 904).
Press keys on your keyboard to generate entropy (bits = 952).
Press keys on your keyboard to generate entropy (bits = 1000).
Writing corosync key to /etc/corosync/authkey.

: la commande prend un certain temps

Copier la clé sur les autres nœuds.

root@debian~#: scp /etc/corosync/corosync.conf root@172.16.0.12:/etc/corosync/corosync.conf
root@debian~#: scp /etc/corosync/authkey root@172.16.0.12:/etc/corosync/authkey

: sur tous les nœuds

root@debian~#: systemctl start corosync.service
root@debian~#: systemctl start pacemaker.service

: sur un seul nœud

Après quelques secondes, vérifier le status du cluster.

root@debian~#: crm status

sortie

Stack: corosync
Current DC: node1.server.lan (version 1.1.16-94ff4df) - partition with quorum
Last updated: Sun Jan  6 12:04:25 2019
Last change: Sun Jan  6 12:01:53 2019 by hacluster via crmd on node1.server.lan

2 nodes configured
0 resources configured

Online: [ node1.server.lan node2.server.lan ]

No resources

Gestion des ressources

: à partir de maintenant la gestion des services doit se faire via le shell crm.

Entrer dans le shell crm.

root@debian~#: crm

Lister les nœuds.

crm(live)# node
crm(live)node# list

sortie

node1.server.lan(167772175): normal
node2.server.lan(167772176): normal

Revenir au menu précédent via la commande up et quitter le shell crm : bye.

crm(live)node# up
crm(live)# bye

Ajout de ressources

Option Description
virtual-IP-rsc l’IP virtuelle partager entre les nœuds
fence_node1 le fencing-agent agent de node1 tournant sur le node2
fence_node2 le fencing-agent agent de node2 tournant sur le node1

Ouvrir crm configure.

root@debian~#: crm configure

Au prompt, entrer les commandes suivantes.

crm(live)configure# property stonith-enabled=no
crm(live)configure# property no-quorum-policy=ignore
crm(live)configure# property default-resource-stickiness=100
Option Description
stonith-enabled=no désactive stonith jusqu’à ce que les agents de fencing soient opérationnel
no-quorum-policy=ignore permet au cluster d’être en fonction même s’il ne reste qu’un nœeud
default-resource-stickiness permet d’éviter qu’une ressource bouge après avoir été (ré)établie
crm(live)configure# primitive virtual-IP-rsc ocf:heartbeat:IPaddr2 params ip="172.16.0.10" nic="enp0s3" cidr_netmask="32" meta migration-threshold=2 op monitor interval=20 timeout=60 on-fail=restart
crm(live)configure# commit
Option Description
virtual-IP-rsc nom de la ressource
ip l’IP flottante. : NE doit PAS correspondre à une IP déjà attribué.
nic le nom de l’interface réseau (faire ip a pour l’identifier)
cidr_netmask le masque CIDR de sous-réseau de cette IP

Vérifier que la ressource est bien présente.

root@debian~#: crm status

sortie

Stack: corosync
Current DC: node1.server.lan (version 1.1.16-94ff4df) - partition with quorum
Last updated: Sun Jan  6 13:49:53 2019
Last change: Sun Jan  6 13:30:33 2019 by root via cibadmin on node1.server.lan

2 nodes configured
1 resource configured

Online: [ node1.server.lan node2.server.lan ]

Full list of resources:

 virtual-IP-rsc	(ocf::heartbeat:IPaddr2):    Started node1.server.lan

Le résultat précédent montre que la ressource virtual-IP-rsc a démarré et qu’elle est sur le nœud node1.server.lan.

Il est maintenant possible d’accéder au cluster via son IP flottante. Faire un ping sur 172.16.0.10 depuis l’extérieur confirmera que cette IP flottante est bien en place.

Une fois que tout fonctionne démarrer pacemaker corosync au boot.

root@debian~#: systemctl enable pacemaker corosync

by | January 6, 2019 | No Comments | Système | Tags : debian 9 HA