Files
hi-server/ops/hifast-rds-v2-cutover-checklist-zh.md
T

6.6 KiB
Raw Blame History

Hifast 新 RDS 生产切换清单(已完成归档)

本文档记录已完成的 hifast-mysql-prod -> hifast-mysql-prod-v2 生产切换过程,作为归档和回溯参考。

本次切换已经完成,当时的目标是避免继续在线硬改现有生产 RDS,而是:

  1. 新建一台规范公网子网组的新 RDS
  2. 导入现有 hifast 数据
  3. 将 AWS 应用切到新 RDS
  4. 104.238.220.230 的外部从库改挂新 RDS
  5. 验收通过后再下线旧 RDS

1. 适用背景

当前现网已经可用,但还存在 1 个结构性问题:

  • 为了让 104 通过公网白名单做 MySQL 复制,当时的 hifast-mysql-prod 仍依赖 hifast-hk-private-1b 临时挂公网路由

当前已准备好的收敛资源:

  • 纯公网 DB subnet group:
    • hifast-hk-rds-public-only-sgprep
  • 安全组:
    • hifast-hk-rds-core-sg

2. 目标实例参数

建议新实例名称:

  • hifast-mysql-prod-v2

建议参数如下:

  • Region: ap-east-1
  • Engine: MySQL
  • Engine version: 8.4.8
  • Templates: Production
  • DB instance class: db.r7g.xlarge
  • Storage type: gp3
  • Allocated storage: 200 GiB
  • Provisioned IOPS: 3000
  • Storage throughput: 125
  • Multi-AZ: No
  • Publicly accessible: Yes
  • VPC: vpc-09fc384522517debc
  • DB subnet group: hifast-hk-rds-public-only-sgprep
  • VPC security group: hifast-hk-rds-core-sg
  • DB name: hifast
  • Master username: admin
  • Master password: 与现网保持一致
  • Backup retention: 7 days
  • Performance Insights: On
  • Storage encryption: On
  • Deletion protection: On
  • Auto minor version upgrade: 建议保持与现网一致
  • Maintenance window: 可与现网同策略,建议维护窗口内切换

3. 切换前确认

切换前必须满足:

  1. 104 当前主从正常:
    • Replica_IO_Running: Yes
    • Replica_SQL_Running: Yes
    • Seconds_Behind_Source: 0
  2. AWS 应用机心跳正常:
    • curl http://127.0.0.1:8080/v1/common/heartbeat
  3. AWS Redis 主从正常:
    • AWS 主 connected_slaves:1
    • 104master_link_status:up
  4. 已确认当前应用真实配置文件:
    • /opt/ppanel/configs/ppanel.yaml
  5. 已确认当前应用重启方式:
    • cd /opt/ppanel && docker compose -f docker-compose.cloud.yml up -d ppanel-server

4. 创建新 RDS

已在 AWS 控制台创建 hifast-mysql-prod-v2,未对原 hifast-mysql-prod 做高风险在线子网调整。

创建完成后先确认:

  1. 新 endpoint 已分配
  2. Publicly accessible = Yes
  3. SG 为 hifast-hk-rds-core-sg
  4. DB subnet group 为 hifast-hk-rds-public-only-sgprep
  5. 104 可以 TCP 连通 3306

连通性验证:

nc -zv <NEW_RDS_ENDPOINT> 3306

5. 导出旧主库

在一台可连旧 RDS 的机器执行:

mysqldump \
  -h hifast-mysql-prod.cd6aey40m6ag.ap-east-1.rds.amazonaws.com \
  -u admin \
  -p \
  --single-transaction \
  --routines \
  --triggers \
  --events \
  --set-gtid-purged=OFF \
  hifast > hifast-full.sql

说明:

  • 当前业务库体量约 187 MB
  • 这条路线的成本低,且比现网主库在线改子网更稳

6. 初始化新 RDS

先连接新 RDS

mysql -h <NEW_RDS_ENDPOINT> -u admin -p

建议先执行:

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;

如果库是空的,再导入:

mysql -h <NEW_RDS_ENDPOINT> -u admin -p hifast < hifast-full.sql

