DRBD的英文全称为Distributed Replicated Block Device(分布式块设备复制),是linux内核的存储层中的一个分布式存储系统,可利用DRBD在两台linux服务器之前共享块设备、文件系统和数据,类似于一个网络RAID1的功能。
同步过程如下:
1)、在NODE1上写操作被提交,然后通过内核传给DRBD模块。
2)、DRBD发送写操作到NODE2。
3)、在NODE2上的DRBD发送写操作给本地磁盘。
4)、在NODE2上的DRBD向NODE1发送确认消息,确认已经接收到写操作并发送给本地磁盘。
5)、在NODE1上的DRBD发送写操作给本地磁盘。
6)、NODE1的内核回应写操作完成。
此同步过程还依赖于DRBD的3种同步协议:
protocol A,写I/O到达本地磁盘和本地的TCP发送缓存区之后,返回操作成功。
protocol B,写I/O到达本地磁盘和远程节点的缓存区之后,返回操作成功。
protocol C, 写I/O到达本地磁盘和远程节点的磁盘之后,返回操作成功。
heartbeat+DRBD方案中IP信息:
192.168.0.223(drbd1)
192.168.0.224(drbd2)
heartbeat使用的VIP:
192.168.0.222
配置之前的准备
1.设置hostname及解析
hostname drbd1
hostname drbd2
2.编辑/etc/hosts文件,添加如下内容:
192.168.0.223 drbd1
192.168.0.224 drbd2
保证两台主机的hostname 能分别解析到两台机器内网IP。
DRBD的部署
从官方网站下载源码包来编译或者直接yum来安装,这以Centos为例:
通过yum安装DRBD服务:
yum -y install drbd83 kmod-drbd83(2.6.33及以上的内核不需要安装此模块包了)
检查DRBD是否安装成功:
[root@drbd1 ~]# modprobe -l |grep -i drbd
/lib/modules/2.6.18-194.el5/weak-updates/drbd83/drbd.ko
[root@drbd1 ~]# lsmod |grep drbd
drbd 300440 4
安装成功之后,在/sbin下面有drbdadmin drbdmeta drbdsetup 以及/etc/init.d/drbd 启动本。
DRBD的配置
drbd使用的分区最好一样,也可以使用LVM进行分区。
这里给两台机器添加一个10G的分区给数据库使用。(添加分区简单,这里就不贴出来了!)
[root@drbd1 ~]# cp /usr/share/doc/drbd83-8.3.13/drbd.conf /etc/drbd.conf
[root@drbd1 ~]# cat /etc/drbd.conf
# You can find an example in /usr/share/doc/drbd.../drbd.conf.example
include "drbd.d/global_common.conf";
include "drbd.d/*.res";
[root@drbd1 ~]# cat /etc/drbd.d/global_common.conf |grep -v "#"
global {
usage-count no; #是否参加DRBD使用者统计,默认yes
}
common {
protocol C;#使用DRBD的第三种协议。
handlers {
pri-on-incon-degr "/usr/lib/drbd/notify-pri-on-incon-degr.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";
pri-lost-after-sb "/usr/lib/drbd/notify-pri-lost-after-sb.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";
local-io-error "/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f";
}
startup {
wfc-timeout 120;
degr-wfc-timeout 120;
}
disk {
on-io-error detach;
fencing resource-only;
}
net {
cram-hmac-alg "sha1";
shared-secret "1111";
#DRBD同步使用的验证方式和密码信息。
}
syncer {
rate 200M;#同步时网络速率最大值,单位是字节。
}
}
[root@drbd1 ~]# cat /etc/drbd.d/ha.res
resource r0 {
on drbd1 {
device /dev/drbd0;#挂载的设备名为drbd0
disk /dev/sda5;#使用的磁盘分区为/dev/sda5
address 192.168.0.223:7788;#设置DRBD的监听端口,用于与另一台机器通信。
meta-disk internal; #DRBD的元数据存放方式
}
on drbd2 {
device /dev/drbd0;
disk /dev/sda5;
address 192.168.0.224:7788;
meta-disk internal;
}
}
上面的的文件分别放在drbd1和drbd2上。drbd.conf的配置参数很多,可以man drbd.conf来查看说 明。
DRBD的启动
在启动DRBD服务之前,要在两台机器上/dev/sha5上创建DRBD元数据库信息。
[root@drbd1 ~]# drbdadm create-md r0
分别在两台机器上执行,成功了会打印出successfully created.
出现不成功时,需要使用如下命令覆盖文件系统中的设备块信息,操作时确认此分区数据已经备 份。
dd if=/dev/zero of=/dev/sda5 bs=1M count=128
执行完后,再次执行drbdadm create-md r0
两台机器同时启动服务: [root@drbd1 ~]# /etc/init.d/drbd start
设置primary节点 :[root@drbd1 ~]# drbdadm primary r0
如果上一步不成功 则执行此命令把此节点设置为primary节点,从头开始同步:
drbdadm -- --overwrite-date-of-peef primary r0
此时DRBD完成,查看/proc/drbd
[root@drbd1 ~]# cat /proc/drbd
version: 8.3.13 (api:88/proto:86-96)
GIT-hash: 83ca112086600faacab2f157bc5a9324f7bd7f77 build by [email protected], 2012-05-07 11:56:36
0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
ns:1744 nr:880 dw:2624 dr:39882 al:13 bm:2 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
从输出信息可知,磁盘状态都是UpToDate,表示数据同步完成。
HA有时间在弄上来!