소개

많은 자동화 플랫폼은 단일 노드 아키텍처로 시작합니다. 하나의 프로세스가 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는 단일 자동화 서버에서 탄력적인 분산 시스템으로 진화할 수 있습니다. UI 제공, 스케줄링, 태스크 실행을 하나의 프로세스에 의존하는 대신, 여러 Semaphore 인스턴스가 로드 밸런서 뒤에서 함께 작동하면서 데이터베이스와 Redis를 통해 상태를 공유합니다. 그 결과, 개별 노드가 실패하더라도 사용 가능하고 워크로드가 증가함에 따라 수평으로 확장할 수 있는 자동화 플랫폼이 됩니다.

액티브-액티브 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 노드와 러너를 추가하여 실행 용량을 늘리고 더 큰 자동화 워크로드를 처리할 수 있습니다.