Podman 高可用性与 SafeKit:安装 mirror.safe 模块以实现故障转移
Podman 高可用性快速安装指南
本指南介绍如何使用 SafeKit 为 Podman 设置 mirror 集群,确保自动故障转移和同步复制,而无需共享存储。
如需帮助,您可以使用SafeKit AI 🤖。
1. 概述
- 架构: 采用双节点系统(主/备)。
- 数据保护: 实现实时同步复制,实现零数据丢失(RPO = 0)。
2. 安装
- 软件: 在两台服务器上安装 SafeKit 引擎。
- 模块: 下载预配置的
mirror.safe应用程序模块。
3. 配置
- Web 控制台: 配置包含 Podman 文件的特定文件夹。
- 监控: 开始监控和保护 Podman 应用程序。
SafeKit 高可用性限制
| 限制/要求 | 原因与影响 | 推荐替代方案 |
|---|---|---|
| 复制大小:几 TB | 故障后的重新同步时间(步骤 3): • 1 Gb/s 网络 ≈ 3 小时/TB • 10 Gb/s 网络 ≈ 1 小时/TB(取决于磁盘写入性能) | • 使用外部共享存储(更昂贵,更复杂)。 |
| 文件数量:< 1,000,000 个文件 | • 故障后的重新同步时间性能(步骤 3)。 • 比较两个节点之间每个文件所需的时间。 | • 将要复制的许多文件放入虚拟硬盘/虚拟机中。 • 在这种情况下,只有代表虚拟硬盘/虚拟机的那些文件会被复制和重新同步。 |
| 故障转移容量:≤ 32 台虚拟机 | • 每个虚拟机都在独立的 mirror 模块中运行。 • 同一集群中最多可运行 32 个 mirror 模块。 | • 使用外部共享存储和另一个虚拟机集群解决方案(更昂贵,更复杂)。 |
| 网络架构:远程站点之间的局域网/虚拟局域网 | • 虚拟 IP 地址在同一子网中的 2 个节点之间自动故障转移。 • 良好的带宽,用于重新同步(步骤 3)。 • 同步复制的低延迟:通常 < 5 毫秒 RTT;应根据应用程序的写入速率验证较高值。 | • 如果两个节点位于不同的子网中(云中常见),请使用其他重新路由选项:负载均衡器、云提供商 CLI、BGP 或 DNS 重定向。 • 对于高延迟网络,请使用具有异步复制的备份解决方案。 |
SafeKit/Podman 解决方案概述
解决方案在此处介绍:💡 SafeKit:Podman 高可用性和实时数据复制软件。
在 Linux 上安装 SafeKit/Podman 解决方案 (mirror.safe)
先决条件
- 您需要在 SafeKit 中安装您想要重新启动的 Podman 应用程序,该应用程序安装在 2 个节点(虚拟机或物理服务器)上。
在 Linux 上安装软件包
- 在 2 个 Linux 节点上安装免费版 SafeKit。注意:免费试用版包含所有 SafeKit 功能。试用期结束后,您无需卸载软件包即可激活永久许可证密钥。
- 下载 safekit_xx.bin 包后,运行该包以提取 rpm 和 safekitinstall 脚本,然后运行 safekitinstall 脚本
- 回答 “是” 以启用防火墙自动配置
- 为 Web 控制台和默认用户 admin 设置密码。在所有节点上设置相同的密码。
使用简单容器镜像的示例
在此示例中,我们将展示 SafeKit 如何管理 nginx(Web 服务器)容器,即:复制容器中访问的目录,并在发生故障时在另一个节点上重新启动容器。
先决条件
在两个节点上创建一个复制目录
创建一个目录 /replicated_dir_path,该目录将由 SafeKit 复制,并包含由 nginx 提供的 html 页面在两个节点上,用一个初始 HTML 文件填充此目录
cp index.html /replicated_dir_path在两个节点上创建容器
在两个节点上创建一个 nginx 容器,将 /replicated_dir_path 目录绑定到 /usr/share/nginx/html:podman container create --name mynginx -v /replicated_dir_path:/usr/share/nginx/html -p 9011:80 nginx
SafeKit 配置
- 转到分步配置部分
- 创建并配置 mirror.safe 模块
- 设置一个虚拟 IP 地址,以便在发生故障时进行切换
- 将 /replicated_dir_path 设置为复制目录
- 分别在 start_prim 和 stop_prim 脚本中放入:podman start mynginx 和 podman stop mynginx
注意:如果启用了 SE Linux 您可能需要使用“podman start –security-opt label=disable mynginx”命令。 - 部署并启动 SafeKit mirror 模块
测试
测试对 nginx 的访问,地址为 http://vitual-ip:9011/index.html
测试复制:
在 SafeKit PRIM 状态的节点上,将其他一些 HTML 文件添加到复制目录中:cp page.html /replicated_dir_path停止处于 SafeKit PRIM 状态的节点上的 mirror 模块
测试容器是否已在辅助节点上重新启动
测试对 http://vitual-ip:9011/index.html 和 http://vitual-ip:9011/page.html 的访问权限
SafeKit/Podman 解决方案的分步配置
先决条件
- Podman 程序安装在 2 个节点上。
- 复制数据的总量限制在几 TB 以内,超出此范围,重新同步所需的时间将变得非常长。
- 节点之间的最小互连速度为 1Gb/s(建议使用 10Gb/s 以实现更快的重新同步)。
- IP 故障转移要求两个节点位于同一 LAN 或扩展 LAN (L2) 上 — 不支持路由 L3 网络(🛠️ 云负载均衡器除外)。
1. 启动 SafeKit 控制台
- 在某个集群节点上,通过连接到
http://localhost:9010在浏览器中启动 Web 控制台。 - 输入用户名
admin和安装过程中定义的密码。
您也可以在集群外部工作站的浏览器中运行控制台。
⚠️ SafeKit 的配置通过单个浏览器在两个节点上完成。
ℹ️ 要保护 Web 控制台,请参阅用户指南中的 🛠️ 11. 保护 SafeKit Web 服务。

