系統CentOS 6.5 X64 Ip:172.16.25.162 172.16.25.163 epel源 每臺主機有/dev/sdb1: 1073 MB掛載點/test供drbd使用 先升級nfs先關組件: yum updatenfs-utilsnfs-utils-lib nfs4-acl-tools yum updaterpcbind
安裝配置drbd:api
[root@master~]#wget http://oss.linbit.com/drbd/8.3/drbd-8.3.16.tar.gz [root@master~]#tar zxvf drbd-8.3.16.tar.gz [root@master~]#./configure --prefix=/usr/local/drbd--with-km #--with-km是啓用內核模塊 [root@master~]#make KDIR=/usr/src/kernels/2.6.32-431.el6.x86_64 #KDIR隨系統而變 [root@master~]#make install [root@master~]#mkdir -p /usr/local/drbd/var/run/drbd [root@master~]#cp /usr/local/drbd/etc/rc.d/init.d/drbd /etc/rc.d/init.d/ [root@master~]#chkconfig --add drbd; chkconfigdrbd on [root@master~]#cp drbd/drbd.ko/lib/modules/2.6.32-431.el6.x86_64/kernel/lib/ [root@master~]#modprobe drbd [root@master~]#lsmod |grepdrbd #驗證drbd模塊是否加載成功
準備底層存儲設備:網絡
一塊硬盤、軟raid、LVM邏輯卷、甚至另外一個drbd設備(drbd疊加)併發
準備網絡配置:框架
推薦(不是必須)在專用的、直連的、千兆的網絡上運行drbd。若是經過交換機運行drbd,建議設置一個熱備的交換機同時the Linux bonding driver (in active-backup mode) is recommendedide
注意三點:測試
1) Our two DRBD hosts each have a currently unused network interface, eth1,with IP addresses 10.1.1.31 and 10.1.1.32 assigned to it, respectively.
2) No other services are using TCP ports 7788 through 7799 on eitherhost.
3) The local firewall configuration allows both inbound and outboundTCP connections between the ui
配置drbd3d
drbd全部配置均在/etc/drbd.conf,默認的,該配置文件只是一個‘框架’,有以下兩行include"/etc/drbd.d/global_common.conf";
include"/etc/drbd.d/*.res";
日誌
/etc/drbd.d/global_common.conf包含drbdglobal和common段的設置,*.res文件每一個包含一個resource段的配置。code
注意:確保每一個節點上drbd的配置文件保持一致
實驗環境配置文件
global { usage-count yes; } common { protocol C; # A 數據一旦寫入磁盤併發送到網絡中就認爲完成了寫入操做 # B 收到接收確認就認爲完成了寫入操做 # C 收到寫入確認就認爲完成了寫入操做 } resource r0 { on master { #master爲主機名,配置文件裏必須和uname–n輸出的一致,不一致會致使no resources defined! device /dev/drbd1; disk /dev/sdb1;address 172.16.25.162:7789; meta-disk internal;}on slave {device /dev/drbd1; disk /dev/sdb1; address 172.16.25.163:7789; meta-disk internal; } }
初始化resource
建立設備元數據,該步驟只在設備初始化時執行一次,在兩臺server分別執行[root@master~]#drbdadm create-md r0
(resource名稱)
一臺報錯:drbdadm create-md r0: exited with code 40
解決方法:dd if=/dev/zero of=/dev/sdb1 bs=1M count=10
(count數量不限,主要是爲了清除/dev/sdb1上的分區信息)。成功截圖以下
啓動drbd
[root@master~]#/etc/init.d/drbd start
剛啓動時,兩臺機器上drbd狀態均爲secondary
在drbd主上執行drbdsetup/dev/drbd0 primary -o
,將drbd狀態改成primary(無此步,會致使格式化/dev/drbd0時報錯)。執行過此命令之後,能夠經過drbdadmprimary/secondary r0
來切換主被動狀態
掛載drbd設備
如今能夠把主機上的DRBD設備掛載到一個目錄上進行使用.備機的DRBD設備沒法被掛載,由於它是用來接收主機數據的,由DRBD負責操做.
在drbd primary節點(不然格式化會報錯Wrong medium type while trying to determine filesystem size)
[root@master ~]#mkfs.ext4/dev/drbd1
[root@master~]#mount /dev/drbd1 /test
狀態查看
~]# drbd-overview ` 或者 ~]# cat /proc/drbd version: 8.3.16 (api:88/proto:86-97) GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build byroot@master, 2015-03-29 15:25:43 1: cs:Connectedro:Secondary/Secondary ds:Inconsistent/Inconsistent Cr----- ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0ua:0 ap:0 ep:1 wo:f oos:1044124
cs: connect state ro:表示角色信息 ds: 磁盤狀態信息Inconsistent/UpToDatens/nr:網絡發送/接收的數據包信息dw/dr:設備讀寫信息
「/proc/drbd」中顯示了drbd當前的狀態。第一行的Secondary/Secondary 表示兩臺主機的狀態,都是」備機」狀態.ds是磁盤狀態,都是」不一致」狀態. 這是因爲DRBD沒法判斷哪一方爲主機,以哪一方的磁盤數據做爲標準數據.因此,咱們須要初始化一個主機。在master server執行:
[root@master ~]#drbdsetup /dev/drbd1 primary –o 或者 [root@master ~]#drbdadm primary r0
再看兩臺的/proc/drbd
倒數第二行能夠看到正在從主向備同步數據
日誌變化(/var/logs/message)
主機:
備機:
DRBD的主備機切換
有時,你須要將DRBD的主備機互換一下.能夠執行下面的操做:
在主機上,先要卸載掉DRBD設備.
[root@master /]# umount /mnt/drbd1
將主機降級爲」備機」
[root@master /]# drbdadm secondary r0 [root@master /]# cat /proc/drbd version: 8.0.4 (api:86/proto:86) SVN Revision: 2947 build by root@g105-1, 2007-07-28 07:13:14 1: cs:Connectedst:Secondary/Secondaryds:UpToDate/UpToDate C r--- ns:0 nr:5 dw:5 dr:0 al:0 bm:0 lo:0 pe:0ua:0 ap:0 resync: used:0/31 hits:0 misses:0starving:0 dirty:0 changed:0 act_log: used:0/127 hits:0 misses:0starving:0 dirty:0 changed:0
如今,兩臺主機都是」備機」
在備機slave上,將它升級爲」主機」
[root@slave /]# drbdadm primary r0 [root@slave /]# cat /proc/drbd version: 8.0.4 (api:86/proto:86) SVN Revision: 2947 build by root@g105-2, 2007-07-28 07:13:14 1: cs:Connectedst:Primary/Secondaryds:UpToDate/UpToDate C r--- ns:0 nr:5 dw:5 dr:0 al:0 bm:0 lo:0 pe:0ua:0 ap:0 resync: used:0/31 hits:0 misses:0starving:0 dirty:0 changed:0 act_log: used:0/127 hits:0 misses:0starving:0 dirty:0 changed:0
如今,slave成爲了」主機」.你能夠把它的/dev/drbd1進行掛載和使用了.一樣,數據會被同步到master的/dev/drbd0上
###3、配合keepalived實現自動fail-over
Keepalived配置文件(主機):
! Configuration File for keepalived global_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 192.168.200.1 smtp_connect_timeout 30 router_id LVS_DEVEL } vrrp_scriptchk_nfs { script "/etc/keepalived/check_nfs.sh" interval 5 } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } track_script { chk_nfs } notify_stop /etc/keepalived/notify_stop.sh #腳本見附件 notify_master /etc/keepalived/notify_master.sh #腳本見附件 virtual_ipaddress { 172.16.200.234/24 } }
備機
! Configuration File for keepalived global_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 192.168.200.1 smtp_connect_timeout 30 router_id LVS_DEVEL } vrrp_instance VI_1 { state BACKUP interface eth1 virtual_router_id 51 priority 90 advert_int 1 authentication { auth_type PASS auth_pass 1111 } notify_master /etc/keepalived/notify_master.sh #腳本見附件 notify_backup /etc/keepalived/notify_backup.sh #腳本見附件 virtual_ipaddress { 172.16.200.234/24 } }
nfs服務端配置:/test *(sync,rw,no_root_squash)
自動切換測試:
關閉主上keepalived,會按照預期流程走。關閉主上nfs----卸載資源設備----主drbd降級----備drdb升級----備掛載資源設備----備啓動nfs服務。可是在客戶端看來,切換時間過長,切換後打開文件約有1.5分的延時,如圖
連續寫測試:
在nfs客戶段執行for i in {1..500};do dd if=/dev/zero of=/ljk/$i.filebs=1M count=1;done
(/ljk爲客戶端掛載點,用dd向掛載點內寫入500個1M的文件)。執行過程當中在主關閉keepalived,驗證寫入過程是否會中斷
經驗證,寫入過程沒有中斷,但中會出現一段時間的延時(一樣比正常慢了1.5分左右)
客戶端從其餘目錄向掛載點拷貝文件,中途開啓原主的keepalived(vip自動切回主,產生一次切換動做)
正常拷貝:time cp -av/data0/songjian/dhmh/* /ljk/用時1m57s
有切換動做拷貝:在下圖所示文件處產生停頓,最終用時3m43
檢查切換過程產生中斷可能受影響的文件和原文件是否一致,經md5sum驗證,切換過程當中受影響複製產生延遲的文件內容未受影響
經驗證,拷貝過程不中斷,而且文件狀態亦爲受到切換動做的影響
連續讀測試
客戶端掛載點向其餘目錄拷貝文件,以下圖文件出產生延時
Md5sum驗證文件一致性ok,以下圖
疑問:關於切換動做致使的延遲時間問題,是哪裏致使了切換過程當中出現延時;是否文件量越大延遲時間越長;在nfs客戶端測試
在不一樣數量、大小的文件中打開統一文件測試延時
FilesystemSizeUsedAvailUse% Mounted on 172.16.25.234:/test 1004M197M 757M 21% /ljk 197M小文件,切換後隨即打開文件延時1m47s 172.16.25.234:/test 1004M 461M 492M 49% /ljk 461M小文件,切換後隨即打開文件延時2m16s 172.16.25.234:/test 1004M 641M 313M 68% /ljk 641M小文件,切換後隨即打開文件延時2m45s 192.168.0.234:/test 3.0G 2.5G 393M 87% /ljk 2.5G中大文件,切換後隨即打開文件延時1m45 一樣在641M小文件的前提:切換動做後,隔一段(3分鐘)再打開文件,無延時 另外,在nfs server上主備切換後,在新的nfs server打開文件無延時,故可排除drbd層面的緣由。
關於延時最終結論:nfs服務從主切換到備,從系統日誌
May 22 00:10:58 slave kernel: NFSD: Using/var/lib/nfs/v4recovery as the NFSv4 state recovery directory May 22 00:10:58 slave kernel: NFSD: starting 90-second grace period
看出至關於一次nfs服務重啓操做,有一個90s的平滑重啓過程,延時時間與文件數量及大小無關。
也再一次驗證了drbd提供的數據一致×××(包括文件的打開和修改狀態等),在客戶端看來,真個切換過程就是‘一次nfs重啓’(主nfs停,備nfs啓)。