zhonghuixiong 2014-03-20
在高可用解决方案(HA)中,为了实现集群中数据的共享,常见两种架构:
1、利用SAN等架构的盘柜存放共享数据
2、在每台集群中的机器本地磁盘中划分一个空间出来,并利用网络等方式,往集群中其他机器同步,以保证每台机器上的数据是一致的。
当然,为了令第二种架构也能用于数据库等应用,同步应以数据块方式,而非文件拷贝的方式进行,而DRBD就是可用于实现第二种架构的软件。
一、什么是 DRBD?
DRBD实际上是一种块设备的实现,它由内核模块和相关程序两部分而组成,通过网络通信来同步镜像整个设备,有点类似于一个网络RAID的功能。也 就是说,当你将数据写入本地的DRBD设备上的文件系统时,数据会同时被发送到网络中的另外一台主机之上,并以完全相同的形式记录在一个文件系统中。本地节点(主机)与远程节点(主机)的数据可以保证实时的同步,并保证数据的一致性。所以当本地节点的主机出现故障时,远程节点的主机上还会保留有一份完全相 同的数据可以继续使用,以达到高可用的目的。
因为DRBD是用网络以块的方式进行数据同步的,所以,其不依赖于文件系统、LVM、软RAID等上层设备,可用于数据库文件的同步(区别于rsync 的文件同步方式)。
二、运行环境
操作系统:CentOS 5.9主机名称:
TM-Master 192.168.137.132 sdb1 10G
TM-Slave 192.168.137.133 sdb1 10G
Heartbeat虚拟IP: 192.168.137.13
网关:192.168.137.1
三、初始设置
1. 分别设置两台服务器的主机名TM-Master , TM-Slave :
# hostname TM-Master
# vi /etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=TM-Master
2. 修改两台服务器的 /etc/hosts ,内容相同:
# vi /etc/hosts
192.168.137.132 TM-Master
192.168.137.133 TM-Slave
3. 确定两台服务器的本地硬盘,这里我们使用的都是 /dev/sdb ,并为其创建一个单独的分区 /dev/sdb1
# fdisk -l /dev/sdb
Disk /dev/sdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sdb1 1 1305 10482381 83 Linux
注:DRBD是以数据块方式同步的,因此,在创建镜像磁盘前,不要创建文件系统。
4. 两台服务器都安装 DRBD,这里使用 yum 安装:
# yum -y install drbd kmod-drbd82
5. 确认两台服务器的drbd模块加载是否正常:
# modprobe drbd
# lsmod | grep drbd
drbd 245928 0
四、配置
1. 配置 /etc/drbd.conf ,可参考位置:/usr/share/doc/drbd82-8.2.6/drbd.conf,这里我们先在TM-Master 节点直接编辑它:
[root@TM-Master ~] vi /etc/drbd.conf
resource r0
{
protocol C;
startup {
wfc-timeout 0;
degr-wfc-timeout 120;
}
disk {
on-io-error detach;
}
syncer {
rate 10M;
}
on TM-Master {
device /dev/drbd1;
disk /dev/sdb1;
address 192.168.137.132:7789;
meta-disk internal;
}
on TM-Master S {
device /dev/drbd1;
disk /dev/sdb1;
address 192.168.137.133:7789;
meta-disk internal;
}
}
配置说明:
resource r0; 资源组名称 r0
degr-wfc-timeout 120; 连接超时时间
on-io-error detach; 当磁盘有错误时,不连接
rate 10M; 设置主备节点同步时的网络速率最大值
on TM-Master ; 节点的主机名
device /dev/drbd1; 创建的drbd设备
2. 复制TM-Master 的配置文件到TM-Slave 上:
[root@TM-Slave ~]# scp root@TM-Slave:/etc/drbd.conf /etc/drbd.conf
3. 在两台服务器上分别初始化分区,并启动服务:
# drbdadm create-md r0
Writing meta data…
initialising activity log
NOT initialized bir0ap
New drbd meta data block sucessfully created.
备注:
1) “r0”是在drbd.conf里定义的资源名称.
2) 当执行命令”drbdadm create-md r0”时,出现以下错误信息。
Device size would be truncated, which
would corrupt data and result in
‘access beyond end of device’ errors.
You need to either
* use external meta data (recommended)
* shrink that filesystem first
* zero out the device (destroy the filesystem)
Operation refused.
Command ‘drbdmeta 0 v08 /dev/xvdb internal create-md’ terminated with exit code 40
drbdadm create-md r0: exited with code 40
解决办法:初始化磁盘文件格式, dd if=/dev/zero of=/dev/sdxx bs=1M count=100
# dd if=/dev/zero of=/dev/sdb1 bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 1.92004 seconds, 54.6 MB/s
启动:
# /etc/init.d/drbd start
Starting DRBD resources: [ d(r0) s(r0) n(r0) ].
……….
这里我用到了r0, 你也可以用你的资源组名称,譬如本例的 db。
查看两台机器的状态,用cat /proc/drbd 或 /etc/init.d/drbd status:
[root@TM-Master ~]# /etc/init.d/drbd status
drbd driver loaded OK; device status:
version: 8.2.6 (api:88/proto:86-88)
GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by buildsvn@c5-x8664-build, 2008-10-03 11:30:17
m:res cs st ds p mounted fstype
0:r0 Connected Secondary/Secondary Inconsistent/Inconsistent C
[root@TM-Slave ~]# /etc/init.d/drbd status
drbd driver loaded OK; device status:
version: 8.2.6 (api:88/proto:86-88)
GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by buildsvn@c5-x8664-build, 2008-10-03 11:30:17
m:res cs st ds p mounted fstype
0:r0 Connected Secondary/Secondary Inconsistent/Inconsistent C
现在两机器都是处于Secondary,即备机状态。(红色部分标记),如果是Unknow,则检查两台是否配置一样。
5. 设置primary主机:
[root@TM-Master ~] drbdadm primary r0
第一次可能会设置失败,可以使用:
[root@TM-Master ~]# drbdsetup /dev/drbd0 primary -o
将把 TM-Master 作为主机,把 TM-Master 中的数据以块的方式同步到 TM-Slave 中。其中 r0 为资源名,可再次查看状态:
[root@TM-Master ~]# /etc/init.d/drbd status
drbd driver loaded OK; device status:
version: 8.2.6 (api:88/proto:86-88)
GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by buildsvn@c5-x8664-build, 2008-10-03 11:30:17
m:res cs st ds p mounted fstype
… sync’ed: 8.8% (9350/10236)M
0:r0 SyncSource Primary/Secondary UpToDate/Inconsistent C
[root@TM-Slave ~]# /etc/init.d/drbd status
drbd driver loaded OK; device status:
version: 8.2.6 (api:88/proto:86-88)
GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by buildsvn@c5-x8664-build, 2008-10-03 11:30:17
m:res cs st ds p mounted fstype
… sync’ed: 13.7% (8847/10236)M
0:r0 SyncTarget Secondary/Primary Inconsistent/UpToDate C
通过/proc/drbd,可以查看磁盘的复制状态:
[root@TM-Master ~]# cat /proc/drbd
version: 8.2.6 (api:88/proto:86-88)
GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by buildsvn@c5-x8664-build, 2008-10-03 11:30:17
0: cs:SyncSource st:Primary/Secondary ds:UpToDate/Inconsistent C r—
ns:2151328 nr:0 dw:0 dr:2151328 al:0 bm:131 lo:0 pe:0 ua:0 ap:0 oos:8330696
[===>................] sync’ed: 20.6% (8135/10236)M
finish: 0:12:48 speed: 10,804 (10,244) K/sec
[root@TM-Slave ~]# cat /proc/drbd
version: 8.2.6 (api:88/proto:86-88)
GIT-hash: 3e69822d3bb4920a8c1bfdf7d647169eba7d2eb4 build by buildsvn@c5-x8664-build, 2008-10-03 11:30:17
0: cs:SyncTarget st:Secondary/Primary ds:Inconsistent/UpToDate C r—
ns:0 nr:1791904 dw:1791904 dr:0 al:0 bm:109 lo:0 pe:0 ua:0 ap:0 oos:8690120
[==>.................] sync’ed: 17.2% (8486/10236)M
finish: 0:11:18 speed: 12,792 (10,236) K/sec
至此,镜像分区已创建完成,我们在两台服务器上设置为开机自启动:
# chkconfig drbd on
挂载使用
在 Primary 主节点上,即 TM-Master ,格式化文件系统并挂载
[root@TM-Master ~]# mkfs.ext3 /dev/drbd0
[root@TM-Master ~]# tune2fs -c 0 -i 0 /dev/drbd0
[root@TM-Master ~]# mkdir /home/drbd
[root@TM-Master ~]# mount /dev/drbd0 /home/drbd
[root@TM-Master ~]# mount
/dev/drbd0 on /home/drbd type ext3 (rw)
注:drbd 设备只能在 Primary 端使用,为避免误操作,当机器重启后,默认都处于 Secondary 状态,如要使用drbd设备,需手动把其设置为Primary。
DRBD 的详细介绍:请点这里
DRBD 的下载地址:请点这里
相关阅读:
其他全市默认配置。5.在Ubuntu中建立共享文件夹,命名为share,然后进入VirtualBox菜单选择Deivce=》Shared Folder Settings 里面指定创建的share路径。