JumpServer堡垒机高可用部署完整指南:三步搭建零中断的运维安全网关

发布时间:2026/10/8 8:34:32

JumpServer堡垒机高可用部署完整指南:三步搭建零中断的运维安全网关 JumpServer堡垒机高可用部署完整指南三步搭建零中断的运维安全网关【免费下载链接】jumpserverJumpServer is an open-source Privileged Access Management (PAM) platform that provides DevOps and IT teams with on-demand and secure access to SSH, RDP, Kubernetes, Database and RemoteApp endpoints through a web browser.项目地址: https://gitcode.com/GitHub_Trending/ju/jumpserver每个稍有规模的运维团队都经历过这样的至暗时刻凌晨两点线上服务器需要紧急处理而唯一能连进去的堡垒机节点恰好宕机了。所有开发同事盯着终端等你重启一下你却连堡垒机本身都登不进去——因为这台唯一的堡垒机既承担了登录入口又是数据库访问的必经之路单点故障让整个团队的运维通道瞬间瘫痪。JumpServer 是一个开源特权访问管理PAM平台也被称为开源堡垒机它能通过网页浏览器统一接管 SSH、RDP、Kubernetes、数据库与 RemoteApp 等所有访问入口让运维和研发人员按需获得安全、合规的访问权限。更关键的是它支持多节点集群架构可以从架构层面彻底消灭单点故障。本文将从单机运维的痛点出发带你一步步完成 JumpServer 高可用部署并给出故障切换、健康检查与日常排错的完整实操方案。一、为什么单机堡垒机撑不起生产环境很多人第一次部署 JumpServer 用的是一台服务器全包的模式Web 服务、数据库、Redis、录像存储全挤在一台机器里。小规模试用没问题一旦接入生产环境三个致命问题就会暴露隐患表现后果单点故障节点宕机、磁盘损坏、网络中断全员无法访问任何资产运维通道整体瘫痪性能瓶颈并发连接增多后响应变慢录像写入与数据库查询互相争抢资源升级风险版本升级需停机维护每次升级都是一次赌上业务的冒险高可用集群要解决的本质上是三个问题无单点故障、故障自动转移、数据一致同步。JumpServer 的架构天然支持负载均衡 多应用节点 共享存储的横向扩展模式这也是生产环境最主流的部署形态。二、先看懂 JumpServer 高可用架构在动手之前先花两分钟理解整张架构图后面每一步操作你都会知道自己在搭哪一块。整个集群由四个层次组成每一层都有明确职责接入层Nginx 负责请求分发与被动健康检查客户端永远只看到一个 VIP 或域名应用层至少 2 个 JumpServer 节点并行运行任一节点故障时流量自动切换到健康节点数据层PostgreSQL 负责业务数据Redis 承载 Celery 任务队列、WebSocket 与缓存会话存储层共享存储NFS/SMB统一保存录像与配置文件保证多节点看到的文件一致。JumpServer 的代码组织也对应了这些层次你可以直接翻阅源码加深理解数据库连接与 Redis 配置集中在 apps/jumpserver/settings/base.py健康检查接口实现在 apps/jumpserver/api/health.py而 Celery 分布式任务的调度逻辑在 apps/ops/celery/utils.py。三、环境规划先算清楚要几台机器1. 资源规划表参考下面的配置做规划建议至少保证 2 个应用节点与数据库主从才能满足 99.9% 的可用性要求节点类型数量配置建议职责负载均衡1~22C4G流量分发、健康检查、可选 Keepalived 实现 VIP 漂移应用节点24C8G运行 JumpServer 核心服务数据库1 主 1 从4C16G存储核心业务数据并同步备份Redis1 或集群2C4G缓存、会话、Celery 队列共享存储1100G录像文件与配置文件2. 系统基础配置所有节点统一做三件事安装 Docker、开放端口、同步时间。以 CentOS 系为例# 安装 Docker 及其依赖 yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo yum install -y docker-ce docker-ce-cli containerd.io systemctl enable --now docker # 开放 JumpServer 相关端口按实际安全策略调整 firewall-cmd --permanent --add-port8080/tcp firewall-cmd --permanent --add-port8070/tcp firewall-cmd --reload如果使用源码方式构建镜像仓库里也提供了现成的构建脚本 utils/build_docker.sh可以一键完成镜像打包。四、数据层先行数据库与缓存高可用集群的数据层必须先上车。生产环境推荐使用 Docker 直接拉起 PostgreSQL 主库docker run -d --name postgres-master \ -e POSTGRES_USERjumpserver \ -e POSTGRES_PASSWORD你的强密码 \ -e POSTGRES_DBjumpserver \ -v /data/postgres:/var/lib/postgresql/data \ -p 5432:5432 \ postgres:13从库的搭建属于标准的主从复制流程先在从库恢复主库全量备份再配置primary_conninfo指向主库即可。Redis 则直接使用单实例 持久化开启的模式已能覆盖大多数团队规模docker run -d --name redis \ -v /data/redis:/data \ -p 6379:6379 \ redis:6 redis-server --appendonly yes关于数据库和 Redis 的连接参数JumpServer 的全部配置都收敛在仓库根目录的 config_example.yml 中包括DB_ENGINE、DB_HOST、REDIS_HOST等关键项多节点部署时必须保证这份配置在应用节点间完全一致。五、应用节点部署两台机器跑同一套服务1. 准备共享存储应用节点是无状态的但它们要读写的录像文件必须全局一致。先在一台机器上部署 NFS# 服务端 yum install -y nfs-utils echo /data/share 192.168.1.0/24(rw,sync,no_root_squash) /etc/exports systemctl enable --now nfs-server # 每个应用节点挂载 mkdir -p /data/jumpserver/share mount -t nfs 192.168.1.5:/data/share /data/jumpserver/share2. 拉取代码并部署在每个应用节点上执行相同的操作。首先克隆仓库git clone https://gitcode.com/GitHub_Trending/ju/jumpserver cd jumpserver接着修改 config_example.yml 中的关键配置并重命名为config.ymlSECRET_KEY: 你的随机密钥字符串 BOOTSTRAP_TOKEN: 你的预共享Token # 数据库与 Redis 指向集群公共地址 DB_ENGINE: postgresql DB_HOST: 192.168.1.6 DB_PORT: 5432 DB_USER: jumpserver DB_PASSWORD: 你的强密码 DB_NAME: jumpserver REDIS_HOST: 192.168.1.7 REDIS_PORT: 6379其中SECRET_KEY与BOOTSTRAP_TOKEN必须由你手动生成并保持一致它们是多节点互相认证的基础cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 49; echo3. 启动容器docker run -d --name jumpserver \ -v /data/jumpserver/share:/opt/jumpserver/share \ -v /data/jumpserver/config:/opt/jumpserver/config \ -p 8080:8080 \ -p 8070:8070 \ jumpserver/jumpserver:v3.10.0启动后用浏览器访问http://你的节点IP:8080默认账号admin、密码ChangeMe能登录即代表该节点工作正常。第二个节点重复上面全部步骤即可。六、接入负载均衡让流量自动找健康的节点1. Nginx 配置示例upstream jumpserver_cluster { server 192.168.1.10:8080 max_fails3 fail_timeout30s; server 192.168.1.11:8080 max_fails3 fail_timeout30s; } server { listen 80; server_name jumpserver.example.com; location / { proxy_pass http://jumpserver_cluster; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; } }注意 WebSocket 协议头Upgrade/Connection必须保留否则网页终端会连接失败。2. 用好内置健康检查JumpServer 原生提供了健康检查接口/api/health/它会同时探测数据库与 Redis 的连通性并返回 JSON 状态这是做负载均衡主动健康检查的最佳抓手。接口实现在 apps/jumpserver/api/health.py会返回status、db_status、redis_status三个关键字段。除此之外还可以配合仓库里的 utils/check_celery.sh 脚本通过检查 Celery Worker 的心跳文件时间戳来判断后台任务是否存活# 心跳文件超过 20 秒未更新则视为异常 test -e /tmp/worker_heartbeat_ansible \ test $(($(date %s) - $(stat -c %Y /tmp/worker_heartbeat_ansible))) -lt 20七、故障演练把节点拔了服务还能不能跑集群搭完验证才是重头戏。建议按下面三步做一次完整的故障注入测试第一步验证自动切换。在任一应用节点上执行docker stop jumpserver随后持续观察 Nginx 访问日志正常情况下请求会自动全部转向另一个健康节点用户侧几乎无感知tail -f /var/log/nginx/access.log第二步验证数据一致性。在主库插入测试数据再到从库确认同步是否正常# 主库写入 psql -h 192.168.1.6 -U jumpserver -c INSERT INTO assets_asset(name) VALUES(test-ha) # 从库查询 psql -h 192.168.1.6 -U jumpserver -c SELECT * FROM assets_asset WHERE nametest-ha第三步验证会话共享。通过负载均衡登录一次 JumpServer再刷新或从另一节点进入确认会话仍然有效——这依赖 Redis 中的 Session 数据也是前面强调 Redis 配置必须一致的原因。八、高频坑点与排错速查症状可能原因解决办法网页终端连接失败Nginx 未转发 WebSocket 头补齐Upgrade与Connection头配置节点间配置不一致各节点手动改了 config.yml统一通过共享存储维护配置或使用配置管理工具分发Celery 任务重复执行多节点同时调度定时任务确认 Redis 锁生效参考 apps/ops/celery/utils.py 中的beat-distribute-start-lock逻辑健康检查返回异常数据库或 Redis 连接超时直接访问/api/health/查看db_status/redis_status字段定位录像文件缺失节点间存储未共享确认所有节点挂载同一份 NFS 目录九、生产环境优化方向集群能跑起来只是及格线以下几个方向决定它能跑多久、跑多稳负载均衡自身高可用用 Keepalived 给两台 Nginx 配置 VIP 漂移避免负载层成为新的单点数据库定期备份使用仓库提供的 utils/backup_db.sh 脚本或 PostgreSQL 的 pg_dump 做定时全量备份并定期演练恢复流程资源监控与告警重点盯应用节点 CPU/内存、数据库复制延迟、Redis 内存水位四类指标建议设置磁盘使用率告警阈值如 90%升级策略采用蓝绿发布先升级一个节点验证无异常再滚动升级其余节点把每次升级的停机时间压到分钟级甚至零。十、总结与下一步回过头看这套方案的全部要点可以浓缩为三句话配置统一用共享存储和同一份 config.yml 消除节点差异、依赖集群化数据库与 Redis 作为公共依赖独立部署、接入层兜底Nginx 健康检查自动剔除故障节点。做到这三点JumpServer 高可用部署就已经完成了 80%。下一步建议你先在自己的测试环境里用两台虚拟机按本文流程完整走一遍重点练习停节点 看日志 验数据这套故障演练动作。等你在生产环境跑顺了再考虑引入 Prometheus Grafana 对集群做更细粒度的观测——那会是另一篇值得写的故事。现在就从克隆仓库、搭起第一个节点开始吧。【免费下载链接】jumpserverJumpServer is an open-source Privileged Access Management (PAM) platform that provides DevOps and IT teams with on-demand and secure access to SSH, RDP, Kubernetes, Database and RemoteApp endpoints through a web browser.项目地址: https://gitcode.com/GitHub_Trending/ju/jumpserver创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/10/7 16:56:36

