Files
waf-platform/编译部署升级策略.md
2026-02-10 19:30:44 +08:00

6.1 KiB
Raw Blame History

waf-platform 编译、部署、升级策略WSL Ubuntu 22.04

1. 适用范围

  • 主基线:E:\AI_PRODUCT\waf-platform(不是 waf-platform-1.4.5/1.4.6)。
  • 本手册覆盖:
    • EdgeAdmin / EdgeAPI / EdgeNode / EdgeDNS
    • HTTP + DNS 访问日志策略
    • Fluent Bit + ClickHouse 日志链路

2. 关键结论(先看)

  1. EdgeAdmin/build/build.sh 编译时,会联动编译 EdgeAPI,并由 EdgeAPI 联动编译 EdgeNode
  2. EdgeDNS 只有在 plus 模式下才会被 EdgeAPI/build/build.sh 自动编译并放入 deploy。
  3. 当前脚本已临时关闭自动 arm64 编译,只保留 amd64 自动链路。
  4. 如果你要发布“本次所有改动”(含 DNS/ClickHouse建议统一用
    cd /mnt/e/AI_PRODUCT/waf-platform/EdgeAdmin/build
    bash build.sh linux amd64 plus
    
  5. DNS 节点与 Node 节点分离部署时,两边都要有 Fluent Bit各自采集本机日志

3. 编译前检查

在 WSL Ubuntu 22.04 执行:

cd /mnt/e/AI_PRODUCT/waf-platform
git rev-parse --short HEAD
go version
which zip unzip go find sed

建议:

  • 线上 Ubuntu 22.04,尽量也在 Ubuntu 22.04 编译,避免 GLIBC/GLIBCXX 不兼容。
  • 若 Node plus 使用 cgo/libpcap/libbrotli请确保构建机依赖完整。

4. 一键编译(推荐)

cd /mnt/e/AI_PRODUCT/waf-platform/EdgeAdmin/build
bash build.sh linux amd64 plus

4.1 此命令会做什么

  • 编译 EdgeAdmin
  • 自动调用 EdgeAPI/build/build.sh
  • EdgeAPI 自动编译并打包 EdgeNode(当前仅 linux/amd64
  • plus 模式下,EdgeAPI 自动编译并打包 EdgeDNS(当前仅 linux/amd64
  • 把 node/dns 包放入 API 的 deploy 目录用于远程安装

4.2 主要产物位置

  • Admin 包:EdgeAdmin/dist/edge-admin-linux-amd64-v*.zip
  • API 包:EdgeAPI/dist/edge-api-linux-amd64-v*.zip
  • Node 包:EdgeNode/dist/edge-node-linux-*.zip
  • DNS 包:EdgeDNS/dist/edge-dns-linux-*.zipplus 时)
  • API deploy 安装包目录:EdgeAPI/build/deploy/

5. 是否需要单独编译 API / DNS / Node

5.1 不需要单独编译 API 的场景

  • 你已经执行 EdgeAdmin/build/build.sh ... plus,且要发布整套改动。

5.2 需要单独编译的场景

  • 只改了 API不想重新打 Admin
    cd /mnt/e/AI_PRODUCT/waf-platform/EdgeAPI/build
    bash build.sh linux amd64 plus
    
  • 只改了 Node
    cd /mnt/e/AI_PRODUCT/waf-platform/EdgeNode/build
    bash build.sh linux amd64 plus
    
  • 只改了 DNS
    cd /mnt/e/AI_PRODUCT/waf-platform/EdgeDNS/build
    bash build.sh linux amd64
    

6. 升级顺序(生产建议)

6.1 第一步:先改 ClickHouseDDL

先在 ClickHouse 建/改表,至少包含:

  • logs_ingestHTTP
  • dns_logs_ingestDNS

先做 DDL 的原因:避免新版本写入时目标表不存在。

6.2 第二步:部署 Fluent Bit 配置

Node 节点HTTP

  • 配置文件目录一般是 /etc/fluent-bit/
  • 至少更新:
    • fluent-bit.conf(或你实际启用的 fluent-bit-http.conf
    • clickhouse-upstream.conf
    • parsers.conf(通常可复用)

DNS 节点DNS

  • DNS 节点若之前没装 Fluent Bit需要先安装并创建 service。
    • curl https://raw.githubusercontent.com/fluent/fluent-bit/master/install.sh | sh
    • sudo apt-get update
    • sudo apt-get install -y fluent-bit
  • 建议同样用 /etc/fluent-bit/,放:
    • fluent-bit.confDNS 版本或含 DNS INPUT/OUTPUT 的统一版本)
    • clickhouse-upstream.conf
    • parsers.conf

重启:

sudo systemctl restart fluent-bit
sudo systemctl status fluent-bit

6.3 第三步升级管理面API + Admin

在管理节点更新 edge-apiedge-admin 包并重启对应服务。 ./bin/edge-api status ./bin/edge-api restart

6.4 第四步升级数据面Node / DNS

  • 通过 API 的远程安装/升级流程分批升级 Node、DNS
  • 或手工替换二进制后重启服务

6.5 第五步:最后切换日志策略

在页面启用目标策略MySQL only / ClickHouse only / 双写),并验证读写链路。


7. 日志策略与读写行为(当前实现)

7.1 HTTP / DNS 共用语义

  • WriteMySQL=true:写 MySQL通过 API
  • WriteClickHouse=true:写本地日志文件,由 Fluent Bit 异步采集进 CH
  • 两者都开:双写
  • 两者都关:不写

7.2 查询侧优先级

  • 优先读 ClickHouse可用且策略允许
  • ClickHouse 异常时按策略回退 MySQL
  • 若两边都不可读,返回空

7.3 关于“日志文件路径”

  • 现在前端已调整:当存储类型包含 ClickHouse 时,创建/编辑页隐藏“日志文件路径”输入。
  • 但 Fluent Bit 的 Path 必须匹配实际日志目录;若你改了日志目录,需要同步改 Fluent Bit 配置并重启。

8. 服务检查与常用命令

8.1 检查 Fluent Bit 服务名

systemctl list-unit-files | grep -Ei 'fluent|td-agent-bit'
systemctl status fluent-bit.service

8.2 查看 Fluent Bit 实际使用的配置文件

systemctl status fluent-bit.service

重点看 ExecStart,例如:

/opt/fluent-bit/bin/fluent-bit -c /etc/fluent-bit/fluent-bit.conf

8.3 验证 ClickHouse 是否有数据

SELECT count() FROM default.logs_ingest;
SELECT count() FROM default.dns_logs_ingest;

9. 回滚策略(最小影响)

  1. 先把页面日志策略切回 MySQL-only。
  2. 回滚 API/Admin 到上一版本。
  3. Node/DNS 分批回滚。
  4. Fluent Bit 保留运行不影响主业务(只停止 CH 写入即可)。

10. 一次发布的最简执行清单

# 1) 构建
cd /mnt/e/AI_PRODUCT/waf-platform/EdgeAdmin/build
bash build.sh linux amd64 plus

# 2) 上传产物
# EdgeAdmin/dist/*.zip
# EdgeAPI/dist/*.zip
# EdgeAPI/build/deploy/* (node/dns installer zip)

# 3) 线上先执行 CH DDL
# 4) 更新 fluent-bit 配置并重启
sudo systemctl restart fluent-bit

# 5) 升级 edge-api / edge-admin 并重启
# 6) 升级 edge-node / edge-dns
# 7) 切日志策略并验证