# Hifast AWS 香港到日本东京迁移 Runbook 本文档用于把当前香港区 `ap-east-1` 主生产,迁移到日本东京 `ap-northeast-1`。 适用目标: - 东京成为新主站 - 架构升级为 `ALB + WAF + EC2 + RDS` - `104.238.220.230` 继续作为东京主站的 MySQL / Redis 外部灾备 ## 0. 当前实施状态 截至 `2026-05-21`: - 东京迁移执行资产已在仓库内补齐 - 东京网络基础资源已创建并复核: - VPC `ppanel-jp-prod` / `vpc-0846b23b4a7d64eac` - 2 个公有子网 - 2 个私有子网 - IGW - 公有 / 私有路由表 - 东京三层安全组已创建并复核: - `ppanel-jp-sg-alb` - `ppanel-jp-sg-ec2` - `ppanel-jp-sg-rds` - 东京 RDS 已创建并可用: - Endpoint: `ppanel-mysql-jp.cpo0keikgh80.ap-northeast-1.rds.amazonaws.com` - Port: `3306` - Username: `admin` - Credential management: `self-managed` - Current password visibility: `cannot be viewed in AWS console; only reset is supported` - 东京业务 EC2 已创建并运行: - Name: `ppanel-app-jp-01` - Instance ID: `i-07839130074cd7ed9` - Type: `c7i.xlarge` - Private IP: `10.20.1.168` - Elastic IP: `3.114.29.208` - 东京 S3 备份桶已创建 - 东京 ACM 证书已请求,仍等待 DNS 验证 - 当前尚未完成的核心资源: - ALB - WAF - ACM DNS 验证 - 东京应用目录部署与数据导入 建议先执行: ```bash cp deploy/aws/ap-northeast-1/configs/aws-jp-infra.env.example /root/aws-jp-infra.env vim /root/aws-jp-infra.env bash deploy/scripts/aws_jp_create_base_infra.sh /root/aws-jp-infra.env bash deploy/scripts/aws_jp_describe_state.sh /root/aws-jp-infra.env ``` 然后把结果回填到: - `deploy/aws/ap-northeast-1/configs/resource-inventory.current.md` - `ops/hifast-aws-jp-cutover-checklist-zh.md` ## 1. 当前基线 迁移前默认当前现网状态为: - 香港应用 EC2:`hifast-hk-app-01` - 香港 RDS:`hifast-mysql-prod-v2.cd6aey40m6ag.ap-east-1.rds.amazonaws.com` - 香港 Redis 主库:`18.163.33.75:6379` - 外部灾备:`104.238.220.230` - 当前应用部署目录:`/opt/ppanel` - 当前应用配置文件:`/opt/ppanel/configs/ppanel.yaml` - 当前业务容器:`ppanel-server` ## 2. 迁移前准备 正式迁移前必须完成: 1. 东京基础设施已创建 2. 东京 EC2 已部署应用目录,但暂未导入正式数据 3. 东京 RDS 可连通 - 已验证从东京 EC2 到 `ppanel-mysql-jp.cpo0keikgh80.ap-northeast-1.rds.amazonaws.com:3306` 网络畅通 - 当前若无密码只能得到 `ERROR 1045 ... using password: NO`,这表示链路正常,不表示实例异常 4. 东京 Redis 已启动并可认证 5. 平行域名已准备: - `api-jp.hifast.biz` - `logs-jp.hifast.biz` 6. 东京 ALB 健康检查已通过 7. 东京 ACM 证书已签发 8. 东京 WAF 已挂到 ALB 9. 已准备正式回滚入口 10. 已把正式域名 TTL 降低 ## 3. 香港停机冻结 在香港主环境执行: 1. 停止业务写入 2. 停 `ppanel-server` 3. 保留 Nginx 维护页或直接下线入口 建议命令: ```bash cd /opt/ppanel docker compose -f docker-compose.cloud.yml stop ppanel-server ``` 冻结后确认: - `/v1/common/heartbeat` 不再提供正式流量 - 不再有新写入进入香港 MySQL / Redis ## 4. 导出香港数据 ### 4.1 MySQL 从香港主库导出: ```bash mysqldump \ -h hifast-mysql-prod-v2.cd6aey40m6ag.ap-east-1.rds.amazonaws.com \ -u admin \ -p \ --single-transaction \ --routines \ --triggers \ --events \ --set-gtid-purged=OFF \ hifast | gzip > hifast-full.sql.gz ``` ### 4.2 Redis 在香港 Redis 主库导出: ```bash docker exec hifast-redis redis-cli -a '' BGSAVE docker cp hifast-redis:/data/dump.rdb ./dump.rdb ``` ## 5. 导入东京 ### 5.1 MySQL 导入东京 RDS ```bash gunzip -c hifast-full.sql.gz | mysql -h -u admin -p hifast ``` 导入后确认: ```bash mysql -h -u admin -p -e "USE hifast; SHOW TABLES;" ``` ### 5.2 Redis 导入东京 1. 停止东京 Redis 容器 2. 替换 `/data/dump.rdb` 3. 启动东京 Redis 容器 导入后确认: ```bash docker exec hifast-redis redis-cli -a '' PING ``` ## 6. 启动东京应用 更新东京: - `/opt/ppanel/configs/ppanel.yaml` - `/opt/ppanel/.env` 关键值: - `MySQL.Addr=:3306` - `MySQL.Username=admin` - `MySQL.Password=` - `Redis.Host=127.0.0.1:6379` - `Redis.Pass=` - `Site.Host=api-jp.hifast.biz` - `.env` 中 `AWS_REGION=ap-northeast-1` 注意: - 东京这台 RDS 当前不是 Secrets Manager 托管密码 - AWS 控制台不能回看旧密码明文 - 如果现有密码遗失,只能在 RDS 修改页重置新密码,再同步写入东京 `ppanel.yaml` 当前东京已实际生效: - `MySQL.Addr=ppanel-mysql-jp.cpo0keikgh80.ap-northeast-1.rds.amazonaws.com:3306` - `MySQL.Username=admin` - `MySQL.Password=TkyRds20260521!N9mQ8sKe2vLp7Xa` - `Redis.Host=127.0.0.1:6379` - `Redis.Pass=hifast67yj` 启动: ```bash cd /opt/ppanel docker compose -f docker-compose.cloud.yml up -d ``` ## 7. 东京平行环境验收 至少执行: ```bash curl -sf http://127.0.0.1:8080/v1/common/heartbeat curl -sf http://127.0.0.1/v1/common/heartbeat docker compose -f /opt/ppanel/docker-compose.cloud.yml ps docker compose -f /opt/ppanel/docker-compose.cloud.yml logs --tail=200 ppanel-server ``` 必须验证: - ALB 健康检查返回 `200` - 后台可登录 - 用户登录 / 注册 / 订阅正常 - 验证码 / 会话 / 限流正常 - MySQL / Redis 无连接错误 - WAF 不误伤正常请求 - 平行域名外网访问正常 ## 8. 正式域名切换 仅在东京平行环境验收全部通过后执行: 1. 将正式域名切到东京 `ALB` 2. 观察 5xx、延迟、容器日志、RDS、Redis 3. 保持香港不删,只做回滚保留 ## 9. 104 灾备重挂 ### 9.1 MySQL 在东京 RDS 上: ```sql CALL mysql.rds_set_configuration('binlog retention hours', 24); CREATE USER IF NOT EXISTS 'repl'@'104.238.220.230' IDENTIFIED BY ''; GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'repl'@'104.238.220.230'; FLUSH PRIVILEGES; SHOW BINARY LOG STATUS; ``` 当前东京已准备完成: - `repl@104.238.220.230` - 复制密码:`XwWrQGVWtxmXJ3etHmkFvnRSD54MKYer` - binlog file:`mysql-bin-changelog.000189` - binlog pos:`185053` 然后在 `104` 重建并挂从。 ### 9.2 Redis 将 `104` Redis 指向东京 EC2 Redis 主库,确认: - 东京 `role:master` - 东京 `connected_slaves:1` - `104` `role:slave` - `104` `master_link_status:up` ## 10. 回滚 如果东京验收失败: - 不切正式域名 - 继续保留香港主环境 如果正式切换后发现严重问题: 1. 立刻把 DNS 切回香港 2. 恢复香港 `ppanel-server` 3. 放弃本次东京接管 ## 11. 切换后观察期 切换后至少保留香港环境 `7` 天: - 香港 RDS 快照 - 香港 Redis RDB - 香港 EC2 配置 - 香港 `ppanel.yaml` 备份 观察期内不删除香港资源。