Glusterfs(distribute) + DRBD + heartbeat + mon 實現分佈式文件系統2

//看看剛啓動後的drbd狀態:
 
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 –o   //先用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
#對方DOWN120秒從新檢測一次。
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

//看下master節點磁盤是否掛載成功,以下表示啓動heartbeat的時候磁盤會自動掛載上.
 
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.  停掉masterheartbeat,看下磁盤有沒有被釋放到slave文件服務器上.我這裏測試是正常的,切換大概須要10秒鐘的樣子,這裏要提一點在這十秒鐘裏面客戶端是沒法訪問文件系統的,當虛擬ip切換到slave服務器上以後,客戶端自動就能夠鏈接訪問了.
2.  master服務器進行關閉,看是否正常的切換到slave服務器上
3.  master服務器中上gluster進程kill,看是否正常切換到slave服務器上.
 
下面測試讀寫速度,我在我這裏測試寫速度最高能夠達到9M左右,寫速度基本都在10M左右,因爲我是用的虛擬機作的相關環境,在生產環境下應該讀寫速度應該更快些.
 
後面打算測試下高併發的狀況下,heartbeat的切換以及drbd的同步是否依然能夠正常運行.
但願此篇文章能夠幫助到須要解決文件系統的朋友們,若是有什麼疑問或者建議但願和你們一塊兒討論.
相關文章
相關標籤/搜索