如何在CentOS 6.5上部署配置DRBD实现高可用?

在构建高可用性(HA)架构时,数据的实时同步与冗余备份是核心环节,DRBD(Distributed Replicated Block Device,分布式复制块设备)正是在这一领域扮演着关键角色的开源软件,它能够在不同服务器之间,通过TCP/IP网络协议,对块设备进行实时、透明的数据镜像,对于仍在使用稳定且成熟的CentOS 6.5系统的环境而言,DRBD提供了一种经济高效且可靠的数据保护方案,本文将深入探讨在CentOS 6.5上部署、配置和管理DRBD的完整流程,旨在为系统管理员提供一份详尽且实用的参考指南。

如何在CentOS 6.5上部署配置DRBD实现高可用?

DRBD核心工作原理

DRBD的核心思想是在操作系统内核层面构建一个虚拟的块设备(如/dev/drbd0),当上层应用(如数据库、文件系统)向这个虚拟设备写入数据时,DRBD会同时将数据写入本地磁盘,并通过网络发送到远程节点的DRBD模块,远程节点再将数据写入其本地磁盘,对于应用层来说,它完全感知不到底层的复制过程,操作/dev/drbd0就如同操作一个普通的本地硬盘。

DRBD通常工作在主备模式下,在任意时刻,一个资源只能有一个主节点和零个或多个备节点,主节点允许进行读写操作,而备节点仅接收来自主节点的数据更新,自身不允许任何写入,当主节点发生故障时,管理员或集群管理软件(如Pacemaker)可以将备节点提升为新的主节点,从而实现服务的快速切换。

DRBD提供了三种不同的复制协议,以适应不同场景对数据一致性和性能的需求:

协议 描述 优点 缺点
Protocol A 异步复制,本地写操作完成后,立即向应用确认,数据稍后发送到备节点。 性能最高,延迟最低。 存在数据丢失风险,若主节点在数据同步前宕机。
Protocol B 内存同步,数据已发送到备节点并进入其内存缓冲区后,向应用确认。 性能与数据安全性之间较好的平衡。 若备节点在数据写入磁盘前宕机,仍有数据丢失风险。
Protocol C 同步复制,本地和远程节点的写操作都完成后,才向应用确认。 数据安全性最高,无数据丢失风险。 性能最低,延迟最高,因为需要等待网络I/O和远程磁盘I/O。

对于绝大多数要求数据强一致性的生产环境,Protocol C是首选。

在CentOS 6.5上安装与配置DRBD

假设我们有两台服务器,node1(192.168.1.101)和node2(192.168.1.102),它们都有一块未使用的磁盘/dev/sdb,用于DRBD数据同步。

第一步:环境准备

  1. 设置主机名与解析:确保两台服务器能通过主机名互相解析。

    # 在 node1 和 node2 上分别执行
    vim /etc/hosts
    # 添加以下内容
    192.168.1.101 node1
    192.168.1.102 node2
  2. 时间同步:确保两台服务器时间一致,这对于日志分析和故障排查至关重要,可以使用ntpdate命令。

  3. 磁盘分区:对/dev/sdb进行分区,例如创建一个单独的分区/dev/sdb1,两台服务器的分区大小必须一致。

第二步:安装DRBD软件包

CentOS 6.5的官方源中不包含DRBD,我们需要先安装EPEL(Extra Packages for Enterprise Linux)仓库。

# 在 node1 和 node2 上分别执行
rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
yum install drbd84-utils kmod-drbd84 -y

这里安装的是DRBD 8.4版本,这是一个稳定且广泛使用的版本。

第三步:配置DRBD资源

DRBD的主配置文件是/etc/drbd.conf,它通常会包含/etc/drbd.d/目录下的所有.res文件,我们创建一个名为r0.res的资源文件。

# 在 node1 和 node2 上创建完全相同的配置文件
vim /etc/drbd.d/r0.res

如下:

如何在CentOS 6.5上部署配置DRBD实现高可用?

resource r0 {
    protocol C; # 使用同步复制协议
    on node1 {
        device    /dev/drbd0;       # DRBD虚拟设备
        disk      /dev/sdb1;        # 底层物理分区
        address   192.168.1.101:7789; # 本节点监听地址和端口
        meta-disk internal;         # 元数据存储位置,internal表示与数据共享同一分区
    }
    on node2 {
        device    /dev/drbd0;
        disk      /dev/sdb1;
        address   192.168.1.102:7789;
        meta-disk internal;
    }
    syncer {
        rate 100M; # 设置同步速率限制,根据网络带宽调整
    }
}

