DRDB 和 NFS:是否有任何有效的方法可以使 NFS 的故障转移透明

DRDB 和 NFS:是否有任何有效的方法可以使 NFS 的故障转移透明

我们正在使用两台服务器实现 DRDB + heartbeat,以拥有具有故障转移功能的文件系统。这些服务器为其他服务器公开 NFS 服务

目前 DRDB 运行良好,但当我们测试从一台服务器切换到另一台服务器时,其他服务器上通过 NFS 挂载的文件夹就挂起了。

有没有透明的方法来实现这种故障转移?让它对 NFS 透明,还是我们需要重新挂载那些 nfs 挂载的文件夹?

答案1

这里的问题是,您使用 DRBD 制作了一个冗余存储阵列,但您有两个不相连的 NFS 守护进程运行相同的共享数据。NFS 是有状态的 - 只要您无法很好地传输状态,故障转移就会出现严重问题。Solaris HA 设置确实有负责处理此问题的守护进程对于 Linux 安装,您必须确保您的 NFS 状态目录(可配置,通常为 /var/lib/nfs)位于两个服务器的共享磁盘上。

坚持使用 Heartbeat 或 Corosync 进行故障检测和故障转移 - 当配置了法定人数。其他故障转移技术可能过于专注于提供虚拟 IP(例如 VRRP),无法满足您的需求。请参阅http://linux-ha.org了解有关集群设置的更多详细信息和其他组件。

答案2

我建议你读一下有关高可用性 NFS 的 HOWTO使用 NFSv4、DRBD 和 Pacemaker。它包含详细的说明和解释,以及有关如何提供高可用性 NFS 服务的重要细节。我们现在已经将一些这样的 HA-NFS 设置投入生产,它们运行良好。

这种 HA 设置的一部分是放弃旧的 Heartbeat 系统(使用/etc/ha.d/haresources和 的系统/etc/ha.d/ha.cf),并使用很多功能更强大、更强大的 Pacemaker 堆栈。它与旧版 Heartbeat 有一点不同,学习难度也比较大,但最终意味着您拥有一个名副其实的集群。

HOWTO 由 Linbit 编写,该公司创建并维护了 DRBD,为整个 Linux HA 堆栈做出了巨大贡献。遗憾的是,需要在其网站上(免费)注册才能访问技术指南,但这些指南写得很好,非常有用。

答案3

我能想到的使其透明的最佳方法是使用虚拟 IP 和虚拟 MAC 地址,以及知道这种转换可能发生/在出现免费 ARP 时做正确事情的交换机(因此您不必等待 ARP 缓存清除,这可能需要很长时间才能使您的 NFS 挂载过时)。

就像是鲤鱼可能是实现 IP 故障转移的方法 - 所有 *BSD 上都提供此功能,据我所知,Linux 内核中也有此功能。显然,需要进行一些测试以确保它按您希望的方式工作(听起来您目前正在进行测试,因此您处于有利位置)。

答案4

确保文件系统位于相同的主/次设备号上(如果两侧使用相同的 drbd 设备,则应该如此)并为 NFS 服务使用虚拟 IP。

在 Heartbeat 中,使用以下资源顺序:

  1. DRBD 设备
  2. 本地挂载点
  3. 所有与 nfs 相关的服务均按正确顺序排列
  4. 上一个:VIP

将 VIP 放在最后很重要 - 否则您的客户端将丢失他们的 NFS 连接而不是不断地重试。

顺便说一句:将 IP 作为资源放入心跳中也会在故障转移时执行免费 arp - 因此您不必关心这一点(通常)。

相关内容