在Linux系统中,NFS是最常用的网络文件系统之一。要让NFS具备高可用性,核心思路是消除单点故障:通过数据复制保证多台存储节点内容一致,并使用集群资源管理器在节点故障时自动切换服务。

一、高可用NFS整体架构
常见方案是采用DRBD做块设备级同步复制,上层用Corosync和Pacemaker组成集群,将NFS服务作为集群资源统一管理。客户端通过虚拟IP挂载,后端节点切换时无感知。
主要组件说明
- DRBD:负责两台机器间磁盘数据实时镜像
- Corosync:提供集群通信与成员管理
- Pacemaker:决策资源在哪个节点运行
- NFS Server:导出共享目录供客户端使用
二、基础环境准备
假设有node1与node2两个节点,系统为Linux,均配备一块专门用于DRBD的数据盘/dev/sdb,并设置相同主机名解析。
安装必要软件
# 在两个节点均执行 yum install -y nfs-utils drbd kmod-drbd corosync pacemaker pcs systemctl enable --now pcsd echo 'hacluster:你的密码' | chpasswd
三、配置DRBD同步
编辑DRBD资源配置文件,定义磁盘与对端地址。下面给出一个最小可用配置示例。
resource nfsdata {
protocol C;
on node1 {
device /dev/drbd0;
disk /dev/sdb;
address 192.168.0.1:7788;
}
on node2 {
device /dev/drbd0;
disk /dev/sdb;
address 192.168.0.2:7788;
}
}
初始化并启动DRBD,在node1上将其设为主节点并格式化。
drbdadm create-md nfsdata systemctl enable --now drbd drbdadm primary --force nfsdata mkfs.xfs /dev/drbd0
四、配置NFS与集群资源
将DRBD挂载到/export/nfs,并配置NFS导出。随后使用pcs命令将DRBD、文件系统、NFS与虚拟IP都加入Pacemaker集群。
# 配置NFS导出 echo '/export/nfs *(rw,sync,no_root_squash)' > /etc/exports mkdir -p /export/nfs # 集群配置 pcs cluster auth node1 node2 -u hacluster -p 你的密码 pcs cluster setup --name nfsha node1 node2 pcs cluster start --all pcs resource create drbd_nfs ocf:linbit:drbd op monitor interval=30s pcs resource master drbd_master drbd_nfs master-max=1 pcs resource create nfs_fs Filesystem device=/dev/drbd0 directory=/export/nfs fstype=xfs pcs resource create nfs_server systemd:nfs-server pcs resource create nfs_vip IPaddr2 ip=192.168.0.100 cidr_netmask=24 pcs constraint colocation add nfs_fs with master drbd_master pcs constraint order promote drbd_master then start nfs_fs
五、客户端挂载验证
客户端只需挂载虚拟IP对应的共享目录,当后端节点宕机时,Pacemaker会把资源切到另一节点,挂载连接可保持连续。
mount -t nfs 192.168.0.100:/export/nfs /mnt
注意事项
- 确保防火墙放行NFS、DRBD及集群通信端口
- 生产环境建议使用专用心跳网络
- 定期演练故障切换以验证可用性
LinuxNFShigh_availability修改时间:2026-07-28 19:00:31