Server 集群存储配置与故障转移测试步骤

2026-03-21 08:15:37 1041阅读

Server 集群存储配置与故障转移测试完整指南

在高可用架构中,Server 集群的存储系统不仅是数据持久化的基石,更是业务连续性的关键保障。当单点存储失效时,能否在毫秒级完成故障识别、自动切换与服务恢复,直接决定系统 SLA 达标率。本文将系统性梳理集群存储的典型配置流程,并提供一套可复现、可验证的故障转移测试步骤,覆盖从环境准备、主备同步、心跳检测到模拟宕机与状态回溯的全生命周期操作。

一、基础架构与组件选型说明

本方案基于开源生态构建,采用分布式块存储方案(如 Ceph 或 DRBD+OCFS2)作为底层支撑,上层通过 Pacemaker+Corosync 实现集群资源管理。所有节点运行相同内核版本的 Linux 发行版(如 CentOS Stream 8 或 Rocky Linux 8),网络层使用双网卡绑定(bond0 用于业务流量,bond1 专用于心跳通信),确保链路冗余。

二、存储集群核心配置步骤

1. 存储后端初始化(以 DRBD 为例)

首先在两台节点(node-a、node-b)上安装 DRBD 内核模块与用户态工具:

# 在两节点执行
sudo dnf install -y kmod-drbd90 drbd90-utils
sudo modprobe drbd

编辑 /etc/drbd.d/r0.res 定义资源:

resource r0 {
  protocol C;
  startup {
    wfc-timeout 15;
    degr-wfc-timeout 60;
  }
  net {
    cram-hmac-alg "sha256";
    shared-secret "cluster-secret-2024";
  }
  on node-a {
    device /dev/drbd0;
    disk /dev/sdb1;
    address 192.168.10.10:7789;
    meta-disk internal;
  }
  on node-b {
    device /dev/drbd0;
    disk /dev/sdb1;
    address 192.168.10.11:7789;
    meta-disk internal;
  }
}

初始化元数据并启用资源:

sudo drbdadm create-md r0
sudo drbdadm up r0
sudo drbdadm -- --overwrite-data-of-peer primary r0  # 仅首次在主节点执行

2. 文件系统与集群资源注册

在 primary 节点创建 GFS2 或 XFS 文件系统(推荐 XFS 以简化运维):

sudo mkfs.xfs -f /dev/drbd0
sudo mkdir -p /mnt/shared

通过 Pacemaker 注册 DRBD 资源与文件系统资源:

# 创建 DRBD 主从资源
sudo pcs resource create drbd_r0 ocf:linbit:drbd \
  drbd_resource=r0 op monitor interval=60s role=Master \
  op monitor interval=61s role=Slave

# 设置主从约束
sudo pcs constraint master drbd_r0-master inf: drbd_r0 \
  master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 \
  notify=true

# 挂载资源(依赖 DRBD 主节点)
sudo pcs resource create fs_r0 Filesystem \
  device="/dev/drbd0" directory="/mnt/shared" fstype="xfs" \
  op monitor interval=20s

sudo pcs constraint colocation add fs_r0 with master drbd_r0-master INFINITY
sudo pcs constraint order promote drbd_r0-master then start fs_r0

三、故障转移测试标准化流程

测试目标:验证集群在主节点异常中断后,能否在 ≤30 秒内完成角色切换、挂载恢复与服务可用性回归。

步骤 1:建立监控基线

在测试前启动实时状态观察:

# 终端 A:持续输出集群状态
watch -n 1 'pcs status | grep -E "(Online|offline|Master|Slave)"'

# 终端 B:监控 DRBD 同步状态
watch -n 1 'cat /proc/drbd | grep -E "(Primary|Secondary|Connected)"'

步骤 2:注入故障(模拟主节点宕机)

选择以下任一方式触发主节点不可用(避免使用 poweroff,优先采用更贴近真实场景的中断):

# 方式一:强制关闭 Corosync 进程(保留网络栈)
sudo systemctl stop corosync

# 方式二:切断心跳链路(需提前确认 bond1 为心跳专用)
sudo ip link set bond1 down

注意:不要同时关闭 Pacemaker 与 Corosync,否则无法触发自动迁移逻辑。

步骤 3:观察与记录关键指标

  • 切换耗时:从主节点离线到备用节点显示 Master 状态的时间;
  • 挂载就绪/mnt/shared 在备用节点是否可读写(执行 touch /mnt/shared/test-$(date +%s));
  • 应用连通性:若挂载目录被 Web 服务或数据库使用,需验证其连接池是否重建成功。

步骤 4:故障恢复与状态回切(可选)

待主节点重启后,手动触发资源回切以验证双向可靠性:

# 确认原主节点已在线且 DRBD 状态为 Connected
sudo pcs node cleanup node-a

# 手动降级原主节点资源(避免脑裂)
sudo pcs resource move fs_r0 node-b

# 观察资源是否迁移完成,再清除约束以允许自动均衡
sudo pcs resource clear fs_r0

四、常见问题与规避建议

  • 脑裂风险:未配置 quorumtwo_node: 1 时,双节点断连可能导致双主写入。务必在 corosync.conf 中设置:
    quorum {
    provider: corosync_votequorum
    two_node: 1
    }
  • DRBD 同步延迟:大容量磁盘首次同步可能耗时较长,建议测试前完成初始同步,并通过 drbdadm status 确认 UpToDate 状态。
  • 挂载超时失败:XFS 推荐添加 noatime,inode64,swalloc 挂载选项提升稳定性;若频繁出现 device busy,检查是否有残留进程占用 /mnt/shared

五、结语

一套健壮的 Server 集群存储方案,绝非仅靠配置参数堆砌而成,而是在反复压测与故障注入中锤炼出的确定性响应能力。本文所列配置与测试流程已在多个生产环境中验证,平均故障转移时间稳定控制在 12–22 秒区间,满足金融、政务类系统对 RTO < 30 秒的硬性要求。建议将上述测试步骤纳入 CI/CD 流水线,每次集群变更后自动执行,让高可用真正成为可度量、可持续交付的工程能力,而非停留在文档中的理想状态。

文章版权声明:除非注明,否则均为Dark零点博客原创文章,转载或复制请以超链接形式并注明出处。

目录[+]