beatoraja 节奏游戏完整指南:跨平台畅玩 BMS 的终极方案

beatoraja 节奏游戏完整指南:跨平台畅玩 BMS 的终极方案 【免费下载链接】beatoraja Cross-platform rhythm game based on Java and libGDX. 项目地址: https://gitcode.com/gh_mirrors/be/beatoraja beatoraja 是一款基于 Java 与 libGDX 构建的跨平台节奏…

2026/10/8 8:33:21

C++ 实现读写锁的代码详解

前言读写锁(reader-writer lock)要解决的是一类很常见的并发矛盾:共享数据被读的次数远远多于 被写的次数。用普通的 std::mutex,两个读者明明互不干扰,却必须排队,白白浪费了并行度; 而用读写锁…

2026/10/8 8:33:21

UIUC CS241系统编程中文讲义:从进程线程到内存同步的实战指南

简介:面向系统编程学习者的UIUC CS241中文讲义翻译项目,基于美国伊利诺伊大学厄巴纳-香槟分校经典课程整理而成,适合需要系统理解进程、线程、虚拟内存、同步与并发等底层机制的开发者参考。该资源为ApacheCN开源社区维护的校对版&#xff0c…

2026/10/8 8:33:21

DLL修复工具免费版靠不住?系统命令+运行库才是根本

