Drbd-1# cat /proc/drbd version: 8.3.5 (api:88/proto:86-91) GIT-hash: ded8cdf09b0efa1460e8ce7a72327c60ff2210fb build by root@localhost.localdomain, 2010-04-14 18:03:29
1: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r---- ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:6289188
drbd-2 # cat /proc/drbd version: 8.3.5 (api:88/proto:86-91) GIT-hash: ded8cdf09b0efa1460e8ce7a72327c60ff2210fb build by root@rac02, 2010-04-15 15:28:19 0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r---- ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:6289188
//第一行的ro表示两台主机的状态,都是”备机”状态.ds是磁盘状态,都是”不一致”状态.我们设置drbd-1为主节点: drbd-1 # drbdsetup /dev/drbd0 primary �Co //先用drbdsetup 来做,以后就可以用 drbdadm 了. #drbdadm primary db
drbd-1 # cat /proc/drbd version: 8.3.5 (api:88/proto:86-91) GIT-hash: ded8cdf09b0efa1460e8ce7a72327c60ff2210fb build by root@localhost.localdomain, 2010-04-14 18:03:29 0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r---- ns:21420 nr:0 dw:0 dr:29600 al:0 bm:1 lo:1 pe:8 ua:256 ap:0 ep:1 wo:b oos:6268004 [>....................] sync'ed: 0.4% (6120/6140)M //表示同步了0.4% finish: 0:14:46 speed: 7,060 (7,060) K/sec
drbd-1 # cat /proc/drbd version: 8.3.5 (api:88/proto:86-91) GIT-hash: ded8cdf09b0efa1460e8ce7a72327c60ff2210fb build by root@localhost.localdomain, 2010-04-14 18:03:29 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C ns:6289188 nr:0 dw:0 dr:6289188 al:0 bm:384 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
//第一次同步完成之后,就可以对drbd的设备创建文件系统了
drbd-1 # mkfs.ext3 /dev/drbd0 //这里你要是还没有格式化过,就进行格式化 drbd-1 # mount /dev/drbd0 /home/gluster/ drbd-1 # df -h Filesystem Size Used Avail Use% Mounted on /dev/sda1 9.5G 3.3G 5.8G 37% / /dev/sda3 9.0G 273M 8.3G 4% /home tmpfs 62M 0 62M 0% /dev/shm /dev/drbd0 6.0G 541M 5.0G 3% /home/gluster
//这里恢复我们之前保存的数据 #dd if=/root/backup of=/dev/drbd0
//测试2个节点的数据同步,先在1节点上创建3个文件 1 2 3 ,把第一个节点设置为从节点并且卸载第一个节点的磁盘, 在2节点上设置为主节点并且进行挂载,看数据有没有同步过来,在节点2上创建3个文件 4 5 6 ,再到节点1上看文件有没有同步过来,要是都可以同步,那就说明drbd的同步已经成功了.我这里就不输出相关信息了.
//glusterfs客户端的配置信息
#vi /usr/local/etc/glusterfs/glusterfs.vol
volume client1 type protocol/client option transport-type tcp/client option remote-host 192.168.0.70 //这里是heartbeat的 虚拟IP option remote-port 6996 option remote-subvolume locker end-volume
volume bricks type cluster/distribute subvolumes client1 end-volume
#glutserfs -l /tmp/glutser.log -f /usr/local/etc/glusterfs/glusterfs.vol /home/gluster # df -h Filesystem Size Used Avail Use% Mounted on /dev/sda2 30G 3.3G 25G 12% / udev 4.0G 116K 4.0G 1% /dev /dev/sda3 89G 77G 7.5G 92% /home glusterfs#/usr/local/etc/glusterfs/glusterfs.vol 6.0G 541M 5.0G 3% /home/gluster
//可以看到glusterfs客户端已经挂载成功.
//heartbeat的配置,在每个节点上执行下面的命令
# cp /usr/share/doc/heartbeat-2.0.7/ha.cf /etc/ha.d/ # cp /usr/share/doc/heartbeat-2.0.7/authkeys /etc/ha.d/ # cp /usr/share/doc/heartbeat-2.0.7/ha /etc/ha.d/ # useradd hacluster # useradd haclient # cd /etc/ha.d/ # vi ha.cf
#日志文件位置 logfile /var/log/ha-log #指定主备服务器多久发送一次心跳 keepalive 2 #指定30秒没有收到对方心跳就认为对方已经DOWN机 deadtime 30 #10秒没有收到心跳,便发出警报。 warntime 10 #对方DOWN后120秒重新检测一次。 initdead 120 #指定监听端口 udpport 694 #心跳监听网口,这里为eth0 bcast eth0 #主节点恢复后,自动收回资源。 auto_failback off #指定主备服务器的主机名称,即在hosts文件中指定的。 第一个node为主服务器,第二个node为备服务器。 node drbd-1 //服务器的主机名 node drbd-2 #当192.168.0.59,192.168.0.60这两个IP都不能ping通时对方即开始接管资源. ping_group group1 192.168.0.59 192.168.0.60 #启用ipfail脚本 respawn root /usr/lib/heartbeat/ipfail #指定运行ipfail的用户 apiauth ipfail gid=root uid=root
# vi authkeys
auth 1 1 crc
# chmod 600 authkeys
# vi haresources
drbd-1 drbddisk Filesystem::/dev/drbd0::/home/gluster::ext3 192.168.0.70
资源组的第一列是我们在ha.cf配置文件中的node之一,而且应该是当前准备作为primary节点的那一个node. 上面资源组中的各项含义如下:
drbd-1 当前primary节点名(uname -n)
drbddisk 告诉heartbeat要管理drbd的资源
Filesystem 这里是告诉heartbeat需要管理文件系统资源,其实实际上就是执行mount/umount命令,后面的”::”符号之后是跟的Filesystem的参数设备名和mount点
192.168.0.70 提供一个虚拟IP
# chkconfig heartbeat on # service heartbeat start
//moniter内容如下,我这里是把moniter放到chkconfig执行的,这个脚本是监控glutser是否挂掉的,要是挂掉,就进行heartbeat的切换.
#!/bin/bash
# chkconfig: 345 99 33
# description: start gluster moniter
logfile=/var/log/moniter.log
date=`(date +%y-%m-%d--%H:%M:%S)`
email=xxxxxxx@139.com
sleeptime=60
ip=$(/sbin/ifconfig | grep "inet addr" | grep -v "127.0.0.1" | awk '{print $2;}' | awk -F':' '{print $2;}' | head -1)
while [ 0 ]
do
ps aux |grep gluster |grep -v "grep gluster"
if [[ $? != 0 ]]
then
mail -s "{$ip}_glusterfs connect lost the srcprits fix it now " $email
service heartbeat stop
glusterfs -f /usr/local/etc/glusterfs/glusterfsd.vol
ps aux |grep gluster |grep -v "grep gluster"
if [ $? == 0 ]
then
echo "==============>$date<=====================glusterfs UP complete!">>$logfile
mail -s "{$ip}_glusterfs up now " $email
sleep $sleeptime
service heartbeat start
netstat -lntpu | grep 694
if [ $? == 0 ]
then
echo "heartbeat start complete!">>$logfile
else
echo "heartbeat start fail!">>$logfile
mail -s "{$ip} heartbeat can't to up please fix it !"
fi
else
echo "==============>$date<=====================glusterfs fail!">>$logfile
mail -s "{$ip}_glusterfs fail now " $email
fi
else
echo " glusterfs healthy!"
fi
sleep 10
done
drbd-1# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda1 9.5G 3.3G 5.7G 37% / /dev/sda3 9.0G 418M 8.1G 5% /home tmpfs 62M 0 62M 0% /dev/shm /dev/drbd0 6.0G 541M 5.5G 3% /home/gluster
我们去客户端上进行挂载看下读写数据是否正常,然后看下数据有没有写到master节点的相关分区上.我这里进行了相关的测试是正常的.
然后接下来测试下heartbeat切换是否正常,我这里分3种情况情况进行测试:
1. 停掉master的heartbeat,看下磁盘有没有被释放到slave文件服务器上.我这里测试是正常的,切换大概需要10秒钟的样子,这里要提一点在这十秒钟里面客户端是无法访问文件系统的,当虚拟ip切换到slave服务器上之后,客户端自动就可以连接访问了. 2. 把master服务器进行关闭,看是否正常的切换到slave服务器上 3. 把master服务器中上gluster进程kill掉,看是否正常切换到slave服务器上.
下面测试读写速度,我在我这里测试写速度最高可以达到9M左右,写速度基本都在10M左右,由于我是用的虚拟机做的相关环境,在生产环境下应该读写速度应该更快些.
后面打算测试下高并发的情况下,heartbeat的切换以及drbd的同步是否依然可以正常运行. 希望此篇文章可以帮助到需要解决文件系统的朋友们,如果有什么疑问或者建议希望和大家一起讨论.
本文出自 “Devops” 博客,请务必保留此出处http://wiliiwin.blog.51cto.com/928128/303124