搜索 SafeKit

使用 SafeKit 实现 KVM 高可用性:安装 kvm.safe 模块以实现故障转移

KVM 高可用性快速安装指南

本指南介绍如何使用 SafeKit 为 KVM 设置 mirror 集群,确保自动故障转移和同步复制,而无需共享存储。

如需帮助,您可以使用SafeKit AI 🤖。

1. 概述

  • 架构: 采用双节点系统(主/备)。
  • 数据保护: 实现实时同步复制,实现零数据丢失(RPO = 0)。

2. 安装

  • 软件: 在两台服务器上安装 SafeKit 引擎。
  • 模块: 下载预配置的 kvm.safe 应用程序模块。

3. 配置

  • Web 控制台: 配置包含 KVM 文件的特定文件夹。
  • 监控: 开始监控和保护 KVM 应用程序。

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/KVM 解决方案概述

解决方案在此处介绍:💡 无共享存储的简单 Linux KVM 高可用性

在 Linux 上安装 SafeKit/KVM 解决方案 (kvm.safe)

先决条件

  • KVM 安装在 2 个 Linux 节点上。
  • 安装在一个或多个虚拟机中的关键应用程序。
  • 每个 KVM 主机最多可运行 32 台虚拟机。
  • 复制数据的总量限制在几 TB 以内,超出此范围,重新同步所需的时间将变得非常长。
  • 节点之间的最小互连速度为 1Gb/s(建议使用 10Gb/s 以实现更快的重新同步)。
  • IP 故障转移要求两个节点位于同一 LAN 或扩展 LAN (L2) 上 — 不支持路由 L3 网络(🛠️ 云负载均衡器除外)。

在 Linux 上安装软件包

  • 在 2 个 Linux 节点上安装免费版 SafeKit。注意:免费试用版包含所有 SafeKit 功能。试用期结束后,您无需卸载软件包即可激活永久许可证密钥。
  • 下载 safekit_xx.bin 包后,运行该包以提取 rpm 和 safekitinstall 脚本,然后运行 safekitinstall 脚本
  • 回答 “是” 以启用防火墙自动配置
  • 为 Web 控制台和默认用户 admin 设置密码。在所有节点上设置相同的密码。

下载 SafeKit (Linux) >

在 Linux 上安装模块

  • 下载 kvm.safe 模块。
    该模块是免费的。它包含 userconfig.xml 文件和重启脚本。
  • 将 kvm.safe 放在 /opt/safekit/Application_Modules/generic/ 目录下。

下载 kvm.safe (Linux) >

SafeKit/KVM 解决方案的分步配置

⚠️ KVM 配置以名为 VM1 的虚拟机形式呈现,其中包含在发生故障时需要重新启动的应用程序。

⚠️ 您必须对所有要复制和重新启动的虚拟机重复此配置。

1. 先决条件

VM1 虚拟机镜像位于文件 /var/lib/libvirt/images/vm1.qcow2 中。在配置 SafeKit 之前,您必须执行以下配置,将虚拟机放置在 SafeKit 将复制的 vm1 特定目录中。

在节点 1 上:

  • 停止 vm1:

    virsh shutdown vm1
    
  • 创建 vm1/ 目录:

    mkdir -p /var/lib/libvirt/images/vm1/
    
  • 将 vm1 镜像复制到新位置:

    cp -a /var/lib/libvirt/images/vm1.qcow2 /var/lib/libvirt/images/vm1/
    

一旦新位置的测试成功,即可删除原始 vm1 镜像。

  • 编辑 vm1 配置文件:

    EDITOR=vi virsh edit vm1
    

并更改该行:

    <source file='/var/lib/libvirt/images/vm1.qcow2'>

作者:

    <source file='/var/lib/libvirt/images/vm1/vm1.qcow2'>
  • 在同一文件中将缓存选项设置为“无”,以防崩溃时数据完整性受损:

    <disk type='file' device='disk'> <driver name='qemu' type='qcow2' **cache='none'** />
    
  • 关闭 vm1 配置文件

  • 禁用vm1 自动启动:

    virsh autostart vm1 --disable
    
  • 为 vm1 创建 vm1.xml 配置文件:

    virsh dumpxml vm1 > vm1.xml
    

