5.8 KiB
5.8 KiB
S42 二期业务前缀基线冻结报告
1. 目标
冻结 LisgloSIPS V2 本地 KVM/Tailscale 环境中二期业务前缀、客户网关匹配、号码库、落地号码改写和真实话单接入后的当前可回滚基线。
本冻结不进入阿里云生产迁移,不替代未来生产环境的 VPC、安全组、正式 DNS/TLS、独立数据盘、备份恢复和灰度验收。
2. 冻结结论
当前 s42-phase2-business-prefix-20260624140000 具备冻结条件,可作为“二期业务前缀小样本联调基线”。
本冻结不包含真实 80 万手机号段导入,不包含生产式号码库压测,不包含浏览器登录态逐页按钮全量人工复测。
3. 冻结清单
| 项 | 当前值 |
|---|---|
| B current release | /opt/lisglosips/releases/s42-phase2-business-prefix-20260624140000 |
| Redis active version | 1782286812696 |
| Redis previous version | 1782286145681 |
| A OpenSIPS cfg SHA-256 | ae1544e9a39d2db114e6981babac042c2ab6d399d59ba597a52b85d597aa5aa5 |
| A Lua SHA-1 | 0b7ee595cdcad2f38a670dd8ff3553387820039e |
| Prisma migrations | 4 条,B 当前库 Database schema is up to date |
| 最新 MySQL 备份 | /data/backups/mysql/20260624T055810Z,SHA256 校验通过 |
| 最新 Redis 备份 | /data/backups/redis/20260624T055810Z,SHA256 校验通过 |
| T 测试脚本 | /opt/lisglosips-s28/lisglosips-s28-sip.py |
4. 验证结果
本地代码验证:
corepack pnpm@10.33.0 typecheck通过。corepack pnpm@10.33.0 lint通过。corepack pnpm@10.33.0 build通过。corepack pnpm@10.33.0 exec vitest run --hookTimeout=60000 --maxWorkers=1通过:25 个测试文件,87 条测试通过。
B 侧验证:
lisglosips@api、lisglosips@cdr-worker、lisglosips@recording-worker、lisglosips@config-publisher、nginx、mysql、redis-server、heplify-server、lisglosips-prometheus、grafana-server均为active。https://127.0.0.1/api/v2/health/ready返回ok。infra/server-b/s30/lisglosips-release-preflight.sh已补齐执行权限,直接执行通过。- Redis
stream:cdr_deadletter长度为 26,抽样均为 2026-06-23 至 2026-06-24 早期修复前历史死信,包括config_versionINT 越界、旧占位外键失败、旧NO_POLICY事件;冻结验收实呼未新增 deadletter。
A 侧验证:
opensips、lisglosips-redis-auth-proxy、rtpengine、rtpengine-recording-daemon均为active。opensips -C -f /etc/opensips/opensips.cfg通过。- 历史 4 条 dialog 经
dlg_end_dlg无法清理,返回 OpenSIPS MIOperation failed;已在语法检查通过后重启opensips清空。 - 冻结验收实呼后出现 1 条测试 dialog 残留;已再次语法检查并重启
opensips,最终dlg_list为空。
T 侧验证:
opensips为active。100.93.185.30:5060和100.93.185.30:50620均在 UDP 监听。
端到端小样本呼叫:
- Call-ID:
s28-1782288889943-ckv83lce@lisglosips-t - SIP:
100 Giving it a try、200 OK、BYE200 OK - B raw CDR:
raw_d5732df32b8d496686512870fb087232 - 话单字段:
caller=s28-ip-1001、callee=13800138000、raw_callee=13800138000、business_prefix=NULL、landing_caller=s28-ip-1001、landing_callee=13800138000、sip_code=200、rating_status=RATED - 计费:客户费用
0.012000,供应商成本0.012000 - CDR Worker:
processed=1、deadlettered=0
5. 已处理冻结前问题
- 历史 dialog 残留:已通过重启 A OpenSIPS 清空,最终
dlg_list为空。 - CDR deadletter:未删除历史死信,已确认样本属于早期修复前历史事件;冻结验收呼叫未新增 deadletter。
- B preflight 执行权限:已将
/opt/lisglosips/current/infra/server-b/s30/lisglosips-release-preflight.sh权限修正为0755,直接执行通过。 - 全量 Vitest:初次使用默认 hook timeout 时
app.e2e.spec.ts超时;使用--hookTimeout=60000后全量测试通过。 - 冻结范围:明确不包含真实 80 万手机号段导入和浏览器登录态逐页按钮全量人工复测。
6. 回滚点
B 应用回滚:
sudo /opt/lisglosips/current/infra/server-b/s30/lisglosips-release-rollback.sh /opt/lisglosips/releases/s33-active-calls-20260623094000
Redis 配置回滚:
- 当前版本:
1782286812696 - 上一版本:
1782286145681 - 回滚时切回
cfg:previous_version,不删除 Stream 或 deadletter。
A OpenSIPS 回滚:
- 当前配置语法已通过,当前 Lua SHA 已记录。
- 若需回滚,使用最近一次
/var/backups/lisglosips-phase2/下的opensips.cfg和lisglosips_hotpath.lua备份,先执行opensips -C -f /etc/opensips/opensips.cfg,通过后重启opensips。
数据库回滚:
- 二期 migration 为向前兼容新增表/列,不建议执行破坏性 down migration。
- 若必须恢复数据,使用
/data/backups/mysql/20260624T055810Z,先恢复到隔离库验证后再进入维护窗口处理。
7. 遗留风险
- 真实 80 万手机号段尚未导入;号码库相关性能、Redis 快照体量和导入失败明细仍需单独验收。
- 浏览器登录态逐页按钮未做完整人工复测;本次只完成 API、构建、单元/集成测试和端到端小样本呼叫验证。
- OpenSIPS dialog 在测试呼叫结束后仍可能短期残留,当前通过重启清空。后续应单独分析 dialog 生命周期和
dlg_end_dlg Operation failed的根因。 - 当前仍为本地 KVM/Tailscale 环境,开发 CA、Tailscale IP、本地根盘布局不能原样用于阿里云生产。
8. 结论
s42-phase2-business-prefix-20260624140000 可冻结为二期业务前缀小样本联调基线。后续需求或 Bug 修复应创建新的 release,不再覆盖该冻结点;阿里云迁移前仍需重新执行 S30 Runbook、备份恢复演练、正式网络/TLS 验收和灰度观察。