生产就绪清单
在集群承载你真正在乎的流量之前,把下面每一行勾掉。每项都写明查什么、为什么重要、怎么验证。
多数项是配置白名单里已经冻结的决定 —— 本页是把它们按「失败成本从低到高」的顺序集中应用的地方。
1. 网络暴露
- [ ]
listen_peer已从公网防火墙挡掉。 它跑复制流量:独立共享密钥,而且没有客户端认证。暴露它是可犯的最严重错误。 - [ ]
listen_admin绑127.0.0.1。 v0 的指标面没有认证 —— 绑宽一点就等于把队列深度和拓扑发布给任何能连上这个端口的人。 - [ ]
listen_client绑的是你想要的地址。0.0.0.0只在防火墙或私网后面才是对的。 - [ ]
ws_origins是显式列表,不是空。 空 = 拒绝所有来源(安全,但浏览器 demo 会连不上);它永远不是「全部允许」。
bash
# 从宿主机外部验证
ss -tlnp | grep -E '7188|7189|7190'
# 期望:7188 面向客户端,7189 仅对内,7190 只在 127.0.0.12. 身份与访问
- [ ] 每个节点
node_id唯一,且三台共享完全相同的peers表。 - [ ] token 带外分发,服务端只存
SHA-256摘要。 - [ ] 你接受 v0 没有授权。 任何持有 token 的客户端都能向任何 topic 发、从任何 topic 收。如果这不可接受,v0 就不合适 —— 见安全边界。
- [ ] 你接受 v0 没有 TLS。 在不可信网络上请自己加一层隧道。
3. 存储与容量
- [ ] 每节点一个
data_dir,且分属不同故障域。 共用卷会互相破坏对方的 segment。 - [ ] 磁盘按整个保留窗口规划 —— 因为没有保留策略。 v0 不做日志截断,也没有自动保留执行器。
data_dir会一直涨到满,而磁盘满是一次可用性事故,不是优雅降级。上线前按预估吞吐 × 天数算好,并在远低于 100% 时告警。 - [ ] 文件系统的 fsync 语义符合预期。 持久性全押在
fsync上;不落盘就返回确认的网络文件系统会静默破坏这个保证。 - [ ] 持续写入吞吐落在 fsync 预算内。 设计预算是端到端
P50 ≤ 1.5 ms / P99 ≤ 5 ms、NVMe fsync 占大头 —— 请在你的硬件上验证,不要假设。
4. 监控与告警
- [ ]
/metrics已被抓取,且metrics_enabled=true。 - [ ]
mortarmq_quorum_state != 0告警 —— 这是叫醒值班的信号。1是警告(一个 follower 落后),2是只读。 - [ ]
mortarmq_group_lag单调增长告警 —— 那是消费者停了,不是慢。 - [ ] 磁盘用量告警 —— 因为没有任何东西会自动回收。
- [ ] 每天核一次守恒恒等式,而不是信单个 counter:
produced = delivered + dropped + dlq + Δdepth - [ ]
mortarmq_partition_last_seq下降是一次事故,不是抖动 —— 设计里把下降定义为fatal。
5. 故障处置
- [ ] RB-1 已打印或置顶 —— quorum 丢失是凌晨三点最先发生的事,而正确反应是别重启 leader。
- [ ] 分得清 level 0(soft timeout)和 level 0(no follower) —— 后者必须先修 follower 才能恢复写入。
- [ ]
data/metadata/quarantine/已纳入监控。 隔离是刻意的、绝不自动重放;要人来对账。 - [ ] 至少演练过一次
kill -9,事后leader get显示的是 epoch 递增,不是数据丢失。
6. 升级
- [ ] 第一次升级前先读懂降级前置检查 —— case R2 按设计会拒绝不兼容降级。
- [ ] 知道自己在哪一档(兼容 / 不兼容)。这一条决定了回滚是否根本可能。
7. 备份
- [ ] 元数据日志与其快照已备份 ——
data/metadata/存着集群真相(topic、组、leader)。 - [ ] segment 备份是一个决定,不是默认动作。 备份 segment 会让写放大翻倍;多数团队转而依赖复制,接受「整个集群全灭需要重建」。要有意识地选。
目前还没有代码
这里没有任何一项被实战验证过。清单全部由冻结设计决定拼装而成,凡是带验证命令的项,都是 broker 上线时欠你的。