DRBD+HeartBeat+NFS 架构
生活随笔
收集整理的這篇文章主要介紹了
DRBD+HeartBeat+NFS 架构
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
?昨天做了單獨的DRBD,還存在一些疑問,今天通過這個DRBD+HeartBeat+NFS架構,并可以清楚的解答昨天的疑問了。實際上,DRBD只是作為磁盤冗余,而并不是像我之前理解的那樣,同時提供2份一模一樣的數據,它需要借助HeartBeat?虛擬出一個虛擬IP,并通過NFS掛載,才能完成。
?
【實驗環境】virtual?box?centos?6.4??最小化【實驗拓撲圖】【實驗步驟】1、配置主機名[root@localhost?~]#?vim?/etc/sysconfig/networkHOSTNAME=node1[root@localhost?~]#?vim?/etc/hosts192.168.56.120??node1192.168.56.121??node2
[root@localhost?~]#?hostname?node1===============================[root@localhost?~]#?vim?/etc/sysconfig/networkHOSTNAME=node2
[root@localhost?~]#?vim?/etc/hosts192.168.56.120??node1192.168.56.121??node2
[root@localhost?~]#?hostname?node2
2、配置DRBD????參照前面的配置過程
[root@node1?~]#?cat?/proc/drbd?version:?8.4.3?(api:1/proto:86-101)GIT-hash:?89a294209144b68adb3ee85a73221f964d3ee515?build?by?root@node1,?2013-07-29?08:48:43
?1:?cs:Connected?ro:Primary/Secondaryds:UpToDate/UpToDate?C?r-----????ns:0?nr:0?dw:0?dr:664?al:0?bm:0?lo:0?pe:0?ua:0?ap:0?ep:1?wo:f?oos:0
確保兩個節點為一主一從即可。
3、安裝配置NFS(node2的配置與node1一致,可以通過scp命令將相關配置文件拷貝到node2上即可)[root@node1?~]#?yum?-y?install?nfs?nfs-utils?rpcbind?openssh-clients[root@node1?~]#?vim?/etc/exports?/db?????*(rw,sync,insecure,no_root_squash,no_wdelay)
修改nfs啟動腳本[root@node1?~]#?vim?/etc/init.d/nfs找到????killproc?nfsd?–2??相關行,并改為:killproc?nfsd?–9
啟動nfs[root@node1?~]#?service?rpcbind?startStarting?rpcbind:??????????????????????????????????????????[??OK??][root@node1?~]#?service?nfs?start
Starting?NFS?services:????????????????????????????????????????[??OK??]Starting?NFS?mountd:???????????????????????????????????????[??OK??]Starting?NFS?daemon:???????????????????????????????????????[??OK??]
[root@node1?~]#?scp?/etc/exports?/etc/init.d/nfs?192.168.56.121:/etc/exports?
4、安裝配置HeartBeat(node2配置同node1)[root@node1?~]#?yum?-y?install?heartbeat?heartbeat-pils?heartbeat-stonith?libnet?perl-MailTools
注:有些版本可能并沒有heartbeat相關的rpm包,如果沒有,可以下載源碼包編譯安裝,或者通過配置epel軟件倉庫在線yum安裝[root@node1?~]#?wget?http://mirrors.hust.edu.cn/epel/6/i386/epel-release-6-8.noarch.rpm[root@node1?~]#?rpm?-ivh?epel-release-6-8.noarch.rpm?[root@node1?~]#??yum?clean?all[root@node1?~]#??yum?list重新執行yum命令安裝heartbeat[root@node1?~]#??yum?-y?install?heartbeat?heartbeat-pils?heartbeat-stonith?libnet?perl-MailTools
確認已經安裝heartbeat[root@node1?~]#?rpm?-qa?|grep?heartbeatheartbeat-libs-3.0.4-1.el6.i686heartbeat-3.0.4-1.el6.i686
復制模版文件[root@node1?~]#?cd?/usr/share/doc/heartbeat-3.0.4/[root@node1?heartbeat-3.0.4]#?cp?authkeys?ha.cf?haresources?/etc/ha.d/
配置heartbeat主配置文件[root@node1?heartbeat-3.0.4]#?cd?/etc/ha.d/[root@node1?ha.d]#?vim?ha.cf?找到下面相關內容,去掉前面的#注釋,并修改為如下內容:debugfile?/var/log/ha-debug????????//打開錯誤日志報告logfile?/var/log/ha-log????????????//?heartbeat?日志logfacility????local0????????????keepalive?2????????????????????????//兩秒檢測一次心跳線連接deadtime?10????????????????????//10?秒測試不到主服務器心跳線為有問題出現warntime?6????????????????????//警告時間(最好在?2?~?10?之間)#initdead?120????????????????//初始化啟動時?120?秒無連接視為正常,或指定heartbeat。在啟動時,需要等待120秒才去啟動任何資源(最少應該設置為deadtime的兩倍)
udpport?694????????????????????????????????????//使用udp?694端口bcast?eth0????????????????????????????????????????//廣播方式#ucast?eth0?192.168.1.20?????????????????????//單播方式連接(主從都寫對方的?ip?進行連接)auto_failback?off????????????????????????????//自動切換(主服恢復后可自動切換回來)這個不要開啟node????node1????????????????????????????????//聲明主服務器node????node2????????????????????????????????//聲明備服務器
修改資源文件[root@node1?ha.d]#?vim?haresources?node1?IPaddr::192.168.56.130/24/eth0?drbddisk::r0?Filesystem::/dev/drbd1::/db::ext3?killnfsd
注意:這里的192.168.56.130?便是VIP修改node2資源文件的時候節點名字應改為node2(node2與node1配置唯一一處不同)即:[root@node2?ha.d]#?vim?haresources?node2IPaddr::192.168.56.130/24/eth0?drbddisk::r0?Filesystem::/dev/drbd1::/db::ext3?killnfsd
[root@node1?ha.d]#?vim?authkeys?auth?11?crc
[root@node1?ha.d]#?vim?resource.d/killnfsd??????//加入以下內容killall?-9?nfsd?;?/etc/init.d/nfs?restart?;?exit?0
修改相關文件的權限[root@node1?ha.d]#?chmod?600?/etc/ha.d/authkeys?[root@node1?ha.d]#?chmod?755?/etc/ha.d/resource.d/killnfsd?[root@node1?ha.d]#?service?heartbeat?startStarting?High-Availability?services:?INFO:??Resource?is?stoppedDone.
node2?上的配置與node1的配置基本上完全一樣,可以從node1上直接拷貝過去,稍作修改即可[root@node1?ha.d]#?scp?ha.cf?authkeys?haresources?192.168.56.121:/etc/ha.d/[root@node1?ha.d]#?scp?resource.d/killnfsd?192.168.56.121:/etc/ha.d/resource.d?
啟動node1和node2的heartbeat[root@node1?ha.d]#?service?heartbeat?start
兩個節點都啟動heartbeat后,可以看到VIP在node1上:
5、測試在客戶端上測試:[root@localhost?~]#?yum?install?nfs?nfs-utils
確保客戶端能ping通VIP:?192.168.56.130
注意:我做實驗的時候,發現ping這個Vip?時通時不通,而且heartbeat?頻繁切換,但是node1與node2之間網絡是通的,于是查看日志,發現有一個錯誤:ResourceManager(default)[4917]:?2013/07/29_16:27:13?ERROR:?Cannot?locate?resource?script?drbddiskResourceManager(default)[4917]:?2013/07/29_16:27:14?info:?Retrying?failed?stop?operation?[drbddisk::r0]
仔細一看,發現/etc/ha.d/resource.d/?目錄下居然沒有drbddisk這個腳本...[root@node1?ha.d]#?vim?/etc/ha.d/resource.d/drbddisk這里順便附上drbddisk腳本: http://down.51cto.com/data/892360[root@localhost?~]#?ping?192.168.56.130PING?192.168.56.130?(192.168.56.130)?56(84)?bytes?of?data.64?bytes?from?192.168.56.130:?icmp_seq=1?ttl=64?time=2.37?ms64?bytes?from?192.168.56.130:?icmp_seq=2?ttl=64?time=0.394?ms64?bytes?from?192.168.56.130:?icmp_seq=3?ttl=64?time=0.342?ms
在客戶端掛載nfs[root@localhost?~]#?mount?-t?nfs?192.168.56.130:/db?/mnt/nfs/[root@localhost?~]#?mount/dev/mapper/VolGroup-lv_root?on?/?type?ext4?(rw)proc?on?/proc?type?proc?(rw)sysfs?on?/sys?type?sysfs?(rw)devpts?on?/dev/pts?type?devpts?(rw,gid=5,mode=620)tmpfs?on?/dev/shm?type?tmpfs?(rw,rootcontext="system_u:object_r:tmpfs_t:s0")/dev/sda1?on?/boot?type?ext4?(rw)none?on?/proc/sys/fs/binfmt_misc?type?binfmt_misc?(rw)192.168.56.130:/db?on?/mnt/nfs?type?nfs?(rw,vers=4,addr=192.168.56.130,clientaddr=192.168.56.113)
[root@localhost?~]#?ls?/mnt/nfs/hello.txt??hw.txt??lost+found?可以看到現在nfs可以正常讀寫了。在客戶端看來,它只知道192.168.56.130?提供了nfs?網絡共享目錄,并不知道實際上,nfs是跑在node1和node2上,如果node1?宕機,node2可以通過heartbeat很快接管服務,而對于用戶體驗來說,無需做其他更改。
下面模擬node1宕機的情況:通過一個腳本對nfs?不斷的寫入數據,并從另外一個終端通過tailf?查看,與此同時,停止node1的服務這里,網上很多資料都是用這個腳本,通過這個腳本不斷的touch?x?,我覺得應該有問題。但不是腳本本身問題。
while?true
do
echo?---\>?trying?touch?x:`date`
?touch?x
echo?\<-----done?touch?x:`date`
?echo
sleep?1
done
我來分析一下:網上的資料很多這樣的:[root@localhost?~]#?mount?192.168.10.1:/mnt/web?/mnt/nfs????#?掛載nfs目錄[root@localhost?~]#?vim?/mnt/test.sh????????????#創建上述腳本[root@localhost?~]#?bash?/mnt/test.sh????????#?執行腳本執行完上面的操作后,就說看到類似于下面的輸出,并且停掉node1的heartbeat后并沒有中斷,就說實驗成功了。--->?trying?touch?x:2012年?07月?25日?星期三?05:29:40?CST
<-----done?touch?x:2012年?07月?25日?星期三?05:29:40?CST實際上,從上面可以看到,掛載的nfs目錄是/mnt/nfs這個目錄,但是腳本的目錄卻是/mnt/test.sh,也就是說腳本并不是在nfs目錄下,那么執行腳本的時候,毫無疑問,會在工作目錄下touch?x,就是說是在/mnt?目錄touch?x?而不是/mnt/nfs這個目錄,那么實際上就并沒對掛載的nfs?目錄進行讀寫,只是一味的對不相干的/mnt這個目錄進行寫入操作,在停掉node1上的heartbeat之后,當然不會有任何影響。
我測試是這樣做的:[root@localhost?~]#?vim?test.sh#!/bin/bashwhile?truedo????????echo?"`date`"?>>?/mnt/nfs/date????????sleep?1done
[root@localhost?~]#?chmod?+x?test.sh[root@localhost?~]#?./test.sh
停掉node1的heartbeat[root@node1?ha.d]#?service?heartbeat?stop
打開客戶端的另一個終端,通過tailf觀察寫入情況[root@localhost?~]#?tailf?/mnt/nfs/date?Tue?Jul?30?11:42:41?CST?2013Tue?Jul?30?11:42:42?CST?2013Tue?Jul?30?11:42:43?CST?2013Tue?Jul?30?11:42:44?CST?2013Tue?Jul?3011:42:45CST?2013Tue?Jul?3011:44:42CST?2013Tue?Jul?30?11:44:43?CST?2013Tue?Jul?30?11:44:44?CST?2013從上面可以看到,node1宕機之后,會有一小段時間停止服務,過后自動服務自動恢復,即node2接管服務。
疑問:????????停掉node1之后,通過日志可以看到node2很快接管了vip,但是在客戶端,對掛載的nfs目錄寫入,卻需要差不多2分鐘的停止服務時間,為什么會那么久?理論上不是應該只有短暫的幾秒嗎?????上述問題,還望高手出面幫忙解答一下。
總結
以上是生活随笔為你收集整理的DRBD+HeartBeat+NFS 架构的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sql 统计用的sql
- 下一篇: 管理类的指针成员