使用 SafeKit 实现 K3S 高可用性:安装 k3s.safe 模块以实现故障转移
Kubernetes 高可用性快速安装指南
本指南介绍如何使用 SafeKit 为 Kubernetes 设置 mirror 集群,确保自动故障转移和同步复制,而无需共享存储。
如需帮助,您可以使用SafeKit AI 🤖。
1. 概述
- 架构: 采用双节点系统(主/备)。
- 数据保护: 实现实时同步复制,实现零数据丢失(RPO = 0)。
2. 安装
- 软件: 在两台服务器上安装 SafeKit 引擎。
- 模块: 下载预配置的
k3s.safe应用程序模块。
3. 配置
- Web 控制台: 配置包含 Kubernetes 文件的特定文件夹。
- 监控: 开始监控和保护 Kubernetes 应用程序。
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/Kubernetes 解决方案概述
解决方案在此处介绍:💡 Kubernetes K3s 高可用性:2 节点同步复制和故障转移
在 Linux 上安装和配置 SafeKit/Kubernetes 解决方案 (k3s.safe)
1. 下载软件包
- 在 Linux 上下载 SafeKit 8.2 的免费版本 (safekitlinux_xx.bin)
- 下载 k3s.safe Linux 模块
- 下载 k3sconfig.sh 脚本
- 文档 (pptx)
注意:k3sconfig.sh 脚本在 2 个 Linux Ubuntu 24.04 节点上安装 K3S、MariaDB、NFS 和 SafeKit。
2. 首先在两个节点上
在 2 个 Linux Ubuntu 24.04 节点上,以 root 身份:
- 确保节点可以访问互联网(可以通过代理)
- 将 k3sconfig.sh、k3s.safe 和 safekit_xx.bin 包复制到一个目录中,然后 cd 到该目录中
- 将 .bin 文件重命名为“safekit.bin”
- 确保 k3sconfig.sh 和 safekit.bin 可执行。
- 编辑 k3sconfig.sh 脚本,并根据您的环境自定义环境变量(包括虚拟 IP)
- 在两个节点上执行:
./k3sconfig.sh prereq
该脚本将:
- 安装所需的 Debian 软件包:alien、nfs-kernel-server、nfs-common、mariadb-server
- 安全安装 MariaDB
- 创建用于文件复制的目录
- 准备 NFS 服务器以共享复制目录
- 安装 SafeKit
3. 在第一个节点上
在第一个节点上执行:./k3sconfig.sh first
该脚本将:
- 创建 K3S 配置数据库和 k3s 用户
- 创建复制存储卷文件(稀疏文件)并将其格式化为 xfs 文件系统
- 创建 safekit 集群配置并应用它
- 在集群上安装并配置 k3s.safe 模块
- 在第一个节点上将 k3s 模块启动为“prim”
- 下载、安装并启动 k3s
- 下载并安装 nfs-subdir-external-provisioner Helm 图表
- 显示 K3S 令牌(在第二个节点安装阶段使用)
4. 在第二个节点上
在第二个节点上执行:./k3sconfig.sh second <token>
是在第一个节点上首次执行“ k3sconfig.sh ”时显示的字符串
该脚本将:
- 确保 k3s 模块在第一个节点上以 prim 模式启动
- 在第二个节点上安装 k3s
- 启动 k3s 模块
5. 检查 k3s SafeKit 模块是否在两个节点上运行
在两个节点上使用此命令进行检查:/opt/safekit/safekit –H "*" state
回复应与图片相似。
/opt/safekit/safekit –H "*" state
---------------- 服务器= http://10.0.0.20:9010 ----------------
admin 操作=执行
--------------------- k3s 状态 ---------------------
本地 (127.0.0.1) : PRIM (服务:可用)(颜色:绿色)
成功
---------------- 服务器= http://10.0.0.21:9010 ----------------
admin 操作=执行
--------------------- k3s 状态 ---------------------
本地 (127.0.0.1):SECOND (服务:可用) (颜色:绿色)
成功
6. 启动 SafeKit Web 控制台以管理集群
- 将浏览器连接到 SafeKit Web 控制台网址
http://server0-IP:9010。 - 您应该会看到一个与图片类似的页面。
- 使用 Linux 命令行检查 K3S 是否已在两个节点上启动(在
start_prim和start_second中启动),以及 MariaDB 是否已在主节点上启动(在start_prim中启动)。

7. 测试
- 向下滚动 PRIM 节点的上下文菜单,然后单击
Stop。 - 验证 SECOND 节点上是否存在故障转移,该节点应变为 ALONE(绿色)。
- 在 Linux 上使用命令行,检查服务的故障转移(在
stop_prim脚本中停止节点 1 上的服务,并在start_prim脚本中启动节点 2 上的)。MariaDB 和 K3S 应该在 node2 上运行。
![]()
如果 node2 未达到 ALONE(绿色)状态,请使用节点 2 的模块日志分析原因。
- 点击
node2以显示模块日志。 - SQL Server 模块日志示例,其中
start_prim中的服务名称无效 sqlserver.exe 进程受到监控,但由于它未启动,因此模块最终会停止。
![]()
如果一切正常,请在 node1 上启动,这将从 node2 重新同步复制的目录。
如果出现问题,请停止 node2 并强制 node1作为主节点启动,它将使用停止时本地健康的数据重新启动。
![]()

