背景
- vSphere 客户端版本 = 5.1.0
- VMWare ESXi 版本 = 5.1.0
- 服务器操作系统 = RHEL 版本 6.8
- virtualip = 虚拟 IP
- server1 = 服务器 1 的 ip 地址
- server2 = 服务器 2 的 ip 地址
- lvsserver = lvs 路由器的 ip 地址
- IPVSADM 规则
- ipvsadm -A -t 虚拟ip:0 -s rr -p
- ipvsadm -a -t 虚拟IP:0 -r 服务器2:0 -g
- ipvsadm -a -t 虚拟IP:0 -r 服务器1:0 -g
- ipvsadm -A -t 虚拟 IP:2049 -s rr
- ipvsadm -a -t 虚拟IP:2049 -r 服务器1:2049 -g
- ipvsadm -a -t 虚拟IP:2049 -r 服务器2:2049 -g
/etc/exports在两台服务器上(服务器 1、服务器 2)
/vm0 *(rw,sync,no_root_squash)
两台服务器都包含 /vm0 文件夹
实际问题
场景 1:在 server1 上
root@server1 ~# mount -t nfs server2:/vm0 /vm0
root@server1 ~# service nfs restart
尝试使用以下凭据创建 NFS 数据存储
server = virtualip
Folder = /vm0
Datastore name = vm0
结果成功!
场景 2:
//ON SERVER 1
root@server1 ~# umount vm0
//ON SERVER 2
root@server2 ~# mount -t nfs server1:/vm0 /vm0
root@server2 ~# service nfs restart
尝试使用以下凭据创建 NFS 数据存储
服务器 = virtualip 文件夹 = /vmo 数据存储名称 = vm0 结果 失败!
ESXi 服务器上的错误消息
在 ESXi (ESXi_ip) 上对对象“ha-datastoresystem”调用“HostDatastoreSystem.CreateNasDatastore”失败。NFS 挂载 (virtualip):/vm0 失败:挂载请求被 NFS 服务器拒绝。检查导出是否存在以及客户端是否被允许挂载它。
使用 tshark 跟踪的日志
33.916294107 (virtualip) -> (ESXi_ip) MOUNT 100 V3 MNT 回复 (呼入 41) 错误:ERR_ACCESS
答案1
原因:
所有对 EXSi 服务器的 NFS 数据存储请求实际上都仅通过 VIP 发送(每次都是相同的 IP),这导致 ESXi 每次都使用缓存的信息。
解决方案:
对 /etc/exports 文件中的所有条目使用文件系统 ID (FSID)。例如:
/<mount_folder> *(rw,sync,no_root_squash, fsid=1000)