Keep Semaphore available when an app node stops

Put active Semaphore nodes behind one service address. Keep the UI and API reachable during application-node maintenance, with shared database and Redis coordination.

Automation stays online through a second Semaphore node when one application node becomes unavailable.

Your infrastructure depends on automation being available

During an incident, your team needs Semaphore to run recovery jobs and infrastructure changes. One unavailable app node should not take that access away.

Single app node offline
Open the UI Use the API Start jobs

Keep Semaphore available with Enterprise HA

Enterprise HA keeps the UI and API available through healthy app nodes when another node stops.

Another app node keeps serving
Open the UI Use the API Start jobs

What Semaphore needs for HA

01

Two or more Semaphore nodes

Run at least two equivalent Semaphore instances. Keep the shared configuration aligned and give each node a unique ha.node_id.

02

HTTP + WebSocket load balancing

Route both HTTP and WebSocket connections through a load balancer that can take an unhealthy node out of its pool.

03

Shared SQL database and Redis

Connect every node to the same PostgreSQL or MySQL database and Redis backend. Protect these shared services against failure too. SQLite is not supported for HA.

HTTP and WebSocket traffic reaches two active Semaphore nodes through a load balancer. Both nodes share a PostgreSQL or MySQL database and Redis coordination.

Plan the rest of your production deployment

Place execution near your infrastructure

Use runners for private networks and independent execution capacity.

Runners

Give teams the access they need

Combine your deployment with project roles and Enterprise access controls.

Access control

Plan availability for the whole deployment

Keep shared state visible in the architecture

The documented topology is active-active: equal Semaphore nodes use one shared PostgreSQL or MySQL database and Redis coordination. The database holds application state; Redis supports distributed locks, queue state, and updates between nodes. SQLite and BoltDB are not supported database choices for this HA design.

Support both requests and live updates

The load balancer must handle HTTP and WebSocket traffic so clients can reach healthy application nodes and receive live updates. Its own redundancy, TLS configuration, health checks, and operational behaviour belong to the deployment. Adding application nodes does not automatically configure those properties.

Scale the application and execution paths separately

Application nodes provide the web/API and coordination layer. Runners can place and expand task execution independently. This helps the team reason about whether a capacity change concerns user/API load, task concurrency, or access to another network, rather than assuming every additional application node solves all three.

Give each failure domain its own recovery plan

Application-node availability, database recovery, Redis availability, and site-level disaster recovery are different responsibilities. Backups, restore testing, recovery objectives, and version-compatible upgrade procedures remain necessary. A topology can tolerate one kind of failure while remaining vulnerable to another.

Keep coordination available with Redis Sentinel

Use the Redis Sentinel backend when coordination also needs failover. Each Semaphore node discovers the active Redis master through Sentinel and follows a promoted replica without restarting. Configure the same Sentinel deployment across the application nodes, alongside the shared database and load-balancer availability plan.

Include shared dependencies in the availability plan

The SQL database, Redis and load balancer serve every application node. Configure redundancy and recovery for these services alongside the Semaphore nodes.

Keep a recovery path for the data

Application redundancy and data recovery solve different problems. Maintain backups and test restoration for the database and configuration your automation depends on.

FAQ

What components are required for Semaphore high availability?

The documented active-active architecture uses multiple Semaphore application nodes, a shared PostgreSQL or MySQL database, Redis coordination, and a load balancer that supports HTTP and WebSocket traffic. Each node needs the appropriate shared settings and a unique HA identifier. Plan the availability of those dependencies alongside the application nodes. A second process alone does not provide the shared state and coordination required for the full topology.

Is Semaphore HA active-active or active-passive?

The architecture described here is active-active, with equal application nodes participating in the service. It does not depend on a dedicated primary application node and a passive standby. Use the current HA guide to configure the supported design and avoid inferring a separate active-passive reference architecture from general availability language. If your infrastructure requires a different topology, resolve its state and failover behaviour before deployment.

Can I use SQLite or BoltDB in an HA deployment?

No. The documented HA design requires a shared PostgreSQL or MySQL database together with Redis. The database is the common source of application state for the participating nodes. If you are moving from a single-node setup with another storage option, plan migration, backups, and validation as separate work. Adding application nodes should not be the first time you test that the intended shared database contains and serves the required data.

Does application HA also protect the database, Redis, and load balancer?

Those components need their own resilience strategy. Semaphore's multi-node application design does not automatically create database failover, redundant load balancing, or an available Redis service. Identify each dependency's failure domain, recovery process, and capacity requirements. Test the complete path from a client request to a task result so your availability plan covers the service people use, rather than only the number of application nodes running.

Will running tasks survive an application-node failure or upgrade?

Do not assume uninterrupted in-flight execution from the presence of multiple application nodes. Behaviour depends on the execution path, the failed component, and the release being operated. Test the task lifecycle you rely on, including status reporting and any runner involvement. Likewise, plan upgrade compatibility and migrations deliberately instead of treating every version change as a guaranteed zero-downtime rolling operation. UI availability and task continuity are different requirements.

Which plan includes HA and how should we evaluate it?

High availability is an Enterprise capability. Start with your required operating hours, maintenance process, recovery objectives, and existing database and load-balancer services. Use the documented topology to identify gaps, then test node removal, dependency recovery, and backups in a representative environment. An architecture discussion is useful when those requirements are business-critical because the complete deployment, rather than a single feature switch, determines the result.

Can users keep the same URL when an application node is taken offline?

That is the purpose of putting active app nodes behind one load-balanced service address. The load balancer must stop sending requests to the unavailable node and support both HTTP and WebSocket traffic. The surviving node still needs access to the shared database, Redis and matching application configuration to serve the project.

Do I need HA to execute tasks in several private networks?

No. Multiple execution locations are handled by runners. High availability concerns the Semaphore application layer, while runners concern where tasks execute and which systems they can reach. A production deployment can use both: HA app nodes for the shared UI and API, and project runners near private infrastructure.