DRBD简介:
DRBD全称Distributed Replicated Block (分布式的复制块设备),属于Device公司,但是完全开源。它是一款基于块设备的文件复制解决方案,速度比文件级别的软件如NFS,samba快很多,是很多中小企业的共享存储首选解决方案。
DRBD工作需要在两个节点上同时准备一块一模一样的分区组成镜像,这就是为什么它叫做分布式复制块设备,它主要通过复制数据来实现文件同步(备份),主要用于集群文件共享, 我们通过它的工作原理来了解块复制和文件复制的不同,如下图:
首先,您需要知道,DRBD是工作在系统内核空间,而不是用户空间,它直接复制的是二进制数据,这是它速度快的根本原因。
其次,DRBD至少需要两个节点来工作,一主一次。
DRBD的文件同步过程和普通复制过程的不同:
DRBD在数据进入Buffer Cache时,先经过DRBD这一层,复制一份数据经过TCP/IP协议封装,发送到另一个节点上,另一个节点通过TCP/IP协议来接受复制过来的数据,同步到次节点的DRBD设备上。
下面我们来配置DRBD,前提:
1)主机名称和uname -n 命令输出的一致,最好是FQDN格式
2)DRBD的两个分区大小一致,先不要格式化
3)两个节点上准备都准备一个2G的分区/dev/sda5
准备两台虚拟机 ,我使用的是vm6.5+redhat5.4 ,主机名称和IP地址如下
node1.a.org 172.16.14.11
node2.a.org 172.16.14.12
一.安装,修改配置文件
1)安装drbd软件包,需要的软件包如下:
[root@node1 ~]# ls drbd/
drbd83-8.3.8-1.el5.centos.i386.rpm kmod-drbd83-8.3.8-1.el5.centos.i686.rpm
# 使用rpm -i安装,这两个软件包并没有什么依赖关系
[root@node1 drbd]# rpm -ivh *.rpm
[root@node2 drbd]# rpm -ivh *.rpm
2)复制配置文件到/etc下
[root@node2 drbd]# cp /usr/share/doc/drbd83-8.3.8/drbd.conf /etc/
cp: overwrite `/etc/drbd.conf'? Y # 直接覆盖,原文件没有任何内容
[root@node2 drbd]# cat /etc/drbd.conf
# You can find an example in /usr/share/doc/drbd.../drbd.conf.example
# 配置文件里只有下面两行,告诉我们定义在drbd.d下面定义.res结尾的文件为drbd的资源
include "drbd.d/global_common.conf"; # 真正的主配置文件
include "drbd.d/*.res";
# 修改 global_common.conf ,内容如下
[root@node2 drbd]# vim /etc/drbd.d/global_common.conf global { usage-count no; } common { protocol C; # C 指同步 A 异步 B 半同步 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 "mydrbdlab"; } syncer { rate 100M; # 你网卡的速率 } }
3)定义一个资源web,用来存放网页文件,给集群提供文件服务
resource web { on node1.a.org { # 注意主机名 device /dev/drbd0; disk /dev/sda5; # 分区 address 172.16.14.11:7789; # 注意IP meta-disk internal; } on node2.a.org { # 注意主机名 device /dev/drbd0; disk /dev/sda5; # 分区 address 172.16.14.12:7789; # 注意IP meta-disk internal; } }
4)将配置文件复制到node1上
[root@node2 drbd]# scp /etc/drbd.conf node1:/etc/
[root@node2 drbd]# scp /etc/drbd.d/* node1:/etc/drbd.d/
二.初始化已经以的资源,启动drbd服务
1)初始化资源
[root@node1 drbd]# drbdadm create-md web
[root@node2 drbd]# drbdadm create-md web
2)启动服务,这里需要说明,当一个节点启动服务后,如果另一个节点不启动,它会一直卡在那处于等待状态。
[root@node1 drbd]# service drbd start
[root@node2 drbd]# service drbd start
3)查看同步状态
[root@node1 drbd]# watch -n 1 'cat /proc/drbd'
也可以通过下面的命令来查看
[root@node1 drbd]# drbd-overview
0:web Connected Secondary/Secondary Inconsistent/Inconsistent C r----
三.设置node1为主节点,开始数据同步
1)设置主节点
[root@node1 drbd]# drbdsetup /dev/drbd0 primary -o
或者drbdadm -- --overwrite-data-of-peer primary web
查看节点信息状态,已经成为primiary了,中间有一个数据同步过程
[root@node1 drbd]# drbd-overview
0:web Connected Primary/Secondary UpToDate/UpToDate C r----
2)创建文件系统,挂载之
[root@node1 drbd]# mke2fs -j -L DRBD /dev/drbd0
[root@node1 drbd]# mkdir /mnt/drbd
[root@node1 drbd]# mount /dev/drbd0 /mnt/drbd/
创建几个空文件
[root@node1 drbd]# cd /mnt/drbd/
[root@node1 drbd]# touch a b c
四.切换主节点
# 先卸载,将node1改为次节点
[root@node1 ~]# umount /mnt/drbd/
[root@node1 ~]# drbdadm secondary web
# 在node2上设置为主节点
[root@node2 ~]# mkdir /mnt/drbd # 穿件挂载点
[root@node2 ~]# drbdadm primary web
[root@node2 ~]# drbd-overview
0:web Connected Secondary/Primary UpToDate/UpToDate C r----
[root@node2 ~]# drbdadm primary web
查看刚才创建的文件是否存在
[root@node2 ~]# mount /dev/drbd0 /mnt/drbd/
[root@node2 ~]# ls /mnt/drbd/
a b c lost+found