纯增量、host 网络、brokerIP1 指 Tailscale 地址;探针绿、Broker 注册成功、内存在 lean 预算内。 端点写回 docs/内网凭据与端点.md。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
41 lines
1.8 KiB
Bash
Executable File
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
|