在节点 2 上:

  • 从节点 1 复制 vm1.xml 配置文件。注意:每当在节点 1 上更改 vm1 配置时,您必须在节点 2 上重新应用新配置。

  • 创建 vm1,但不要启动它:

    virsh define vm1.xml
    
  • 禁用 vm1 自动启动:

    virsh autostart vm1 --disable
    
  • 创建图像位置的目录:

    mkdir -p /var/lib/libvirt/images/vm1/
    

2. 启动 SafeKit 控制台

  • 在某个集群节点上,通过连接到 http://localhost:9010 在浏览器中启动 Web 控制台。
  • 输入用户名 admin 和安装过程中定义的密码。

您也可以在集群外部工作站的浏览器中运行控制台。

⚠️ SafeKit 的配置通过单个浏览器在两个节点上完成。

ℹ️ 要保护 Web 控制台,请参阅用户指南中的 🛠️ 11. 保护 SafeKit Web 服务。

启动 SafeKit Web 控制台以配置 KVM 集群

3. 配置节点地址

  • 输入节点 IP 地址,按 Tab key 检查连接性并填写节点名称。如果 node1 或 node2 为红色,请检查浏览器与这两个节点的连接性,并检查这两个节点的防火墙以进行 🛠️ 故障排除。
  • 然后,单击 Save and apply 以保存配置。
  • 检查两个节点上的 Success ✅ 消息。
  • 如果某个节点上发生配置 Failure ❌,请打开该节点的▼手风琴,然后查看消息。请注意,您可以使用 SafeKit AI 🤖 寻求帮助。

ℹ️ 如果您愿意,可以添加新的 LAN and nodes(首先 ➕),以创建第二个心跳和专用复制网络。

ℹ️ 如果您单击 Advanced configuration,则会显示 cluster.xml 文件。此文件由控制台自动填充并部署到节点上。

输入 KVM 集群的节点

4. 选择模块

  • 在 New module 中,单击 kvm.safe ”模块。

ℹ️ 在顶部的蓝色横幅中,🛜 node1 代表控制台连接节点。此节点在需要时将请求中继到 node2。

ℹ️ 如果您在安装期间将模块放置在连接节点(node1)上的 Application_Modules/generic/ 目录中,则控制台会在该目录中搜索 xxx.safe

选择 KVM 模块

5. 配置模块

  • 选择在启动时 Automatic 启动模块,无需延迟。
  • 通常,您有一个用于进行复制的单一 Heartbeat 网络。但是,如有必要,您可以定义一个专用网络(在步骤 3 中添加一个 LAN)。
  • 在 VM_PATH 中,输入复制目录的根路径(/var/lib/libvirt/images)。
  • 输入 VM_NAME,即虚拟机的名称 (vm1)。

我们假设 VM1 文件位于 /var/lib/libvirt/images/vm1/(请参阅先决条件)。将实时复制此 SafeKit。

ℹ️ 无需配置虚拟 IP 地址。VM1 将在辅助 KVM 上使用其物理 IP 地址重新启动,并且此 IP 地址将被重新路由。

输入 KVM 参数

6. 自定义检查器以检测虚拟机故障

自定义检查器会检查虚拟机是否正在运行(使用“virsh domstate”命令)。如果虚拟机未运行,自定义检查器会自动在同一 KVM 节点或其他节点上重新启动虚拟机。

  • 点击 Checkers / Custom(见图片)。
  • Resource name 用于在 SafeKit 中识别虚拟机,其资源名称为:custom.VM_NAME_check。
  • Action restart 后,虚拟机将在同一 KVM 节点上重启。如果在 24 小时内重启 3 次失败,SafeKit kvm 模块将停止在主节点上运行,虚拟机将故障转移到辅助节点。
  • 如果您在 Action 中设置了 stopstart,则一旦虚拟机停止运行,另一个 KVM 节点将立即进行故障转移。

ℹ️ 如果您想在维护期间停止虚拟机,自定义检查器将自动重新启动它。为避免这种情况,您可以暂时暂停检查器 🖼️。或者,您可以通过在控制台中删除配置行来将其移除。

