1.
先定义目标:明确是“完全重建并迁移到新架构”还是“渐进式重构”。在香港云环境要考虑网络延迟、跨境流量、合规与可用区布局。制定SLA、维护窗口、回滚RTO/RPO指标。
组建角色:指定项目经理、平台工程师、DBA、网络工程师、测试与运维,建立沟通渠道(Slack/Teams/钉钉)和变更审批流程。
2.
列举所有实例:服务名、IP、私网/公网、操作系统、应用版本、依赖(数据库、缓存、消息队列、第三方API)、证书过期日。
绘制调用链:用调用图标明读写分离、同步/异步流程和会话管理,标注哪些组件支持无状态、需要外部化会话或共享存储。
3.
文件系统备份:对静态文件使用 rsync + hardlink 或对象存储(示例:rsync -avz --delete /var/www/ user@new:/var/www/)。
数据库备份:MySQL 可用 mysqldump、xtrabackup 或 binlog 增量;PostgreSQL 使用 pg_basebackup + WAL 流复制。确认备份可恢复:在演练环境做一次完整恢复。
4.
步骤1:把目标数据库建好,版本兼容性检查(例如 MySQL 5.7->8.0 需注意 sql_mode 与字符集)。
步骤2:做一次全量导出(mysqldump --single-transaction --set-gtid-purged=OFF -A -u root -p),导入到目标并校验表行数与 checksum(示例:pt-table-checksum 或自写 checksum 脚本)。
步骤3:启用增量同步:对 MySQL 可配置主从或使用 binlog relay,确保 cutover 前主库的差异能够被重放;对文件使用 rsync 增量并保留旧实例一段时间。
5.
把应用设为无状态:将会话外置到 Redis/ElastiCache,或使用 JWT;将上传文件存到对象存储(OSS/S3)。
证书迁移:先在目标环境部署相同证书或准备自动签发(certbot/acme)。私钥迁移需通过安全通道并限制访问权限(chmod 600)。
6.
DNS TTL:迁移前 24-48 小时把域名 TTL 降到 60 秒或更低,便于切换回滚。DNS切换作为最后一步,仅在负载均衡策略无效时使用。
蓝绿/灰度:先部署绿环境并加入LB但权重为0;使用LB放量(5%、20%、50%、100%)或基于请求头/路径做路由。对香港地区用户可采用按源IP或地理位置的流量分配。
会话粘滞性:如无法外置会话,启用粘滞会话(Cookie)并在切换时先将旧实例drain连接(负载均衡API:deregister/disable)。
7.
健康检查:配置 LB 健康检查路径(/health),返回 200 且包括关键依赖检查(DB、缓存)。设置合适的超时与重试。
监控项:CPU、内存、响应时间、错误率、数据库延迟、队列长度、慢查询。使用报警策略(例如 5xx>1% 持续 5min 触发)。
验收测试:完成自动化回归测试、压测(按香港峰值流量模拟),人工验收包括业务关键路径(下单、支付、登录、文件上传)。
8.
回滚前提:保留旧环境至少一个保留窗口;在切换前做完整快照(实例与磁盘)。
回滚流程:如果新环境问题严重,先将 LB 权重回退到旧环境或修改 DNS;恢复数据库可用基于快照的恢复然后重放 binlog;验证一致性后解除回滚状态。
9.
1) 预备:降TTL、通知客户/支持、设定维护窗口。 2) 备份:执行 mysqldump/pg_dump & 文件 rsync。 3) 部署:在新环境启动服务并加入 LB(初始权重=0)。
4) 同步:开始增量数据同步(binlog/replica),等待延迟 < 可接受阈值(例如 <1s)。 5) 灰度:放量并监控 15-30 分钟。 6) 切换:逐步把流量转到新环境,最终降低旧实例权重并下线。
10.
问:在香港部署或迁移时,怎样降低到内地或东南亚用户的跨境延迟影响?
答:策略包括部署多可用区或多区域副本、使用CDN把静态资源放近用户、在内地或目标市场用边缘缓存节点、优化TCP/TLS参数(启用 keepalive、缩短 TLS 握手)、利用直连/专线(Direct Connect)或 SD-WAN 做链路优化。重要的是测量并以数据驱动放置服务和缓存层。
11.
问:在执行数据库切换时,如何确保没有数据丢失并实现一致性?
答:使用主从复制或异步到半同步复制把主库变更实时复制到新库;在切换窗口设置短写锁或把应用设置为只读(短暂),等待 binlog 应用完后再切换写流。若是高并发系统,采用双写策略(写入旧库并写入新库)并在稳定后切换回单写,并用校验脚本对比行数/checksum 确认一致性。
12.
问:如果新架构发布导致重大故障,怎样快速切换回原环境以满足RTO?
答:关键是事前准备:在切换前拍快照、保留旧环境的实例与网络路由、把DNS TTL 调低并准备好LB权重回滚脚本。遇到故障时先把流量按脚本回退到旧 LB/旧实例,若数据库需要回滚使用快照恢复并重放局部 binlog。演练是关键:至少一次完整回滚演练,确认所有脚本与权限可用。