两台NFS服务器做高可用,最落地的做法是DRBD+Keepalived实现块设备镜像与浮动IP自动切换,或者共享存储+Pacemaker做资源接管;核心是数据同步、故障检测和客户端无感重连。
两台NFS服务器高可用方案怎么选:DRBD+Keepalived与共享存储对比
为什么NFS高可用比Web服务更麻烦
NFS不是无状态服务,它涉及文件锁、挂载状态、写入顺序和元数据一致性,Web服务可以多活,NFS两台机器却容易脑裂。
- 客户端挂载的是IP,切换后IP必须漂移。
- 数据必须两边一致,否则切换后文件损坏。
- NFSv4锁状态复杂,切换时容易丢失。
- 备机资源通常闲置,成本需要权衡。
DRBD+Keepalived双机热备
DRBD把两台服务器的本地磁盘做成镜像块设备,主节点写入,数据同步到备节点,Keepalived负责VIP漂移和服务检查。
- 优点:不需要共享存储,硬件成本低,适合中小型企业。
- 缺点:主备模式,备机不能同时读写,切换有短暂中断。
- 适用:预算有限、数据量中等、能接受秒级切换。
共享存储+Keepalived或Pacemaker
两台NFS服务器挂载同一台SAN、NAS或云盘,VIP在节点间漂移,NFS服务主备或双活。
- 优点:数据单副本,不存在同步延迟,切换快。
- 缺点:共享存储本身是单点,成本更高。
- 适用:已有集中存储,或对切换时间要求苛刻。
分布式文件系统不适合两台
GlusterFS、Ceph通常建议至少三节点,两台NFS服务器硬做分布式,反而增加脑裂风险,业内专家指出,两节点场景优先考虑主备架构。
中小型企业两台NFS服务器双机热备配置步骤
环境准备
假设两台Rocky Linux 9,IP如下:
| 主机 | IP | 角色 |
|---|---|---|
| node1 | 168.1.10 | 主 |
| node2 | 168.1.11 | 备 |
| VIP | 168.1.100 | 客户端挂载 |
- 时间同步:
chronyd。 - 主机名解析:
/etc/hosts写入node1、node2。 - 安装软件:
dnf install -y drbd kmod-drbd keepalived nfs-utils。 - 两块磁盘分区大小一致,例如
/dev/sdb1。
配置DRBD
在两台机器创建/etc/drbd.d/r0.res:
resource r0 {
protocol C;
on node1 {
device /dev/drbd0;
disk /dev/sdb1;
address 192.168.1.10:7789;
meta-disk internal;
}
on node2 {
device /dev/drbd0;
disk /dev/sdb1;
address 192.168.1.11:7789;
meta-disk internal;
}
}
依次执行:
drbdadm create-md r0 drbdadm up r0 # 仅在node1执行 drbdadm primary --force r0 mkfs.ext4 /dev/drbd0 mkdir -p /data mount /dev/drbd0 /data
配置NFS服务
在node1编辑/etc/exports:
/data 192.168.1.0/24(rw,sync,no_root_squash,fsid=0)
启动并导出:
systemctl enable --now nfs-server exportfs -ra
备节点暂不挂载DRBD,也不导出NFS。
配置Keepalived
主节点/etc/keepalived/keepalived.conf示例:
vrrp_script chk_nfs { script "/usr/bin/killall -0 nfsd" interval 2 weight -20 } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass nfs_ha } virtual_ipaddress { 192.168.1.100/24 } track_script { chk_nfs } notify_master "/etc/keepalived/nfs_master.sh" notify_backup "/etc/keepalived/nfs_backup.sh" }
备节点把state改为BACKUP,priority改为90,切换脚本要完成:
- 提升DRBD为主:
drbdadm primary r0。 - 挂载
/dev/drbd0到/data。 - 启动NFS:
systemctl start nfs-server。 - 导出共享:
exportfs -ra。 - 降级时反向操作。
客户端挂载
客户端使用VIP挂载:
mount -t nfs 192.168.1.100:/data /mnt -o hard,intr,timeo=600,retrans=2
或者用autofs自动重挂,hard挂载能避免报错退出,但服务不可用时可能卡住。
北京地区两台NFS服务器高可用部署成本大概多少
成本构成
- 服务器:利旧可省,新购两台根据配置,几千到几万元不等。
- DRBD方案:软件免费,主要是实施和测试人力。
- 共享存储:SAN、NAS或云盘单独计费,成本明显更高。
- 北京地区机柜、带宽、IP资源另算。
实施周期
- DRBD+Keepalived:熟练工程师1到2天可完成基础部署。
- Pacemaker+CTDB:涉及集群资源,通常3到5天。
- 切换测试、压力测试、客户端验证至少再留半天到一天
。
两台NFS服务器高可用切换时客户端会断多久
影响切换时间的因素
- Keepalived心跳间隔和检测脚本频率。
- DRBD主备提升速度。
- NFS服务重启和导出时间。
- 客户端挂载参数和重试次数。
多数情况下,切换中断在秒级到十几秒,客户端如果使用hard挂载,会自动重试,表现为短暂卡顿。
减少中断的配置
- 使用NFSv3 over TCP,减少锁状态依赖。
- 设置
timeo=600,retrans=2,给足重试时间。 - 用autofs按需挂载,切换后自动恢复。
- 避免在NFS上跑高并发小文件写入。
两台NFS服务器高可用常见问题解答
两台NFS服务器高可用必须用共享存储吗?
不必,DRBD把本地磁盘镜像成块设备,两台服务器不需要共享存储,代价是主备模式,备机资源不能同时读写,共享存储方案数据单副本,但增加存储单点,适合已有SAN或云盘的场景。
两台NFS服务器高可用能做双活吗?
两台节点直接做NFS双活风险很高,容易脑裂和文件锁冲突,行业共识认为,两节点更适合主备,真要双活,建议至少三节点Ceph或GlusterFS,并配合CTDB管理锁。
两台NFS服务器高可用切换后客户端挂载会掉吗?
会短暂中断,客户端挂载VIP,切换后VIP漂移,NFS服务在新主节点重启,客户端配置hard,intr和autofs可自动恢复,NFSv4锁状态可能丢失,生产环境常用NFSv3,或为NFSv4配置重启恢复目录。
两台NFS服务器高可用,优先选DRBD+Keepalived,预算充足再上共享存储+Pacemaker,把数据同步、VIP漂移和切换脚本测透,比堆砌复杂架构更关键。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/709810.html





