====== Cluster with drbd8 and OCFS2 ====== {{:drbd_logo_small.gif|}}{{:oralogo_small.gif|}} Article Original Posté par AtulAthavale on Tue 29 Jan 2008 at 13:04 [[http://www.debian-administration.org/articles/578]] ===== OS Installation ===== Installer 2 serveurs en Debian Etch. ===== Network Configuration ===== Node Hostname IP-Address Node1 node1 192.168.0.128 Node2 node2 192.168.0.129 ===== Mise à jour du serveur ===== Sur Debian Etch, le montage d'un cluster Ocfs2 / DrBD 8 nécessite une mise à jour du kernel. * Ajout d'une source APT # vi /etc/apt/sources.list Ajouter la ligne : deb http://www.backports.org/debian etch-backports main contrib non-free * Installer la clé permettant d'utiliser la ressource backports # apt-get install debian-backports-keyring * Mettre à jour le cache apt : # apt-get update * Installer le kernel nécessaire : # apt-get install linux-image-2.6.25-2-686 linux-headers-2.6.25-2-686 * Mettre les paramètres systèmes suivant dans le fichier /etc/rc2.d/S99rc.local : A modifier suivant votre configuration. # cat /etc/rc2.d/S99rc.local #! /bin/sh ### BEGIN INIT INFO # Provides: rc.local # Required-Start: $local_fs $remote_fs # Required-Stop: # Default-Start: 2 3 4 5 # Default-Stop: # Short-Description: Run /etc/rc.local if it exist ### END INIT INFO PATH=/sbin:/usr/sbin:/bin:/usr/bin . /lib/init/vars.sh . /lib/lsb/init-functions do_start() { if [ -x /etc/rc.local ]; then [ "$VERBOSE" != no ] && log_begin_msg "Running local boot scripts (/etc/rc.local)" /etc/rc.local ES=$? [ "$VERBOSE" != no ] && log_end_msg $ES return $ES fi /sbin/hdparm -a 4096 /dev/drbd0 /bin/echo "256">/sys/block/sda/queue/nr_requests /sbin/ifconfig eth4 txqueuelen 1000 echo 256960 > /proc/sys/net/core/rmem_default echo 256960 > /proc/sys/net/core/rmem_max echo 256960 > /proc/sys/net/core/wmem_default echo 256960 > /proc/sys/net/core/wmem_max echo 0 > /proc/sys/net/ipv4/tcp_timestamps echo 1 > /proc/sys/net/ipv4/tcp_sack echo 1 > /proc/sys/net/ipv4/tcp_window_scaling echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout echo 30 > /proc/sys/net/ipv4/tcp_keepalive_intvl echo 5 > /proc/sys/net/ipv4/tcp_keepalive_probes echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle } case "$1" in start) do_start ;; restart|reload|force-reload) echo "Error: argument '$1' not supported" >&2 exit 3 ;; stop) ;; *) echo "Usage: $0 start|stop" >&2 exit 3 ;; esac * Redémarrer vos serveurs. ===== OCFS2 ===== ==== Installation ==== # apt-get install ocfs2-tools ocfs2console ==== Configuration ==== * Editer /etc/ocfs2/cluster.conf # vi /etc/ocfs2/cluster.conf node: ip_port = 7777 ip_address = 192.168.0.128 number = 0 name = node1 cluster = ocfs2 node: ip_port = 7777 ip_address = 192.168.0.129 number = 1 name = node2 cluster = ocfs2 cluster: node_count = 2 name = ocfs2 * Reconfigure ocfs2 # dpkg-reconfigure ocfs2-tools # /etc/init.d/o2cb restart ===== DrBD 8 ===== http://en.wikipedia.org/wiki/Drbd ==== Installation ==== # apt-get install drbd8-utils drbd8-module-source drbd8-source build-essential # m-a a-i drbd8 # depmod -ae # modprobe drbd ==== Configuration ==== * Editer /etc/drbd.conf # vi /etc/drbd.conf global { usage-count yes; } common { syncer { rate 300M; } } resource r0 { protocol C; handlers { pri-on-incon-degr "echo o > /proc/sysrq-trigger ; halt -f"; pri-lost-after-sb "echo o > /proc/sysrq-trigger ; halt -f"; local-io-error "echo o > /proc/sysrq-trigger ; halt -f"; outdate-peer "/usr/sbin/drbd-peer-outdater"; } startup { } disk { on-io-error detach; } net { timeout 600; connect-int 60; ping-int 30; ping-timeout 50; allow-two-primaries; after-sb-0pri disconnect; after-sb-1pri disconnect; after-sb-2pri disconnect; rr-conflict disconnect; sndbuf-size 2M; max-buffers 16000; max-epoch-size 16000; unplug-watermark 16000; } syncer { rate 300M; al-extents 1801; } on node1 { device /dev/drbd0; disk /dev/sda3; address 192.168.0.128:7788; flexible-meta-disk internal; } on node2 { device /dev/drbd0; disk /dev/sda3; address 192.168.0.129:7788; meta-disk internal; } } * Format la partition # mkfs.ocfs2 /dev/sda3 * Ajouter le group haclient # vi /etc/group haclient:x:107: * Positionner les droits sur les binaires DrBD # chgrp haclient /sbin/drbdsetup # chmod o-x /sbin/drbdsetup # chmod u+s /sbin/drbdsetup # chgrp haclient /sbin/drbdmeta # chmod o-x /sbin/drbdmeta # chmod u+s /sbin/drbdmeta * Créer le meta-device # drbdadm create-md r0 * Démarrer DrBD # /etc/init.d/drbd restart * Passer les 2 membres en Primaire/Primaire # drbdsetup /dev/drbd0 primary -o ==== Init script ==== * Editer /etc/init.d/mountdrbd.sh # vi /etc/init.d/mountdrbd.sh drbdadm primary r0 /sbin/modprobe ocfs2_stackglue mount.ocfs2 /dev/drbd0 /data * Mettre les droits d'exécution # chmod +x /etc/init.d/mountdrbd.sh * Installer le script dans la démarrage automatique : # update-rc.d mountdrbd.sh start 72 2 3 4 5 . stop 10 0 6 . Adding system startup for /etc/init.d/mountdrbd.sh ... /etc/rc0.d/K10mountdrbd.sh -> ../init.d/mountdrbd.sh /etc/rc6.d/K10mountdrbd.sh -> ../init.d/mountdrbd.sh /etc/rc2.d/S72mountdrbd.sh -> ../init.d/mountdrbd.sh /etc/rc3.d/S72mountdrbd.sh -> ../init.d/mountdrbd.sh /etc/rc4.d/S72mountdrbd.sh -> ../init.d/mountdrbd.sh /etc/rc5.d/S72mountdrbd.sh -> ../init.d/mountdrbd.sh Le choix du niveau de démarrage dépend de celui du package drbd * Lancer le script # /etc/init.d/mountdrbd.sh Voilà votre cluster est prêt à fonctionner. # cat /proc/drbd version: 8.0.12 (api:86/proto:86) GIT-hash: 5c9f89594553e32adb87d9638dce591782f947e3 build by phil@mescal, 2008-04-24 13:29:44 0: cs:Connected st:Primary/Primary ds:UpToDate/UpToDate C r--- ns:3843 nr:6084218 dw:6088061 dr:8026 al:1 bm:372 lo:0 pe:0 ua:0 ap:0 resync: used:0/61 hits:379652 misses:372 starving:0 dirty:0 changed:372 act_log: used:0/257 hits:7657 misses:1 starving:0 dirty:0 changed:1 ===== En cas de panne ===== Si les membres de votre cluster ne se connectent plus entre eux, que le port d'écoute disparait dès que le service est lancé sur le second membre, voici ce que vous devez faire : * Sur le membre primaire : # /etc/init.d/drbd stop Stopping all DRBD resources. # drbdadm create-md r0 Valid meta-data already in place, recreate new? [need to type 'yes' to confirm] yes Creating meta data... initialising activity log initialising bitmap (208844 KB) 100% New drbd meta data block sucessfully created. # /etc/init.d/drbd start Starting DRBD resources: [ d0 s0 n0 ]. # drbdsetup /dev/drbd0 primary -o * Sur le membre secondaire : # /etc/init.d/drbd stop Stopping all DRBD resources. # /etc/init.d/drbd start Starting DRBD resources: [ d0 s0 n0 ]. # drbdadm primary all vous pouvez remonter la partition sur les 2 membres. Les 2 membres vont se resynchroniser.{{:drbd_logo_small.gif|}}