双活数据中心搭建防止数据丢失:双活数据中心搭建全流程
双活数据中心搭建全流程:零基础也能防止数据丢失
数据丢失对企业来说是灾难。
双活数据中心通过让两个站点同时对外服务并实时同步数据,即使一个站点完全故障,另一个也能立刻接管,从架构层面彻底消除单点故障。
本文从零开始,带你把这套方案落地。
为什么双活数据中心能防数据丢失?
传统主备模式中,备机平时不干活,切换时有延迟,容易丢数据。
双活(Active-Active)的两个站点都在运行,数据通过同步复制协议实时写入两边。任何一个站点的数据损坏或硬件故障,另一个站点仍然持有完整的最新数据,业务不中断,数据不丢失。
搭建前必须准备的条件
硬件层面:
- 两台性能相近的服务器(建议同品牌同配置),每台至少两块网卡,一块用于业务,一块用于心跳同步。
- 共享存储或各自本地存储(推荐使用分布式存储软件如 Ceph、GlusterFS 配合同步机制)。
- 网络最低要求:两个站点间专线或 VPN,延迟 ≤ 10ms,带宽 ≥ 10Gbps(取决于写入量)。
软件层面:
- 操作系统(本文以 CentOS 7.9 为例),确保内核版本 ≥ 3.10。
- 同步工具:推荐 DRBD(块设备复制)+ Pacemaker(集群资源管理器)。
- 数据库或应用层双活兼容性确认(例如 MySQL 需用 Group Replication 或 Galera)。
核心搭建步骤:从零到双活
第一步:配置两个站点的操作系统
在两台机器上分别执行基础配置(以 SiteA 和 SiteB 为例):
# 关闭防火墙和 SELinux(生产环境按需放行端口)
systemctl stop firewalld && systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
配置主机名和 hosts 文件:
# SiteA
hostnamectl set-hostname sitea.example.com
# SiteB
hostnamectl set-hostname siteb.example.com
# 两机都写入 hosts
echo "192.168.1.10 sitea.example.com" >> /etc/hosts
echo "192.168.1.20 siteb.example.com" >> /etc/hosts
第二步:安装并配置 DRBD 数据同步
在两台机器上都安装 DRBD:
yum install -y epel-release
yum install -y drbd90-utils kmod-drbd90
加载内核模块:
modprobe drbd
echo "drbd" > /etc/modules-load.d/drbd.conf
创建 DRBD 配置文件 /etc/drbd.d/disk0.res:
resource disk0 {
protocol C; # 同步模式,保证数据写入两边才返回
on sitea.example.com {
device /dev/drbd0;
disk /dev/sdb1; # 假设 /dev/sdb1 是数据盘
address 192.168.1.10:7788;
}
on siteb.example.com {
device /dev/drbd0;
disk /dev/sdb1;
address 192.168.1.20:7788;
}
}
初始化 DRBD 资源并启用:
# 在两台机器上都执行
drbdadm create-md disk0
drbdadm up disk0
设置 SiteA 为主节点(首次同步):
# 只在 SiteA 执行
drbdadm primary --force disk0
验证同步状态:
cat /proc/drbd
看到 cs:Connected 和 ro:Primary/Secondary 表示连接正常。
第三步:用 Pacemaker 管理自动切换
安装 Pacemaker 和 Corosync:
yum install -y pacemaker corosync pcs
配置 Corosync(以单播模式为例,编辑 /etc/corosync/corosync.conf):
totem {
version: 2
cluster_name: dual-cluster
transport: udpu
interface {
ringnumber: 0
bindnetaddr: 192.168.1.0
mcastaddr: 226.94.1.1
mcastport: 5405
}
}
nodelist {
node {
nodeid: 1
ring0_addr: 192.168.1.10
name: sitea.example.com
}
node {
nodeid: 2
ring0_addr: 192.168.1.20
name: siteb.example.com
}
}
在两台机器上启动并设置开机自启:
systemctl start pcsd corosync pacemaker
systemctl enable pcsd corosync pacemaker
设置集群用户密码并认证:
# 设置 hacluster 用户密码(两边都执行)
passwd hacluster
# 在 SiteA 上认证
echo "123456" | pcs cluster auth sitea.example.com siteb.example.com -u hacluster
# 启动集群
echo "123456" | pcs cluster setup --name dual-cluster --start sitea.example.com siteb.example.com
创建 DRBD 资源并绑定到集群:
pcs resource create drbd_data ocf:linbit:drbd drbd_resource=disk0 --group storage
pcs resource create fs_data Filesystem device="/dev/drbd0" directory="/mnt/dual_active" fstype="xfs" --group storage
第四步:配置文件系统并挂载
在主节点格式化(只执行一次):
mkfs.xfs /dev/drbd0
在两台机器上都创建挂载点:
mkdir -p /mnt/dual_active
Pacemaker 会自动挂载测试。
如果需要应用层双写,需配合应用自己的集群(如 MySQL Group Replication),这里略。
避坑指南:常见问题与解决办法
现象1:DRBD 同步卡在 SyncSource 或 WFConnection。
原因:网络防火墙或 IP 未放通 7788 端口。解决办法:在两台机器上执行 iptables -I INPUT -p tcp --dport 7788 -j ACCEPT 并保存。
现象2:Pacemaker 资源无法启动,报 Failed to start: Input/output error。
原因:DRBD 设备未升级为主。手动执行 drbdadm primary disk0 后重试 pcs resource cleanup。
现象3:双活但数据写入时,其中一台写失败。
检查磁盘空间和文件系统权限,确保 /dev/sdb1 在两台机器上容量一致。
如何验证双活防丢数据效果?
基础验证:在两台机器上分别查看 DRBD 状态:
cat /proc/drbd
输出中 ro: Primary/Primary 才是真正的双活。
注意:DRBD 标准版不支持 Primary/Primary,需要使用 DRBD9 或配合 OCFS2/GFS2 分布式文件系统。
如果仅用此方案,实际是主备模式,但 Pacemaker 可自动故障切换,数据不丢(最后写入的数据会被同步)。
破坏性测试:
- 在 /mnt/dual_active 下创建一个测试文件
echo "test" > /mnt/dual_active/test.txt。 - 直接拔掉 SiteA 电源。
- 登录 SiteB,检查
cat /mnt/dual_active/test.txt内容是否完整。 - 同时检查应用是否自动切换到 SiteB(需应用层配合)。
监控建议:
- 部署 Nagios 或 Zabbix 监控 DRBD 连接状态和磁盘 IO 延迟。
- 每天自动执行
drbdadm verify disk0检查数据一致性。
完成以上步骤后,你的业务就拥有了一个能自动容灾、从底层保障数据不丢失的双活数据中心基础架构。
后续可根据实际业务调整资源参数,如内存、缓存大小等。
遇到异常时先看服务日志(/var/log/messages),再对照本文的避坑清单排查。