Milestone XProtect 高可用性与 SafeKit:安装 milestone.safe 模块以实现故障转移
Milestone XProtect 高可用性快速安装指南
本指南介绍如何使用 SafeKit 为 Milestone XProtect 设置 mirror 集群,确保自动故障转移和同步复制,而无需共享存储。
如需帮助,您可以使用SafeKit AI 🤖。
1. 概述
- 架构: 采用双节点系统(主/备)。
- 数据保护: 实现实时同步复制,实现零数据丢失(RPO = 0)。
2. 安装
- 软件: 在两台服务器上安装 SafeKit 引擎。
- 模块: 下载预配置的
milestone.safe应用程序模块。
3. 配置
- Web 控制台: 配置包含 Milestone XProtect 文件的特定文件夹。
- 监控: 开始监控和保护 Milestone XProtect 应用程序。
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/Milestone XProtect 解决方案概述
解决方案在此处介绍:💡 最简单的 Milestone XProtect 高可用性:双节点同步复制和故障转移。
在 Windows 上安装 SafeKit/Milestone XProtect 解决方案 (milestone.safe)
先决条件
- 您需要在 2 个节点(虚拟机或物理服务器)上安装 Milestone XProtect Management 和 SQL。SQL Server 和事件服务器可以是外部的,请参阅下面的注释。
ℹ️ 注意:SQL Server 可以是外部的。在这种情况下,在 milestone.safe 的分步配置期间的步骤 4:
- 删除 SQL 数据和日志文件夹的复制
- 移除 sqlservr.exe 上的进程检查器,
- 从宏 SERVICES 中删除 MSSQLServer。
您可以使用 💡 SafeKit 和 sqlserver.safe 模块来实现外部 SQL Server 的冗余。
在这种情况下,在两个管理节点上,将Milestone Management 与 SQL 的连接配置为 sqlserver.safe 模块的虚拟 IP 地址(注册表项 HKEY_LOCAL_MACHINE > SOFTWARE > VideoOSServerConnectionString)。
ℹ️ 注意:事件服务器可以位于管理服务器外部。
在这种情况下,您有两个集群,每个集群都安装了 milestone.safe:一个用于管理集群,另一个用于事件集群。
对于管理集群,在 milestone.safe 的分步配置过程中,第 4 步:
- 从 SERVICES 宏中移除 MilestoneEventServerService。
对于“事件”集群,在 milestone.safe 的分步配置过程中,执行步骤 4:
- 从 SERVICES 宏中删除:MSSQLServer、Milestone XProtect Management Server、Milestone XProtect Log Server
- 删除 SQL 数据和日志文件夹的复制
- 移除 sqlservr.exe 上的进程检查器,
- 在逐步配置过程中,使用管理集群的虚拟 IP 地址注册事件服务器(或从下载管理器安装事件服务器,并在安装过程中设置管理集群的虚拟 IP 地址),
- 在 Milestone 管理客户端中,将“已注册服务”中的事件服务器设置为事件集群的虚拟 IP 地址。
ℹ️ 录音机冗余
- 由于数据量大,记录器的复制不适用于 SafeKit。
- 集成到 Milestone 中的解决方案可用于(故障转移录像服务器,无实时复制)。
- 两台录像机也可以在双活配置下运行,摄像机分布在不同区域,这样即使发生故障,也不会丢失同一区域的所有摄像机。
- 通过Vega/RMF解决方案,每台摄像机的视频流也可以发送到两台录像机。
ℹ️ 如果在 SafeKit 集群中将 Milestone 从版本 N 迁移到版本 N+1,请阅读本文: 🛠️ 使用 SafeKit 进行 Milestone 管理迁移
在 Windows 上安装软件包
- 在两台 Windows 节点上下载并安装 SafeKit 免费版。
注意:免费版本包含所有 SafeKit 功能。试用期结束后,您无需卸载软件包即可激活永久许可证密钥。 - 完成软件包安装后,选择 “立即设置控制台凭据和防火墙规则”,并为 SafeKit 控制台的 admin 用户配置密码。
在所有节点上设置相同的密码。 - C:/safekit/(默认安装目录)和您将要定义的所有复制文件夹从防病毒扫描中排除。
由于 SafeKit 与操作系统紧密集成、采用虚拟 IP 机制、实时复制以及关键服务重启等特性,杀毒软件可能会面临检测挑战。
在 Windows 上安装模块
- 下载 milestone.safe 模块。该模块免费。它包含 userconfig.xml 文件和重启脚本。
- 将 milestone.safe 放在 C:/safekit/Application_Modules/generic 目录下。
SafeKit/Milestone XProtect 解决方案的分步配置
先决条件
- Milestone XProtect and SQL 程序安装在 2 个节点上。
- 复制数据的总量限制在几 TB 以内,超出此范围,重新同步所需的时间将变得非常长。
- 节点之间的最小互连速度为 1Gb/s(建议使用 10Gb/s 以实现更快的重新同步)。
- IP 故障转移要求两个节点位于同一 LAN 或扩展 LAN (L2) 上,不支持路由式 L3 网络。
⚠️ 此配置至少需要 Milestone XProtect 2023 R3。对于早期版本,请 🛠️ 查看本文。
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中,单击milestone.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中,则在发生故障时,它将通过重启操作进行监控。配置错误的进程名称将导致模块在启动后立即停止。
⚠️ 如果 SQL 位于管理服务器上:
- SQL 系统数据库(如 master.mdf 和 mastlog.ldf)必须位于两个节点上的同一目录中。这些目录必须配置为可复制。
- SQL 也必须安装在两个节点的文件系统的同一位置,因为只读SQL 资源数据库位于二进制文件中,并且是故障转移所必需的。此数据库不需要复制。
- SQL Milestone 数据库(.mdf 和 .ldf)必须位于两个节点上的同一目录中。这些目录必须配置为可复制。根据本文,Milestone 数据库如下所示。
ℹ️ 如果您单击 Advanced configuration,则会显示 userconfig.xml 文件。此文件由控制台自动填充,并通过重启脚本部署到节点上。
ℹ️ 应用 SafeKit 配置时,Windows 服务中的服务 startup type 将自动设置为 Manual。这样可确保服务在系统启动时不会自动启动,而仅在模块本身启动时启动。

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

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

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

