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