DRDB + Corosync + pacemaker avec témoin
De TwisterWiki
Installation des paquets sur chaque serveur
Serveurs DRBD
apt install nfs-kernel-server drbd-utils drbd-doc fence-agents corosync pacemaker crmsh corosync-qdevice pacemaker-doc corosync-doc
Serveur témoin
apt install corosync-qnet
Configuration du DRBD
Ajout d'un second disque sur chaque serveur
Création d'une partition sur le disque ajouté sans la formater
/etc/drbd.d/global_common.conf
global {
usage-count no;
}
common {
net {
protocol C;
}
}
Création du fichier r0.res
resource r0 {
net {
protocol C;
allow-two-primaries no;
after-sb-0pri discard-least-changes;
after-sb-1pri consensus;
after-sb-2pri disconnect;
ping-timeout 5;
connect-int 2;
}
on drbd-primaire {
device /dev/drbd0;
disk /dev/sdb1;
address 192.168.50.220:7788;
meta-disk internal;
}
on drbd-secondaire {
device /dev/drbd0;
disk /dev/sdb1;
address 192.168.50.221:7788;
meta-disk internal;
}
}
- systemctl restart drbd
- Création du volume drbd sur chaque nœud
drbdadm create-md r0
- systemctl restart drbd
- pour supprimer des messages d'avertissement sur chaque nœud
dpkg-statoverride --add --update root haclient 4750 /lib/drbd/drbdsetup-84 dpkg-statoverride --add --update root haclient 4750 /usr/sbin/drbdmeta
- sur le nœud primaire
drbdadm primary r0 --force
- sur le nœud secondaire
drbdadm secondary r0
- sur le noeud primaire
mkfs.ext4 /dev/drbd0
installation corosync + pacemaker
systemctl enable corosync-qdevice
Configuration corosync
- contenu du fichier /etc/corosync/corosync.conf
# Please read the corosync.conf.5 manual page
totem {
version: 2
cluster_name: drbd-lab
transport: knet
crypto_cipher: aes256
crypto_hash: sha256
token: 3000
consensus: 3600
}
nodelist {
node {
ring0_addr: 192.168.50.221
name: drbd-secondaire
nodeid: 2
}
node {
ring0_addr: 192.168.50.220
name: drbd-primaire
nodeid: 1
}
}
quorum {
provider: corosync_votequorum
device {
model: net
votes: 1
net {
algorithm: ffsplit
host: 192.168.50.222
}
}
}
logging {
to_logfile: yes
logfile: /var/log/corosync/corosync.log
to_syslog: yes
timestamp: on
}
- génération de la clé de chiffrement à copier sur tous les membres du cluster
/usr/sbin/corosync-keygen
- redémarrage de corosync sur tous les noeuds du cluster
systemctl restart corosync
installation corosync-qnetd sur le témoin
apt install corosync-qnetd
- suppression de le CA sur le témoin
rm -fr /etc/corosync/qnetd/nssdb
- Sur un des noeuds du cluster
corosync-qdevice-net-certutil -Q -n {cluster_corosync} drbd-temoin drbd-primaire drbd-secondaire
- sur le témoin
cd /etc/corosync/qnetd chgrp coroqnetd nssdb nssdb/cert9.db nssdb/key4.db
configuration corosync-qnetd
- Fichier /etc/default/corosync-qnetd
# Corosync Qdevice Network daemon init script configuration file # COROSYNC_QNETD_OPTIONS specifies options passed to corosync-qnetd command # (default is no options). # See "man corosync-qnetd" for detailed descriptions of the options. COROSYNC_QNETD_OPTIONS="-4df -s off -l 192.168.50.40" # COROSYNC_QNETD_RUNAS specifies user under which qnetd daemon should be running # (not set or empty is default and means "user who executes init script") # Make sure to set correct owner of directories /etc/corosync/qnetd and # /var/run/corosync-qnetd # This has no effect if systemd unit is used (you have to change unit file) COROSYNC_QNETD_RUNAS=""
configuration pacemaker
- création des clés ssh sur tous les nodes
su - hacluster -s /bin/bash ssh-keygen
- via la commande crm configure edit nous pouvons configurer pacemaker. Cette commande ouvre votre éditeur préféré
node 1: drbd-primaire
node 2: drbd-secondaire
primitive r_drbd_disk ocf:linbit:drbd \
params drbd_resource=r0 \
op start interval=0s timeout=180s \
op stop interval=0 timeout=120s \
op monitor interval=17s role=Master timeout=120s \
op monitor interval=16s role=Slave timeout=119s \
op promote interval=0s timeout=180s
primitive r_drbd_fs Filesystem \
params device="/dev/drbd0" directory="/opt/drbd" fstype=ext4 \
op start interval=0s timeout=180s \
op stop interval=0s timeout=180s
primitive r_ip_ipv4 IPaddr2 \
params ip=192.168.50.223 cidr_netmask=24 \
op monitor interval=10s \
op start interval=0s timeout=180s \
op stop interval=0s timeout=180s \
meta failure-timeout=60s
primitive r_nfs systemd:nfs-kernel-server \
op monitor interval=10s start-delay=15s \
op start interval=0s timeout=10s \
op stop interval=0s timeout=10s \
meta target-role=Started
primitive st_drbd-primaire stonith:fence_vbox \
params identity_file="/var/lib/pacemaker/.ssh/id_rsa" ip={virtualbox_hôte} pcmk_host_list=drbd-primaire plug={id virtualbox_de_la_vm} username={username_qui_lance_les_commandes_vbox} \
op monitor timeout=600s interval=60s \
op start timeout=600s interval=0s \
op stop timeout=600s interval=0s
primitive st_drbd-secondaire stonith:fence_vbox \
params identity_file="/var/lib/pacemaker/.ssh/id_rsa" ip={virtualbox_hôte} pcmk_host_list=drbd-secondaire plug={id virtualbox_de_la_vm} username={username_qui_lance_les_commandes_vbox} \
op monitor timeout=600s interval=60s \
op start timeout=600s interval=0s \
op stop timeout=600s interval=0s
group g_nfs r_nfs r_ip_ipv4
clone ms_drbd r_drbd_disk \
meta master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true promotable=true \
meta failure-timeout=60s
colocation c_drbd_fs inf: r_drbd_fs ms_drbd:Master
colocation c_nfs inf: g_nfs ms_drbd:Master
location location-g_nfs-drbd-primaire-100 g_nfs 100: drbd-primaire
location location-ms_drbd-drbd-primaire-100 ms_drbd 100: drbd-primaire
location location-r_drbd_fs-drbd-primaire-100 r_drbd_fs 100: drbd-primaire
location location-st_drbd-primaire-drbd-primaire-INFINITY st_drbd-primaire inf: drbd-primaire
location location-st_nfs-02-drbd-secondaire-INFINITY st_drbd-secondaire inf: drbd-secondaire
order o_drbd_mount Mandatory: ms_drbd:promote r_drbd_fs:start
order o_nfs_start Mandatory: r_drbd_fs g_nfs
property cib-bootstrap-options: \
have-watchdog=false \
dc-version=2.1.5-a3f44794f94 \
cluster-infrastructure=corosync \
cluster-name=drbd \
stonith-enabled=true \
no-quorum-policy=ignore \
stop-all-resources=false \
last-lrm-refresh=1747170239 \
startup-fencing=false \
cluster-recheck-interval=2min
property rsc_defaults: \
resource-stickiness=100 \
migration-threshold=1
rsc_defaults rsc_defaults-meta_attributes: \
resource-stickiness=50