# S30 最终验收报告 ## 1. 目标 完成 LisgloSIPS V2 本地 KVM 开发环境的备份恢复演练、上线/回滚脚本、灰度记录和最终验收,不执行真实阿里云生产切流。 ## 2. 执行结果 | 项目 | 结果 | | --- | --- | | 当前 B release | `/opt/lisglosips/releases/s28-v2-20260621220924` | | B preflight | 通过 | | A OpenSIPS 配置语法 | 通过 | | 备份恢复演练 | 通过 | | 灰度呼叫 | 通过 | | 回滚脚本语法检查 | 通过 | 新增产物: - `docs/S30_RELEASE_BACKUP_RUNBOOK.md` - `docs/S30_FINAL_ACCEPTANCE_REPORT.md` - `infra/server-b/s30/lisglosips-release-preflight.sh` - `infra/server-b/s30/lisglosips-release-rollback.sh` - `infra/server-a/s30/lisglosips-opensips-config-restore.sh` ## 3. 备份恢复演练 执行时间:2026-06-22 10:28 +08:00。 备份: - MySQL:`/data/backups/mysql/20260622T022811Z` - Redis:`/data/backups/redis/20260622T022812Z` 校验: - MySQL `all-databases.sql.gz`、`lisglosips.sql.gz`、`metadata.tsv` 的 `SHA256SUMS` 校验通过。 - Redis `dump.rdb`、`metadata.txt` 的 `SHA256SUMS` 校验通过。 恢复演练: - MySQL 恢复到隔离临时库 `lisglosips_s30_restore`,核对计数:`raw_cdrs=33`、`recordings=27`、`customer_recharges=34`、`users=2`;演练后已删除临时库。 - Redis 从备份 RDB 启动隔离 Unix socket 临时实例,核对 `DBSIZE=51`、`stream:cdr_payload=54`、`cfg:active_version=s28-v1`;演练后已关闭临时实例并删除临时目录。 未覆盖运行中的 MySQL 或 Redis 数据目录。 ## 4. 灰度记录 灰度对象:本地开发环境 T 测试端和 S28 专用测试客户/落地模拟链路。 灰度呼叫: - Call-ID:`s28-1782095548702-luppqjd4@lisglosips-t` - SIP:T 收到 `100 Giving it a try`、`200 OK`、BYE `200 OK` - B raw CDR:`raw_7a6356cc76974652aa30a9d7a350041b` - 计费:`rated_e0eb8cbe1b90454cb3cf2d9a3bbc9290`,`billSec=6`,客户费用和供应商成本均为 `0.012000` - 录音:`rec_5fdf599d679f493a83fc7a2d205a128a`,`READY`,55758 bytes 结论:本地灰度链路在当前冻结 release 下通过。 ## 5. 回滚验证 脚本语法检查: - B:`lisglosips-release-preflight.sh`、`lisglosips-release-rollback.sh` 通过 `bash -n` - A:`lisglosips-opensips-config-restore.sh` 通过 `bash -n` 运行验证: - B `lisglosips-release-preflight.sh` 实际运行通过:current release、MySQL、Redis、Nginx、API、CDR Worker、Recording Worker、HEP、Prometheus、Grafana 均 active,API ready 正常,Nginx 配置测试成功,最近备份目录可见。 - A `/etc/opensips/opensips.cfg` 通过 `opensips -C` 语法检查。 未实际执行 release 回滚或 OpenSIPS 配置恢复,避免对当前已通过的 S28/S29/S30 环境造成不必要中断。 ## 6. 遗留风险 - 本地开发环境不是阿里云生产环境。正式迁移前必须重新执行 VPC、安全组、数据盘、正式 DNS/TLS、备份恢复、故障注入和端到端呼叫验收。 - S29 遗留风险仍存在:B Redis 恢复后 A/OpenSIPS 热路径可能需要重启 `opensips` 才从 `Redis Unavailable` 恢复。S30 Runbook 已纳入处置步骤,但根因级修复仍需后续单独处理。 - 当前 A 是单 A/S28 最小真实路由,非完整多落地网关生产路由;真实 3A、多 B、高可用仍不属于本地 V2 闭环上线范围。 - 开发 CA、Tailscale IP、本地 KVM 根盘布局不能原样用于生产。 ## 7. 结论 S30 在本地 KVM 开发环境完成。当前 V2 闭环具备可恢复备份、可执行上线/回滚 Runbook、回滚脚本产物、灰度呼叫记录和最终验收记录。 本地开发阶段可冻结在 `s28-v2-20260621220924` 作为迁移前基线。阿里云生产上线前不得跳过 S30 Runbook 中的重新备份恢复演练、正式网络/TLS 验收和灰度观察。