
家庭NAS承载着越来越多的关键服务——从文件共享到智能家居控制,从媒体中心到开发环境。一旦NAS宕机,整个数字生活就会停摆。对于对服务连续性有较高要求的用户,单机NAS的"单点故障"风险是不可接受的。Corosync+Pacemaker是Linux生态中最成熟的开源高可用集群方案,被广泛应用于企业级生产环境。将其引入家庭NAS,可以构建双节点故障自动切换系统,在主节点故障时秒级切换到备节点,实现服务的持续可用。
一、高可用集群架构:Corosync与Pacemaker的分工协作
Corosync和Pacemaker是高可用集群的两大核心组件,各自承担不同的职责。Corosync负责集群成员管理和消息传递——它维护着集群中所有节点的状态信息,通过组播或单播方式在节点之间交换心跳信号。当某个节点的心跳超时,Corosync会将该节点标记为离线,并通知Pacemaker进行故障处理。
Pacemaker是集群的资源管理器。它根据集群状态和配置规则,决定资源(如虚拟IP、SMB共享、NFS导出、Docker容器)应该运行在哪个节点上。当Corosync报告节点故障时,Pacemaker按照预定义的策略将受影响的资源迁移到健康节点上,实现故障切换。
在NAS双节点集群中,还需要DRBD(Distributed Replicated Block Device)来实现存储层面的数据同步。DRBD在两台NAS之间创建一个块设备级别的镜像,主节点上的每次写入都会同步到备节点,确保切换后数据的一致性。DRBD相当于"通过网络实现的RAID-1",是NAS高可用的存储基础。
整体架构可以概括为三层:底层DRBD保证数据一致性,中层Corosync保证节点状态同步,上层Pacemaker保证服务持续运行。三者配合,构成了完整的NAS高可用解决方案。
二、DRBD存储同步与双主模式配置
DRBD的配置需要两台NAS各有一块相同大小的磁盘或分区作为DRBD设备。配置文件/etc/drbd.d/data.res定义了资源名称、两台NAS的IP地址、块设备和元数据位置。初始化DRBD资源后,执行drbdadm primary data --force将主节点提升为Primary角色,然后在DRBD设备上创建文件系统。
DRBD有两种同步模式:Protocol A(异步)仅将写入发送到本地磁盘和TCP发送缓冲区即返回,性能最好但可能丢失最后几秒的数据;Protocol B(半同步)等待数据到达对端内存后返回;Protocol C(同步)等待数据写入对端磁盘后返回,安全性最高。对于NAS场景,推荐使用Protocol C,确保切换后数据的零丢失。
DRBD 9.x支持双主(Dual-Primary)模式,允许两个节点同时以Primary角色挂载同一个DRBD设备。这需要底层文件系统支持集群并发写入(如OCFS2或GFS2)。双主模式的好处是两个节点可以同时提供读写服务,提高资源利用率。但配置复杂度较高,对于家庭NAS场景,主备模式(Active-Passive)更为实用和可靠。
DRBD的同步性能调优主要关注两个参数:max-buffers控制发送缓冲区大小,rsync-rate限制初始同步时的带宽占用。对于1Gbps网络,max-buffers可以设置为8192,rsync-rate设为100M以避免影响正常网络使用。如果两台NAS之间有10Gbps直连链路,可以大幅提高这些参数以加快同步速度。
三、Pacemaker资源编排与故障切换策略
Pacemaker将所有需要高可用保护的服务抽象为"资源"(Resource)。一个NAS集群的典型资源包括:DRBD主角色(控制哪台NAS持有Primary DRBD)、虚拟IP(客户端访问的浮动IP地址)、文件系统挂载(将DRBD设备挂载到指定目录)、SMB/NFS服务(提供文件共享)、Docker容器(运行各种应用服务)。
这些资源之间存在依赖关系,Pacemaker通过"资源组"(Group)和"排序约束"(Ordering Constraint)来管理。例如:必须先将DRBD提升为Primary,然后挂载文件系统,然后启动SMB服务,最后激活虚拟IP——这个顺序不能颠倒。使用pcs constraint order命令定义排序约束,Pacemaker会严格按照约束顺序启动和停止资源。
故障切换的检测和响应速度是高可用的核心指标。Corosync的心跳间隔默认1秒,超时阈值通常设置为3-5次心跳失败(即3-5秒)。对于要求更高响应速度的场景,可以将心跳间隔缩短到500ms,但需要确保网络延迟足够低,避免误判。STONITH(Shoot The Other Node In The Head)机制是防止"脑裂"的关键——当集群无法确定对端节点状态时,通过IPMI或智能PDU强制关闭对端电源,确保同一时刻只有一个节点持有Primary角色。
集群监控是运维的必需环节。Pacemaker自带的pcs status命令可以查看集群和资源的实时状态。更完善的方案是配置Pacemaker的SNMP Trap或邮件通知,当故障切换发生时自动发送告警。结合Grafana+Prometheus的监控栈,可以可视化展示集群状态历史、故障切换频率、资源运行时长等关键指标。
实际部署建议:对于初次搭建NAS高可用集群的用户,建议从最简单的"虚拟IP+DRBD+SMB"组合开始验证,确保基本切换流程正常后再逐步添加NFS、Docker等资源。先在测试环境中充分演练故障场景(断网、断电、进程崩溃),确认切换行为符合预期后再部署到生产环境。高可用不是"配置完就完事"的工作,而是需要持续验证和维护的运维体系。


评论(0)