DRBD+HeartBeat+NFS 搭建高可用文件共享服務器筆記

環境:

CentOS6.5_x64,兩塊硬盤,用sdb1作drbd分區(sdb1建立好分區即可,不用格式化和掛載)

masternfs eth0:192.168.140.128  (heartbeat,drbd,nfs服務端)

backupnfs eth0:192.168.140.131  (heartbeat,drbd,nfs服務端)

VIP: 192.168.140.133


客戶機:192.168.140.132 (nfs客戶端)



一、添加HOSTS記錄(主備):

192.168.140.128 masternfs

192.168.140.131 backupnfs



二、安裝DRBD(主備):

1、安裝epel源:

rpm -ivh http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm


2、安裝依賴包:

yum install -y gcc gcc-c++ make perl kernel-devel kernel-headers flex drbd84-utils kmod-drbd84


如果報錯:Error: Cannot retrieve metalink for repository: epel. Please verify its path and try again

解決方法:編輯[epel]下的baseurl前的#號去掉,mirrorlist前添加#號


3、安裝drbd:

wget http://oss.linbit.com/drbd/8.4/drbd-8.4.4.tar.gz
tar xvf drbd-8.4.4.tar.gz
cd drbd-8.4.4
./configure --prefix=/usr/local/drbd --with-km
make KDIR=/usr/src/kernels/`uname -r`/
make install
mkdir -p /usr/local/drbd/var/run/drbd
cp /usr/local/drbd/etc/rc.d/init.d/drbd  /etc/rc.d/init.d/
chkconfig --add drbd
chkconfig drbd on
cp drbd/drbd.ko /lib/modules/`uname -r`/kernel/lib/
modprobe drbd
lsmod | grep drbd

如果modprobe drbd報錯,可以用 yum install kernel* 方式來更新,需要重啓系統,重新安裝一次


4、配置DRBD

cd /usr/local/drbd/etc/drbd.d
mv global_common.conf global_common.conf.bak


重新建立global_common.conf

global {
        usage-count yes;
}
common {
        protocol C;
        disk {
                on-io-error detach;
        }
        syncer {
                rate 100M;
        }
}
resource web {
        on masternfs {
                device /dev/drbd0;
                disk /dev/sdb1;
                address 192.168.140.128:7899;
                meta-disk internal;
        }
        on backupnfs {
                device /dev/drbd0;
                disk /dev/sdb1;
                address 192.168.140.131:7899;
                meta-disk internal;
        }
}


5、創建DRBD記錄信息數據塊

drbdadm create-md web
service drbd start                    #(主備一起啓動)


6、設置主備節點:

主:

drbdadm -- --overwrite-data-of-peer primary web

備:

drbdadm secondary web


7、格式化並掛載分區:

備:

[root@masternfs opt]# mkfs.ext4 /dev/drbd0 
mke2fs 1.41.12 (17-May-2010)
mkfs.ext4: Wrong medium type while trying to determine filesystem size

報錯,因爲不能在備上操作這塊分區


主:

[root@backupnfs ~]# mkfs.ext4 /dev/drbd0
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1310720 inodes, 5241029 blocks
262051 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=0
160 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
        4096000
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 32 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.


8、測試:

主:

cd /data/
mkdir test   #建立一個文件夾,測試用
umount /data   #卸載分區
drbdadm secondary web    #把本節點設爲備節點

查看狀態drbdadm role web,此時是顯示兩個secondary,然後把另外一個備節點設成主節點,看看剛剛建立的文件夾還在不在


備:

drbdadm primary web        #設成主節點
mount /dev/drbd0 /data     #掛載分區

結果,test文件夾還在!


查看資源的連接狀態

[root@node1 ~]# drbdadm cstate r1

Connected

資源的連接狀態;一個資源可能有以下連接狀態中的一種

StandAlone 獨立的:網絡配置不可用;資源還沒有被連接或是被管理斷開(使用 drbdadm disconnect 命令),或是由於出現認證失敗或是腦裂的情況

Disconnecting 斷開:斷開只是臨時狀態,下一個狀態是StandAlone獨立的

Unconnected 懸空:是嘗試連接前的臨時狀態,可能下一個狀態爲WFconnection和WFReportParams

Timeout 超時:與對等節點連接超時,也是臨時狀態,下一個狀態爲Unconected懸空

BrokerPipe:與對等節點連接丟失,也是臨時狀態,下一個狀態爲Unconected懸空

NetworkFailure:與對等節點推動連接後的臨時狀態,下一個狀態爲Unconected懸空

ProtocolError:與對等節點推動連接後的臨時狀態,下一個狀態爲Unconected懸空

TearDown 拆解:臨時狀態,對等節點關閉,下一個狀態爲Unconected懸空

WFConnection:等待和對等節點建立網絡連接

WFReportParams:已經建立TCP連接,本節點等待從對等節點傳來的第一個網絡包

Connected 連接:DRBD已經建立連接,數據鏡像現在可用,節點處於正常狀態

StartingSyncS:完全同步,有管理員發起的剛剛開始同步,未來可能的狀態爲SyncSource或PausedSyncS

StartingSyncT:完全同步,有管理員發起的剛剛開始同步,下一狀態爲WFSyncUUID

WFBitMapS:部分同步剛剛開始,下一步可能的狀態爲SyncSource或PausedSyncS

WFBitMapT:部分同步剛剛開始,下一步可能的狀態爲WFSyncUUID

WFSyncUUID:同步即將開始,下一步可能的狀態爲SyncTarget或PausedSyncT

SyncSource:以本節點爲同步源的同步正在進行

SyncTarget:以本節點爲同步目標的同步正在進行

