lili 22b3016048 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>
2026-07-01 08:55:59 -07:00

41 lines
1.8 KiB
Bash
Executable File

#!/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