没有集群或虚拟机的 Linux 服务器的硬件故障转移?

没有集群或虚拟机的 Linux 服务器的硬件故障转移?

关于如何在不实施集群或虚拟机的情况下为 SLES11 安装提供完整的故障转移,有什么想法吗?

正在运行的应用程序不具备(也永远不会具备)集群感知能力。没有传入的客户端连接 - 这不是 Web 服务器。此服务器转换数据并在磁盘上生成输出,同时以高速(通过 1GbE、10GbE 和/或 infiniband)驱动生产打印机。

目前的解决方案是两台相同的服务器,其中一台连接到外部存储(并从外部存储启动)。如果主服务器发生故障,外部存储将与故障服务器断开连接,并连接到第二台服务器,然后从该存储启动。工作正常,但它不是自动的,并且如果两台服务器都连接并启动,操作系统将被破坏。

一直在寻找一种解决方案,允许两台服务器永久连接到外部存储,并采用某种自动机制,在发生故障时切断故障服务器的电源,并恢复备用服务器的电源。这种“自动机制”不能涉及第三台服务器 - 这只会增加成本和复杂性。

集群无法工作,因为许可不允许这些应用程序“移动”,而且无论别人怎么说,集群并不简单,它们需要专门的管理员来监控 - 您不能在客户位置安装一个然后就走开(尝试在 200 个客户位置支持这一点)。VM 无法工作,因为需要专用网卡才能与输出设备通信(因此没有 vmotion),而且 15-25% 的性能损失根本行不通。

服务器是 HP Proliant - 似乎显而易见的解决方案是 HP 在 ILO 中实现此功能,让 BIOS 监视服务器故障(BIOS 已经可以执行此操作并设置为自动重新启动服务器),然后通过 ILO 控制两个服务器的电源以进行故障转移。即,正在运行的服务器检测到故障,ilo 唤醒故障转移服务器,然后 ilo 切断故障服务器的电源 - 如果 Ilo 无法切断故障服务器的电源,它将关闭故障转移。ILO 目前无法做到这一点。甚至可能没有办法保证这会起作用。

另一种可能性(已实施)需要 2 个正在运行的许可服务器,其中包含所有输出数据的镜像 - 如果第 1 个服务器出现故障,第 2 个服务器可以完成输出工作。但这需要 2 个安装,许可成本翻倍(很多很多 1000 美元)。还有其他方法吗?请记住,我正在寻找一种无需使用任何额外服务器即可做到这一点的方法。

我测试了 NEC 容错服务器(这是 Stratus 和 Winchester 提供的硬件),但它们不支持本机 SLES(您必须使用 vsphere),并且它们仅在其内部 raid 10 磁盘上保持一致性 - 其中每个服务器的驱动器不足。我当前的解决方案使用外部存储 - HP D2700(最多 8 个),每个存储最多有 25 个 2.5 英寸 sas 驱动器,通过电缆(一次只能一个)连接到每个服务器中的智能阵列卡 - 因为我需要 400-500 MB/s 的连续读取速度 - 这就是为什么此配置中没有 san 或 nas。

编辑:
让我尝试简化我的问题。

是否可以提供将单个 SLES11 服务器(所有数据、所有应用程序、所有服务)自动故障转移到另一台相同的服务器(冷备用)的功能,并且只需安装和维护一个操作系统。这样做的目的是保持专用硬件提供的性能,但要为硬件(内存、CPU、p/s 等)发生故障时制定计划。

如果没有集群、vm、drbd、linux-ha 等,这是否可行?目前可以使用直接连接的外部存储(双端口、RAID10)来实现,但必须有人关闭故障服务器并将电缆移至故障转移服务器,然后将其打开。任何人(未经培训)都可以支持这一点。但这不是自动的。

答案1

满足您需求的最简单的商业解决方案是 SIOS Lifekeeper。请参阅:http://us.sios.com

我曾在应用程序不支持集群但需要一定程度的弹性的情况下使用过它。

SIOS 将处理您的 VIP、应用程序启动/故障转移/关闭、存储(网络 RAID 或共享)以及您可能需要的任何自定义脚本。易于使用。每台服务器大约 2000 美元。

答案2

首先,我看不出操作系统为什么要被“销毁”。

我认为您面临的唯一问题是服务器上有不同的 MAC 地址。

如果它们是同一类型,具有相同的 PCIe 插槽分配和网络硬件,那么有一个简单的解决方案:

将 NIC 名称绑定udev从基于 MAC 更改为基于 PCIe 插槽。

在 sles 11 上更改此设置的位置是:/etc/udev/rules.d/70-persistent-net.rules

示例 - 假设ethtool -i eth0回报0000:04:00.0作为 PCIe 插槽位置:

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", KERNELS=="0000:04:00.0", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

您无需更改任何内容/etc/sysconfig/network/ifcfg-*为了这。

相关内容