目标:在台风造成机房断电/链路抖动或ISP波动时,保证网站可用性(RTO ≤ 15 分钟,RPO ≤ 1 小时)。
小分段:风险识别 → 设计多活/热备 → 自动化故障切换 → 定期演练。
步骤:列出所有站点、主机、数据库、存储桶、证书与外部依赖(API、第三方CDN)。
操作:导出CMDB清单(CSV),示例列:主机名, 私有IP, 公网IP, 角色, 数据量, 依赖服务。
验收:确认业务优先级(高/中/低)并标注必须的RTO/RPO。
建议:在台湾本地节点为主站,多可用区部署;在邻近区域(如香港、日本、新加坡)做异地热备或冷备。
小分段:网络层—BGP/加速线路;应用层—负载均衡 + 健康检查;数据层—同步或异步复制(主库异地从库)。
实现要点:设定低DNS TTL(60 秒),准备GSLB或DNS Failover服务,并配置自动健康探测。
文件(代码/资源):使用rsync/lsyncd推送到异地主机。示例命令:rsync -azP --delete /var/www/ user@backup:/var/www/。
数据库(MySQL):
步骤一:启用binlog与GTID;步骤二:在备库执行CHANGE MASTER TO MASTER_HOST='主IP', MASTER_USER='repl', MASTER_PASSWORD='pwd', MASTER_AUTO_POSITION=1; START SLAVE; 检查SHOW SLAVE STATUS\G。
对象存储:使用rclone或云厂商的跨区复制(开启Bucket复制策略),并定期校验。
设置:DNS TTL 60~120 秒;在DNS提供商配置健康检查(HTTP 200 返回)并启用Failover。
实施步骤:1) 配置GSLB或Cloudflare Load Balancer;2) 在健康检查失败时自动切换到备用IP/区域;3) 测试:在主站关闭服务,确认DNS 60 秒内切换成功。
注意:缓存问题可用CDN做前端缓存,降低切换压力。
负载层:使用HAProxy/Nginx做反向代理,后端指向本地与异地池,并基于权重或延迟做流量分配。
高可用浮动IP:在同一区域可用keepalived实现VRRP,失败时浮动IP漂移到备用节点。示例keepalived配置需设置priority与notify脚本。
BGP/线路:与ISP确认多线出口;如使用云厂商可申请弹性公网IP+Anycast或BGP路由。
备份频率:代码/静态:每日;数据库:每15分钟binlog备份 + 每日全量;保留策略:7天增量,30天全量。
恢复命令示例(MySQL):mysql -u root -p < backup.sql;对于binlog恢复:mysqlbinlog bin.00000* | mysql -u root -p。
自动化:用cron + 脚本上传备份到异地对象存储(示例:aws s3 cp /backup s3://bucket/ --recursive)。
监控项:主机可用性、HTTP 200 检查、数据库延迟/滞后、磁盘与带宽。工具:Prometheus + Alertmanager + Grafana 或云监控。
告警触发:当健康检查连续3次失败或DB主备滞后 > 60s时触发自动化脚本进行DNS切换或写锁降级。
自动化脚本:使用Ansible/Terraform管理环境,编写切换Runbook并通过Webhook触发。
演练计划:每季度一次的断电/链路切换演练,至少一次全流程从主站切到备站并回切。
Runbook 内容:故障检测 → 通知流程 → 切换步骤(DNS/负载/数据库切换命令)→ 回退步骤 → 验收检查项(页面返回、业务下单、日志无错误)。
培训:对值班人员进行脚本使用与现场排障培训,并记录演练日志与问题清单。
答:立即执行:1) 通知团队进入值班;2) 把DNS TTL调低到60秒;3) 手动触发一次增量备份并将备份同步到异地对象存储;4) 验证异地从库延迟小于RPO;5) 启动CDN缓存并预热静态资源;6) 确认浮动IP/keepalived配置运行正常并记录切换命令。
11.答:先通过健康检查确认主站不可用,然后启动预设的DNS Failover或GSLB策略(TTL 生效约60秒)。同时把数据库写流量暂时降级或切换到只读,若使用主从提升需按Runbook执行:停止主库写入、提升从库为主、修改应用配置指向新主、逐步恢复流量。整个过程需记录并在切换后进行数据一致性校验。
12.答:验证步骤:1) 检查应用日志与业务交易是否有丢单;2) 对比主备库数据计数(如订单总数)并核对时间段;3) 使用校验工具(checksum 或 pt-table-sync)修复差异。回滚:若需要回滚到原主,确保原主数据被基于备库的binlog或全量快照同步后再切回,按Runbook顺序执行并在非高峰期完成切换。