2. 配置节点地址
- 输入节点 IP 地址,按
Tab key检查连接性并填写节点名称。如果 node1 或 node2 为红色,请检查浏览器与这两个节点的连接性,并检查这两个节点的防火墙以进行 🛠️ 故障排除。 - 然后,单击
Save and apply以保存配置。 - 检查两个节点上的
Success✅ 消息。 - 如果某个节点上发生配置
Failure❌,请打开该节点的▼手风琴,然后查看消息。请注意,您可以使用 SafeKit AI 🤖 寻求帮助。
ℹ️ 如果您愿意,可以添加新的 LAN and nodes(首先 ➕),以创建第二个心跳和专用复制网络。
ℹ️ 如果您单击 Advanced configuration,则会显示 cluster.xml 文件。此文件由控制台自动填充并部署到节点上。

3. 选择模块
- 在
New module中,单击mirror.safe”模块。
ℹ️ 在顶部的蓝色横幅中,🛜 node1 代表控制台连接节点。此节点在需要时将请求中继到 node2。
ℹ️ 如果您在安装期间将模块放置在连接节点(node1)上的 Application_Modules/generic/ 目录中,则控制台会在该目录中搜索 xxx.safe

4. 配置模块
- 在
Module startup at boot中,选择在启动时自动启动模块,无需延迟。 - 在
Macros/SERVICES中,按启动顺序输入应用程序的服务名称,并用逗号分隔。有关Milestone XProtect 服务的直观示例,请参阅此屏幕截图 🖼️。 - 在
Heartbeat networks中,您应该有一个用于进行复制的单一心跳网络。如果您在步骤 2 中添加了专用 LAN,那么您可以在专用 LAN 上配置两个带有复制流的心跳。 - 在
Virtual IP addresses中,输入虚拟 IP 地址。虚拟 IP 地址是与两个节点的 IP 地址位于同一 IP 网络(同一子网)中的标准 IP 地址。
必须使用虚拟 IP 地址(或与虚拟 IP 地址关联的 DNS 名称)配置应用程序客户端。
发生故障时,虚拟 IP 地址会自动切换。 - 在
Replicated directories中,设置要复制的目录路径。检查它们是否存在于两个节点上并包含应用程序数据。
数据和日志复制对于数据库至关重要。
您可以根据需要创建其他复制目录。
请参阅此屏幕截图,了解Milestone XProtect SQL 复制的可视化示例 🖼️。 - 在
Checkers中,您可以根据需要配置检查器,例如进程监控、自定义检查器、TCP、ping 或裂脑检查器。
例如,如果进程名称显示在Monitored processes/services中,则在发生故障时,它将通过重启操作进行监控。配置错误的进程名称将导致模块在启动后立即停止。
ℹ️ 如果您单击 Advanced configuration,则会显示 userconfig.xml 文件。此文件由控制台自动填充,并通过重启脚本部署到节点上。
ℹ️ 在云部署中,您无需在 SafeKit 中配置虚拟 IP 地址。虚拟 IP 由 🛠️ 云负载均衡器管理。
ℹ️ 应用 SafeKit 配置时,Windows 服务中的服务 startup type 会自动设置为 Manual。这可确保服务在系统启动时不会自动启动,而是在模块本身启动时才启动(Linux 上也适用)。

