DRBD简介
DRBD是一个用软件实现的、无共享的、服务器之间镜像块设备内容的存储复制解决方案。它作为一个内核模块,工作在内核当中。具体的工作方式:在每个节点上预留出块级别的存储设备,任何数据发往主节点上的该存储设备的时候,会同时通过网络发送给另外一个节点一份。另外一个节点接收到数据之后存储在与主节点对等的镜像块设备上。
DRBD的工作模式有两种(这里仅介绍第一种):
1、主备两节点(primary/secondary)
2、双主模型 (primary/primary )
数据在写入磁盘过程中,首先通过文件系统将数据写至缓存中,然后每隔一定时间再将缓存中被修改的数据通过磁盘调度器同步到磁盘上(异步方式),DRBD就是在调用磁盘调度器之前将修改的数据通过TCP协议发送一份至另一个节点上,另一个节点上的对应服务(drbd服务)收到数据后写入到对等的存储设备上,DRBD结构图如下:
DRBD的复制模式有3种协议:
protocol A:异步复制,数据在本地写成功之后立即返回,数据在发送过程中可能丢失。
protocol B:内存同步复制,数据成功发送至从节点后返回(数据尚在从节点的内存中)
protocol C:同步复制,数据成功发送至从节点,同步到磁盘后才返回(可靠性高,性能差)
实现过程
1)首先确保:1、主从节点上时间同步,2、主从节点能够基于主机名相互访问。
在主从节点上同步/etc/hosts文件:
[root@node1 ~]# vim /etc/hosts 192.168.1.126 node1.xiaoxiao.com node1 192.168.1.127 node2.xiaoxiao.com node2
2)安装软件包,对应的rpm包为drbd(用户空间的工具)和drbd-kmdl(内核模块)。安装时要注意drbd和drbd-kmdl的版本要对应;drbd-kmdl的版本要与当前系统的内核版本相对应。软件包的下载地址ftp://rpmfind.net/linux/atrpms/,可按需下载。
[root@node1 ~]# rpm -ivh drbd-8.4.3-33.el6.x86_64.rpm drbd-kmdl-2.6.32-431.el6-8.4.3-33.el6.x86_64.rpm
3)配置drbd
drbd的主配置文件为/etc/drbd.conf,其中以include方式包含了/etc/drbd.d目录下的global_common.conf文件和所有以.res结尾的文件。global_common.conf用于定义global段和common段,每一个.res的文件用于定义一个资源。
简单示例如下:
[root@node1 ~]# vim /etc/drbd.d/global_common.conf global { usage-count no; # minor-count dialog-refresh disable-ip-verification } common { protocol B; #使用的协议 handlers { } startup { # wfc-timeout degr-wfc-timeout outdated-wfc-timeout wait-after-sb } options { # cpu-mask on-no-data-accessible } disk { on-io-error detach; #当资源所在的磁盘发生IO故障时,把磁盘从当前镜像中拆除 } net { cram-hmac-alg "sha1"; #用哪一种算法来做消息认证 shared-secret "baby_drbd"; #共享秘钥 } syncer { rate 1000M; #同步最大的可用速率,以免其过于占用带宽资源 } }
定义一个资源/etc/drbd.d/web.res
resource dbdata { #dbdata是资源名 #protocol C #指定使用的协议 on node1.xiaoxiao.com { #主机名 device /dev/drbd0; #对应的drbd设备的设备名 disk /dev/sdb1; #用于drbd镜像的设备 address 192.168.1.126:7789; #资源监听的地址和端口,默认监听端口7789 meta-disk internal; #drbd的元数据存放在何处,internal表示存放在内部 } on node2.xiaoxiao.com { device /dev/drbd0; disk /dev/sdb1; address 192.168.1.127:7789; meta-disk internal; } }
以上文件在两个节点上必须相同,因此,可以基于ssh将刚才配置的文件全部同步至另外一个节点。
[root@node1 ~]# scp /etc/drbd.d/* node2:/etc/drbd.d/
4)在两个节点上初始化已定义的资源并启动服务
创建出drbd资源(在两个节点上都要执行):
[root@node1 ~]# drbdadm create-md dbdata #资源名与配置文件中的保持一致
在两个节点上启动服务:
[root@node1 ~]# service drbd start
查看启动状态(也可以通过drbd-overview查看):
[root@node1 ~]# cat /proc/drbd version: 8.4.3 (api:1/proto:86-101) GIT-hash: 89a294209144b68adb3ee85a73221f964d3ee515 build by gardner@, 2013-11-29 12:28:00 0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r---- ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:505964
Secondary/Secondary #两个节点均处于Secondary状态
ds:Inconsistent/Inconsistent #主从节点上数据非一致
在主从模式中,只有主节点才能挂载使用,从节点仅作为备份的功能。所以要使用该设备需要将其中一个节点提升为主节点(primary)。
[root@node1 ~]# drbdadm primary --force resource
用drbd-overview查看,数据正处于过程中,由于drbd的两个对等设备是按位同步的,所以不管设备上面有没有数据,都会有这个过程。
[root@node1 ~]# drbd-overview 0:dbdata/0 SyncTarget Primary/Secondary Inconsistent/UpToDate B r----- [======>.............] sync‘ed: 36.7% (6488/10244)M
同步完成:
[root@node1 ~]# drbd-overview 0:dbdata/0 Connected Primary/Secondary UpToDate/UpToDate B r----- /data ext4 9.9G 146M 9.3G 2%
同步完成之后即可在/dev/drbd0上创建文件系统进行挂载。
[root@node1 ~]# mkfs -t ext4 -b 1024 /dev/drbd0 [root@node1 ~]# mkdir /data [root@node1 ~]# mount /dev/drbd0 /data
5)主从切换
DRBD的Primary/Secondary模型,在某个时刻只能有一个节点为Primary,若要进行角色转换,需要先将Primary节点设置为Secondary后,才能将原来的Secondary节点提升为Primary。
在node1上:
[root@node1 ~] # umount /data [root@node1 ~] # drbdadm secondary dbdata
在node2上:
[root@node2 ~]## drbdadm primary dbdata [root@node2 ~]# drbd-overview 0:dbdata/0 Connected Primary/Secondary UpToDate/UpToDate B r----- [root@node2 ~]## mkdir /data [root@node2 ~]## mount /dev/drbd0 /data
6)drbd脑裂恢复
集群发生故障,drbd可能会出现脑裂。在drbd的两个节点上都得不到对方的情况。
node1:
[root@node1 ~]# drbd-overview 0:dbdata/0 StandAlone Secondary/Unknown UpToDate/DUnknown r-----
node2:
[root@node2 ~]# drbd-overview 0:dbdata/0 StandAlone Secondary/Unknown UpToDate/DUnknown r-----
这是可以对其中一个设备重新创建设备,在两个节点上重启服务即可。
[root@node2 ~]# drbdadm down dbdata [root@node2 ~]# drbdadm create-md dbdata
重启服务之后数据会重新开始同步:
[root@node2 ~]# drbd-overview 0:dbdata/0 SyncTarget Secondary/Secondary Inconsistent/UpToDate B r----- [>...................] sync‘ed: 8.0% (9432/10244)M
.................^_^
原文地址:http://ljbaby.blog.51cto.com/10002758/1684218