Afgelopen week ben ik bezig geweest met het uitzoeken hoe Corosync werkt. Ik had namelijk een 2 node cluster nodig om een iSCSI lun via NFS aan de buitenwereld aan te bieden. Corosync met Pacemaker is daar een goede kandidaat voor.
Ik heb een aantal VM’s geinstalleerd. 2 voor het cluster (node1, de primary en node2, de secondary) en een aantal voor een Ceph cluster voor de iSCSI koppeling, allen met Ubuntu 20.04LTS.
Nadat Ubuntu en het Ceph cluster geinstalleerd is en het netwerk geconfigureerd gaan we de cluster software installeren.
Als eerste voeren we op beide de installatie voor pacemaker en corosync uit. Corosync is een dependancy van pacemaker.
sudo dpkg-reconfigure tzdata
sudo apt-get update
sudo apt-get -y install ntp
sudo apt-get install pacemaker
Daarna zorgen we ervoor dat de 2 nodes veilig met elkaar kunnen communiceren. Dit doen we door op node1 de volgende commando’s te gebruiken.
sudo apt-get install haveged
sudo corosync-keygen
sudo scp /etc/corosync/authkey username@node2:/etc/corosync/
Op node2 moeten we dan nog de volgende instellingen doen
sudo chown root: /etc/corosync/authkey
sudo chmod 400 /etc/corosync/authkey
En vervolgens op beide nodes
sudo vim /etc/corosync/corosync.conf
In dit bestand moet hetvolgende komen te staan. het <private_binding_IP_address>
is het cluster adres. Deze “hopt” tussen de nodes. Ook dien je nog de ipadressen van de nodes aan te passen.
totem {
version: 2
cluster_name: lbcluster
transport: udpu
interface {
ringnumber: 0
bindnetaddr: <private_binding_IP_address>
broadcast: yes
mcastport: 5405
}
}quorum {
provider: corosync_votequorum
two_node: 1
}nodelist {
node {
ring0_addr: <IP_address_node1>
name: primary
nodeid: 1
}
node {
ring0_addr: <IP_address_node2>
name: secondary
nodeid: 2
}
}logging {
to_logfile: yes
logfile: /var/log/corosync/corosync.log
to_syslog: yes
timestamp: on
}
Daarna gebruiken we de volgende commando’s op beide nodes om een service te maken:
sudo mkdir -p /etc/corosync/service.d
sudo vim /etc/corosync/service.d/pcmk
Met daarin als inhoud
service {
name: pacemaker
ver: 1
}
En
sudo vim /etc/default/corosync
Waarin we het volgende toevoegen
START=yes
Nu is het cluster voorbereid en kunnen we gaan testen of het werkt:
sudo systemctl start corosync
sudo corosync-cmapctl | grep members
Om te zorgen dat pacemaker en corosync in de goede volgorde starten bij een reboot geven we weer op beide nodes het volgende commando
sudo update-rc.d pacemaker defaults 20 01
sudo systemctl start pacemaker
Nu is je cluster gemaakt. Dit cluster werkt met resources. Beheren van het cluster doe je met crm. Hieronder staan dus een aantal commando’s om resources toe te voegen, je cluster status te bekijken en resources te verwijderen. Editen van resources kan (ook) met het commando:
crm configure edit
Een iSCSI mountpoint configureren:
crm configure primitive mnt_nfs ocf:heartbeat:Filesystem \
params device="/dev/mapper/<iscsidisk>" directory="/mnt/iscsi" \
fstype="ext3" op start interval="0" timeout="120" op monitor \
interval="60" timeout="60" OCF_CHECK_LEVEL="20" op stop interval="0" timeout="240"
Een NFS export configuren:
crm configure primitive mnt_nfs_export ocf:heartbeat:exportfs \
params fsid=10 directory="/mnt/iscsi" \
options="rw,no_root_squash,subtree_check" clientspec=<ip_of_nfs_client>
En we configureren een group, zodat dit alles bij elkaar blijft:
crm configure group <group_name> mnt_nfs mnt_nfs_export meta target-role="Started"
Nu zou je vanaf vanaf het hierboven gespecificeerde <ip_of_nfs_client>
moeten kunnen connecten met het cluster via het <private_binding_IP_address>
adres.
mount <private_binding_IP_address>:/mnt/iscsi /mnt/nfs-external
Om resources te stoppen gebruik je op node1 of node2 het commando
crm resource stop <resource_name>
En om resources te verwijderen het commando
crm configure delete <resource_name>
Tot zover het maken van een redelijk simple cluster.