2. Longhorn 基础:架构、核心组件与数据/控制平面

Longhorn 是 Rancher 社区开源、现由 CNCF 托管的轻量级分布式块存储系统,专为 Kubernetes 设计。它利用每个工作节点上的本地磁盘构建一个统一的、高可用的持久化存储池,并通过 CSI(Container Storage Interface)驱动无缝接入 Kubernetes 的存储生态。理解 Longhorn 的架构和核心组件,是后续在多集群环境中集成 Istio 的基础。

2.1 整体架构概览

Longhorn 采用微服务架构,将存储控制逻辑与数据路径分离,形成清晰的控制平面与数据平面。其核心思想是:每个卷(Volume)都是一个分布式系统,由多个独立的微服务组件协同工作。

架构要点: Longhorn 不依赖任何外部存储设备(如 SAN/NAS),完全基于 Kubernetes 节点上的本地磁盘或块设备构建。每个卷的副本(Replica)分布在不同的节点上,通过 Engine 实现同步复制,从而保证数据的高可用性。
Longhorn 整体架构图 Longhorn 整体架构:控制平面与数据平面 控制平面 (Control Plane) Longhorn Manager (Deployment) API Server · 卷控制器 · 调度器 · 故障检测 CSI Driver (DaemonSet) Kubernetes CSI 接口实现 Longhorn UI (Deployment) 控制平面职责 • 管理卷的生命周期(创建/删除/备份) • 调度 Replica 到不同节点 • 监控 Engine 与 Replica 健康状态 • 处理故障转移与重建 数据平面 (Data Plane) Longhorn Engine (Instance Manager) iSCSI Target · 数据读写 · 副本同步 Replica (Instance Manager) 本地数据存储 · 快照 · 备份 同步复制 数据平面职责 • 处理来自 Pod 的 iSCSI 读写请求 • 将数据同步写入所有健康 Replica • 在 Replica 上创建快照和备份 • 处理 Replica 故障时的数据重建 • 支持卷的扩容与缩减 • 支持卷的克隆与恢复 • 支持卷的加密与压缩 • 支持卷的 QoS 与限速 控制指令

2.2 核心组件详解

Longhorn 的核心组件包括 Engine、Replica 和 Manager,它们分别承担数据读写、数据存储和系统管理的职责。此外,Instance Manager 作为 Engine 和 Replica 的运行时容器,负责管理它们的生命周期。

2.2.1 Longhorn Manager

Manager 是 Longhorn 的控制中枢,以 Kubernetes Deployment 形式运行。它通过监听 Kubernetes API 中的 CRD(Custom Resource Definition)资源来驱动整个系统的状态变化。

  • API Server: 提供 RESTful API,供 Longhorn UI 和 kubectl 插件调用。
  • 卷控制器: 负责卷的创建、删除、挂载、快照、备份等生命周期管理。
  • 调度器: 根据节点资源、磁盘容量、故障域等策略,决定 Replica 的放置位置。
  • 故障检测器: 监控 Engine 和 Replica 的健康状态,触发自动修复流程。

2.2.2 Longhorn Engine

Engine 是数据平面的核心,以 Instance Manager Pod 内的一个进程形式运行。每个卷都有一个对应的 Engine 实例,它负责将来自 Pod 的 iSCSI 请求转换为对多个 Replica 的读写操作。

  • iSCSI Target: 对外暴露 iSCSI 块设备,供 Pod 中的 initiator 连接。
  • 副本同步: 采用同步复制模式,将每次写入操作同时发送到所有健康的 Replica,确保数据一致性。
  • 故障切换: 当某个 Replica 不可用时,Engine 自动将其标记为故障,并继续使用其他健康 Replica 提供服务。
  • 数据重建: 当故障 Replica 恢复或新 Replica 加入时,Engine 自动触发增量重建,将缺失的数据同步过去。

2.2.3 Longhorn Replica

Replica 是实际存储数据的组件,每个 Replica 对应一个本地磁盘上的目录或块设备。一个卷通常配置 2-3 个 Replica,分布在不同的节点上以实现高可用。

  • 本地存储: 将数据以文件形式存储在宿主机的指定磁盘路径下。
  • 快照: 支持创建卷的快照,用于数据恢复或备份。
  • 备份: 支持将快照备份到远程对象存储(如 S3、NFS)。
  • 校验和: 定期对存储的数据进行校验和检查,确保数据完整性。

