在构建高可用性(HA)集群架构时,数据的实时同步与冗余是核心环节,DRBD(Distributed Replicated Block Device,分布式复制块设备)正是这样一种基于软件的、无共享的、服务器之间块级别数据复制解决方案,它通过在两台服务器之间创建一个虚拟的块设备,实现数据的镜像,当主服务器发生故障时,备用服务器可以立即接管,保证业务连续性,本文将详细介绍在较为经典的CentOS 6.5系统上安装与配置DRBD的完整流程。
环境准备
在开始安装之前,我们需要准备两台物理或虚拟服务器,并确保它们满足以下基本条件:
- 操作系统:两台服务器均安装CentOS 6.5。
- 网络配置:确保两台服务器网络互通,建议配置两个网络接口,一个用于业务通信,另一个专用于DRBD数据同步,以减少对业务网络的影响。
- 磁盘空间:每台服务器上需要有一块大小完全相同的未使用磁盘或分区,用于DRBD数据存储,我们假设两台节点上都有
/dev/sdb
这块磁盘。 - 主机名与解析:为方便管理,设置清晰的主机名并配置
/etc/hosts
文件,确保两台节点可以通过主机名互相访问。
假设我们的两台节点信息如下:
节点 | 主机名 | 业务IP | DRBD同步IP | DRBD数据盘 |
---|---|---|---|---|
节点1 | node1.example.com | 168.1.10 | 0.0.1 | /dev/sdb |
节点2 | node2.example.com | 168.1.11 | 0.0.2 | /dev/sdb |
在两台节点上,都需要配置/etc/hosts
文件,添加如下内容:
0.0.1 node1.example.com node1
10.0.0.2 node2.example.com node2
安装DRBD软件包
DRBD并不包含在CentOS 6.5的默认官方源中,我们需要通过EPEL(Extra Packages for Enterprise Linux)仓库来安装。
安装EPEL仓库:
在两台节点上分别执行以下命令来安装与CentOS 6对应的EPEL-release包。rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
安装DRBD:
EPEL源配置好后,使用yum
命令即可轻松安装DRBD核心模块和管理工具。yum install -y drbd kmod-drbd84 drbd-utils
这里安装了
drbd
主包、kmod-drbd84
内核模块(针对较新内核)以及drbd-utils
管理工具集。
配置DRBD资源
DRBD的全局配置文件是/etc/drbd.conf
,但通常我们会将具体的资源配置定义在/etc/drbd.d/
目录下,以.res
结尾的文件中,这样更便于管理多个资源。
创建资源配置文件:
在两台节点上,创建一个新的资源配置文件,例如/etc/drbd.d/r0.res
。r0
是我们为这个资源定义的名字。vim /etc/drbd.d/r0.res
编写配置内容:
将以下配置内容写入文件,请根据您的实际环境修改device
、disk
和address
参数。resource r0 { 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"; # 当发生脑裂时执行的脚本 split-brain "/usr/lib/drbd/notify-split-brain.sh root"; } startup { wfc-timeout 120; # 等待连接超时时间 degr-wfc-timeout 120; } disk { on-io-error detach; # 当底层磁盘发生I/O错误时,分离DRBD设备 } net { cram-hmac-alg "sha1"; # 使用SHA1算法进行数据认证 shared-secret "my-drbd-secret"; # 设置两节点间的认证密码 } syncer { rate 100M; # 设置同步速率上限,根据网络带宽调整 } on node1.example.com { device /dev/drbd0; # DRBD虚拟设备名 disk /dev/sdb; # 底层物理磁盘 address 10.0.0.1:7789; # 本节点DRBD同步IP和端口 meta-disk internal; # 元数据存储位置,internal表示与数据共享磁盘空间 } on node2.example.com { device /dev/drbd0; disk /dev/sdb; address 10.0.0.2:7789; meta-disk internal; } }
注意:此配置文件在两台节点上必须完全一致。
初始化并启动DRBD
配置完成后,就可以初始化并启动DRBD服务了。
创建DRBD元数据:
在两台节点上,分别执行以下命令来创建元数据,元数据记录了DRBD的状态信息。drbdadm create-md r0
执行过程中可能会提示你确认操作,输入
yes
即可。启动DRBD服务:
在两台节点上,启动DRBD服务并将其设置为开机自启。service drbd start chkconfig drbd on
查看DRBD状态:
启动后,在任意节点上执行cat /proc/drbd
或drbd-overview
查看状态,两个节点的状态都应该是Secondary
,表示它们互为备用。version: 8.4.11-1 (api:1/proto:86-101) GIT-hash: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx build by root@node1.example.com, 2025-10-27 10:30: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:f oos:10485760
ds:Inconsistent/Inconsistent
表示两边的数据尚未同步。
提升主节点与数据同步
首次启动时,需要指定一个节点作为主节点来启动初始数据同步。
将node1提升为主节点:
仅在node1上执行以下命令。--force
参数是首次同步所必需的。drbdadm primary --force r0
监控同步进度:
再次在node1上查看状态,你会发现node1变成了Primary
,node2仍是Secondary
,并且数据开始从node1同步到node2。version: 8.4.11-1 (api:1/proto:86-101) GIT-hash: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx build by root@node1.example.com, 2025-10-27 10:35:00 0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r----- ns:1048576 nr:0 dw:1048576 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:9437184 [>....................] sync'ed: 10.0% (9216/10240)M finish: 0:00:15 speed: 655,360 (655,360) K/sec
cs:SyncSource
表示本节点是数据源,ds:UpToDate/Inconsistent
表示本节点数据最新,对端数据不一致,等待同步完成,状态会变为cs:Connected
和ds:UpToDate/UpToDate
。
创建文件系统并挂载
同步完成后,DRBD设备/dev/drbd0
就可以像普通磁盘一样使用了。
格式化DRBD设备:
在主节点(node1)上,对/dev/drbd0
进行格式化。mkfs.ext4 /dev/drbd0
挂载文件系统:
在主节点(node1)上,创建挂载点并挂载。mkdir /mnt/drbd_data mount /dev/drbd0 /mnt/drbd_data
你可以在/mnt/drbd_data
目录下写入数据,这些数据会实时同步到node2的/dev/sdb
磁盘上,当node1故障时,可以将node2提升为主节点,挂载相同的设备,实现业务的快速切换。
相关问答FAQs
Q1: DRBD初始同步非常慢,我该如何加速?
A1: DRBD的初始同步速度受限于配置文件中syncer
部分的rate
参数,该参数定义了同步速率的上限,你可以编辑/etc/drbd.d/r0.res
文件,找到syncer { rate 100M; }
这一行,根据你的网络带宽,适当提高这个值,例如改为rate 500M
或更高,修改后,在两个节点上执行drbdadm adjust r0
使配置生效,设置过高的速率可能会占用过多网络带宽,影响业务应用。
Q2: 什么是“Split-Brain”(脑裂)?如何解决?
A2: “Split-Brain”是DRBD中最严重的故障之一,它发生在两个节点因为网络中断等原因无法通信,但都认为自己应该成为主节点,并各自接受了不同的写入数据,这导致两个节点的数据不再一致,DRBD会拒绝连接以防止数据损坏,解决方法通常是:
- 确定“牺牲”节点:选择一个数据较旧或不重要的节点,其上的数据将被丢弃。
- 在“牺牲”节点上操作:
drbdadm secondary r0 drbdadm connect --discard-my-data r0
- 在另一个节点上操作:
drbdadm connect r0
这样,DRBD会重新建立连接,并以“胜利”节点的数据为准,强制覆盖“牺牲”节点的数据,从而恢复数据一致性,预防脑裂的最佳实践是配置一个第三方仲裁设备或使用更复杂的集群管理软件(如Pacemaker)来管理DRBD资源。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复