线上项目腾讯云平滑迁移方案及步骤

目前项目需要迁移至公有云,数据量较大,访问量极高,以腾讯云为例.
我们有两种方案
(1)购买配置cvm部署应用,云存储Redis,CDB for MySQL,负载均衡CLB(公网)
问题:
1.腾讯云redis迁移工具原理为主从拉取rbdaof进行全量同步,考虑共用腾讯云旧实例保留老数据,及本身主从redis有其他项目数据,便放弃迁移。
2.redis主从同步,跟分库(15个)无关,slaveof后会覆盖各个分库。拉取主库全部分库数据。
3.腾讯云不支持mysql5.7迁移及mysql5.7至mysql5.7迁移工具不兼容,采用在线上5.7版本建立5.6从库,之后5.6从库 DTS至腾讯云,保持主从同步。
上线步骤:
1.参考项目线上网络环境及目前腾讯云已迁入应用网络环境设置,大体评估购买腾讯云产品选型、参数及网络配置。
*内网可达:
账户中心:域名
redis
mysql
*公网可达:
nginx
2.腾讯云基础环境准备
*负载均衡CLB(公网)
若无公共CLB,需购买1公网CLB,购买参数参照运维建议。
*云服务器CVM
统计线上项目 uv,硬件资源使用,配置>2台内网cvm部署项目,若无公共CLB需1台公网部署nginx,购买配置参照腾讯已迁入应用及运维建议.
*CDB for MySQL
1台(1主1备版),购买参数参照线上mysql参数及腾讯已迁入mysql
*云存储Redis

3.若无公共redis,需购买1台(主从版),容量参照线上使用情况。
1.协助运维准备腾讯云基础环境:
2台CVM(2核4G) 网络可达账户中心
1台redis实例(主从)>1GB
1个mysql实例(主从版,版本5.6)
//腾讯云不支持版本5.7实例,同步工具也不支持5.7->5.7同步.
2.创建当前线上mysql(5.7)的5.6版本从库,计划从该从库创建DTS数据迁移
创建mysql 5.6实例,并开启binlog,重启
[mysqld]
log-bin=mysql-bin
server-id=** //[必须]服务器唯一ID,默认是1,一般取IP最后一段
2.创建线上项目备份:
mysqldump -uroot -p ** --routines --single_transaction --master-data=2 --databases 库名 > _back.sql
3.5.6实例还原备份,查看备份点
mysql -uroot -p** 库名 < _back.sql
4.创建主从
mysql>change master to master_host='线上主IP',master_user='root',MASTER_PORT=3306,master_password='**', master_log_file='gzflog-bin.000004',master_log_pos=2496;
5.查看同步状态
mysql>start slave;
mysql> show slave statusG;
6.查看项目原有从库状态是否受影响:
mysql> show slave statusG;
7.对比总条数:
use ****
select count(1) from table;
select count(1) from table;
select count(1) from table;
select count(1) from table;

3.协助运维创建mysql DTS数据迁移任任务.
参照:https://cloud.tencent.com/document/product/571/8710
线上msyql(10.1.3.82)创建super权限迁移账号
GRANT ALL PRIVILEGES ON *.* TO "迁移账号"@"%" IDENTIFIED BY "迁移密码";
FLUSH PRIVILEGES;
确认 MySQL 变量
SHOW GLOBAL VARIABLES LIKE 'XXX';
确认log-bin,动态修改配置:
set global server_id = 99;
set global binlog_format=ROW;
set global binlog_row_image=FULL;
set global innodb_stats_on_metadata = 0;
创建迁移任务,选择全量+增量,整个实例
启动迁移,增量同步,持平后对比项目表数据条数,并保持主从同步状态
use ****
select count(1) from access_token;
select count(1) from client;
select count(1) from refresh_token;
select count(1) from user;
3.部署项目
通知运维项目使用redis 1号库
修改jenkins 项目部署线上配置
修改项目配置文件,jenkins配置模板,有新增字段
#端口
server.port=8280
management.port=8281
#mysql
spring.datasource.url=jdbc:mysql://*****:3307/***8?useSSL=false
spring.datasource.username=***
spring.datasource.password=****
#redis
spring.redis.host=****
spring.redis.port=****
spring.redis.database=1

部署,并测试接口及网络环境
curl -X POST -d ""
curl -X GET ""
curl -X GET ""
ping ***.com
协助运维配置nginx,并测试网络可达
查看redis存储:
redis-cli -h ***** -p 6479
select 1;
keys *o*
通知运维写停机脚本
线上两台机器:**********
ps -ef|grep ***
kill -9 id

4.通告相关部门项目腾讯云迁入IP变更.(待统计)

5.具备上线条件后,操作上线步骤
检查项目运行状态是否正常
检查mysql主从同步状态是否正常(运维)
核对网络切换步骤(运维)
执行项目停机脚本,运维切换网络入口(运维)
测试登录
https://dev-game.smartisan.com/
核对mysql主从同步状态,无误后,停止同步.
* 提交测试
* 查看监控服务、网络状态

原文地址:https://www.cnblogs.com/guozefeng/p/7252546.html