8. 验证配置是否成功
- 检查两个节点上的
Success✅ 消息,然后单击Monitor modules。 - 如果某个节点上发生配置
Failure❌,请打开该节点的▼手风琴,然后查看消息。请注意,您可以使用 SafeKit AI 🤖 寻求帮助。

9. 使用最新数据启动节点
- 如果节点 1 拥有最新的复制目录,请选择它,然后⋯
Force start▶As primary。
当节点 2 启动时,所有数据将从节点 1 复制到节点 2。
⚠️ 如果您做出错误的选择,则有可能在两个节点上同步过时的数据。
⚠️ 还假定 Milestone XProtect and SQL 程序在节点 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. 在节点 1 的桌面上,停止,然后注册到虚拟 IP 地址,应用 Milestone KB 并重新启动 Milestone 管理服务器
根据图片中的菜单,在节点 1 上执行以下要点:
- 使用 SafeKit 控制台的 ALONE 菜单禁用检查器和进程/服务监控,以防止在停止管理服务器服务时出现误报(暂停检查器 🖼️)。
- 右键单击任务栏中的 Milestone 管理服务器图标。
- 停止管理服务器服务
- 然后选择 Server Configurator …” 并注册虚拟 IP 地址。
- 编辑节点 1 上的 ServerConfig.xml。
- 转到“ C:/ProgramData/Milestone/XProtect Management Server”,并备份原始 ServerConfig.xml 文件。
- 使用任何文本编辑器(具有管理员权限)打开 ServerConfig.xml 文件。
- 将
XXX.XXX.XXX.XXX替换为以下内容中的实际虚拟 IP 地址: <Failover>...<VirtualAddress>XXX.XXX.XXX.XXX</VirtualAddress>...</Failover>- 将
<ClusterMember>false</ClusterMember>更改为true - 在以下位置设置
http://NODE1_FQDN:9010(如果为工作组,则为 NODE1 主机名): <ClusterLocalWebserverUri>http://NODE1_FQDN:9010</ClusterLocalWebserverUri>- 如需了解更多信息,请参阅此 Milestone 知识库文章。
- 启动管理服务器服务
- 使用 SafeKit 控制台的 ALONE 菜单启用检查器和进程/服务监控(启用检查器 🖼️)。
ℹ️ 此过程通过连接到虚拟地址,在 SQL 数据库(在节点 1 上运行)中注册节点 1 管理服务器。

