1.1 清单与版本核对:列出源端/目标机的操作系统、内核、软件版本(nginx, php, python, docker等),确认兼容性。
1.2 备份策略:先做整机快照或备份(云提供快照或snapshot),并导出数据库(mysqldump或pg_dump),示例:mysqldump -u root -p --single-transaction --routines --triggers dbname > db.sql。
1.3 环境准备:在香港目标机上安装必要的软件、配置安全组(开放SSH、HTTP/HTTPS、数据库仅白名单),并预留公网IP或负载均衡。
2.1 配置安全组:仅开放SSH至运维IP、开放80/443,数据库端口限制到应用服务器或VPN,示例规则:tcp/22 from 1.2.3.4/32。
2.2 VPC与子网:如使用私有网络,确保目标子网能访问备份与数据源,设置NAT或公网出口以便拉取镜像与补丁。
2.3 SSL与域名:提前申请/复制证书(Let's Encrypt 或付费证书),并把DNS TTL缩短至60秒以便切换。
3.1 在线同步(小流量):使用mysqldump全量导出并导入:mysql -u root -p dbname < db.sql;导入后校验行数与表结构。
3.2 大数据量零停机:搭建临时主从复制或使用Percona XtraBackup。步骤:在源端开启binlog,创建replica账号,配置目标为slave并等待同步。
3.3 校验与切换:验证目标数据一致性(SELECT COUNT(*)),在切换瞬间暂停写入或切换应用到只读模式,完成最后的binlog增量同步后切换主库。
4.1 使用rsync增量同步:rsync -avz --delete --progress /var/www/uploads/ user@target:/var/www/uploads/。第一次同步在窗口期进行全量,切换前再做一次增量。
4.2 权限与SELinux:同步后修正权限 chown -R www:www /var/www/uploads && chmod -R 750 /var/www/uploads,若启用SELinux,请用restorecon。
4.3 对象存储:若使用云对象存储(COS/S3),建议在目标配置相同bucket或切换endpoint,使用rclone同步大文件。
5.1 包管理与依赖:在目标机创建虚拟环境或容器,pip install -r requirements.txt 或 docker-compose up -d。
5.2 Systemd与进程管理:为服务创建systemd单元文件,示例:/etc/systemd/system/myapp.service,执行 systemctl daemon-reload && systemctl enable --now myapp。
5.3 配置管理:用环境变量或配置文件分离敏感信息,避免将密钥写入代码库,可使用Vault或云KMS。
6.1 降低DNS TTL:在切换前24小时把TTL降到60秒,便于回滚。
6.2 健康检查与蓝绿/灰度:在负载均衡上配置健康检查(/health),先把部分流量切到目标验证,确认无误后逐步切换。
6.3 最终切换命令示例:更新负载均衡后端或修改DNS A记录,关注access/error日志并验证用户关键路径(登录、下单、上传)。
7.1 清单与变量:建立 inventory 文件(target hosts),group_vars 定义通用变量。
7.2 Playbook 示例步骤:创建 playbook.yml,包括安装依赖、传文件、运行db迁移与重启服务。例如任务:- name: rsync files shell: rsync ...
7.3 并行与回滚:使用serial: 1做滚动发布;将回滚playbook纳入版本控制并测试。
8.1 镜像构建:在CI中使用 docker build -t registry/myapp:$CI_COMMIT_SHA . 并 push 到私有registry。
8.2 自动化部署:CI触发Ansible或kubectl apply,使用标签替换策略保证可回滚。
8.3 流水线建议:阶段划分为 build -> test -> image push -> deploy -> smoke test,并在失败时自动回退。
9.1 指标采集:部署node_exporter、process_exporter,Prometheus抓取并在Grafana创建仪表盘。
9.2 日志集中:使用Filebeat/Fluentd推送到ELK或云日志服务,保证业务日志与Nginx访问日志可查询。
9.3 告警规则:设置CPU、内存、请求错误率与响应时间阈值,并配置告警渠道(邮箱、钉钉、Slack)。
10.1 回滚流程:保持旧环境至少一小时,DNS/负载均衡回退步骤写入Runbook,快速执行即可回滚流量。
10.2 定期备份:设置数据库日备和增量、快照策略并定期演练恢复(至少月一次)。
10.3 性能优化:在香港节点注意带宽与延迟,使用CDN分发静态资源,数据库索引与慢查询分析。
答:常见失败点包括:遗漏隐含依赖(系统包、时区、软链接)、未同步增量数据、未提前修改DNS TTL、数据库写入在切换时丢失、以及安全组/防火墙导致服务不可达。解决办法是准备清单、做多次演练和演练回滚。
答:推荐组合为:Ansible(配置管理与执行)、Terraform(网络与云资源编排)、Docker/Compose或Kubernetes(部署隔离)、GitLab CI/GitHub Actions(流水线)、Prometheus+Grafana(监控)、ELK或云日志(日志)。根据团队熟悉度选择优先级。
答:策略包括:先缩短DNS TTL、使用rsync做多次增量同步、对数据库采用主从复制或binlog增量同步(最后短暂停写切换)、使用灰度或蓝绿部署逐步切换流量,以及在切换窗口提前准备回滚命令与监控观察。