287 lines
6.9 KiB
Markdown
287 lines
6.9 KiB
Markdown
# 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 '<REDIS_PASSWORD>' BGSAVE
|
||
docker cp hifast-redis:/data/dump.rdb ./dump.rdb
|
||
```
|
||
|
||
## 5. 导入东京
|
||
|
||
### 5.1 MySQL 导入东京 RDS
|
||
|
||
```bash
|
||
gunzip -c hifast-full.sql.gz | mysql -h <TOKYO_RDS_ENDPOINT> -u admin -p hifast
|
||
```
|
||
|
||
导入后确认:
|
||
|
||
```bash
|
||
mysql -h <TOKYO_RDS_ENDPOINT> -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 '<TOKYO_REDIS_PASSWORD>' PING
|
||
```
|
||
|
||
## 6. 启动东京应用
|
||
|
||
更新东京:
|
||
|
||
- `/opt/ppanel/configs/ppanel.yaml`
|
||
- `/opt/ppanel/.env`
|
||
|
||
关键值:
|
||
|
||
- `MySQL.Addr=<TOKYO_RDS_ENDPOINT>:3306`
|
||
- `MySQL.Username=admin`
|
||
- `MySQL.Password=<TOKYO_RDS_PASSWORD>`
|
||
- `Redis.Host=127.0.0.1:6379`
|
||
- `Redis.Pass=<TOKYO_REDIS_PASSWORD>`
|
||
- `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 '<REPL_PASSWORD>';
|
||
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` 备份
|
||
|
||
观察期内不删除香港资源。
|