我们的系统由不同的组件/服务组成,例如数据库、Web 服务器、文件共享、一些自编程守护进程等。现在,我们需要使所有组件/服务冗余。由于我们想从较小的系统开始,因此我们不会为所有服务设置单独的服务器。例如,我们在同一台机器上安装了 Web 服务器 (tomcat) 和文件服务器 (nfs 共享)。我们目前正尝试使用 heartbeat (www.linux-ha.org) 来实现这一点。我不清楚我们是否可以为不同的服务分配不同的虚拟 IP 地址。例如,如果 tomcat 服务器崩溃并且无法再次启动,我们需要将所有流量重定向到备份机器。如果只有 tomcat 出现问题,则无需将 nfs 共享也切换到备份服务器。
如果我没看错的话,heatbeat 只能切换整个服务器节点,而不能针对每个服务进行切换(为每个服务分配不同的虚拟 IP 地址)。它也无法检测服务(在我们的例子中是 tomcat 或 nfs 共享)是否可用。有没有办法使用 heatbeat 来实现我们所需要的功能(也许结合其他工具),或者我们需要采用其他方法?欢迎提出任何建议。
更新:我正在考虑的另一种方法是为每个进程分配一个虚拟 IP。然后使用 nagios 监控所有进程。如果某个进程发生故障,Nagios 可以删除分配给该服务的虚拟 IP,并将其分配给备份服务器。这可以通过一些 shell 脚本来完成。这是一个好主意吗?
答案1
我认为 Heartbeat 在设计时就考虑到了完整的服务器节点故障转移,因此即使你能以某种方式让它工作,我认为也存在风险。
也就是说,您当然可以在 haresources.config 中为每个服务分配一个不同的虚拟 IP 地址,甚至多个,如下所示:
yourservernode IPaddr::10.0.0.1 IPaddr::10.0.0.2 Filesystem::/dev/yourdisk::/mountpoint/fstype::mountoptions nameforyourtomcatservicename
yourservernode IPaddr::10.0.0.3 Filesystem::/dev/yourdisk::/mountpoint/fstype::mountoptions nameforyournfsservice
... 但我担心如果某些服务出现yourservernode
故障,所有内容都会转移到您在 ha.cf 中列出的其他节点。
此外,如果节点数量超过 2 个,CRM 的情况会变得更加复杂。您只有 2 个节点还是更多?
(由于我有使用 Heartbeat v2.1.x 的经验,所以我的信息可能已经过时了。)
您是否可以在 Tomcat 前面运行负载均衡器并保持 Tomcat 在所有节点上运行?然后,负载均衡器可以检测 Tomcat 是否在某个节点崩溃,并停止向该节点转发流量,直到它恢复正常运行。