feat(infra): RocketMQ 5.3.1 自托管 mini-infra(NameServer+单 Broker+lean 1g JVM)(切片一 阶段〇 B2)
纯增量、host 网络、brokerIP1 指 Tailscale 地址;探针绿、Broker 注册成功、内存在 lean 预算内。 端点写回 docs/内网凭据与端点.md。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
38dd2dc4e5
commit
22b3016048
2
deploy/infra/rocketmq/.gitignore
vendored
Normal file
2
deploy/infra/rocketmq/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
# 容器运行时产物(Broker CommitLog / ConsumeQueue / 日志),不入仓。
|
||||||
|
data/
|
||||||
32
deploy/infra/rocketmq/broker.conf
Normal file
32
deploy/infra/rocketmq/broker.conf
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
# =============================================================================
|
||||||
|
# RocketMQ Broker 配置 —— 单机 Master、自动建 topic(MVP)(切片一 阶段〇 B2)
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
# 配置控制面设计 §3.7:RocketMQ 承载异步生成队列(gen 队列 topic = AIGC_GEN_TOPIC),
|
||||||
|
# game-cloud(C3)在其上做生产 / 消费。单机自托管在 mini-infra,与 NameServer 同机、
|
||||||
|
# host 网络。
|
||||||
|
#
|
||||||
|
# 存储路径用镜像默认 ${user.home}/store = /home/rocketmq/store(compose 已把它挂到
|
||||||
|
# 宿主 ./data/store);日志同理落 /home/rocketmq/logs → ./data/logs。故此处不再显式
|
||||||
|
# 设 storePathRootDir,保持与默认一致、少一处漂移。
|
||||||
|
# =============================================================================
|
||||||
|
brokerClusterName = DefaultCluster
|
||||||
|
brokerName = broker-a
|
||||||
|
brokerId = 0
|
||||||
|
|
||||||
|
# 磁盘回收:凌晨 4 点清过期 CommitLog;文件保留 48 小时。
|
||||||
|
deleteWhen = 04
|
||||||
|
fileReservedTime = 48
|
||||||
|
|
||||||
|
# 单机异步:主从复制走异步、刷盘走异步(MVP 单 Master、无从节点,吞吐优先)。
|
||||||
|
brokerRole = ASYNC_MASTER
|
||||||
|
flushDiskType = ASYNC_FLUSH
|
||||||
|
|
||||||
|
# 关键坑:brokerIP1 必须是消费方(game-cloud / mini-desktop)真正连得到的地址。
|
||||||
|
# NameServer 只是把 broker 上报的这个地址原样返回给客户端;若留空会取容器识别到的
|
||||||
|
# 本机地址,跨机客户端据此连 broker 会失败。故显式钉死为 mini-infra 的 Tailscale 地址。
|
||||||
|
brokerIP1 = 100.64.0.8
|
||||||
|
|
||||||
|
# MVP 阶段允许生产端首发消息时自动建 topic / 订阅组,省去预建 AIGC_GEN_TOPIC 的一步。
|
||||||
|
# 生产强化期可关掉、改为显式建 topic 管控分片与权限。
|
||||||
|
autoCreateTopicEnable = true
|
||||||
|
autoCreateSubscriptionGroup = true
|
||||||
44
deploy/infra/rocketmq/docker-compose.yml
Normal file
44
deploy/infra/rocketmq/docker-compose.yml
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
# =============================================================================
|
||||||
|
# RocketMQ 5.3.1 自托管 —— NameServer + 单 Broker + lean JVM(切片一 阶段〇 B2)
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
# 配置控制面设计 §3.7:game-cloud 是 Spring Cloud Alibaba,RocketMQ 是其原生异步
|
||||||
|
# 消息基建,承载异步生成队列(topic = AIGC_GEN_TOPIC)。自托管在 mini-infra,纯增量,
|
||||||
|
# 不动既有容器。
|
||||||
|
#
|
||||||
|
# 三条部署纪律都编进了这里:
|
||||||
|
# - lean JVM:该镜像 broker 默认 -Xmx2g、nameserver 默认 -Xmx1g;mini-infra 内存要
|
||||||
|
# 留给既有 MySQL / RAGflow / new-api,故经 JAVA_OPT_EXT 压到 broker 1g、namesrv 512m。
|
||||||
|
# JAVA_OPT_EXT 在 runbroker.sh / runserver.sh 里拼在默认 HEAP_OPTS 之后,JVM 取最后
|
||||||
|
# 一个 -Xmx,故覆盖生效(实测确认)。broker 带 AlwaysPreTouch,启动即提交约 1g 常驻。
|
||||||
|
# - network_mode: host:与既有 infra-* 容器一致。NameServer 占 9876,Broker 占 10911
|
||||||
|
# (+ 10909 HA、10912 fast)三个 host 端口,均未被既有容器占用。
|
||||||
|
# - brokerIP1:在 broker.conf 里钉死 100.64.0.8,保证跨机客户端拿到可达的 broker 地址。
|
||||||
|
#
|
||||||
|
# 存储 / 日志落宿主 ./data(见 .gitignore,不入仓)。⚠️ 容器以 uid=3000(rocketmq)运行,
|
||||||
|
# 部署前必须先在宿主建好 data/store、data/logs 并 chown 3000:3000,否则 broker 无权写
|
||||||
|
# CommitLog、起不来。这一步在部署脚本里做,不在 compose 内。
|
||||||
|
# =============================================================================
|
||||||
|
services:
|
||||||
|
namesrv:
|
||||||
|
image: apache/rocketmq:5.3.1
|
||||||
|
container_name: infra-rmq-namesrv
|
||||||
|
restart: unless-stopped
|
||||||
|
network_mode: host
|
||||||
|
environment:
|
||||||
|
JAVA_OPT_EXT: "-Xms512m -Xmx512m -Xmn256m" # 压死默认 1g
|
||||||
|
command: sh mqnamesrv
|
||||||
|
|
||||||
|
broker:
|
||||||
|
image: apache/rocketmq:5.3.1
|
||||||
|
container_name: infra-rmq-broker
|
||||||
|
restart: unless-stopped
|
||||||
|
network_mode: host
|
||||||
|
depends_on: [namesrv]
|
||||||
|
environment:
|
||||||
|
JAVA_OPT_EXT: "-Xms1g -Xmx1g -Xmn512m" # 压死默认 2g
|
||||||
|
NAMESRV_ADDR: "127.0.0.1:9876" # broker 向本机 NameServer 注册
|
||||||
|
volumes:
|
||||||
|
- ./broker.conf:/home/rocketmq/rocketmq-5.3.1/conf/broker.conf
|
||||||
|
- ./data/store:/home/rocketmq/store
|
||||||
|
- ./data/logs:/home/rocketmq/logs
|
||||||
|
command: sh mqbroker -c /home/rocketmq/rocketmq-5.3.1/conf/broker.conf
|
||||||
40
deploy/infra/rocketmq/health-check.sh
Executable file
40
deploy/infra/rocketmq/health-check.sh
Executable file
@ -0,0 +1,40 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# =============================================================================
|
||||||
|
# RocketMQ 健康探针 —— 部署后就绪判定(切片一 阶段〇 B2)
|
||||||
|
# -----------------------------------------------------------------------------
|
||||||
|
# 两步都绿才算就绪:① NameServer 端口连通;② Broker 已在 NameServer 注册。
|
||||||
|
# 任一不满足即红,退出码 1。
|
||||||
|
#
|
||||||
|
# 两处内网纪律:
|
||||||
|
# - NameServer 端口探活走 nc 原始 TCP,不经本机 HTTP 系统代理(fake-ip 198.18.x),
|
||||||
|
# 直连 Tailscale 100.64.x。原始 TCP 本就不理会 HTTP 代理,连接直达。
|
||||||
|
# - Broker 是否注册要用 mqadmin clusterList 查,而 mqadmin 只在镜像里;故经 ssh
|
||||||
|
# 进 mini-infra、用 docker exec 在 broker 容器内跑。broker 是 host 网络,容器内
|
||||||
|
# 的 127.0.0.1:9876 即本机 NameServer。
|
||||||
|
#
|
||||||
|
# 用法:NS=100.64.0.8:9876 bash deploy/infra/rocketmq/health-check.sh
|
||||||
|
# =============================================================================
|
||||||
|
set -uo pipefail
|
||||||
|
|
||||||
|
NS="${NS:-100.64.0.8:9876}"
|
||||||
|
HOST="${NS%:*}"
|
||||||
|
PORT="${NS##*:}"
|
||||||
|
|
||||||
|
# ── ① NameServer 端口连通 ──
|
||||||
|
if ! nc -z -w5 "$HOST" "$PORT" 2>/dev/null; then
|
||||||
|
echo "FAIL NameServer ${NS} 端口不通"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ── ② Broker 是否已在 NameServer 注册(clusterList 在 broker 容器内跑)──
|
||||||
|
# grep 精确匹配 broker 名 broker-a(与 broker.conf 的 brokerName 一致),避开表头行。
|
||||||
|
count="$(ssh -o ConnectTimeout=8 root@100.64.0.8 \
|
||||||
|
'docker exec infra-rmq-broker sh mqadmin clusterList -n 127.0.0.1:9876 2>/dev/null | grep -c broker-a' 2>/dev/null)"
|
||||||
|
count="${count//[^0-9]/}" # 只留数字,兜空值 / 多行输出
|
||||||
|
|
||||||
|
if [[ "${count:-0}" -ge 1 ]]; then
|
||||||
|
echo "PASS RocketMQ NameServer 通 + Broker 已注册(broker-a)"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
echo "FAIL Broker 未在 NameServer 注册"
|
||||||
|
exit 1
|
||||||
@ -71,6 +71,23 @@
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## RocketMQ 异步消息队列(mini-infra `100.64.0.8` · 2026-07-01 自托管落档 · 切片一 阶段〇 B2)
|
||||||
|
|
||||||
|
> game-cloud 是 Spring Cloud Alibaba,RocketMQ 是其原生异步消息基建,承载异步生成队列。自托管在 mini-infra,单机 NameServer + 单 Broker + lean JVM(broker 1g / namesrv 512m),纯增量部署(不动既有容器)。配置控制面设计 §3.7 采纳。**C3(game-cloud)`rocketmq.name-server: 100.64.0.8:9876`,gen 队列在 `AIGC_GEN_TOPIC` 上生产 / 消费。**
|
||||||
|
|
||||||
|
| 项 | 值 |
|
||||||
|
|---|---|
|
||||||
|
| **NameServer** | `100.64.0.8:9876`(客户端 `rocketmq.name-server` / `NAMESRV_ADDR` 指这里) |
|
||||||
|
| **Broker** | `100.64.0.8:10911`(brokerName `broker-a`、DefaultCluster、ASYNC_MASTER;brokerIP1 钉死 Tailscale 地址,故 NameServer 返回的 broker 地址跨机可达) |
|
||||||
|
| **gen 队列 topic** | `AIGC_GEN_TOPIC`(autoCreateTopicEnable=true,生产端首发消息时自动建;C3 生产 / 消费) |
|
||||||
|
| **鉴权** | 无(MVP 单机内网,未开 ACL、无密钥) |
|
||||||
|
| **部署位置** | mini-infra `/opt/infra-rocketmq`(compose 源在仓 `deploy/infra/rocketmq/`);镜像 `apache/rocketmq:5.3.1` |
|
||||||
|
|
||||||
|
- **存储**:store / logs 落宿主 `/opt/infra-rocketmq/data`(不入仓)。⚠️ 容器以 uid=3000 运行,该 data 目录部署时已 `chown 3000:3000`,否则 broker 无权写 CommitLog、起不来。
|
||||||
|
- **运维**:起/停 `cd /opt/infra-rocketmq && docker compose up -d / down`;探活 `NS=100.64.0.8:9876 bash deploy/infra/rocketmq/health-check.sh`(绿=NameServer 端口通 + Broker 在 NameServer 注册)。broker 1g / namesrv 512m,实测常驻内存 broker ~1.24G、namesrv ~186M。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## tier2 P4 服务化部署拓扑(2026-06-24 首次部署成功落档 · 团队共享)
|
## tier2 P4 服务化部署拓扑(2026-06-24 首次部署成功落档 · 团队共享)
|
||||||
|
|
||||||
> 内部开发阶段 · 内网环境;为开发方便,端点 + 凭据明文记录(铁律授权)。下面是「服务跑在哪、怎么起、连什么」。
|
> 内部开发阶段 · 内网环境;为开发方便,端点 + 凭据明文记录(铁律授权)。下面是「服务跑在哪、怎么起、连什么」。
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user