5. 编辑脚本(可选)
- 此步骤是可选的,在大多数情况下可以跳过,因为重启脚本已预先配置为重启上一步中定义的服务。
- 因此,请直接点击
Next step。 start_prim.ps1按照SERVICES列表中指定的顺序启动所有服务,而stop_prim.ps1按照相反的顺序停止所有服务。- 此外,
start_prim.ps1会检查每个服务的启动情况,如果任何服务未能正确启动,则会停止该模块。

6. 通信加密(可选)
- 保持节点间通信的加密。

7. 保存并应用
- 在两个节点上
Save and apply配置和脚本。

8. 验证配置是否成功
- 检查两个节点上的
Success✅ 消息,然后单击Monitor modules。 - 如果某个节点上发生配置
Failure❌,请打开该节点的▼手风琴,然后查看消息。请注意,您可以使用 SafeKit AI 🤖 寻求帮助。
⚠️ 在 Linux 上,如果复制的目录是挂载点,您可能会在此步骤中收到错误。🛠️ 请参阅 SK-0030 来解决此问题。

9. 使用最新数据启动节点
- 如果节点 1 拥有最新的复制目录,请选择它,然后⋯
Force start▶As primary。
当节点 2 启动时,所有数据将从节点 1 复制到节点 2。
⚠️ 如果您做出错误的选择,则有可能在两个节点上同步过时的数据。
⚠️ 还假定 Podman 程序在节点 1 上已停止,以便 SafeKit 安装复制机制,然后在 start_prim 脚本中启动应用程序。
⚠️ 首次启动后,请使用 Start:SafeKit 会保留最新的服务器。首次启动或在特殊操作期间,请使用“启动 As primary。

10. 等待过渡到 ALONE ”(绿色)
- 节点 1 应达到 ALONE(绿色)状态,这意味着虚拟 IP 已设置,并且
start_prim脚本已在节点 1 上执行。
⚠️ 如果未达到 ALONE(绿色)或未启动应用程序,请使用节点 1 的模块日志 🖼️分析原因。
- 单击
node1的 🔍日志图标,打开模块日志,查找错误消息,例如检查器检测到错误并停止模块。 - 点击日志中的
start_prim:脚本的输出消息显示在右侧,可以检测到错误,例如服务启动不正确。 - 使用 SafeKit AI 🤖 获取日志消息方面的帮助。
⚠️ 如果集群处于 WAIT (red) not uptodate, STOP (red) not uptodate 状态,请停止 WAIT 节点并强制将其启动为主节点 🖼️。

11. 启动节点 2
- ⋯使用其上下文菜单
Start节点 2。 - 等待 SECOND(绿色)状态。
ℹ️ 节点 2 在重新同步复制目录(从节点 1 复制到节点 2)时保持 SECOND(橙色)状态。

