Setup DRBD Primary Primary System with OCFS2

Aufbau eines DRBD Primary / Primary Testsystems mit OCFS2 Clusterfilesystem als NFS Server

Server 1:  
name       pille-01
eth0       10.1.0.1
eth1       192.168.1.1
System     Ubuntu 14.04 LTS (trusty)
disk       /dev/mapper/g_my_data-v_drbd (200GB) (sdc)

Server 2:  
name       palle-01
eth0       10.2.0.1
eth1       192.168.2.1
System     Ubuntu 14.04 LTS (trusty)
disk       /dev/mapper/g_my_data-v_drbd (200GB) (sdc)

Das DRBD Device soll später unter /drbd eingebunden werden.

Devices vorbereiten, dieses kann auf beiden Knoten identisch durchgeführt werden.
Ich habe mich für eine LVM Disk entschieden, was aber nich zwingend nötig ist, man könnte auch sdb1 dafür nehmen

fdisk /dev/sdc
-> create primary Partition
-> change ID to 8e Linux LVM
-> w to write and exit
pvcreate /dev/sdc1
vgcreate g_my_data /dev/sdc1
lvcreate -L 200G -n g_my_data v_drbd

drbd8-utils auf beiden Knoten installieren

apt-get install drbd8-utils

DRBD Konfiguration erstellen und auf beiden Knoten ausrollen

vim /etc/drbd.d/my_nfs.res
common {
syncer {
al-extents 6433;
}
}
resource nfs_data {

startup {
wfc-timeout10;
degr-wfc-timeout 120;
become-primary-on both;
}

net {
protocol C;
allow-two-primaries;
after-sb-0pri discard-zero-changes;
after-sb-1pri discard-secondary;
after-sb-2pri disconnect;
sndbuf-size 0;
no-tcp-cork;
unplug-watermark 16;
max-buffers 8000;
max-epoch-size 8000;

}

volume 0 {
device minor 0;
disk /dev/mapper/g_data-v_my_drbd;
meta-disk internal;
}
on pille-01 {
address 192.168.1.1:7788;
}
on palle-01 {
address 192.168.2.1:7788;
}
}

DRBD Device erstmalig initialisieren

drbdadm create-md nfs_data

DRBD Device hochfahren auf beiden Knoten

drbdadm up nfs_data

Den ersten Knoten pille-01 zum Primary hochstufen

drbdadm primary --force nfs_data

überprüfen kann man den Fortschritt mit

cat /proc/drbd

Den zweiten Knoten palle-01 ebenfalls zum Primary hochstufen, dazu ziehen wir alle Daten gleich.

drbdadm secondary nfs_data

Resource trennen

drbdadm disconnect nfs_data

Alle Änderungen wegschmeißen

drbdadm connect --discard-my-data nfs_data

Den Slave auch zum Primary machen

drbdadm primary nfs_data

Clusterfilesystem OCFS2 auf den Datenträger bringen

apt-get install ocfs2-tools

OCFS2 Konfigurationsdatei erstellen, die auf beiden Knoten identisch ist

vim /etc/ocfs2/cluster.conf
cluster:
node_count = 2
name = ocfs2_drbd0_nfs_data
node:
ip_port = 7777
ip_address = 10.1.0.1
number = 0
name = pille-01
cluster = ocfs2_drbd0_nfs_data

node:
ip_port = 7777
ip_address = 10.2.0.1
number = 1
name = palle-02
cluster = ocfs2_drbd0_nfs_data

Das DRBD Device auf dem Knoten pille-01 formatieren, auf palle-02 ist dieses nicht mehr nötig, da die Änderungen ja via DRBD übertragen werden.

mkfs.ocfs2 -b 4K -C 4K --fs-feature-level=max-features -N 2 -L ocfs2_drbd0_nfs_data -T mail /dev/drbd0

Um den Treiber zu aktivieren unter Debian / Ubuntu, muß wie folgt vorgegangen und die Fragen entsprechend beantwortet werden. WICHTIG! Sowohl auf pille-01 als auch auf palle-02:

dpkg-reconfigure -p medium -f readline ocfs2-tools
Configuring ocfs2-tools
Would you like to start an OCFS2 cluster (O2CB) at boot time? yes
Name of the cluster to start at boot time: ocfs2
The O2CB heartbeat threshold sets up the maximum time in seconds that a node
awaits for an I/O operation. After it, the node "fences" itself, and you will
probably see a crash.

It is calculated as the result of: (threshold - 1) x 2.

Its default value is 31 (60 seconds).

Raise it if you have slow disks and/or crashes with kernel messages like:

o2hb_write_timeout: 164 ERROR: heartbeat write timeout to device XXXX after NNNN
milliseconds
O2CB Heartbeat threshold: `31`
Loading filesystem "configfs": OK
Mounting configfs filesystem at /sys/kernel/config: OK
Loading stack plugin "o2cb": OK
Loading filesystem "ocfs2_dlmfs": OK
Mounting ocfs2_dlmfs filesystem at /dlm: OK
Setting cluster stack "o2cb": OK
Starting O2CB cluster ocfs2: OK

Nun können wir unser DRBD Device auf beiden Seiten einbinden.

mount -t ocfs2 /dev/drbd

Um das ganze Reboot fest zu machen, tragen wir den Mount auch noch in die Datei fstab ein:
Damit wir wissen, was wir eintragen sollen, schauen wir im System nach:

cat /proc/mounts

Als Ausgabe erhalten wir (gekürzt auf das wichtigste)

/dev/drbd0 /drbd ocfs2 rw,relatime,_netdev,heartbeat=local,nointr,data=ordered,errors=remount-ro,atime_quantum=60,coherency=full,user_xattr,acl 0 0

Da wir das System ein wenig tunen wollen, ersetzen wir relatime durch noatime und tragen folgendes in die Datei etc/fstab ein:

echo "/dev/drbd0 /drbd ocfs2 rw,noatime,_netdev,heartbeat=local,nointr,data=ordered,errors=remount-ro,atime_quantum=60,coherency=full,user_xattr,acl 0 0" >> /etc/fstab

NFS Freigabe einrichten, um das DRBD Device freizugeben, dazu auf beiden Knoten den NFS Server installieren.

apt-get install nfs-kernel-server nfs-common
mkdir /drbd/nfs_freigabe

und anschließend die Datei /etc/exports editieren

vim /etc/exports
/drbd/nfs_freigabe \
10.10.1.64/26(rw,sync,anonuid=33,anongid=33,no_subtree_check,fsid=0) \
10.11.1.64/26(rw,sync,anonuid=33,anongid=33,no_subtree_check,fsid=0)

service nfs-kernel-server restart
exportfs

Anschließend kann die NFS Freigabe auf den Clients eingebunden werden

vim /etc/fstab
10.1.0.1:/ /home/httpd/htmlnfs4 _netdev,auto00