配置参数解析

  • resource r0:定义一个名为r0的资源。
  • protocol C:指定使用同步复制模式。
  • on node1 {...}:定义在node1上的具体配置。
  • device:DRBD创建的虚拟块设备路径。
  • disk:用于存储数据的实际物理分区。
  • address:本节点用于DRBD通信的IP地址和端口。
  • meta-disk internal:将DRBD的元数据(如活动日志、位图等)存储在数据分区的末尾,简化了管理。
  • syncer:配置同步相关的参数,rate用于限制初始同步或后台同步时的网络带宽占用,避免影响正常业务。

第四步:初始化并启动DRBD

  1. 创建元数据:在两个节点上执行此命令,它会初始化元数据区域。

    drbdadm create-md r0
  2. 启动DRBD服务:在两个节点上启动服务。

    service drbd start
  3. 提升主节点:首次启动时,两个节点都是备状态,我们需要选择一个节点(例如node1)将其提升为主节点,由于是初始同步,需要使用--force参数。

    # 仅在 node1 上执行
    drbdadm primary --force r0

    执行此命令后,node1将开始将/dev/sdb1上的所有数据(即使是空的)同步到node2,这个过程称为“全量同步”。

  4. 查看状态:可以使用以下命令查看DRBD的连接和同步状态。

    cat /proc/drbd
    # 或者使用更友好的工具
    drbd-overview

    初始同步时,你会看到同步进度,同步完成后,状态应显示为Connected/Primary/Secondary,并且两边的磁盘状态都是UpToDate

第五步:创建文件系统并挂载

DRBD设备/dev/drbd0在主节点node1上已经可以像普通磁盘一样使用了。

# 仅在 node1 (主节点) 上执行
mkfs.ext4 /dev/drbd0  # 创建ext4文件系统
mkdir /data
mount /dev/drbd0 /data

所有写入/data目录的数据都会被DRBD实时复制到node2/dev/sdb1分区上。

故障切换演练

node1发生故障时,我们需要将服务切换到node2

  1. 在 node1 (旧主节点) 上

    umount /data
    drbdadm secondary r0
  2. 在 node2 (新主节点) 上

    如何在CentOS 6.5上部署配置DRBD实现高可用?

    drbdadm primary r0
    mkdir /data
    mount /dev/drbd0 /data

    node2接管成为新的主节点,数据依然可用,这个过程可以与Pacemaker等集群软件结合,实现自动化的故障切换。

相关问答FAQs

问题1:DRBD初始同步过程非常缓慢,我该如何加速?

解答:初始同步速度慢通常是因为syncer部分的rate参数设置过低,这个参数用于限制DRBD同步任务占用的网络带宽,以防止影响生产业务,如果你的网络带宽充足,并且希望在非业务高峰期尽快完成初始同步,可以临时调高这个值。

修改/etc/drbd.d/r0.conf文件中的syncer部分:

syncer {
    rate 500M; # 从100M调整到500M
}

修改后,在两个节点上执行service drbd restart使配置生效,设置过高的速率可能会拥塞网络,影响其他服务,建议根据实际网络环境和业务需求进行调整,并在同步完成后可以考虑将其调回一个合理的值。

问题2:如果两个节点都意外变成了主节点(Split-Brain,裂脑),该如何处理?

解答:“裂脑”是DRBD最严重的故障之一,指的是由于网络中断等原因,两个节点都认为对方已宕机,从而都将自己提升为主节点,这会导致两份数据产生分歧,无法自动合并。

处理裂脑需要人工干预,基本原则是“选择一方的数据,丢弃另一方的数据”,步骤如下:

  1. 确定要保留数据的节点:根据业务日志、数据大小或最后更新时间等判断哪个节点的数据是“正确”或“更新”的。
  2. 在要丢弃数据的节点(假设为node2)上操作
    drbdadm secondary r0
    drbdadm disconnect r0
    drbdadm -- --discard-my-data connect r0

    --discard-my-data命令告诉此节点,在重新连接时,放弃自己的数据,准备接收来自对端的数据。

  3. 在要保留数据的节点(假设为node1)上操作
    drbdadm connect r0

    连接后,node1会将其数据同步到node2,从而解决裂脑状态,恢复数据一致性。

  4. 验证:等待数据同步完成,确认状态恢复为Connected/Primary/SecondaryConnected/Secondary/Primary,且两边磁盘状态为UpToDate

裂脑处理应极其谨慎,务必在确认数据归属后再进行操作,否则可能导致数据永久丢失,预防裂脑的最佳实践是使用双机互联的心跳线,并结合Pacemaker等集群软件配置更严格的仲裁机制。

【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!

(0)
热舞的头像热舞
上一篇 2025-10-05 05:05
下一篇 2025-10-05 05:10

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

QQ-14239236

在线咨询: QQ交谈

邮件:asy@cxas.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信