dns clickhouse改造

This commit is contained in:
robin
2026-02-10 19:30:44 +08:00
parent 4812ad5aaf
commit 1bb8140a41
47 changed files with 2815 additions and 174 deletions

232
编译部署升级策略.md Normal file
View File

@@ -0,0 +1,232 @@
# 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` 自动链路。
3. 如果你要发布“本次所有改动”(含 DNS/ClickHouse建议统一用
```bash
cd /mnt/e/AI_PRODUCT/waf-platform/EdgeAdmin/build
bash build.sh linux amd64 plus
```
4. DNS 节点与 Node 节点分离部署时,两边都要有 Fluent Bit各自采集本机日志
---
## 3. 编译前检查
在 WSL Ubuntu 22.04 执行:
```bash
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. 一键编译(推荐)
```bash
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-*.zip`plus 时)
- API deploy 安装包目录:`EdgeAPI/build/deploy/`
---
## 5. 是否需要单独编译 API / DNS / Node
### 5.1 不需要单独编译 API 的场景
- 你已经执行 `EdgeAdmin/build/build.sh ... plus`,且要发布整套改动。
### 5.2 需要单独编译的场景
- 只改了 API不想重新打 Admin
```bash
cd /mnt/e/AI_PRODUCT/waf-platform/EdgeAPI/build
bash build.sh linux amd64 plus
```
- 只改了 Node
```bash
cd /mnt/e/AI_PRODUCT/waf-platform/EdgeNode/build
bash build.sh linux amd64 plus
```
- 只改了 DNS
```bash
cd /mnt/e/AI_PRODUCT/waf-platform/EdgeDNS/build
bash build.sh linux amd64
```
---
## 6. 升级顺序(生产建议)
## 6.1 第一步:先改 ClickHouseDDL
先在 ClickHouse 建/改表,至少包含:
- `logs_ingest`HTTP
- `dns_logs_ingest`DNS
先做 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.conf`DNS 版本或含 DNS INPUT/OUTPUT 的统一版本)
- `clickhouse-upstream.conf`
- `parsers.conf`
重启:
```bash
sudo systemctl restart fluent-bit
sudo systemctl status fluent-bit
```
## 6.3 第三步升级管理面API + Admin
在管理节点更新 `edge-api`、`edge-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 服务名
```bash
systemctl list-unit-files | grep -Ei 'fluent|td-agent-bit'
systemctl status fluent-bit.service
```
## 8.2 查看 Fluent Bit 实际使用的配置文件
```bash
systemctl status fluent-bit.service
```
重点看 `ExecStart`,例如:
```text
/opt/fluent-bit/bin/fluent-bit -c /etc/fluent-bit/fluent-bit.conf
```
## 8.3 验证 ClickHouse 是否有数据
```sql
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. 一次发布的最简执行清单
```bash
# 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) 切日志策略并验证
```