PausedSyncS:以本地節點是一個持續同步的源,但是目前同步已經暫停,可能是因爲另外一個同步正在進行或是使用命令(drbdadm pause-sync)暫停了同步

PausedSyncT:以本地節點爲持續同步的目標,但是目前同步已經暫停,這可以是因爲另外一個同步正在進行或是使用命令(drbdadm pause-sync)暫停了同步

VerifyS:以本地節點爲驗證源的線上設備驗證正在執行

VerifyT:以本地節點爲驗證目標的線上設備驗證正在執行

查看資源角色的命令


[root@node1 ~]# drbdadm role r1

Primary/Secondary (在前面爲當前節點)

Parimary 主:資源目前爲主,並且可能正在被讀取或寫入,如果不是雙主只會出現在兩個節點中的其中一個節點上

Secondary 次:資源目前爲次,正常接收對等節點的更新

Unknown 未知:資源角色目前未知,本地的資源不會出現這種狀態

查看硬盤狀態


[root@node1 ~]# drbdadm dstate r1

UpToDate/UpToDate

本地和對等節點的硬盤有可能爲下列狀態之一:

Diskless 無盤:本地沒有塊設備分配給DRBD使用,這表示沒有可用的設備,或者使用drbdadm命令手工分離或是底層的I/O錯誤導致自動分離

Attaching:讀取無數據時候的瞬間狀態

Failed 失敗:本地塊設備報告I/O錯誤的下一個狀態,其下一個狀態爲Diskless無盤

Negotiating:在已經連接的DRBD設置進行Attach讀取無數據前的瞬間狀態

Inconsistent:數據是不一致的,在兩個節點上(初始的完全同步前)這種狀態出現後立即創建一個新的資源。此外,在同步期間(同步目標)在一個節點上出現這種狀態

Outdated:數據資源是一致的,但是已經過時

DUnknown:當對等節點網絡連接不可用時出現這種狀態

Consistent:一個沒有連接的節點數據一致,當建立連接時,它決定數據是UpToDate或是Outdated

UpToDate:一致的最新的數據狀態,這個狀態爲正常狀態

查看同步進度


[root@node1 ~]# cat /proc/drbd 或者 執行/usr/local/drbd/sbin/drbd-overview

version: 8.4.3 (api:1/proto:86-101)

GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by [email protected], 2016-04-24 20:16:24

0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----

ns:2767088 nr:0 dw:0 dr:2774680 al:0 bm:168 lo:0 pe:1 ua:7 ap:0 ep:1 wo:f oos:18202972

[=>..................] sync'ed: 13.3% (17776/20476)M

finish: 0:12:59 speed: 23,344 (22,492) K/sec

由此可見:進度已經完成了13.3%,傳輸速度大概22M/S

注:

ds是磁盤狀態信息

dw是磁盤寫信息

dr是磁盤讀信息




三、安裝NFS:

yum -y install nfs-utils rpcbind
cat > /etc/exports << EOF
/data 192.168.140.132/24(rw,no_root_squash)  #(IP爲客戶機的IP)
EOF
service rpcbind start
service nfs start
chkconfig rpcbind on
chkconfig nfs on

四、安裝配置Heartbeat

yum install heartbeat* -y
cd /usr/share/doc/heartbeat-3.0.4
cp ha.cf authkeys haresources /etc/ha.d/
cd /etc/ha.d/
cat > authkeys << EOF
auth 2
2 sha1 HI!
EOF
chmod 600 authkeys
cat > ha.cf << EOF
logfile /var/log/ha-log
logfacility local0    #如果未定義上述日誌,默認寫入/var/log/message
keepalive 2       #心跳間隔
deadtime 30       #死亡閥值
warntime 10       #警告時間
initdead 120      #首次啓動heartbeat,等待多久才啓動主服務資源
udpport  694      #連接端口
bcast eth0            #使用什麼方式組織心跳,最好用ucast方式
auto_failback off     #當主節點故障恢復後,自動獲取資源並取代從節點
node masternfs        #主節點主機名
node backupnfs        #備份節點主機名
ping 192.168.140.2
EOF
cat > haresources << EOF
masternfs IPaddr::192.168.140.133/24/eth0 drbddisk::web Filesystem::/dev/drbd0::/data::ext4 killnfsd
EOF
cat > resource.d/killnfsd << EOF
killall -9 nfsd ; /etc/init.d/nfs restart ; exit 0
EOF
chmod +x resource.d/killnfsd
cp /opt/drbd-8-4.4/scripts/drbddisk  /etc/ha.d/resource.d/    #源碼包找到drbddisk腳本
chmod 755 /etc/ha.d/resource.d/drbddisk  
service heartbeat start

遇到報錯:

heartbeat: udpport setting must precede media statementsheartbeat[2244]: 2016/01/28_17:38:57 ERROR: Bad permissions on keyfile [/etc/ha.d//authkeys], 600 recommended.

heartbeat[2244]: 2016/01/28_17:38:57 ERROR: Authentication configuration error.

heartbeat[2244]: 2016/01/28_17:38:57 ERROR: Configuration error, heartbeat not started.

解決辦法:

chmod 600 authkeys


報錯:

ResourceManager(default)[2251]: 2016/01/27_23:44:39 ERROR: Cannot locate resource script drbddisk

解決辦法:

cd /opt/drbd-8.4.4

cp scripts/drbddisk  /etc/ha.d/resource.d/

chmod 755 /etc/ha.d/resource.d/drbddisk


主備都啓動heartbeat後,看看VIP是否能PING通,然後再做一下故障測試看看IP是否會自動遷移,及drbd分區是否會自動掛載,nfs功能是否正常。

美中不足:雖然能自動切換,但是切換時會先造成nfs客戶端一小陣子卡住


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章