Section 06PKIFactorArchitecteDevOps
Haute disponibilité
Tolérance aux pannes nœud, datacenter et région.
Dernière mise à jour 2026-04-18
PKIFactor s'exécute en cluster actif-actif avec basculement automatique en moins d'une minute. La couche données s'appuie sur Patroni 3-nœuds (PostgreSQL streaming replication + etcd) et la couche applicative est stateless (aucune session locale, P12 généré à la demande).
RPO 0
La réplication PostgreSQL est configurée en synchronous_commit=on par défaut : aucun commit n'est acquitté tant que le replica de secours ne l'a pas reçu. Vous ne perdez aucun certificat même en cas de bascule immédiate.
6.1. Topologie cible
Load Balancer
HAProxy / Nginx • Health checks
Node 1
BackendACME/ESTFrontend
Node 2
BackendACME/ESTFrontend
Node 3
BackendACME/ESTFrontend
PgBouncer 1
PgBouncer 2
Patroni 1
leader
Patroni 2
replica
Patroni 3
replica
etcd 1
etcd 2
etcd 3
──── connexions actives • ─ ─ ─ réplication / consensus
6.2. Caractéristiques
| Composant | Mécanisme HA | RTO | RPO |
|---|---|---|---|
| Backend / API | Stateless, N nœuds derrière LB | < 5 s | 0 |
| ACME / EST | Stateless | < 5 s | 0 |
| PostgreSQL | Patroni + streaming replication sync | ~ 30-60 s | 0 (sync) |
| etcd | Quorum (2/3) | < 10 s | 0 |
| KMS (Vault Transit) | Cluster Vault HA | < 30 s | 0 |
6.3. Installation HA via pkifactor-ctl
bash
# Sur le nœud 1 (initial)
sudo pkifactor-ctl ha-init \
--node-name pki-node-1 \
--advertise-ip 10.0.0.11 \
--etcd-peers 10.0.0.11,10.0.0.12,10.0.0.13
# Sur les nœuds 2 et 3
sudo pkifactor-ctl ha-join \
--node-name pki-node-2 \
--advertise-ip 10.0.0.12 \
--leader 10.0.0.11
6.4. Vérification du cluster
bash
sudo pkifactor-ctl ha-status
# Sortie attendue :
# Cluster: pkifactor-prod
# ──────────────────────
# Nodes:
# ✓ pki-node-1 (10.0.0.11) role=leader uptime=12d 4h
# ✓ pki-node-2 (10.0.0.12) role=replica lag=0 bytes
# ✓ pki-node-3 (10.0.0.13) role=replica lag=0 bytes
#
# PostgreSQL: synchronous_commit=on, replication=streaming
# etcd: leader=10.0.0.12, healthy=3/3
# Last failover: 2026-04-12T08:14:23Z (auto, duration=42s)