简介

许多自动化平台从单节点架构开始。一个进程提供 UI 服务、执行作业、管理调度并处理实时更新。虽然这种设置很简单,但它也创建了单点故障。如果该进程停止,自动化也会随之停止。

对于运行大规模基础设施自动化的组织——尤其是在 DevOps 或平台工程环境中——自动化系统的停机可能成为严重的运营风险。

这就是主动-主动高可用性(HA)发挥作用的地方。Semaphore UI 支持多个实例同时运行并共享工作负载的架构。这确保即使个别节点发生故障,自动化仍会继续,同时还能实现水平扩展。

单节点自动化的问题

在标准部署中,一个 Semaphore UI 进程执行所有核心职责:

这种架构适用于小型团队或测试环境。然而,它引入了一个关键限制。如果单个进程宕机,整个系统将变得不可用。 对于拥有众多用户和自动化工作流的生产环境,这会带来以下风险:

为了消除这个瓶颈,Semaphore UI 支持主动-主动高可用性部署。

什么是 Semaphore UI 中的主动-主动 HA?

在主动-主动 HA 架构中,多个相同的 Semaphore UI 实例同时在负载均衡器后面运行。与传统的故障转移系统不同,没有主节点或备用节点。每个实例都完全能够处理 UI 请求、API 调用、计划作业和任务执行。

流量分布在整个集群中,如果一个实例发生故障,其他实例会继续服务请求而不会中断。这种架构同时改善了系统可靠性和执行可扩展性。

高层架构

典型的主动-主动部署由几个关键组件组成。

  1. 负载均衡器。 用户通过 NGINX、HAProxy 和云负载均衡器等负载均衡器连接。负载均衡器在可用的 Semaphore 节点之间分配 HTTP 和 WebSocket 流量。

  2. Semaphore 节点。 每个节点运行一个相同的 Semaphore UI 实例。任何节点都可以接收用户请求、启动自动化作业、处理计划任务并发送实时更新。由于所有节点都是平等的,系统在应用层没有单点故障。

  3. 共享数据库。 所有实例连接到共享数据库,如 PostgreSQL 或 MySQL。数据库作为持久数据的唯一事实来源,包括:项目、模板、清单、调度、任务历史、用户账户和 RBAC 配置。

  4. Redis 协调层。 Redis 提供协调层,使多个节点能够作为单一系统运行。它提供三个重要功能。

HA 集群中的作业执行方式

在多节点 Semaphore 部署中,任务执行遵循协调流程。

  1. 用户触发任务。用户通过 UI 或 API 启动作业。请求可以落在任何 Semaphore 实例上。
  2. 任务元数据被存储。接收节点将任务元数据写入数据库,并通过 Redis 发出工作信号。
  3. 节点接收任务。可用节点之一从 Redis 检索任务,获取分布式锁,并在数据库中将任务标记为正在运行。
  4. 任务执行。节点在本地或通过分布式运行器/代理执行任务。进度和日志持续写回数据库。
  5. 结果被广播。任务更新通过 Redis Pub/Sub 传播,使所有节点和 UI 客户端保持同步。

使用多个运行器进行水平扩展

高可用性还支持任务执行的水平扩展。与其仅在 Semaphore 节点本身上运行作业,不如将执行委托给多个运行器或代理。对于大型 DevOps 团队,这种架构支持企业级自动化工作负载:

主动-主动 Semaphore 部署的优势

提高可靠性。 如果一个实例发生故障,其他实例继续服务流量和执行作业。

零停机维护。 无需停止系统即可更新或重启节点。

水平可扩展性。 可以在负载均衡器后面添加额外的 Semaphore 节点以增加容量。

无主节点依赖。 所有节点平等,消除了复杂的故障转移机制。 整个集群的一致状态。共享数据库存储和 Redis 协调使所有实例保持同步。

典型使用场景

主动-主动 Semaphore 部署常见于需要持续自动化可用性的环境中,例如:

结论

主动-主动高可用性使 Semaphore UI 从单一自动化服务器演变为弹性分布式系统。多个 Semaphore 实例在负载均衡器后面协同工作,通过数据库和 Redis 共享状态,而不是依赖一个进程来处理 UI、调度和任务执行。结果是一个即使个别节点发生故障仍然可用、并能随工作负载增长而水平扩展的自动化平台。

主动-主动 HA 支持在 Semaphore Enterprise 版本中提供。除了高可用性外,Enterprise 版本还包括为更大团队和生产环境设计的功能——如高级 RBAC(基于角色的访问控制),允许组织在项目、团队和环境中定义细粒度权限。

如果您正在评估适用于您基础设施的高可用性自动化平台,可以申请 Enterprise 版本的试用,测试 HA 架构并了解它如何融入您的 DevOps 工作流。

Request an Enterprise Trial

FAQ

什么是主动-主动高可用性?

主动-主动高可用性意味着多个应用实例同时运行,所有实例都可以处理请求。没有主节点——任何实例都可以处理流量和执行作业。

为什么 Semaphore 在 HA 模式下使用 Redis?

Redis 充当实例之间的协调层。它提供分布式锁、共享任务队列状态和 Pub/Sub 消息传递,以确保节点不会同时执行相同的作业。

Semaphore 支持哪些数据库用于 HA 部署?

Semaphore 支持 PostgreSQL 和 MySQL 作为存储持久系统数据的共享数据库。

如果一个 Semaphore 节点发生故障会怎样?

负载均衡器会简单地将流量路由到其余节点。正在运行的作业会继续执行,新作业由其他实例接收。

Semaphore 可以水平扩展吗?

可以。可以添加额外的 Semaphore 节点和运行器来增加执行容量并处理更大的自动化工作负载。