1.1 说明:明确“台湾服务器关服”会导致哪些服务中断(网站、API、鉴权、文件访问等)。
1.2 目标:制定可接受的RTO(恢复时间目标)和RPO(恢复点目标),例如RTO≤30分钟,RPO≤15分钟。
2.1 列表化:列出所有台湾机房的服务器、IP、依赖的数据库、存储与外部接口;用CMDB或表格记录。
2.2 风险优先级:按业务影响、恢复难度给每个组件打分,优先处理高影响组件(支付、登录、主站)。
3.1 方案选择:采用多可用区/多区域(例如台湾+香港/新加坡或云上跨区)构建 active-passive 或 active-active。
3.2 实操步骤:在备援区域准备相同镜像(VM镜像或容器镜像)、相同网络安全组与负载均衡器,并保持配置一致(使用Terraform/Ansible管理)。
4.1 建立从库:在备援区新建 MySQL 实例,创建复制账户:CREATE USER 'repl'@'%' IDENTIFIED BY 'pwd'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
4.2 同步数据:在主库执行 mysqldump --single-transaction --master-data=2 --databases dbname > dump.sql;在从库导入:mysql < dump.sql;然后在从库执行 CHANGE MASTER TO MASTER_HOST='主库IP', MASTER_USER='repl', MASTER_PASSWORD='pwd', MASTER_AUTO_POSITION=1; START SLAVE;
4.3 故障切换:检测主不可用后,在备援区执行 STOP SLAVE; RESET SLAVE ALL; SET GLOBAL read_only=0; 并将应用指向新主(修改配置或DNS)。建议使用自动化脚本并记录步骤。
5.1 对象存储:若使用 S3 兼容对象存储,启用跨区域复制(CRR)。设置 bucket replication rule,验证复制策略与权限。
5.2 文件系统:使用 rsync 或 lsyncd 做增量同步:rsync -az --delete /data/ user@backup:/data/,并在目标挂载点做软链接或更新服务配置。对实时文件可使用 lsyncd + rsync。
5.3 镜像仓库:将 Docker 镜像 push 到私有/公有 Registry(含替代区)。CI/CD 流程需能同时向多个 registry 推送。
6.1 低TTL与健康检查:将关键域名 TTL 设为较低值(如60s),并在DNS服务(Cloudflare/AWS Route53)配置 HTTP(s) 健康检查。
6.2 自动切换:使用 DNS 提供商 API 在故障时更新 A/AAAA 记录或将流量指向备援负载均衡器。示例(Cloudflare API)用 curl 更新记录,并结合监控脚本自动触发。
6.3 备用方案:若DNS切换延迟,可用Anycast或BGP浮动IP(需运营商支持)来更快切换出口。
7.1 基础设施即代码:用 Terraform/Ansible 管理基础设施与配置,保持两个区域配置同步,版本可回滚。
7.2 自动化恢复脚本:编写一键故障转移脚本,包含:验证备援健康、提升数据库主库、更新 DNS、重启服务与回滚指令。
7.3 常态化演练:每季度至少一次全流程演练(非生产流量或灰度)。演练内容记日志并修订 runbook,检查是否达到RTO/RPO。
8.1 答:第一步按预案执行监控与告警的确认:确认是单节点故障还是全区故障;启动应急联系人并立即切换到备援区(执行故障转移脚本或手动提升从库并更新DNS/负载均衡)。
9.1 答:可采取混合策略:关键写操作在主库完成并同步到多个从库;对强一致性需求使用半同步复制或通过应用层在写入时等待备援确认;并设置合适的监控与告警阈值,定期校验数据一致性(pt-table-checksum / checksum 工具)。
10.1 答:演练要覆盖每一步并记录时间点:健康检查、复制状态、DNS生效、应用请求成功率。演练后要回顾日志、修正runbook、调整监控规则,并在生产流量中做小流量灰度验证,直到指标达到预设RTO/RPO。