郑 浩,要 鹍
(吉林师范大学 信息网络中心,吉林 四平 136000)
基于DRBD实现虚拟化系统的双机热备
郑 浩,要 鹍
(吉林师范大学 信息网络中心,吉林 四平 136000)
DRBD的全称Distributed Replicated Block Device是由内核模块、相关脚本组成,主要用以构建高可用性的集群.其实现方式是通过网络来镜像整个设备.笔者通过对DRBD在虚拟化应用系统中的实际部署总结了一些经验和优化方案,DRBD对集群的数据安全有至关重要的作用,也可以实现系统的容灾和备份.该文主要描述了DRBD的配置与实现.
集群;DRBD;虚拟化;热备
系统调试平台:vCenter,centos6.5(Server),centos6.5(Client).
系统支持库:gcc,gcc-c++ ,glibc,flex,kernel-devel,kernel-headers.
系统调试软件:Drbd8.4.3,headbate.
2.1 DRBD的主要功能
DRBD系统由主节点和备节点两部分构成.主节点和备节点分别存储着相同的镜像数据并保持着实时同步.其存储方式类似于服务器中RAID1存储( RAID1的存储是把相同的数据镜像到两块容量相同的磁盘中,通过磁盘的镜像实现数据冗余).
DRBD的备份方式与其不同的是当数据写入本地磁盘的同时还会发送给网络中另外一台服务器(备机)一份相同的数据,数据会以完全相同的形式储存在主机与备机中,并保证IO的一致性.这种存储方式最大的优点就是当主机出现宕机时备机中会有与主机完全相同的数据作为备用,将数据损坏、丢失风险降到最低.
2.2 DRBD的主要应用
DRBD主要应用于对服务器的数据热备实现数据冗余,在众多的高可用集群解决方案中DRBD+HeartdBeat[1]是一个比较成熟和廉价的方案,DRBD可以实现数据热备,但无法判定主机与备机的工作状态,当主机宕机后只能保证数据不丢失,但无法自动地切换服务让备机代替主机继续进行服务[2].而HeartdBeat通过心跳IP可以实时监控主、备机工作状态.当主机宕机后通过事先编写好的脚本文件,备机将自动升级为主机接管资源和服务,当主机可用后,备机交还服务和资源并进行同步数据,最大程度地保障了服务的连续性和数据的安全性.
2.3 热备解决方案
在进行安装配置之前要对操作系统可能对安装造成影响的因素进行排除.
(1)关闭iptables和SELINUX,避免安装过程中报错.
# serviceiptables stop
# setenforce 0
# vi /etc/sysconfig/selinux
SELINUX=disabled
(2)设置hosts文件drbd1.example.com为主节点、drbd2.example.com为备节点.
# vi /etc/hosts
192.168.5.72 drbd1.example.com drbd1
192.168.5.73 drbd2.example.com drbd2
(3)在两台虚拟机分别添加一块40G硬盘sdb作为DRBD,分别分区为sdb1,大小1G,并在本地系统创建/hao目录,不做挂载操作.
# fdisk /dev/sdb
# mkdir /hao
(4)时间同步:DRBD对主机与备机对时间差要求相对严格,要保证主机与备机时间的一致性[3].
# ntpdate -u asia.pool.ntp.org
(5)更改主机名:修改network配置文件主机名改为Server,备机名改为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)参数配置:修改主机和备机主配置文集drbd.conf.
# vi /usr/local/drbd/etc/drbd.conf
清空配置文件内容,添加如下配置:
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;#主机ip地址、端口号配置
meta-disk internal;
}
onClient.example.com{
device/dev/drbd0;
disk/dev/sdb1;
address 192.168.5.73:7788;#备机ip地址、端口号配置
meta-disk internal;
}
}
(9)创建DRBD设备并激活NEWR0资源:(Server,Client).
# mknod /dev/drbd0 b 147 0
# drbdadm create-md NEWR0
等待片刻,显示success表示DRBD块创建成功
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)启动DRBD服务需要主从共同启动才能生效.
# servicedrbd start
(11)查看状态:(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表示两台主机的状态都是备机状态,ds是磁盘状态Inconsistent显示的状态内容为“不一致”,这是因为DRBD无法判断哪一方为主机,应以哪一方的磁盘数据作为标准.
(12)将Server.example.com主机配置为主节点:(Server).
# drbdsetup /dev/drbd0 primary
再次使用at /proc/drbd0进行查看得到如下结果.
ro在主从服务器上分别显示 Primary/Secondary和Secondary/Primary
ds显示UpToDate/UpToDate表示主从配置成功.
(13)挂载DRBD:(Server).
从刚才的状态上看到mounted和fstype参数为空,所以我们这步开始挂载DRBD到系统目录
# mkfs.ext4 /dev/drbd0
# mount /dev/drbd0 /hao
Secondary节点上不允许对DRBD设备进行任何操作,包括只读,所有的读写操作只能在Primary节点上进行,只有当Primary节点挂掉时,Secondary节点才能提升为Primary节点继续工作.
(14)模拟DRBD1故障,DRBD2接管并提升为Primary.
在Server服务器进行操作.
# cd /hao
# touch 1 2 3 4 5
# cd ..
# umount /hao
# drbdsetup /dev/drbd0 secondary
在Client服务器进行操作
# 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
通过service drbd status命令查看运行状态可以看到/hao资源挂载成功,本机为Primary主节点、备机Secondary节点运行正常如备节点故障Secondary位置显示Unknown.至此整个配置过程结束.
该方案实现了虚拟化系统的数据热备,解决了由于服务器单点故障对数据造成的威胁,而热备技术和心跳技术的结合可以实现自动判断主宕机并实现主、备机的切换,故障发生时都能在极短时间恢复服务(小于60秒),如再加入云端监控系统自动识别故障点短信报警,就可以做到7*24小时无人值守服务.
[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.
(责任编辑:王前)
10.13877/j.cnki.cn22-1284.2016.08.023
2016-03-20
吉林省教育厅“十二五”项目“基于 B/S与P2P模式的高校网络教学平台建设”(20150410)
郑浩,男,现为吉林师范大学信息网络中心实验师.
TP29
A
1008-7974(2016)04-0069-03