SkyWalking 高可用部署的最后一环 —— UI 集群化。
虽然 UI 是“只读”组件,但在生产环境中,单实例 UI 仍是风险点:一旦宕机,运维人员无法查看监控数据,影响故障排查效率。
好消息是:SkyWalking UI 是完全无状态的前端应用,天然支持多实例部署,可轻松实现 高可用 + 负载均衡。
🌐 SkyWalking UI 集群化与高可用部署指南
✅ 目标:
部署多个 UI 实例,通过负载均衡对外提供服务,实现 7×24 小时可访问的监控门户。
一、UI 的架构特点(为什么能轻松集群化?)
| 特性 | 说明 |
|---|---|
| 🧍♂️ 无状态(Stateless) | UI 不存储任何数据,所有数据通过 HTTP 请求从 OAP 获取 |
| 🔌 前后端分离 | UI 是纯静态资源(HTML/JS/CSS),OAP 提供 RESTful/GraphQL API |
| 📡 只读客户端 | 不修改数据,只查询展示 |
| 🔄 可水平扩展 | 增加实例即可提升并发能力 |
✅ 结论:UI 是最容易实现高可用的组件
二、UI 集群架构图
+------------------+
| Load Balancer |
| (Nginx / ALB / VIP)|
+--------+---------+
|
+--------------+--------------+
| |
+------v-------+ +---------v----------+
| UI Node 1 | | UI Node 2 |
| (Static Web) | | (Static Web) |
+------+---------+ +---------+----------+
| |
+--------------+--------------+
|
+--------v---------+
| OAP Cluster |
| (Query Service) |
+--------+---------+
|
+--------v---------+
| Shared Storage |
| (Elasticsearch) |
+------------------+
🔍 数据流说明:
- 用户访问 LB → 被分发到任意 UI 节点
- UI 浏览器发起 API 请求 → 指向 OAP 集群的 Query 服务(通常是 LB 地址)
- OAP 从 ES 读取数据 → 返回 JSON
- UI 渲染 Dashboard / Trace / Logs
✅ 所有 UI 实例共享同一套后端数据源,数据一致性由 OAP + ES 保证。
三、部署方式(三种常见方案)
方案 1️⃣:Docker 部署(推荐)
# 启动第一个 UI 实例
docker run -d \
--name skywalking-ui-01 \
-p 8080:8080 \
-e SW_OAP_ADDRESS=http://oap-lb:12800 \
apache/skywalking-ui:9.7.0
# 启动第二个 UI 实例(不同端口)
docker run -d \
--name skywalking-ui-02 \
-p 8081:8080 \
-e SW_OAP_ADDRESS=http://oap-lb:12800 \
apache/skywalking-ui:9.7.0
✅ 环境变量说明:
SW_OAP_ADDRESS:指向 OAP 集群的负载均衡地址(不是单个节点)
方案 2️⃣:Docker Compose
version: '3.8'
services:
ui-node-01:
image: apache/skywalking-ui:9.7.0
environment:
- SW_OAP_ADDRESS=http://oap-cluster:12800
ports:
- "8080:8080"
depends_on:
- oap-cluster
ui-node-02:
image: apache/skywalking-ui:9.7.0
environment:
- SW_OAP_ADDRESS=http://oap-cluster:12800
ports:
- "8081:8080"
depends_on:
- oap-cluster
方案 3️⃣:Kubernetes 部署(生产推荐)
# deployment-ui.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: skywalking-ui
spec:
replicas: 3
selector:
matchLabels:
app: skywalking-ui
template:
metadata:
labels:
app: skywalking-ui
spec:
containers:
- name: ui
image: apache/skywalking-ui:9.7.0
env:
- name: SW_OAP_ADDRESS
value: http://skywalking-oap:12800 # 指向 OAP Service
ports:
- containerPort: 8080
---
# service-ui.yaml
apiVersion: v1
kind: Service
metadata:
name: skywalking-ui
spec:
type: LoadBalancer # 或 NodePort / Ingress
ports:
- port: 80
targetPort: 8080
selector:
app: skywalking-ui
四、配置关键参数
环境变量(必须设置)
| 环境变量 | 示例值 | 说明 |
|---|---|---|
SW_OAP_ADDRESS | http://oap-lb:12800 | 指向 OAP 集群的 Query 服务地址(HTTP 端口 12800) |
SW_STATIC_FILES_DIR | /dist | 静态文件目录(通常无需修改) |
SERVER_CONTEXT_PATH | / | UI 的上下文路径(如设为 /sw,则访问 /sw) |
✅ 生产建议:
SW_OAP_ADDRESS指向 OAP 的负载均衡器,而非单个节点。
五、前端负载均衡配置(Nginx 示例)
upstream skywalking_ui {
# 负载均衡策略:轮询(默认)
server 192.168.1.20:8080 max_fails=3 fail_timeout=30s;
server 192.168.1.21:8080 max_fails=3 fail_timeout=30s;
server 192.168.1.22:8080 max_fails=3 fail_timeout=30s;
}
server {
listen 80;
server_name skywalking.example.com;
location / {
proxy_pass http://skywalking_ui;
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_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
六、高可用保障机制
| 机制 | 说明 |
|---|---|
| 无状态 UI | 任意实例宕机,用户刷新即可切到其他实例 |
| LB 健康检查 | 自动剔除故障节点 |
| 滚动更新 | 逐个更新 UI 实例,无感升级 |
| CDN 加速(可选) | 将静态资源(JS/CSS)托管到 CDN,提升访问速度 |
| HTTPS | 通过 LB 或 Ingress 启用 TLS 加密 |
七、验证 UI 集群是否正常
1. 检查多实例可访问
curl http://ui-node-01:8080
curl http://ui-node-02:8080
应返回 HTML 页面。
2. 通过 LB 访问
访问 http://lb-address,刷新多次,观察是否在不同实例间切换(可通过日志或响应头判断)。
3. 模拟节点宕机
- 停止一个 UI 实例
- 通过 LB 访问,应仍能正常加载页面
4. 检查数据一致性
- 在不同 UI 实例中查看同一服务的指标
- 确保数据一致(由 OAP 保证)
✅ 总结:UI 集群部署口诀
“一配置(SW_OAP_ADDRESS)、二部署(多实例)、三负载(LB)、四监控”
只要记住:
- UI 是静态资源
- 数据来自 OAP
- OAP 地址指向集群 LB
- UI 可随意扩展
你就能构建一个永不宕机的 SkyWalking 监控门户。
🎁 附件:完整高可用架构图(最终版)
+------------------+
| User Browser |
+--------+---------+
|
+--------v---------+
| LB (Nginx) | ← UI 负载均衡
+--------+---------+
|
+--------------+--------------+
| |
+------v-------+ +---------v----------+
| UI Node 1 | | UI Node 2 | → 静态 Web
+------+---------+ +---------+----------+
| |
+--------------+--------------+
|
+--------v---------+
| LB (Nginx) | ← OAP 负载均衡
+--------+---------+
|
+--------------+--------------+
| |
+------v-------+ +---------v----------+ +---------v----------+
| OAP Node 1 | | OAP Node 2 | | OAP Node 3 |
+------+---------+ +---------+----------+ +---------+----------+
| | |
+--------------+--------------+----------------------+
|
+--------v---------+
| Shared Storage |
| (ES Cluster) |
+------------------+
611

被折叠的 条评论
为什么被折叠?