8. 使用 WordPress 等 Kubernetes 应用程序试用集群
图片中有一个 WordPress 安装示例:一个由 pod 实现的带有后端数据库的门户网站。
您也可以用同样的方式部署自己的应用程序。
WordPress 自动实现高可用性:
- 其数据(php + 数据库)存储在持久卷中,并由 SafeKit 实时复制
- 用户通过虚拟 IP 地址访问 WordPress 网站
- 具有自动故障转移和自动回切
备注:
WordPress 图表定义了一个负载均衡服务,该服务监听 <service.port> 和 <service.httpsport> 端口。
可通过网址
http://<virtual-ip>:<service.port>.虚拟 IP 由 SafeKit 管理,并在故障转移时自动切换。
默认情况下,K3S 使用 Klipper 实现负载均衡器。
Klipper 监听
: <service.port>,并将 TCP/IP 数据包路由到其选定的 WordPress pod 的 IP 地址和端口。 $ export KUBECONFIG= /etc/rancher/k3s/k3s.yaml $ helm repo add bitnami https://charts.bitnami.com/bitnami $ helm install my-release bitnami/wordpress –set global.storageClass=nfs-client –set service.ports.http=8099,service.ports.https=4439
之前的 helm 命令应该从 registry-1.docker.io 下载 WordPress 镜像。您可能会在 registry-1.docker.io 上遇到身份验证问题。在这种情况下,您应该:
在两个节点上创建
/etc/rancher/k3s/registries.yaml内容如下:configs: "registry-1.docker.io": auth: username: your_user_name password: your_password tls: insecure_skip_verify: true使用
systemctl stop k3s和systemctl start k3s。以使其生效。执行
helm registry login -u your_user_name docker.io,然后输入您的密码
9. 支持
- 如需获取支持,请为每个节点拍摄 2 个 SafeKit
Snapshots(2 个 .zip 文件)。
![]()
🛠️ 用户指南中的故障排除。

10. 如有必要,请配置脑裂检测器
请参阅下面的“集群中网络隔离的不同场景是什么?”,以了解您是否需要配置脑裂检测器。
在模块配置中,单击
Advanced Configuration(见图)以编辑userconfig.xml。通过在
userconfig.xml的<check>部分中添加以下内容来声明脑裂检测器:<service> ... <check> ... <splitbrain ident="witness" exec="ping" arg="witness IP"/> </check>Save and apply新配置,以便在两个节点上重新部署修改后的 userconfig.xml 文件(必须在两个节点上停止模块才能保存和应用)。
参数:
ident="witness"使用资源名称splitbrain.witness。标识见证。您可以更改此值以标识见证。exec="ping"引用要执行的 ping 代码。请勿更改此值。arg="witness IP"是 ping 的参数。将此值更改为见证者的 IP(一个可靠的元素,通常是路由器)。

集群中网络隔离的不同场景有哪些?
单一网络
当网络隔离时,默认行为是:
- 当每个节点的心跳丢失时,每个节点都会进入 ALONE,并使用其虚拟 IP 地址运行应用程序(应用程序会修改其本地数据,从而实现双重执行)
- 当隔离修复时,一个 ALONE 节点将被强制停止,并从另一个节点重新同步其数据,
- 最后,集群为 PRIM-SECOND(或根据 Windows 进行的重复虚拟 IP 地址检测,为 SECOND-PRIM)。
两个网络,一个专用复制网络
在网络隔离的情况下,专用复制网络的行为如下:
- 专用复制网络在专用网络上实施,
- 生产网络上的心跳丢失(隔离网络),
- 复制网络上的心跳正在工作(不是隔离网络),
- 集群保持在 PRIM/SECOND 状态。
单个网络和脑裂检测器
当网络隔离时,脑裂检测器的行为是:
- 脑裂检测器已配置为见证人(通常是路由器)的 IP 地址,
- 当服务器从 PRIM 变为 ALONE,或从 SECOND 变为 ALONE 状态时,脑裂检测器就会启动
- 在网络隔离的情况下,在进入 ALONE 之前,两个节点都会测试 IP 地址,
- 可以访问 IP 地址的节点进入 ALONE,另一个节点进入 WAIT,
- 当隔离修复后,WAIT 节点会重新同步其数据并变为 SECOND。
注意:如果见证人宕机或断开连接,两个节点都会进入 WAIT,应用程序将不再运行。这就是为什么您必须选择一个像路由器一样可靠的见证人。
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 模块为您的应用程序设置高可用性。 | 探索应用模块 |