12. 验证集群是否正常运行
- 检查集群是否为绿色/绿色,Podman 服务是否在 PRIM 节点上运行,而不是在 SECOND 节点上运行。
在此状态下,只有文件内部的更改会实时复制。
⚠️ 作为 Podman 服务客户端的组件必须配置虚拟 IP 地址。配置可以使用 DNS 名称(如果已创建 DNS 名称并将其与虚拟 IP 地址相关联)。

13. 测试
- 向下滚动 PRIM 节点的上下文菜单,然后单击
Stop。 - 验证 SECOND 节点上是否存在故障转移,该节点应变为 ALONE(绿色)。
- 在 Windows 上使用 Microsoft 管理控制台 (MMC),或在 Linux 上使用命令行,检查 Podman 服务的故障转移(在
stop_prim脚本中停止节点 1 上的服务,并在start_prim脚本中启动节点 2 上的服务)。
⚠️ 如果 node2 未达到 ALONE(绿色)状态或应用程序未启动,请使用节点 2 的模块日志 🖼️分析原因。
- 单击
node2的 🔍日志图标以打开模块日志,并查找错误消息,例如检测器检测到错误并停止模块。 - 点击日志中的
start_prim:脚本的输出消息显示在右侧,可以检测到错误,例如服务启动不正确。 - 使用 SafeKit AI 🤖 获取日志消息方面的帮助。
⚠️
- 如果一切正常,请在 node1 上启动,这将从 node2 重新同步复制的目录。
- 如果出现问题,请停止 node2 并强制节点 1 启动为主节点 🖼️,它将使用停止时本地健康的数据重新启动。
ℹ️ 在SafeKit 在线培训中查找更多详细信息和视频。

14. 支持
- 如需获取支持,请为每个节点拍摄 2 个 SafeKit
Snapshots(2 个 .zip 文件)。
ℹ️ 有关支持的更多信息,请点击此处。

SafeKit mirror 解决方案演示
SafeKit 视频:应用级集群 (8:47)
在本视频中,您将了解 SafeKit 如何在没有 SAN 复杂性的情况下实现 mirror HA 集群。虽然此演示使用 Microsoft SQL Server,但该解决方案对其他数据库和应用程序也同样适用。
章节
- 🎬 两个带有 SQL Server 节点 (0:32)
- 🎬 配置集群和 mirror.safe 模块 (3:58)
- 🎬 启动和测试 SQL 复制、迁移、崩溃时故障转移 (4:17)
分步实施
🔍 探索 SafeKit
查找有关 SafeKit 功能、架构、视频、文档和免费试用的信息。
| 资源 | 描述 | 链接 |
|---|---|---|
| 主要功能 | 了解 SafeKit 为何是一种简单且经济高效的高可用性解决方案。 | 探索主要功能 |
| 用例 | 了解 SafeKit 如何保持关键应用程序和基础设施的可用性。 | 探索用例 |
| 部署模型 | SafeKit 无需 SAN 或共享存储即可提供高可用性。 | 探索部署模型 |
| 高可用性策略 | 比较虚拟机的可用性与应用程序的可用性。 | 比较这两种策略 |
| 技术规格 | 查看 SafeKit 集群的技术要求和限制。 | 阅读技术规格 |
| 视频 | 观看 SafeKit 配置和自动故障转移的演示。 | 观看技术视频 |
| 架构 | 了解 SafeKit mirror 集群如何实时复制文件并处理故障转移。 | 探索 Mirror 架构 |
| 架构 | 了解 SafeKit farm 集群如何平衡网络流量并处理故障转移。 | 探索 Farm 架构 |
| 产品对比 | 将 SafeKit 与传统的高可用性集群进行比较。 | 比较解决方案 |
| 技术资源 | 查找技术文档、下载 SafeKit 并访问免费试用版。 | 访问文档和免费试用版 |
| 应用模块 | 使用预配置的 SafeKit 模块为您的应用程序设置高可用性。 | 探索应用模块 |