2.2.4 Instance Manager

Instance Manager 是 Engine 和 Replica 的运行时容器,以 DaemonSet 形式在每个节点上运行。它负责启动、监控和停止 Engine/Replica 进程,并提供资源隔离和健康检查。

关键设计: Engine 和 Replica 运行在同一个 Instance Manager Pod 内,但通过不同的进程进行隔离。这种设计减少了资源开销,同时保证了数据路径的高效性。

2.3 核心组件对比

组件 部署形态 核心职责 关键特性
Longhorn Manager Deployment 控制平面:API、调度、监控 CRD 驱动、自动故障检测
Longhorn Engine Instance Manager 进程 数据平面:iSCSI 目标、副本同步 同步复制、自动故障切换
Longhorn Replica Instance Manager 进程 数据平面:本地存储、快照 增量重建、校验和检查
Instance Manager DaemonSet 运行时容器:进程管理、资源隔离 健康检查、生命周期管理
CSI Driver DaemonSet Kubernetes 存储接口 卷挂载/卸载、快照、扩容

2.4 数据平面与控制平面的交互

Longhorn 的控制平面和数据平面通过 Kubernetes API 和内部 gRPC 通信进行协作。典型的卷挂载流程如下:

  1. 用户请求: 用户通过 StorageClass 创建 PVC,Kubernetes 调度器将 Pod 调度到某个节点。
  2. CSI Driver 调用: CSI Driver 收到挂载请求,调用 Longhorn Manager 的 API。
  3. Manager 调度: Manager 根据调度策略,在目标节点上创建 Engine,并在其他节点上创建 Replica。
  4. Engine 启动: Instance Manager 在目标节点上启动 Engine 进程,Engine 连接到所有 Replica。
  5. 数据路径建立: Engine 对外暴露 iSCSI 目标,CSI Driver 将 iSCSI 设备挂载到 Pod 中。
  6. 数据读写: Pod 通过块设备进行读写,Engine 将请求同步复制到所有 Replica。
卷挂载与数据读写流程 卷挂载与数据读写流程 Pod 应用容器 CSI Driver DaemonSet Engine iSCSI Target Replica 1 Replica 2 Manager 控制平面 iSCSI 挂载 同步写 同步写 控制指令 调度 关键流程说明 1. Pod 通过 iSCSI 协议向 Engine 发起读写请求。 2. Engine 将请求同步复制到所有健康的 Replica,确保数据一致性。 3. 当某个 Replica 故障时,Engine 自动将其标记为故障,继续使用其他 Replica 提供服务。 4. Manager 监控 Engine 和 Replica 的健康状态,并在必要时触发重建或故障转移。

2.5 数据一致性模型

Longhorn 采用 同步复制 + 多数派写入 的模型来保证数据一致性。具体规则如下:

  • 写入策略: 每次写入操作必须被所有健康的 Replica 确认后,Engine 才会向 Pod 返回写入成功。
  • 读取策略: 读取操作直接从 Engine 的内存缓存或任意一个健康 Replica 读取,保证读取到最新数据。
  • 故障处理: 当 Replica 数量少于配置的副本数时,Engine 仍然可以继续提供服务,但会触发自动重建流程。
  • 重建机制: 新加入的 Replica 会从 Engine 或其他健康 Replica 进行增量同步,只同步缺失的数据块。
注意事项: 虽然 Longhorn 提供了强一致性保证,但在极端情况下(如 Engine 所在节点宕机),可能会丢失少量已写入但尚未同步到 Replica 的数据。建议对关键业务启用 同步复制 + 3 副本 配置,以最大程度降低数据丢失风险。

2.6 本章小结

Longhorn 通过将控制平面(Manager)与数据平面(Engine/Replica)分离,实现了高可用、可扩展的分布式块存储。核心组件各司其职:Manager 负责调度和监控,Engine 负责数据读写和同步,Replica 负责数据持久化。理解这些基础概念,是后续在多集群环境中部署 Longhorn 并与 Istio 集成的前提。