堡垒机高可用需从架构解耦四大能力:统一认证中心、会话代理层、审计日志集中化、配置中心化,并替换数据库与redis为高可用集群,结合vip漂移或dns健康路由及stonith防脑裂,辅以定期断网演练和分离备份。

堡垒机本身是运维入口的单点,一旦宕机,所有远程操作都会中断。要防止单点故障,不能只给堡垒机做“双机热备”,而必须从架构层面解耦身份认证、会话代理、审计存储与控制平面,让任一节点失效都不影响登录、操作或审计连续性。
核心组件分离部署
把堡垒机的四大能力(认证、授权、会话、审计)拆到不同服务中,避免全部压在单一实例上:
- 统一认证中心:用独立的 LDAP/AD 或 Keycloak 集群承载身份验证,堡垒机节点只作客户端,不存用户密码
- 会话代理层:部署多个 Jumpserver 实例(或商业堡垒机的多节点模式),前端用 Nginx / HAProxy 做 TCP 代理(非 HTTP),负载分发 SSH/Web Terminal 流量
- 审计日志集中化:关闭本地存储,所有会话录像和命令日志实时写入 Elasticsearch 集群(带副本)或 Kafka + PostgreSQL 主从集群,避免单机磁盘损坏导致审计丢失
- 配置与策略中心化:将资产列表、权限策略、审批流程等配置存于 Consul 或 etcd,各堡垒机节点启动时拉取,确保策略一致、无漂移
数据库与会话状态高可用
JumpServer 等开源堡垒机默认用 SQLite 或单点 MySQL,必须替换为高可用后端:
- 数据库改用 PostgreSQL 流复制集群(主从+自动故障转移),JumpServer 的
settings.py中配置主库连接,应用层无需感知切换 - Redis 用于缓存和会话状态,必须部署 Redis Cluster 或哨兵模式(Sentinel),禁用单点 Redis 实例
- 若使用会话录像转码功能,FFmpeg 任务队列(如 Celery)应指向 RabbitMQ 或 Redis Cluster,防止任务堆积或丢失
接入层与故障隔离设计
用户访问路径不能依赖某一台堡垒机的 IP 或域名解析:
- 前端用 Keepalived + VRRP 绑定虚拟 IP(VIP),两台堡垒机节点间心跳检测,主节点宕机后 VIP 秒级漂移
- 更推荐 DNS 轮询 + 健康检查:将多个堡垒机节点域名(如 jms-node1.ops、jms-node2.ops)加入 DNS,由全局负载均衡器(如 F5、Cloudflare Load Balancing)按健康状态路由
- 启用 STONITH 类机制:当某节点网络分区但仍在运行时,通过云平台 API(如阿里云 ECS StopInstance)或 IPMI 强制关机,防脑裂
运维与灾备关键项
高可用不是配完就完事,需持续保障:
- 所有堡垒机节点使用同一域账户运行服务,且该账户在每台机器上具备 systemd 管理权限,便于 Pacemaker 或自定义脚本接管
- 定期执行“节点拔网线”演练:模拟单节点断网,验证 VIP 漂移、会话是否自动重连、新会话能否正常建立、审计日志是否持续落库
- 备份策略分离:数据库备份走 pg_dump + WAL 归档;录像文件备份走 rclone 同步至对象存储(如 S3 兼容服务),不依赖本地磁盘










