Table des matières

Préparation du cluster

Vous avez déjà un serveur que vous avez nommé pve1. Corriger les fichiers :

:!: ATTENTION : les serveurs doivent être référencés dans /etc/hosts avec leurs adresses du réseau privé des hôtes. Voir plus bas…

Cloner pve1 en pve2 et pve3, et corriger les fichiers sur ces derniers.

FIXME Penser à modifier les certificats SSL des clones.

Installation du réseau privé des hôtes

Il faut ensuite configurer le réseau privé des hôtes qui servira pour NTP, Corosync et CephFS ((PVE conseille des mettre en place des réseaux différents, mais ça fonctionne très bien avec un seul réseau pour les trois services, y compris en 1Gbt.

Dans cet exemple, ce sera un réseau en 10.10.10.0/24. Attention que ce réseau ne soit pas en conflit avec vos autres réseaux (administration et production).

Il existe deux méthodes :

FIXME il faut documenter le multicast et omping omping -c 10000 -i 0.001 -F -q 192.168.200.3 192.168.200.2

# Réseau privé
iface enp3s1 inet manual
 
iface enp3s2 inet manual
 
auto vmbr9
iface vmbr9 inet static
	address 192.168.200.3
	netmask 255.255.255.0
	bridge_ports enp3s1 enp3s2
	bridge_stp on
 
#Réseau de prod
iface ens33 inet manual
 
auto vmbr0
iface vmbr0 inet static
	address  10.44.255.3
	netmask  255.255.0.0
	gateway  10.44.255.254
	bridge_ports ens33
	bridge_stp off
	bridge_fd 0

Intallation de NTP

FIXME Cette section est à reprendre en rappel de la description de NTP à venir ! Pour installer un cluster PVE, il est indispensable d'installer une synchonisation des horloges des hôtes entre elles..

Il faut d'abord arrêter le service TimeSync de systemd qui est activé par défaut sur une débian :

# systemctl stop systemd-timesyncd.service 
# systemctl disable systemd-timesyncd.servic

Ensuite, installer le démon ntp, et corriger le fichier /etc/ntp.conf comme suit :

Bien sur, il faut autoriser nos pairs NTP à dialoguer, via le réseau privé en 10.10.10.0/24. Ci dessous l'exemple sur le membre 3 du cluster.

# la référence
server 172.16.255.254

# les pairs
peer 10.10.10.1
peer 10.10.10.2
#peer 10.10.10.3

# la RTC comprise comme strate 10
server  127.127.1.0     # local clock
fudge   127.127.1.0 stratum 10

# Autoriser les requêtes des autres PVE
restrict 10.10.10.0 netmask 255.255.255.0

Un controle rapide permet de vérifier la bonne synchronisation, ici sur pve3 :

# ntpq -p

     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
+172.16.255.254  145.238.203.14   2 u   45  128  377    0.115   31.877   5.254
*10.10.10.1      172.16.255.254   3 s   78  128  377    0.073   15.575   9.960
+10.10.10.3      10.10.10.1       4 s   13  128  377    0.028    5.774   1.166
 LOCAL(0)        .LOCL.          10 l  49m   64    0    0.000    0.000   0.000

Nous sommes bien synchronisés sur le serveur et proche d'une convergence entre les pairs.

Le status du service de temps nous confirme que nous ne sommes pas synchro par le réseau (c'est pas systemd qui fait le taff) mais bien sous le controle d'un service NTP :

# timedatectl
      Local time: mer. 2017-11-08 13:16:49 CET
  Universal time: mer. 2017-11-08 12:16:49 UTC
        RTC time: mer. 2017-11-08 12:16:49
       Time zone: Europe/Paris (CET, +0100)
 Network time on: no
NTP synchronized: yes
 RTC in local TZ: no

Forçage de la RTC

L'horloge hardware (RTC) peut être décalée par rapport au temps système, ici de 29ms.

# date -Ins && hwclock
2021-06-30T09:17:10,950590651+02:00
2021-06-30 09:17:10.921348+02:00

On peut rectifier ça à la main. Dans cet exemple, on constate un écart de 8s entre avant et après la mise à jour.

 
# hwclock && hwclock --systohc && hwclock 
2021-02-26 23:11:04.155197+01:00
2021-02-26 23:11:12.717703+01:00

Il est possible d'automatiser ça, en rajoutant un fichier dans /etc/cron.daily.

# cat /etc/cron.daily/mfa-systohc 
#!/bin/sh

# Tous les jours, on force la maj de l'horloge RTC
/usr/sbin/hwclock --systohc

Cluster

La mise en place du cluster est décrite ici. Elle est reprise pas à pas, conformément à notre exemple.

Création

root@pve51:~# pvecm create LeCluster
Corosync Cluster Engine Authentication key generator.
Gathering 1024 bits for key from /dev/urandom.
Writing corosync key to /etc/corosync/authkey.

root@pve51:~# pvecm status
Quorum information
------------------
Date:             Thu May 18 01:27:13 2017
Quorum provider:  corosync_votequorum
Nodes:            1
Node ID:          0x00000001
Ring ID:          1/4
Quorate:          Yes

Votequorum information
----------------------
Expected votes:   1
Highest expected: 1
Total votes:      1
Quorum:           1  
Flags:            Quorate 

Membership information
----------------------
    Nodeid      Votes Name
0x00000001          1 10.10.10.1 (local)

Ajout du 2ème membre

root@pve52:~# pvecm add 10.10.10.1
root@10.10.10.1's password: 
copy corosync auth key
stopping pve-cluster service
backup old database
waiting for quorum...OK
generating node certificates
merge known_hosts file
restart services
successfully added node 'pve52' to cluster.
root@pve52:~# pvecm status
Quorum information
------------------
Date:             Thu May 18 01:29:39 2017
Quorum provider:  corosync_votequorum
Nodes:            2
Node ID:          0x00000002
Ring ID:          1/8
Quorate:          Yes

Votequorum information
----------------------
Expected votes:   2
Highest expected: 2
Total votes:      2
Quorum:           2  
Flags:            Quorate 

Membership information
----------------------
    Nodeid      Votes Name
0x00000001          1 10.10.10.1
0x00000002          1 10.10.10.2 (local)

Ajout du 3ème membre

Ce membre n'a jamais ouver de session SSH avec pve1 avant, d'où l'avertissement classique que l'on acquitte par yes.

root@pve53:~# pvecm add 10.10.10.1
The authenticity of host '10.10.10.1 (10.10.10.1)' can't be established.
ECDSA key fingerprint is SHA256:1IIiN+hYK9OUBlmRznE6PKDyBgeVikGqdJWscZcVBmc.
Are you sure you want to continue connecting (yes/no)? yes
root@10.10.10.1's password: 
copy corosync auth key
stopping pve-cluster service
backup old database
waiting for quorum...OK
generating node certificates
merge known_hosts file
restart services
successfully added node 'pve53' to cluster.
root@pve53:~# pvecm status
Quorum information
------------------
Date:             Thu May 18 01:32:15 2017
Quorum provider:  corosync_votequorum
Nodes:            3
Node ID:          0x00000003
Ring ID:          1/12
Quorate:          Yes

Votequorum information
----------------------
Expected votes:   3
Highest expected: 3
Total votes:      3
Quorum:           2  
Flags:            Quorate 

Membership information
----------------------
    Nodeid      Votes Name
0x00000001          1 10.10.10.1
0x00000002          1 10.10.10.2
0x00000003          1 10.10.10.3 (local)

Changement du réseau Corosync

:!:FACULTATIF : Si vous n'avez pas pensé à utiliser le réseau privé entre les hôtes aussi pour créer le cluster, on peut reprendre à la main la configuration de Corosync.

Il suffit de suivre la procédureprocédure indiquée ici, principalement la section “Separate After Cluster Creation”.

Le fichier à éditer est /etc/pve/corosync.conf car il est répliqué grâce à pveFS sur toutes les machines. Par contre, il faut redémarrer Corosync sur CHAQUE machine, pour que l'hôte membre rejoigne le nouveau cluster.