鄭 浩,要 鹍
(吉林師范大學(xué) 信息網(wǎng)絡(luò)中心,吉林 四平 136000)
?
基于DRBD實(shí)現(xiàn)虛擬化系統(tǒng)的雙機(jī)熱備
鄭 浩,要 鹍
(吉林師范大學(xué) 信息網(wǎng)絡(luò)中心,吉林 四平 136000)
DRBD的全稱Distributed Replicated Block Device是由內(nèi)核模塊、相關(guān)腳本組成,主要用以構(gòu)建高可用性的集群.其實(shí)現(xiàn)方式是通過(guò)網(wǎng)絡(luò)來(lái)鏡像整個(gè)設(shè)備.筆者通過(guò)對(duì)DRBD在虛擬化應(yīng)用系統(tǒng)中的實(shí)際部署總結(jié)了一些經(jīng)驗(yàn)和優(yōu)化方案,DRBD對(duì)集群的數(shù)據(jù)安全有至關(guān)重要的作用,也可以實(shí)現(xiàn)系統(tǒng)的容災(zāi)和備份.該文主要描述了DRBD的配置與實(shí)現(xiàn).
集群;DRBD;虛擬化;熱備
系統(tǒng)調(diào)試平臺(tái):vCenter,centos6.5(Server),centos6.5(Client).
系統(tǒng)支持庫(kù):gcc,gcc-c++ ,glibc,flex,kernel-devel,kernel-headers.
系統(tǒng)調(diào)試軟件:Drbd8.4.3,headbate.
2.1 DRBD的主要功能
DRBD系統(tǒng)由主節(jié)點(diǎn)和備節(jié)點(diǎn)兩部分構(gòu)成.主節(jié)點(diǎn)和備節(jié)點(diǎn)分別存儲(chǔ)著相同的鏡像數(shù)據(jù)并保持著實(shí)時(shí)同步.其存儲(chǔ)方式類似于服務(wù)器中RAID1存儲(chǔ)( RAID1的存儲(chǔ)是把相同的數(shù)據(jù)鏡像到兩塊容量相同的磁盤中,通過(guò)磁盤的鏡像實(shí)現(xiàn)數(shù)據(jù)冗余).
DRBD的備份方式與其不同的是當(dāng)數(shù)據(jù)寫入本地磁盤的同時(shí)還會(huì)發(fā)送給網(wǎng)絡(luò)中另外一臺(tái)服務(wù)器(備機(jī))一份相同的數(shù)據(jù),數(shù)據(jù)會(huì)以完全相同的形式儲(chǔ)存在主機(jī)與備機(jī)中,并保證IO的一致性.這種存儲(chǔ)方式最大的優(yōu)點(diǎn)就是當(dāng)主機(jī)出現(xiàn)宕機(jī)時(shí)備機(jī)中會(huì)有與主機(jī)完全相同的數(shù)據(jù)作為備用,將數(shù)據(jù)損壞、丟失風(fēng)險(xiǎn)降到最低.
2.2 DRBD的主要應(yīng)用
DRBD主要應(yīng)用于對(duì)服務(wù)器的數(shù)據(jù)熱備實(shí)現(xiàn)數(shù)據(jù)冗余,在眾多的高可用集群解決方案中DRBD+HeartdBeat[1]是一個(gè)比較成熟和廉價(jià)的方案,DRBD可以實(shí)現(xiàn)數(shù)據(jù)熱備,但無(wú)法判定主機(jī)與備機(jī)的工作狀態(tài),當(dāng)主機(jī)宕機(jī)后只能保證數(shù)據(jù)不丟失,但無(wú)法自動(dòng)地切換服務(wù)讓備機(jī)代替主機(jī)繼續(xù)進(jìn)行服務(wù)[2].而HeartdBeat通過(guò)心跳IP可以實(shí)時(shí)監(jiān)控主、備機(jī)工作狀態(tài).當(dāng)主機(jī)宕機(jī)后通過(guò)事先編寫好的腳本文件,備機(jī)將自動(dòng)升級(jí)為主機(jī)接管資源和服務(wù),當(dāng)主機(jī)可用后,備機(jī)交還服務(wù)和資源并進(jìn)行同步數(shù)據(jù),最大程度地保障了服務(wù)的連續(xù)性和數(shù)據(jù)的安全性.
2.3 熱備解決方案
在進(jìn)行安裝配置之前要對(duì)操作系統(tǒng)可能對(duì)安裝造成影響的因素進(jìn)行排除.
(1)關(guān)閉iptables和SELINUX,避免安裝過(guò)程中報(bào)錯(cuò).
# serviceiptables stop
# setenforce 0
# vi /etc/sysconfig/selinux
SELINUX=disabled
(2)設(shè)置hosts文件drbd1.example.com為主節(jié)點(diǎn)、drbd2.example.com為備節(jié)點(diǎn).
# vi /etc/hosts
192.168.5.72 drbd1.example.com drbd1
192.168.5.73 drbd2.example.com drbd2
(3)在兩臺(tái)虛擬機(jī)分別添加一塊40G硬盤sdb作為DRBD,分別分區(qū)為sdb1,大小1G,并在本地系統(tǒng)創(chuàng)建/hao目錄,不做掛載操作.
# fdisk /dev/sdb
# mkdir /hao
(4)時(shí)間同步:DRBD對(duì)主機(jī)與備機(jī)對(duì)時(shí)間差要求相對(duì)嚴(yán)格,要保證主機(jī)與備機(jī)時(shí)間的一致性[3].
# ntpdate -u asia.pool.ntp.org
(5)更改主機(jī)名:修改network配置文件主機(jī)名改為Server,備機(jī)名改為Client.
(Server)
# vi /etc/sysconfig/network
HOSTNAME=Server.example.com
(Client)
# vi /etc/sysconfig/network
HOSTNAME=Client.example.com
(6)DRBD的安裝配置:
安裝依賴包:(Server,Client)
# yum install gccgcc-c++ make glibc flex kernel-devel kernel-headers
(7)安裝DRBD:(Server,Client).
# wget http://oss.linbit.com/drbd/8.4/drbd-8.4.3.tar.gz
# tar zxvf drbd-8.4.3.tar.gz
# cd drbd-8.4.3
# ./configure --prefix=/usr/local/drbd --with-km
# make KDIR=/usr/src/kernels/2.6.32-279.el6.x86_64/
# 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
# chkconfigdrbd on
加載DRBD模塊:
# modprobedrbd
(8)參數(shù)配置:修改主機(jī)和備機(jī)主配置文集drbd.conf.
# vi /usr/local/drbd/etc/drbd.conf
清空配置文件內(nèi)容,添加如下配置:
resourceNEWR0{
net{
timeout30;
connect-int5;
ping-int5;
max-buffers1024;
max-epoch-size1024;
}
syncer { rate 30M;}
onServer.example.com{
device/dev/drbd0;
disk /dev/sdb1;
address 192.168.5.72:7788;#主機(jī)ip地址、端口號(hào)配置
meta-disk internal;
}
onClient.example.com{
device/dev/drbd0;
disk/dev/sdb1;
address 192.168.5.73:7788;#備機(jī)ip地址、端口號(hào)配置
meta-disk internal;
}
}
(9)創(chuàng)建DRBD設(shè)備并激活NEWR0資源:(Server,Client).
# mknod /dev/drbd0 b 147 0
# drbdadm create-md NEWR0
等待片刻,顯示success表示DRBD塊創(chuàng)建成功
Writing meta data...
New drbdmeta data block successfully created.
--== Creating metadata ==--
As with nodes, we count the total number of devices mirrored by DRBDat The counter works anonymously. It creates a random number to identifythe device and sends that random number, along with the kernel and
DRBD version, to usage.drbd.org.
nu=716310175600466686&ru=15741444353112217792&rs=1085704704
* If you wish to opt out entirely, simply enter 'no'.
* To continue, just press [RETURN]
success
再次輸入該命令:
# drbdadm create-md NEWR0
成功激活NEWR0
[need to type 'yes' to confirm] yes
New drbdmeta data block successfully created.
(10)啟動(dòng)DRBD服務(wù)需要主從共同啟動(dòng)才能生效.
# servicedrbd start
(11)查看狀態(tài):(Server,Client).
# cat /proc/drbd
# cat /proc/drbd
version: 8.4.3 (api:1/proto:86-101)
GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by
2013-05-27 20:45:19
0: cs:Connectedro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----
ns:135 nr:0 dw:135dr:113 al:3 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
這里ro:Secondary/Secondary表示兩臺(tái)主機(jī)的狀態(tài)都是備機(jī)狀態(tài),ds是磁盤狀態(tài)Inconsistent顯示的狀態(tài)內(nèi)容為“不一致”,這是因?yàn)镈RBD無(wú)法判斷哪一方為主機(jī),應(yīng)以哪一方的磁盤數(shù)據(jù)作為標(biāo)準(zhǔn).
(12)將Server.example.com主機(jī)配置為主節(jié)點(diǎn):(Server).
# drbdsetup /dev/drbd0 primary
再次使用at /proc/drbd0進(jìn)行查看得到如下結(jié)果.
ro在主從服務(wù)器上分別顯示 Primary/Secondary和Secondary/Primary
ds顯示UpToDate/UpToDate表示主從配置成功.
(13)掛載DRBD:(Server).
從剛才的狀態(tài)上看到mounted和fstype參數(shù)為空,所以我們這步開始掛載DRBD到系統(tǒng)目錄
# mkfs.ext4 /dev/drbd0
# mount /dev/drbd0 /hao
Secondary節(jié)點(diǎn)上不允許對(duì)DRBD設(shè)備進(jìn)行任何操作,包括只讀,所有的讀寫操作只能在Primary節(jié)點(diǎn)上進(jìn)行,只有當(dāng)Primary節(jié)點(diǎn)掛掉時(shí),Secondary節(jié)點(diǎn)才能提升為Primary節(jié)點(diǎn)繼續(xù)工作.
(14)模擬DRBD1故障,DRBD2接管并提升為Primary.
在Server服務(wù)器進(jìn)行操作.
# cd /hao
# touch 1 2 3 4 5
# cd ..
# umount /hao
# drbdsetup /dev/drbd0 secondary
在Client服務(wù)器進(jìn)行操作
# drbdsetup /dev/drbd0 primary
# mount /dev/drbd0 /hao
# cd /hao
# touch 6 7 8 9 10
# ls
1 10 2 3 4 5 6 7 8 9 lost+found
# servicedrbdstatus
drbd driver loaded OK; device status:
version: 8.4.3 (api:1/proto:86-101)
GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build
Connected Primary/Secondary UpToDate/UpToDate C /hao ext4
通過(guò)service drbd status命令查看運(yùn)行狀態(tài)可以看到/hao資源掛載成功,本機(jī)為Primary主節(jié)點(diǎn)、備機(jī)Secondary節(jié)點(diǎn)運(yùn)行正常如備節(jié)點(diǎn)故障Secondary位置顯示Unknown.至此整個(gè)配置過(guò)程結(jié)束.
該方案實(shí)現(xiàn)了虛擬化系統(tǒng)的數(shù)據(jù)熱備,解決了由于服務(wù)器單點(diǎn)故障對(duì)數(shù)據(jù)造成的威脅,而熱備技術(shù)和心跳技術(shù)的結(jié)合可以實(shí)現(xiàn)自動(dòng)判斷主宕機(jī)并實(shí)現(xiàn)主、備機(jī)的切換,故障發(fā)生時(shí)都能在極短時(shí)間恢復(fù)服務(wù)(小于60秒),如再加入云端監(jiān)控系統(tǒng)自動(dòng)識(shí)別故障點(diǎn)短信報(bào)警,就可以做到7*24小時(shí)無(wú)人值守服務(wù).
[1]Florian Haas,PhilippReisner,LarsEllenberg The DRBD User's Guide[M].2011,08,02.
[2] Zoratti I.MYSQL sectity best practices[C]//Crime and Security,2006,The Institution of Engineering and Technology Conferenc on,2006:183-198.
[3] Suzumura T,Trent S,TatsuboriM,et al.Performance comparison of Web service engines in PHP,java and C[C]//IEEE International Conference on Web Services,2008:385-392.
(責(zé)任編輯:王前)
10.13877/j.cnki.cn22-1284.2016.08.023
2016-03-20
吉林省教育廳“十二五”項(xiàng)目“基于 B/S與P2P模式的高校網(wǎng)絡(luò)教學(xué)平臺(tái)建設(shè)”(20150410)
鄭浩,男,現(xiàn)為吉林師范大學(xué)信息網(wǎng)絡(luò)中心實(shí)驗(yàn)師.
TP29
A
1008-7974(2016)04-0069-03
通化師范學(xué)院學(xué)報(bào)2016年8期