输入 KVM 自定义检查器参数

7. 编辑脚本(可选)

  • 请勿编辑脚本。

8. 通信加密(可选)

  • 保持节点间通信的加密。

KVM 模块的通信加密

9. 保存并应用

  • 在两个节点上 Save and apply 配置和脚本。

保存并应用 KVM 模块配置

10. 验证配置是否成功

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

检查 KVM 模块配置是否成功

11. 使用最新数据启动节点

  • 如果节点 1 具有 vm1/ 的最新复制目录,请选择它,然后⋯ Force start ▶ As primary。

当节点 2 启动时,所有数据将从节点 1 复制到节点 2。

⚠️ 如果您做出错误的选择,则有可能在两个节点上同步过时的数据。

⚠️ 还假定 VM1 在节点 1 上已停止,以便 SafeKit 安装复制机制,然后在 start_prim 脚本中启动 VM1。

⚠️ 首次启动后,请使用 Start:SafeKit 会保留最新的服务器。首次启动或在特殊操作期间,请使用“启动 As primary。

将包含最新数据的 KVM 节点启动为主要节点

12. 等待过渡到 ALONE ”(绿色)

  • 节点 1 应达到 ALONE(绿色)状态,这意味着 start_prim 脚本已在节点 1 上执行。

⚠️ 如果未达到 ALONE(绿色)或未启动 VM1,请使用节点 1 的模块日志 🖼️分析原因。

  • 单击 node1 的 🔍日志图标,打开模块日志,查找错误消息,例如检查器检测到错误并停止模块。
  • 单击日志中的 start_prim:脚本的输出消息显示在右侧,可以检测到错误,例如 VM1 启动不正确。
  • 使用 SafeKit AI 🤖 获取日志消息方面的帮助。

⚠️ 如果集群处于 WAIT (red) not uptodate, STOP (red) not uptodate 状态,请停止 WAIT 节点并强制将其启动为主节点 🖼️。

第一个 KVM 节点以主节点身份启动,并成为 ALONE

13. 启动节点 2

  • ⋯使用其上下文菜单 Start 节点 2。
  • 等待 SECOND(绿色)状态。

ℹ️

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

启动 KVM 节点 2

14. 验证集群是否正常运行

  • 检查集群是否为绿色/绿色,VM1 在 PRIM 节点上运行,而不是在 SECOND 节点上运行。

在此状态下,只有文件内部的更改会实时复制。

KVM 节点 2 为 SECOND(绿色)

15. 测试

  • 向下滚动 PRIM 节点的上下文菜单,然后单击 Stop。
  • 验证 SECOND 节点上是否存在故障转移,该节点应变为 ALONE(绿色)。
  • 使用 KVM 程序工具检查 VM1 是否在节点 2 上运行。

⚠️ 如果 node2 未达到 ALONE(绿色)状态或 VM1 未启动,请使用节点 2 的模块日志 🖼️分析原因。

  • 单击 node2 的 🔍日志图标以打开模块日志,并查找错误消息,例如检测器检测到错误并停止模块。
  • 单击日志中的 start_prim:脚本的输出消息显示在右侧,可以检测到错误,例如 VM1 启动不正确。
  • 使用 SafeKit AI 🤖 获取日志消息方面的帮助。

⚠️

  • 如果一切正常,请在 node1 上启动,这将从 node2 重新同步复制的目录。
  • 如果出现问题,请停止 node2 并强制节点 1 启动为主节点 🖼️,它将使用停止时本地健康的数据重新启动。

ℹ️ 请注意,您有一个 🕒时间线 🖼️,可以帮助您了解集群中发生的情况。

停止 PRIM 服务器上的 KVM 模块

16. 如有必要,请配置裂脑检查器

  • 请参阅“集群中网络隔离的不同场景是什么?”,了解您是否需要配置裂脑检查器。
  • 转到模块配置,然后单击 Checkers / Splitbrain ”(参见图片)以编辑裂脑参数。
  • Save and apply 新配置,以便在两个节点上重新部署(必须在两个节点上停止模块才能保存和应用)。

