假设我有 5 台具有相似资源(CPU 速度、RAM 和存储)的物理机器,分别名为 s1、s2、s3、s4 和 s5。
如果我在 s1 上运行了一个进程,但 s1 不知何故出现故障,我该如何在其他 4 台服务器之一上自动运行该进程?这是否需要所有这些服务器之间的共享存储,以便该进程基本上可以在另一台机器上重新启动?
这个问题也稍微相关。如果我有 5 个 IP 地址可用于这 5 台机器,我是否可以将这 5 个 IP 地址分配给服务器块,以便每台机器都可以单独访问每个 IP?因此,如果一个进程在 xxx.xxx.xxx.1 上运行并被访问,但 s1 死机后,它会切换并在 s4 上运行,那么 s4 是否可以先访问该 IP 地址,以便用户只会看到其服务的短暂中断?
答案1
如果我在 s1 上运行一个进程,但是 s1 因某种原因出现故障,我该如何在其他 4 台服务器中的一台上自动运行该进程?
所有主流操作系统都支持集群,只要进程安装在 s2 上即可。有时应用程序可以感知集群。如果不是这种情况,虚拟化可以通过在另一台服务器上启动 VM 来解决问题。
这是否需要在所有这些服务器之间共享存储,以便该过程基本上可以在另一台机器上重新启动?
这取决于具体情况。如果进程本地安装在其他机器上(集群设置中很常见),则只有当它需要共享资源时才会发生这种情况。大多数程序可能都是这种情况。
例如 SQL Server、Exchange - 在某些配置中不需要共享存储,因为每个集群节点都保留数据的副本(因为共享存储也存在问题 - 不是硬件方面的问题,您可以使其冗余,但如果发生故障的机器破坏了您的文件系统,那么.....就没有什么可共享的了;)
如果我有 5 个 IP 地址可用于这 5 台机器,我是否可以将这 5 个 IP 地址分配给服务器块,以便每台机器都可以单独访问每个 IP?因此,如果一个进程在 xxx.xxx.xxx.1 上运行并被访问,但 s1 死机后,它会切换并在 s4 上运行,那么 s4 是否可以先访问该 IP 地址,以便用户只会看到其服务的短暂中断?
任何集群系统都可以做到这一点。对于 Windows,有一个集成的集群系统,允许您将 IP 分配给集群程序 - 然后当程序故障转移时,该 IP 会移动。
遗憾的是,你没有提到你的基础设施。无论如何,你得到了一个通用的答案 - 是时候坐下来开始阅读你的操作系统上可用的任何文档了。
答案2
这将在很大程度上取决于应用程序。只需通过 Linux 虚拟服务器即可轻松完成 IP 切换(http://www.linuxvirtualserver.org/)
您为其分配一个虚拟 IP,它会自动重定向连接。您可以让它建立 TCP 连接,如果服务器已启动,则视为处于活动状态,或者您可以让它对响应进行评估。我们的服务器会检查 html 请求的内容以评估服务器是否已启动。大多数情况下,故障转移都是无缝的。
如果目标应用程序是主-主模式的 MySQL 或实际存储不是唯一的 Web 服务器,那么这是完美的选择。
如果这是用于存储(如文件服务器),并且您没有运行 rsync 或 DFS 等同步进程来保持复制,则可以查看 corosync(http://corosync.github.io/corosync/)