共计 5955 个字符,预计需要花费 15 分钟才能阅读完成。
一、drbd 概述
Distributed Replicated Block Device(DRBD)是一种基于软件的,无共享,复制的存储解决方案,在服务器之间的对块设备(硬盘,分区,逻辑卷等)进行镜像。
DRBD 工作在内核当中的,类似于一种驱动模块。DRBD 工作的位置在文件系统的 buffer cache 和磁盘调度器之间,通过 tcp/ip 发给另外一台主机到对方的 tcp/ip 最终发送给对方的 drbd,再由对方的 drbd 存储在本地对应磁盘 上,类似于一个网络 RAID- 1 功能。
在高可用 (HA) 中使用 DRBD 功能,可以代替使用一个共享盘阵。本地 (主节点) 与远程主机 (备节点) 的数据可以保 证实时同步。当本地系统出现故障时, 远程主机上还会保留有一份相同的数据, 可以继续使用。
DRBD 的架构如下图
底层设备支持
DRBD 需要构建在底层设备之上,然后构建出一个块设备出来。对于用户来说,一个 DRBD 设备,就像是一块物理的磁盘,可以在上面内创建文件系统。DRBD 所支持的底层设备有以下这些类:
1、一个磁盘,或者是磁盘的某一个分区;
2、一个 soft raid 设备;
3、一个 LVM 的逻辑卷;
4、一个 EVMS(Enterprise Volume Management System,企业卷管理系统)的卷;
5、其他任何的块设备。
DRBD 复制模式
协议 A:
异步复制协议。一旦本地磁盘写入已经完成,数据包已在发送队列中,则写被认为是完成的。在一个节点发生故障时,可能发生数据丢失,因为被写入到远程节点上的数据可能仍在发送队列。尽管,在故障转移节点上的数据是一致的,但没有及时更新。这通常是用于地理上分开的节点。
协议 B:
内存同步(半同步)复制协议。一旦本地磁盘写入已完成且复制数据包达到了对等节点则认为写在主节点上被认为是完成的。数据丢失可能发生在参加的两个节点同时故障的情况下,因为在传输中的数据可能不会被提交到磁盘。
协议 C:
同步复制协议。只有在本地和远程节点的磁盘已经确认了写操作完成,写才被认为完成。没有任何数据丢失,所以这是一个群集节点的流行模式,但 I / O 吞吐量依赖于网络带宽。
一般使用协议 C,但选择 C 协议将影响流量,从而影响网络时延。为了数据可靠性,我们在生产环境使用时须慎重选项使用哪一种协议。
二、drbd 的安装
1、准备工作
1)本配置共有两个测试节点,分别 node1.comratings.com 和 node2.comratings.com,相的 IP 地址分别为 10.0.0.16 和 10.0.0.17,且解析写到对应的 /etc/hosts 下面;
2)node1 和 node2 两个节点上各提供了一个大小相同的分区作为 drbd 设备;我们这里为在两个节点上均为 /dev/sda5,大小为 512M;
3)系统为 CentOS 6.5,x86_64 平台。
2、软件包介绍
drbd 共有两部分组成:内核模块和用户空间的管理工具。其中 drbd 内核模块代码已经整合进 Linux 内核 2.6.33 以后的版本中,因此,如果您的内核版本高于此版本的话,你只需要安装管理工具即可;否则,您需要同时安装内核模块和管理工具两个软件包,并且此两者的版本号一定要保持对应。
目前适用 CentOS 5 的 drbd 版本主要有 8.0、8.2、8.3 三个版本,其对应的 rpm 包的名字分别为 drbd, drbd82 和 drbd83,对应的内核模块的名字分别为 kmod-drbd, kmod-drbd82 和 kmod-drbd83。而适用于 CentOS 6 的版本为 8.4,其对应的 rpm 包为 drbd 和 drbd-kmdl,但在实际选用时,要切记两点:drbd 和 drbd-kmdl 的版本要对应;另一个是 drbd-kmdl 的版本要与当前系统的内容版本相对应。各版本的功能和配置等略有差异;我们实验所用的平台为 x86_64 且系统为 CentOS 6.4,因此需要同时安装内核模块和管理工具。我们这里选用最新的 8.4 的版本(drbd-8.4.3-33.el6.x86_64.rpm 和 drbd-kmdl-2.6.32-431.el6-8.4.3-33.el6.x86_64.rpm),下载地址为 ftp://rpmfind.net/linux/atrpms/,请按照需要下载。
实际使用中,您需要根据自己的系统平台等下载符合您需要的软件包版本,这里不提供各版本的下载地址。
3、软件包安装
下载完成后直接安装即可:
# 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
三、配置 drbd
1、配置文件介绍
drbd 的主配置文件为 /etc/drbd.conf;为了管理的便捷性,目前通常会将些配置文件分成多个部分,且都保存至 /etc/drbd.d 目录中,主配置文件中仅使用 ”include” 指令将这些配置文件片断整合起来。通常,/etc/drbd.d 目录中的配置文件为 global_common.conf 和所有以.res 结尾的文件。其中 global_common.conf 中主要定义 global 段和 common 段,而每一个.res 的文件用于定义一个资源。
在配置文件中,global 段仅能出现一次,且如果所有的配置信息都保存至同一个配置文件中而不分开为多个文件的话,global 段必须位于配置文件的最开始处。目前 global 段中可以定义的参数仅有 minor-count, dialog-refresh, disable-ip-verification 和 usage-count。
common 段则用于定义被每一个资源默认继承的参数,可以在资源定义中使用的参数都可以在 common 段中定义。实际应用中,common 段并非必须,但建议将多个资源共享的参数定义为 common 段中的参数以降低配置文件的复杂度。
resource 段则用于定义 drbd 资源,每个资源通常定义在一个单独的位于 /etc/drbd.d 目录中的以.res 结尾的文件中。资源在定义时必须为其命名,名字可以由非空白的 ASCII 字符组成。每一个资源段的定义中至少要包含两个 host 子段,以定义此资源关联至的节点,其它参数均可以从 common 段或 drbd 的默认中进行继承而无须定义。
以下是我的配置事例:
#cat /etc/drbd.d/global-common.conf
global {
usage-count no;
# minor-count dialog-refresh disable-ip-verification
}
common {
protocol C;
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”;
# fence-peer “/usr/lib/drbd/crm-fence-peer.sh”;
# split-brain “/usr/lib/drbd/notify-split-brain.sh root”;
# out-of-sync “/usr/lib/drbd/notify-out-of-sync.sh root”;
# before-resync-target “/usr/lib/drbd/snapshot-resync-target-lvm.sh -p 15 — -c 16k”;
# after-resync-target /usr/lib/drbd/unsnapshot-resync-target-lvm.sh;
}
startup {
#wfc-timeout 120;
#degr-wfc-timeout 120;
}
disk {
on-io-error detach;
#fencing resource-only;
}
net {
cram-hmac-alg “sha1”;
shared-secret “mydrbd”;
}
syncer {
rate 1000M;
}
}
2、定义一个资源 /etc/drbd.d/web.res,内容如下:
resource web {
on node1.comratings.com {
device /dev/drbd0;
disk /dev/sda5;
address 10.0.0.16:7789;
meta-disk internal;
}
on node2.comratings.com {
device /dev/drbd0;
disk /dev/sda5;
address 10.0.0.17:7789;
meta-disk internal;
}
}
注:以上配置在两个节点上必须相同
四、drbd 启动和查看
1、初始化资源
在 Node1 和 Node2 上分别执行:
# drbdadm create-md web
2、启动服务
在 Node1 和 Node2 上分别执行:
# service drbd start
3、查看启动状态
# cat /proc/drbd
version: 8.3.8 (api:88/proto:86-94)
GIT-hash: d78846e52224fd00562f7c225bcc25b2d422321d build by mockbuild@builder10.centos.org, 2010-06-04 08:04:16
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
也可以使用 drbd-overview 命令来查看:
# drbd-overview
0:web Connected Secondary/Secondary Inconsistent/Inconsistent C r—-
从上面的信息中可以看出此时两个节点均处于 Secondary 状态。于是,我们接下来需要将其中一个节点设置为 Primary。在要设置为 Primary 的节点上执行如下命令:
# drbdadm primary –force resource
注:也可以在要设置为 Primary 的节点上使用如下命令来设置主节点:
# drbdadm — –overwrite-data-of-peer primary web
而后再次查看状态,可以发现数据同步过程已经开始:
# drbd-overview
0:web SyncSource Primary/Secondary UpToDate/Inconsistent C r—-
[============>…….] sync’ed: 66.2% (172140/505964)K delay_probe: 35
等数据同步完成以后再次查看状态,可以发现节点已经牌实时状态,且节点已经有了主次:
# drbd-overview
0:web Connected Primary/Secondary UpToDate/UpToDate C r—-
4、创建文件系统
文件系统的挂载只能在 Primary 节点进行,因此,也只有在设置了主节点后才能对 drbd 设备进行格式化:
# mke2fs -j -L DRBD /dev/drbd0
# mkdir /mnt/drbd
# mount /dev/drbd0 /mnt/drbd
5、切换 Primary 和 Secondary 节点
对主 Primary/Secondary 模型的 drbd 服务来讲,在��个时刻只能有一个节点为 Primary,因此,要切换两个节点的角色,只能在先将原有的 Primary 节点设置为 Secondary 后,才能原来的 Secondary 节点设置为 Primary:
Node1:
# cp -r /etc/drbd.* /mnt/drbd
# umount /mnt/drbd
# drbdadm secondary web
查看状态:
# drbd-overview
0:web Connected Secondary/Secondary UpToDate/UpToDate C r—-
Node2:
# drbdadm primary web
# drbd-overview
0:web Connected Primary/Secondary UpToDate/UpToDate C r—-
# mkdir /mnt/drbd
# mount /dev/drbd0 /mnt/drbd
使用下面的命令查看在此前在主节点上复制至此设备的文件是否存在:
# ls /mnt/drbd
Linux 高可用(HA)集群之 DRBD 详解 http://www.linuxidc.com/Linux/2013-08/89035.htm
DRBD 中文应用指南 PDF http://www.linuxidc.com/Linux/2013-08/89034.htm
CentOS 6.3 下 DRBD 安装配置笔记 http://www.linuxidc.com/Linux/2013-06/85600.htm
基于 DRBD+Corosync 实现高可用 MySQL http://www.linuxidc.com/Linux/2013-05/84471.htm
CentOS 6.4 下 DRBD 安装配置 http://www.linuxidc.com/Linux/2013-09/90536.htm
DRBD 的详细介绍:请点这里
DRBD 的下载地址:请点这里
本文永久更新链接地址:http://www.linuxidc.com/Linux/2015-11/125205.htm