Haute disponibilité
La haute disponibilité est disponible dans l'édition Semaphore Enterprise.
Semaphore UI prend en charge les déploiements en haute disponibilité (HA) actif-actif, dans lesquels plusieurs instances s'exécutent simultanément derrière un répartiteur de charge. Chaque instance est pleinement capable de traiter les requêtes de l'interface, les appels API, les tâches planifiées et l'exécution des tâches. Si une instance tombe en panne, les nœuds restants continuent de fonctionner sans interruption.
Architecture
Un déploiement actif-actif typique se compose des éléments suivants :
Répartiteur de charge — Les utilisateurs se connectent via un répartiteur de charge (par exemple NGINX, HAProxy ou un répartiteur de charge cloud). Le répartiteur de charge distribue le trafic HTTP et WebSocket entre les nœuds Semaphore disponibles.
Nœuds Semaphore — Chaque nœud exécute une instance identique de Semaphore UI. N'importe quel nœud peut recevoir des requêtes utilisateur, lancer des tâches d'automatisation, traiter des tâches planifiées et envoyer des mises à jour en temps réel. Tous les nœuds sont égaux : il n'y a ni nœud principal ni nœud de secours.
Base de données partagée — Toutes les instances se connectent à une base de données PostgreSQL ou MySQL partagée. La base de données constitue la source unique de vérité pour les projets, les modèles, les inventaires, les planifications, l'historique des tâches, les comptes utilisateurs et la configuration RBAC.
SQLite et BoltDB ne sont pas pris en charge pour les déploiements HA. Utilisez PostgreSQL ou MySQL.
Redis — Redis fournit la couche de coordination qui permet à plusieurs nœuds de se comporter comme un système unique. Il remplit trois fonctions :
- Les verrous distribués garantissent qu'une seule instance exécute une tâche donnée à la fois, ce qui évite les exécutions en double.
- L'état partagé de la file d'attente des tâches maintient la file d'attente afin que chaque tâche soit prise en charge par exactement un worker. Tous les nœuds voient la même file d'attente et coordonnent l'exécution.
- La messagerie Pub/Sub permet aux nœuds de diffuser des événements tels que les mises à jour de tâches, les notifications du cluster, l'invalidation du cache et les changements d'état de l'interface. Cela maintient tous les nœuds synchronisés en temps réel.
Prérequis
Avant de configurer la HA, vous avez besoin de :
- Une clé d'abonnement Semaphore Enterprise.
- Une base de données PostgreSQL ou MySQL partagée, accessible depuis tous les nœuds.
- Une instance Redis (ou un cluster Redis) accessible depuis tous les nœuds.
- Un répartiteur de charge prenant en charge le trafic HTTP et WebSocket.
- Deux serveurs ou plus pour exécuter les instances Semaphore.
Tous les nœuds Semaphore doivent utiliser la même base de données, la même instance Redis et la même configuration (à l'exception de ha.node_id, qui doit être unique pour chaque nœud).
Configuration
Activez la HA en ajoutant le bloc ha à votre fichier config.json sur chaque nœud :
{
"dialect": "postgres",
"postgres": {
"host": "db.example.com:5432",
"name": "semaphore",
"user": "semaphore",
"pass": "***"
},
"ha": {
"enabled": true,
"node_id": "node-1",
"redis": {
"addr": "redis.example.com:6379",
"db": 0,
"pass": "***"
}
},
"cookie_hash": "...",
"cookie_encryption": "...",
"access_key_encryption": "..."
}
Chaque nœud doit avoir un ha.node_id unique. Tout le reste de la configuration doit être identique sur tous les nœuds.
Variables d'environnement
Vous pouvez également configurer la HA à l'aide de variables d'environnement :
SEMAPHORE_HA_ENABLED=true
SEMAPHORE_HA_NODE_ID=node-1
SEMAPHORE_HA_REDIS_ADDR=redis.example.com:6379
SEMAPHORE_HA_REDIS_DB=0
SEMAPHORE_HA_REDIS_PASS=***
Référence de configuration
| Option du fichier de configuration | Variable d'environnement | Description |
|---|---|---|
ha.enabled | SEMAPHORE_HA_ENABLED | Active le mode haute disponibilité. |
ha.node_id | SEMAPHORE_HA_NODE_ID | Identifiant unique de ce nœud. |
ha.redis.addr | SEMAPHORE_HA_REDIS_ADDR | Adresse du serveur Redis (par exemple localhost:6379). |
ha.redis.db | SEMAPHORE_HA_REDIS_DB | Numéro de la base de données Redis. |
ha.redis.pass | SEMAPHORE_HA_REDIS_PASS | Mot de passe du serveur Redis. |
ha.redis.user | SEMAPHORE_HA_REDIS_USER | Nom d'utilisateur du serveur Redis. |
ha.redis.tls | SEMAPHORE_HA_REDIS_TLS | Active TLS pour la connexion Redis. |
ha.redis.tls_skip_verify | SEMAPHORE_HA_REDIS_TLS_SKIP_VERIFY | Ignore la vérification du certificat TLS pour Redis. |
Consultez Configuration pour la liste complète des options disponibles.