参数:

  • Resource name 通过资源名称来识别见证:splitbrain.witness。您可以更改此值来识别见证。
  • 当节点从 PRIM 变为 ALONE 或从 SECOND 变为 ALONE 时,Witness address 是 ping 的参数。使用见证的 IP(一个可靠的元素,通常是路由器)更改此值。
  • 注意:您可以使用空格分隔设置多个 IP。请注意,在网络隔离的情况下,IP 地址必须可以从一个节点访问,但不能从另一个节点访问。

输入 KVM 分割脑参数

17. 复制快照

包含快照 XML 文件的目录是:

/var/lib/libvirt/qemu/snapshot/%VM_NAME%

其中 VM_NAME 是虚拟机的名称 (vm1)。

注意:如果没有创建快照,请创建一个快照以生成目录(否则 SafeKit 配置将失败)。

复制方法:

  • 在模块配置中,单击 Advanced Configuration(见图)以编辑 userconfig.xml。

  • 将以下行插入 userconfig.xml 的 <rfs> 部分:

    <replicated dir="/var/lib/libvirt/qemu/snapshot/%VM_NAME%" mode="read_only"> </replicated>
    
  • Save and apply 新配置,以便在两个节点上重新部署修改后的 userconfig.xml 文件(必须在两个节点上停止模块才能保存和应用)。

  • 通过 virt-manager 或命令行在 PRIM 节点上创建快照:

    virsh snapshot-create-as vm1 snapshot-name
    

注意:使用命令行创建快照时,您必须将快照视图刷新到 virt-manager 中。

在 PRIM 节点上创建的快照在故障转移后可在节点 2 上运行,但不会列在节点 2 上。

  • 要在节点 2 上导入快照,您必须运行以下命令:

    virsh snapshot-create --redefine vm1 /var/lib/libvirt/qemu/snapshot/vm1/snapshot-name
    
  • 列出 vm1 所有快照的命令行是:

    virsh snapshot-list vm1
    

输入 KVM 参数

18. 支持

  • 如需获取支持,请为每个节点拍摄 2 个 SafeKit Snapshots(2 个 .zip 文件)。

ℹ️ 有关支持的更多信息,请点击此处。

截取 KVM 快照以获得支持

虚拟机级别高可用性解决方案演示

SafeKit 视频:使用 Hyper-V 进行虚拟机级集群 (5:15)

在本视频中,您将了解 SafeKit 如何在不使用 SAN 的情况下为 Hyper-V 实现高可用性。学习如何在两个节点之间配置虚拟机复制,以确保关键虚拟化工作负载的无缝故障转移。尽管此演示使用 Windows 上的 Hyper-V,但该解决方案在 Linux 上的 KVM 上也能同样运行。

章节

  1. 🎬 架构概述:2 个 Hyper-V 节点和 2 个虚拟机 (0:49)
  2. 🎬 配置集群和 hyperv.safe 模块 (1:59)
  3. 🎬 实时测试:虚拟机复制、迁移和崩溃时自动故障转移 (2:26)

分步实施

🔍 探索 SafeKit

查找有关 SafeKit 功能、架构、视频、文档和免费试用的信息。

资源描述链接
主要功能了解 SafeKit 为何是一种简单且经济高效的高可用性解决方案。探索主要功能
用例了解 SafeKit 如何保持关键应用程序和基础设施的可用性。探索用例
部署模型SafeKit 无需 SAN 或共享存储即可提供高可用性。探索部署模型
高可用性策略比较虚拟机的可用性与应用程序的可用性。比较这两种策略
技术规格查看 SafeKit 集群的技术要求和限制。阅读技术规格
视频观看 SafeKit 配置和自动故障转移的演示。观看技术视频
架构了解 SafeKit mirror 集群如何实时复制文件并处理故障转移。探索 Mirror 架构
架构了解 SafeKit farm 集群如何平衡网络流量并处理故障转移。探索 Farm 架构
产品对比将 SafeKit 与传统的高可用性集群进行比较。比较解决方案
技术资源查找技术文档、下载 SafeKit 并访问免费试用版。访问文档和免费试用版
应用模块使用预配置的 SafeKit 模块为您的应用程序设置高可用性。探索应用模块
SafeKit AI Chat SafeKit AI