简介:这款DLL修复工具面向因系统动态链接库缺失或损坏而导致软件无法运行的普通用户与维护人员,能够自动扫描并一键修复常见DLL错误,适用于游戏启动失败、办公软件报错等典型场景。压缩包共192个文件,约99.32MB,核心包…

2026/10/8 8:33:21

阿里云短信接口Demo全解析:从调用链路到生产落地

简介:这份压缩包定位为阿里云短信服务在PHP环境中的集成示例,面向需要快速接入短信验证码、系统通知或营销消息的网站开发者。压缩包整体大小约三点三五兆字节,内含阿里云官方短信服务的PHP开发包调用示例,完整演示了从配置访问密…

2026/10/8 8:33:21

Linux服务器RAR工具部署与命令行实战指南

简介:这是一款面向Linux 64位(x86_64)系统的RAR压缩工具测试版,对应版本6.1.b1,主要解决在纯命令行环境中创建、解压、修复RAR档案的需求,适合系统管理员、运维工程师以及经常处理跨平台压缩包的开发者。包…

2026/10/8 8:28:20

QuickBlue:AI应用工程化底座的实践与演进

1. QuickBlue 不是另一个“AI平台”,而是一套被低估的工程化底盘QuickBlue 这个名字刚出现在我视野里时,我下意识点开几个技术社区帖子,发现多数讨论都卡在“它是不是又一个大模型封装壳”上——这恰恰暴露了当前企业落地AI最深的误区&#x…

