我已经构建了一个 NFS 集群,以 OCFS2 作为支持文件系统。
这种方法运行得很好,但当一个节点被彻底重启/关闭时,它会引发一个隔离操作,因为在卸载 OCFS2 文件系统之前网络就被切断了,从而通知另一个节点它正在离开集群。
网络配置为 LACP 绑定,具有两个物理适配器和两个提供 IP 连接的 VLAN 接口。所有这些都已在 nmtui 中配置,可能对位于 /etc/sysconfig/network-scripts 中的配置文件进行了一些小调整。
无论我添加什么依赖项(之前/之后/需要等),包括 network-online.target 和其他各种依赖项,或者添加我自己的 systemd 服务和脚本来处理卸载,我都可以让服务器在网络断开之前通过 systemd 卸载 _netdev OCFS2 文件系统。
我已经将 debug.sh 添加到 /usr/lib/systemd/system-shutdown 来记录一些详细信息,这里是启动关机序列的地方,“ocfs 卸载设备”是卸载 OCFS2 的点。
[ 309.286479] 绑定:bond0:警告:ens2f1 的永久 HWaddr - 0c:c4:7a:bb:93:3f - 仍在由 bond0 使用。设置 ens2f1 的 HWaddr 到不同的地址以避免冲突。 [309.286484]bonding:bond0:释放活动接口 ens2f1 [ 309.288270] ixgbe 0000:02:00.1:删除了 ens2f1 上的 PHC [309.806098]pps pps0:新的PPS源ptp0 [309.806100] ixgbe 0000:02:00.1:在 ens2f1 上注册的 PHC 设备 [310.028112] IPv6:ADDRCONF(NETDEV_UP):ens2f1:链接未准备好 [310.028114] 8021q:将 VLAN 0 添加到设备 ens2f1 上的硬件过滤器 [310.028750]bonding:bond0:删除活动聚合器 [310.028754]bonding:bond0:释放活动接口 ens2f0 [ 310.028755]bonding:bond0:警告:当 bond0 仍有 VLAN 时清除其硬件地址。 [ 310.028756]bonding:bond0: 重新添加从属设备时,请确保绑定的硬件地址与其 VLAN 匹配。 [310.028773] 设备 bond0 进入混杂模式 [310.028818]设备 ens2f0 进入混杂模式 [310.030895] ixgbe 0000:02:00.0:已删除 ens2f0 上的 PHC [310.328057] nfsd:最后一个服务器已退出,正在刷新导出缓存 [310.549842]pps pps1:新的 PPS 源 ptp1 [310.549844] ixgbe 0000:02:00.0:在 ens2f0 上注册的 PHC 设备 [310.772136] IPv6:ADDRCONF(NETDEV_UP):ens2f0:链接未准备好 [310.772137] 8021q:将 VLAN 0 添加到设备 ens2f0 上的硬件过滤器 [310.773358] IPv6:ADDRCONF(NETDEV_UP):bond0.3xxx:链接未准备好 [310.774187] IPv6:ADDRCONF(NETDEV_UP):bond0.31xx:链接尚未准备好 [310.775060] IPv6:ADDRCONF(NETDEV_UP):bond0:链接尚未准备好 [310.775560] IPv6:ADDRCONF(NETDEV_UP):bond0.3xxx:链接未准备好 [310.779437] IPv6:ADDRCONF(NETDEV_UP):bond0.31xx:链接尚未准备好 [310.832053] IPv6:ADDRCONF(NETDEV_UP):eno2:链接尚未准备好 [310.883931] IPv6:ADDRCONF(NETDEV_UP):eno1:链接未准备好 [312.995508] o2dlm:离开域 78D2C50072B84C8899E6CA71D23E24CC [313.010803] ocfs2: 卸载 (节点 1) 上的设备 (252,3) [313.022493] o2dlm:离开域 4EBC5792914B4DC0B5C548A94924F48A [313.039052] ocfs2: 卸载 (节点 1) 上的设备 (252,5) [314.108160] o2dlm:离开域 0B217FA1ACA5452397F9DA8A8B792DA0 [314.122868] ocfs2:卸载(节点 1)上的设备(252,4) [ 314.231817] ixgbe 0000:02:00.0:已删除 ens2f0 上的 PHC [ 314.893756] ixgbe 0000:02:00.1:删除了 ens2f1 上的 PHC [315.709225]audit_printk_skb: 321 个回调被抑制 [315.709227] 类型=1305 审计(1476683800.733:156):audit_pid=0 旧=1053 auid=4294967295 ses=4294967295 res=1 [315.718254] 类型 = 1130 审核(1476683800.742:157):pid = 1 uid = 0 auid = 4294967295 ses = 4294967295 msg ='unit = auditd comm =“systemd”exe =“/usr/lib/systemd/systemd”主机名 =?addr =?终端 =?res =成功' [315.718271] 类型 = 1131 审核(1476683800.742:158):pid = 1 uid = 0 auid = 4294967295 ses = 4294967295 msg ='unit = auditd comm =“systemd”exe =“/usr/lib/systemd/systemd”主机名 =?addr =?终端 =?res =成功' [315.726152] 类型 = 1130 审核(1476683800.750:159):pid = 1 uid = 0 auid = 4294967295 ses = 4294967295 msg ='unit = systemd-tmpfiles-setup comm =“systemd”exe =“/usr/lib/systemd/systemd”主机名 =?addr =?终端 =?res =成功' [315.726161] 类型 = 1131 审核(1476683800.750:160):pid = 1 uid = 0 auid = 4294967295 ses = 4294967295 msg ='unit = systemd-tmpfiles-setup comm =“systemd”exe =“/usr/lib/systemd/systemd”主机名 =?addr =?终端 =?res =成功' [315.734233] 类型 = 1130 审计(1476683800.758:161):pid = 1 uid = 0 auid = 4294967295 ses = 4294967295 msg ='unit = rhel-import-state comm =“systemd”exe =“/usr/lib/systemd/systemd”主机名 =?addr =?终端 =?res =成功' [315.734251] 类型 = 1131 审计(1476683800.758:162):pid = 1 uid = 0 auid = 4294967295 ses = 4294967295 msg ='unit = rhel-import-state comm =“systemd”exe =“/usr/lib/systemd/systemd”主机名 =?addr =?终端 =?res =成功' [315.743145] 类型 = 1130 审核(1476683800.767:163):pid = 1 uid = 0 auid = 4294967295 ses = 4294967295 msg ='unit = rhel-readonly comm =“systemd”exe =“/usr/lib/systemd/systemd”主机名 =?addr =?终端 =?res =成功' [315.743153] 类型 = 1131 审核(1476683800.767:164):pid = 1 uid = 0 auid = 4294967295 ses = 4294967295 msg ='unit = rhel-readonly comm =“systemd”exe =“/usr/lib/systemd/systemd”主机名 =?addr =?终端 =?res =成功' [315.782154] 类型 = 1130 审核(1476683800.806:165):pid = 1 uid = 0 auid = 4294967295 ses = 4294967295 msg ='unit = lvm2-monitor comm =“systemd”exe =“/usr/lib/systemd/systemd”主机名 =?addr =?终端 =?res =成功' [ 315.954555] systemd-shutdown[1]: 向剩余进程发送 SIGTERM... [ 315.958696] systemd-journald[720]: 从 PID 1 (systemd-shutdow) 收到 SIGTERM。 [ 315.965900] systemd-shutdown[1]: 向剩余进程发送 SIGKILL... [ 315.981786] systemd-shutdown[1]: 卸载文件系统。 [ 316.002080] systemd-shutdown[1]: 所有文件系统均已卸载。 [ 316.002083] systemd-shutdown[1]: 停用交换。
答案1
造成这种情况的原因是 remote-fs.target 完成得太快,由于 OCFS2 的网络特性,文件系统的正确卸载所花的时间比卸载命令的实际返回时间要稍微长一些。
关闭序列的下一步是关闭网络,这意味着最后一个文件系统始终被视为仍在其他节点上在线,从而导致隔离。
我的解决方法是创建自己的挂载/卸载脚本和 systemd 服务,并在脚本中添加适当的延迟,并依赖于 NetworkManager-wait-online.target。