SkyWalking UI 集群化与高可用部署指南

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)  |
                     +------------------+
🔍 数据流说明:
  1. 用户访问 LB → 被分发到任意 UI 节点
  2. UI 浏览器发起 API 请求 → 指向 OAP 集群的 Query 服务(通常是 LB 地址)
  3. OAP 从 ES 读取数据 → 返回 JSON
  4. 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_ADDRESShttp://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";
    }
}

✅ 访问:http://skywalking.example.com


六、高可用保障机制

机制说明
无状态 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)     |
                     +------------------+
SkyWalking 是一款开源的服务网格监控解决方案,它支持多种服务架构,并能有效收集并分析系统运行时数据、调用链信息以及资源使用情况等关键指标。虽然 SkyWalking 的核心功能是针对微服务架构设计的,但它同样可以应用于监控像 Nginx 这样的传统Web服务器。 ### 怎样在 Nginx 上集成 SkyWalking 为了将 SkyWalking 集成到 Nginx 中用于监控目的,你需要完成以下几个步骤: #### 安装和配置 SkyWalking Agent 1. **安装 SkyWalking Agent**:首先,下载并安装 SkyWalking Agent 到你的服务器上。通常,你可以从 SkyWalking 的 GitHub 页面找到最新的版本和安装指南。 ```bash curl -L https://github.com/apache/skywalking-agent/releases/download/v8.0.2/skywalking-agent-linux-x64-8.0.2.tar.gz | tar xzv ``` 2. **生成配置文件**:根据你的需求定制配置文件,比如如何采集数据、上报路径等等。SkyWalking 提供了详细的配置指导文档帮助你完成这一步骤。 3. **部署配置文件**:将生成的配置文件放置到合适的目录下,通常是 `/etc/skywalking` 目录。 #### 配置 Nginx 以接受来自 SkyWalking 的监控数据 Nginx 自身并不直接接收外部监控数据流,因此需要通过某种方式将 Nginx 的访问日志或者其他性能度量信息整合到 SkyWalking 的监控环境中。常见的做法包括: 1. **编写自定义脚本**:创建一个脚本来定期读取 Nginx 日志文件,然后将解析后的统计数据通过 API 或者其他方式发送给 SkyWalking Agent。 2. **使用第三方工具**:寻找一些已经集成 SkyWalking 和 Nginx 的工具或插件,它们可以帮助自动将 Nginx 的统计数据导入 SkyWalking。 #### 集成 SkyWalking UI 一旦 Agent 开始工作并收集数据,你需要将数据发送至 SkyWalking Server,以便可以在 SkyWalking 的 Web 控制面板查看监控结果。 1. **设置数据路由**:确保 Agent 正确配置了如何向 SkyWalking Server 发送数据的地址和端口。 2. **启动 SkyWalking Server**:运行 SkyWalking Server,确保它可以接收到来自 Agent 的数据。 3. **访问控制台**:登录 SkyWalking 的 Web 界面,查看 Nginx 的性能和调用链数据。 ### SkyWalking 在 Nginx 监控中的优势 - **统一视图**:SkyWalking 能够提供一个全局视角,展示 Nginx 其他服务之间的依赖关系和交互情况。 - **深度诊断**:除了基础的性能指标外,SkyWalking 还能够提供深入的诊断能力,帮助识别和定位复杂的问题。 - **自动化监控**:通过配置脚本或其他工具,可以实现自动化收集和分析 Nginx 的监控数据,提高运维效率。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值