Partitionnement
Remarque : les actions suivantes sont à réaliser sur les deux noeuds.
Voici le disque dédié à DRBD, sans partition :
# fdisk -l /dev/cciss/c0d1
Disk /dev/cciss/c0d1: 39.4 GB, 39406141440 bytes 255 heads, 32 sectors/track, 9432 cylinders Units = cylinders of 8160 * 512 = 4177920 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x64476aa0 Disk /dev/cciss/c0d1 doesn't contain a valid partition table
Lancer l’outil de partitionnement de ce même disque :
# cfdisk /dev/cciss/c0d1
Une fois le partitionnement terminé, voici ce que nous obtenons :
# fdisk -l /dev/cciss/c0d1
Disk /dev/cciss/c0d1: 39.4 GB, 39406141440 bytes 255 heads, 32 sectors/track, 9432 cylinders Units = cylinders of 8160 * 512 = 4177920 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x64476aa0 Device Boot Start End Blocks Id System /dev/cciss/c0d1p1 1 9432 38482544 83 Linux
DRBD ou le RAID 1 over TCP/IP
Remarque : les actions suivantes sont à réaliser sur les deux noeuds. Installer DRBD :
# aptitude install drbd8-utils
Lancer le module approprié :
# modprobe drbd
Vérifier la présence du module :
# lsmod | grep drbd
drbd 172668 0 lru_cache 4018 1 drbd cn 3631 1 drbd
Sauvegarder la configuration d’origine :
# cp /etc/drbd.conf /etc/drbd.conf.original
Configurer DRBD :
# > /etc/drbd.conf # vim /etc/drbd.conf
global { usage-count no; } common { syncer { rate 100M; } } resource r0 { protocol C; startup { wfc-timeout 15; degr-wfc-timeout 60; } net { cram-hmac-alg sha1; shared-secret "***********"; } on vm-debian1 { device /dev/drbd0; disk /dev/cciss/c0d1; address 10.20.30.1:7788; meta-disk internal; } on vm-debian2 { device /dev/drbd0; disk /dev/cciss/c0d1; address 10.20.30.2:7788; meta-disk internal; } }
Initialiser le RAID avec la ressource r0 :
# drbdadm create-md r0
md_offset 39406137344 al_offset 39406104576 bm_offset 39404900352 Found some data ==> This might destroy existing data! <== Do you want to proceed? [need to type 'yes' to confirm] yes Writing meta data... initializing activity log NOT initialized bitmap New drbd meta data block successfully created.
Démarrer le service DRBD :
# /etc/init.d/drbd start
Remarque : les actions suivantes sont à réaliser uniquement sur le premier noeud.
Forcer la réplication des données de la ressource r0 depuis le premier noeud :
# drbdadm -- --overwrite-data-of-peer primary all
Vérifier le status de la ressource r0 :
# cat /proc/drbd
Créer le système de fichiers sur le volume DRBD :
# mkfs.ext3 /dev/drbd0
Intégration de la ressource DRBD sous Pacemaker
Créer le point de montage :
# mkdir /cluster
Exemple de configuration de Pacemaker :
# crm configure show
node vm-debian1 node vm-debian2 primitive ClusterDisk ocf:linbit:drbd \ params drbd_resource="r0" \ op monitor interval="15s" primitive ClusterFS ocf:heartbeat:Filesystem \ params device="/dev/drbd0" directory="/cluster" fstype="ext3" primitive ClusterIP ocf:heartbeat:IPaddr2 \ params ip="10.20.30.10" cidr_netmask="23" \ op monitor interval="15" primitive Nagios lsb:nagios \ op monitor interval="15s" timeout="20s" \ meta target-role="Stopped" ms MasterSlaveDisk ClusterDisk \ meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true" target-role="Started" colocation Nagios-with-ClusterFS inf: Nagios ClusterFS colocation mount-ClusterFS-on-Master inf: ClusterFS MasterSlaveDisk:Master colocation mount-ClusterIP-with-ClusterFS inf: ClusterIP ClusterFS order Nagios-after-ClusterFS inf: ClusterFS Nagios order mount-ClusterFS-after-ClusterDisk inf: MasterSlaveDisk:promote ClusterFS:start order mount-ClusterIP-after-ClusterFS inf: ClusterFS ClusterIP property $id="cib-bootstrap-options" \ dc-version="1.0.9-74392a28b7f31d7ddc86689598bd23114f58978b" \ cluster-infrastructure="openais" \ expected-quorum-votes="2" \ stonith-enabled="false" \ no-quorum-policy="ignore" \ last-lrm-refresh="1334323679" rsc_defaults $id="rsc-options" \ resource-stickiness="100"
Exemple d’un problème de synchronisation
Sur le noeud 1 :
# drbdadm status
<drbd-status version="8.3.7" api="88"> <resources config_file="/etc/drbd.conf"> <resource minor="0" name="r0" cs="StandAlone" ro1="Primary" ro2="Unknown" ds1="UpToDate" ds2="DUnknown" /> </resources> </drbd-status>
Sur le noeud 2 :
# drbdadm status
<drbd-status version="8.3.7" api="88"> <resources config_file="/etc/drbd.conf"> <resource minor="0" name="r0" cs="StandAlone" ro1="Secondary" ro2="Unknown" ds1="Outdated" ds2="DUnknown" /> </resources> </drbd-status>
Ce à quoi cela correspond :
You suffer from schizophrenic DRBD, better known as “split brain”.
Basically it means that both nodes became primary on your test resource and started writing to it. The result is an inconsistent resource, which is then called “split brain”. Please read the documentation carefully, you will have to discard the data on one of your nodes and let drbd sync that node from scratch.
Déconnecter le noeud avec les “mauvaises” données :
# drbdadm -- --discard-my-data connect all
Lancer la synchronisation depuis le noeud avec les “bonnes” données :
# drbdadm connect all