搜索 SafeKit

使用 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。

下载 SafeKit (Linux) >

下载 k3s.safe (Linux) >

下载 k3sconfig.sh >

文档 (pdf) >

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 中启动)。

Kubernetes 集群已在 SafeKit Web 控制台中启动

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作为主节点启动,它将使用停止时本地健康的数据重新启动。

注意

🛠️ 有关测试的更多信息,请参阅《用户指南》。

停止 PRIM 服务器上的模块

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,但该解决方案对其他数据库和应用程序也同样适用。

章节

  1. 🎬 两个带有 SQL Server 节点 (0:32)
  2. 🎬 配置集群和 mirror.safe 模块 (3:58)
  3. 🎬 启动和测试 SQL 复制、迁移、崩溃时故障转移 (4:17)

分步实施

🔍 探索 SafeKit

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

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