导读:本期聚焦于小伙伴创作的《如何在CentOS6.5_x64系统上安装配置DRBD8.4.2实现MySQL高可用?》,敬请观看详情。把MySQL的数据目录放到DRBD设备上是构建低成本双机热备的常见做法。DRBD8.4.2在CentOS6.5_x64环境下依赖内核模块与用户态工具版本严格匹配,若直接采用系统自带源安装常出现协议不兼容或设备无法初始化的故障。本文以两块独立磁盘为例,说明如何从源码编译drbd内核模块、配置global_common.conf与资源文件、创建元数据并启动主从同步。同时对比了使用rpm包与源码编译两种方式的差异,指出在老旧内核下关闭网卡卸载功能可显著降低同步延迟。按照文中的资源定义与启动顺序操作,可以避免脑裂并让MySQL在故障切换时无缝接管数据。

在CentOS6.5_x64这种较早期的系统上部署MySQL高可用,DRBD是非常实用的块级复制方案。DRBD8.4.2版本相对成熟,能够将两台服务器的本地磁盘实时镜像,上层直接跑MySQL即可获得近似共享存储的体验。本文基于两台节点node1与node2,系统均为CentOS6.5_x64,内核版本2.6.32-431.el6.x86_64,演示如何从零完成DRBD8.4.2的安装与基础资源配置,并最终将MySQL数据目录迁移到DRBD设备上。

如何在CentOS6.5_x64系统上安装配置DRBD8.4.2实现MySQL高可用?

一、环境准备与源码编译安装DRBD8.4.2

CentOS6.5_x64默认的yum源中drbd版本往往偏低或缺失内核模块源码,因此推荐下载drbd-8.4.2.tar.gz官方包进行编译。编译前需要安装kernel-devel、gcc、make等基础工具,并且确认当前运行内核与kernel-devel版本完全一致,否则模块加载时会报版本魔术不匹配。两台机器都需要执行相同的编译步骤,以保证主从协议一致。

解压后进入目录,先编译内核模块再编译用户态工具。模块编译时需指定KDIR指向对应内核源码目录。完成后执行make install,系统会在/lib/modules下生成drbd.ko,并通过depmod刷新依赖。用户态工具安装后提供drbdadm、drbdsetup等命令,它们是后续资源配置的核心。

下面给出两台节点通用的编译安装示例,注意替换实际内核路径。若遇到gcc警告可忽略,但链接错误通常意味着头文件缺失。

# 安装依赖
yum -y install kernel-devel gcc make flex perl
# 下载并解压
cd /usr/local/src
wget https://ipipp.com/drbd/8.4.2/drbd-8.4.2.tar.gz
tar zxvf drbd-8.4.2.tar.gz
cd drbd-8.4.2
# 编译内核模块
make KDIR=/usr/src/kernels/2.6.32-431.el6.x86_64
make install
# 编译用户态工具
cd drbd-8.4.2/user
make
make install
# 加载模块
modprobe drbd
lsmod | grep drbd

二、DRBD资源配置与MySQL数据目录规划

DRBD的配置文件分为全局通用配置和资源配置。全局文件/etc/drbd.d/global_common.conf定义协议、磁盘读写参数和同步速率。对于MySQL这类随机小文件写多的负载,建议使用protocol C保证强一致,并将同步速率限制在网卡带宽的百分之七十,避免全量同步时挤占业务网络。

资源文件定义块设备、节点IP和低层磁盘。我们假设两台机各有一块空闲盘/dev/sdb,规划为资源r0,设备名为/dev/drbd0,文件系统格式化为ext4后挂载到/data/mysql,再将MySQL的datadir指向该目录。资源文件中必须明确node-id与地址,且两个节点的配置应完全对称,仅节点名和IP互换。

以下为global_common.conf的精简示例,以及r0.res资源文件内容。注意floating方式可省略显式节点块,但新手建议使用on语句清晰描述。

# /etc/drbd.d/global_common.conf
global {
  usage-count no;
}
common {
  protocol C;
  disk {
    on-io-error detach;
  }
  net {
    cram-hmac-alg sha1;
    shared-secret "mysqlha";
  }
  syncer {
    rate 80M;
  }
}

# /etc/drbd.d/r0.res
resource r0 {
  on node1 {
    device /dev/drbd0;
    disk /dev/sdb;
    address 192.168.0.1:7788;
    meta-disk internal;
  }
  on node2 {
    device /dev/drbd0;
    disk /dev/sdb;
    address 192.168.0.2:7788;
    meta-disk internal;
  }
}

三、初始化设备与MySQL切换验证

配置就绪后,在两节点依次执行drbdadm create-md r0初始化元数据,然后drbdadm up r0启动资源。此时两节点都处于Secondary状态,需要手动将node1提升为Primary:drbdadm primary --force r0。首次提升会触发全量同步,可通过cat /proc/drbd观察进度,状态从SyncSource变为Connected即完成。

在Primary节点对/dev/drbd0做文件系统并挂载。接着停止MySQL服务,将原有/var/lib/mysql数据拷贝至/data/mysql,修改my.cnf中datadir与socket路径,启动MySQL验证读写正常。此时node2虽为Secondary无法挂载,但磁盘已实时镜像,一旦node1宕机,在node2执行drbdadm primary r0并挂载即可拉起MySQL,实现故障转移。

以下代码展示初始化与挂载的关键步骤,以及MySQL配置调整片段。实际生产中应配合heartbeat或corosync自动切换,但手动流程有助于理解DRBD底层行为。

# 两节点均执行
drbdadm create-md r0
drbdadm up r0
# node1提升并格式化
drbdadm primary --force r0
mkfs.ext4 /dev/drbd0
mkdir -p /data/mysql
mount /dev/drbd0 /data/mysql
# 迁移数据
service mysqld stop
cp -a /var/lib/mysql/* /data/mysql/
# 修改 /etc/my.cnf
# datadir=/data/mysql
# socket=/data/mysql/mysql.sock
service mysqld start

通过上述步骤,CentOS6.5_x64上的MySQL便拥有了基于DRBD8.4.2的块级镜像能力。日常运维中需监控/proc/drbd状态,避免出现Split-Brain。若发生脑裂,应在次要节点使用drbdadm disconnectdrbdadm invalidate重新同步,而非强行双写,否则MySQL数据文件将损坏。

MySQLDRBD8.4.2CentOS6.5_x64修改时间:2026-08-14 09:09:33

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。