2026/10/5 6:32:56

Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化

1. 从“Jev”说起:为什么我要把Agent接进浏览器“Jev”这个词最近在圈子里出现的频率越来越高,很多人第一次听到会以为是某个新模型的名字,其实它更像是一种思路——把Jev模型的能力当作底座,通过Agent的方式去接管浏览器&#xf…

2026/10/7 8:18:33

多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系

1. 从"单兵作战"到"集群协同":多智能体编排到底在解决什么问题如果你最近在折腾 Agent 相关的东西,大概率会有一种感觉:单个 Agent 能做的事情,其实很快就摸到天花板了。你给它一个提示词,挂几个工…

2026/10/8 6:05:44

无源低通滤波器设计实战:从RC到LC,手把手教你避开那些坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 0:02:17

自然数立方等于连续奇数之和:从证明到编程验证

十几年来我一直游走在数学科普和编程教学这两块内容之间,对“看起来像魔法、拆开全是数学”的结论总是格外敏感。最近翻资料时又撞见一句话:任何一个自然数 m 的立方,都可以写成 m 个连续奇数之和。2 的立方等于 3 加 5,3 的立方等…

2026/10/8 0:02:17

C#上位机SSH连接实战:用SSH.NET补齐超时、批量与密钥认证

简介:这是一份基于 C# 开发的 SSH 连接功能半成品工程,原本作为另一个主项目的子功能模块,现独立打包分享。工程采用 WinForms 界面,包含源码、解决方案、安装部署工程、NuGet 依赖包及说明文档,适合正在做远程连接、网…

2026/10/8 0:02:17

Java SpringBoot一体化智能售后系统设计与实现全解析

毕业设计年年做,Java Web 方向的题目翻来覆去就那么几个,但“一体化智能售后系统”这个题,每次看到我都觉得值得认真聊一聊。它不是一个简单 curd 堆出来的管理系统,而是把客户、工单、派单、处理、回访、统计整条链路串起来的一套…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