12. 在节点 2 的桌面上,在虚拟 IP 地址上注册管理服务器
- 在节点 2 的任务栏中选择 Server Configurator,并在虚拟 IP 地址上注册(见图)。
- 然后停止管理服务器服务。
- 编辑节点 2 上的 ServerConfig.xml。
- 转到“ C:/ProgramData/Milestone/XProtect Management Server”,并备份原始 ServerConfig.xml 文件。
- 使用任何文本编辑器(具有管理员权限)打开 ServerConfig.xml 文件。
- 将
XXX.XXX.XXX.XXX替换为以下内容中的实际虚拟 IP 地址: <Failover>...<VirtualAddress>XXX.XXX.XXX.XXX</VirtualAddress>...</Failover>- 将
<ClusterMember>false</ClusterMember>更改为true - 在以下位置设置
http://NODE2_FQDN:9010(如果为工作组,则为 NODE2 主机名): <ClusterLocalWebserverUri>http://NODE2_FQDN:9010</ClusterLocalWebserverUri>- 如需了解更多信息,请参阅此 Milestone 知识库文章。
⚠️ 请注意:
- 在节点 2 上执行注册的用户帐户必须在节点 1 的 Milestone 中拥有管理员角色。
- 如果节点 2 上的本地管理员进行注册,则必须在步骤 13中将内置 Windows 组
BUILTIN/Administrators设置在 Management Client / Security / Roles 中。否则注册将无法正常工作。
ℹ️ 此过程通过连接到虚拟地址,在 SQL 数据库(在节点 1 上运行)中注册节点 2 管理服务器。

13. 解决故障转移时的 Windows 身份验证问题
启动 Milestone XProtect Management Client 时,您必须使用以下方法之一进行身份验证。根据您的选择,需要执行特定步骤以确保 SafeKit 故障转移后登录正常工作。参考:查看登录屏幕截图 🖼️。
使用 Active Directory (AD) 进行 Windows 身份验证
配置: 无需特殊配置。
如果 Milestone “ Windows 身份验证”配置为使用 Active Directory,则用户和密码信息将从外部 AD 中检索。故障转移后,辅助节点连接到相同的 AD,因此身份验证会自动工作。
工作组中的 Windows 身份验证
配置: 您必须在“安全/角色”中添加 BUILTIN/Administrators 组。
警告: 在工作组中,即使名称相同,本地用户在每个节点上的安全标识符 (SID) 也不同。只有 BUILTIN/Administrators 组在两个节点上具有相同的 SID。
- 添加此组后,您可以在故障转移后使用任何本地管理员帐户在辅助节点上进行身份验证。
- 如果没有此设置,辅助节点上的本地 Windows 身份验证将失败,因为 SID 不匹配。
使用 SQL 数据库进行基本身份验证
配置: 创建一个使用“基本身份验证”的用户(例如,“ Admin ”)。
对于“基本身份验证”,用户凭据直接存储在 SQL 数据库中。由于 SafeKit 会将 SQL 数据库实时复制到辅助节点,因此这些用户在故障转移后始终立即可用。

14. 启动节点 2
- ⋯使用其上下文菜单
Start节点 2。 - 等待 SECOND(绿色)状态。
ℹ️
- 节点 2 在重新同步复制目录(从节点 1 复制到节点 2)时保持在 SECOND(橙色)状态。
- 这可能需要一段时间,具体取决于复制目录中要重新同步的文件大小和网络带宽。
- 要查看复制进度,请参阅节点 2 的模块日志 🖼️和复制资源 🖼️使用 SafeKit AI 🤖 协助处理日志消息。

15. 验证集群是否正常运行
- 检查集群是否为绿色/绿色,Milestone XProtect and SQL 服务是否在 PRIM 节点上运行,而不是在 SECOND 节点上运行。
- 在此状态下,只有文件内部的更改会实时复制。
⚠️
- 使用虚拟 IP 地址注册录像服务器。
- 在虚拟 IP 地址上连接 Milestone Management Client 和 Milestone Smart Client。
- 作为 Milestone XProtect and SQL 服务客户端的组件必须配置虚拟 IP 地址。如果已创建 DNS 名称并将其与虚拟 IP 地址相关联,则可以使用 DNS 名称进行配置。

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

17. 支持
- 如需获取支持,请为每个节点拍摄 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 模块为您的应用程序设置高可用性。 | 探索应用模块 |