导入完成后确认:

mysql -h <NEW_RDS_ENDPOINT> -u admin -p -e "USE hifast; SHOW TABLES;"

7. 切换 AWS 应用到新 RDS

7.1 备份当前配置

在 AWS app EC2

cp /opt/ppanel/configs/ppanel.yaml /opt/ppanel/configs/ppanel.yaml.bak.$(date +%Y%m%d%H%M%S)

7.2 修改数据库地址

编辑:

  • /opt/ppanel/configs/ppanel.yaml

把:

MySQL:
  Addr: hifast-mysql-prod.cd6aey40m6ag.ap-east-1.rds.amazonaws.com:3306

改成:

MySQL:
  Addr: hifast-mysql-prod-v2.cd6aey40m6ag.ap-east-1.rds.amazonaws.com:3306

7.3 重启业务容器

cd /opt/ppanel
docker compose -f docker-compose.cloud.yml up -d ppanel-server

7.4 应用验收

curl -sf http://127.0.0.1:8080/v1/common/heartbeat
docker compose -f /opt/ppanel/docker-compose.cloud.yml logs --tail=100 ppanel-server

重点确认:

  • 心跳返回 200
  • 日志中无 MySQL 连接异常

8. 改挂 104 从库到新 RDS

先在新 RDS 获取位点:

SHOW MASTER STATUS;

然后在 104 执行:

STOP REPLICA;
RESET REPLICA ALL;
CHANGE REPLICATION SOURCE TO
  SOURCE_HOST='hifast-mysql-prod-v2.cd6aey40m6ag.ap-east-1.rds.amazonaws.com',
  SOURCE_PORT=3306,
  SOURCE_USER='repl',
  SOURCE_PASSWORD='<REPL_PASSWORD>',
  SOURCE_LOG_FILE='<MASTER_LOG_FILE>',
  SOURCE_LOG_POS=<MASTER_LOG_POS>,
  SOURCE_SSL=1;
START REPLICA;
SHOW REPLICA STATUS\G

验收标准:

  • Replica_IO_Running: Yes
  • Replica_SQL_Running: Yes
  • Seconds_Behind_Source: 0

9. 切换后验收

至少做下面这些检查:

  1. AWS 应用心跳正常
  2. 管理后台可登录
  3. 新建一条测试数据后,主库可见
  4. 104 从库能同步到该测试数据
  5. Navicat 可从白名单来源连接新 RDS
  6. Redis 主从仍正常,不受本次 MySQL 切换影响

推荐额外核对:

docker compose -f /opt/ppanel/docker-compose.cloud.yml ps
docker exec hifast-redis redis-cli -a '<REDIS_PASSWORD>' INFO replication

10. 回滚方案

如果切换后 AWS 应用异常:

  1. 立刻把 /opt/ppanel/configs/ppanel.yamlMySQL.Addr 改回旧 endpoint
  2. 重启 ppanel-server
cd /opt/ppanel
docker compose -f docker-compose.cloud.yml up -d ppanel-server
  1. 优先恢复主生产可用
  2. 104 是否回切旧 RDS 复制,视恢复窗口决定

如果只是 104 复制改挂失败,但 AWS 应用已正常使用新 RDS:

  • 不必立刻回滚应用
  • 先修好 104 -> 新 RDS 的白名单、位点、用户或网络

11. 切换完成后的收尾

全部验收通过后再做:

  1. 已将新 endpoint 记录到正式运维文档
  2. 仍需根据回收窗口安排旧 RDS 下线
  3. 仍需按网络收敛计划处理 private-1b 路由语义
  4. 已更新外部复制 runbook 中的主库 endpoint

12. 当前建议的执行顺序

本次切换当时按以下顺序执行:

  1. 创建 hifast-mysql-prod-v2
  2. 验证新 RDS 网络与参数
  3. 导出旧库
  4. 导入新库
  5. 创建 / 确认 repl 用户
  6. 切 AWS 应用到新 RDS
  7. 验证应用
  8. 改挂 104 到新 RDS
  9. 验证从库
  10. 收尾,并保留旧 RDS 待后续下线