Article Original Posté par AtulAthavale on Tue 29 Jan 2008 at 13:04 http://www.debian-administration.org/articles/578
Installer 2 serveurs en Debian Etch.
Node Hostname IP-Address Node1 node1 192.168.0.128 Node2 node2 192.168.0.129
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.
# apt-get install ocfs2-tools ocfs2console
* 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
# apt-get install drbd8-utils drbd8-module-source drbd8-source build-essential # m-a a-i drbd8 # depmod -ae # modprobe drbd
* 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
* 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
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.