腾讯云迁移到私有云记录

1447 篇文章 12 订阅
1447 篇文章 7 订阅

腾讯云迁移到客户私有云记录

专线配置

公有云到私有云,本次通过拉专线,打通公有云VPC跟私有云VPC的网络,然后进行内网通信,保证数据的安全、稳定。

开通专线

腾讯云控制台搜索“物理专线”,填写自己机房、对方机房的信息,跟专线提供商(例如联通、移动)申请专线拉通。分配好VLAN网段,一般为30位掩码的IP,以提供给腾讯云边界以及私有云边界交换机通信使用。注意:需要跟客户私有云机房协商好,要使用多VLAN进行通信;若不使用VLAN,后续通道新增、扩展十分麻烦

腾讯云专线接入后台配置)

新增专线网关

控制台搜索“专线网关”,点击新建即可。标准型网关是单纯转发流量。如果公有云跟私有云子网重叠,则需要做NAT转换或IP地址映射,这时候就需要使用NAT网关。
专线网关

新增通道

在专线接入——>专线通道新建一个通道(vlan)
通道新建
配置VLAN
在这里插入图片描述
当两边都配置好VLAN后,通道会显示已连接。如果处于配置中,说明两端的VLAN IP没有配置正确。

配置VPC路由

专线配置完成后,需要配置公有云上VPC的路由表。控制台搜索私有网络,然后左侧菜单栏点击路由表,对对应的VPC路由表进行路由新增。
在这里插入图片描述
客户私有云也需要写回程路由,这点需要跟客户私有云的网络工程师沟通。

ES迁移

迁移中,第一步先迁移ES。对于ES的迁移,腾讯云提供了两种方案:

  1. 使用snapshot
  2. 使用elasticdump工具

这次迁移我们选择了elasticdump工具。

elasticsearch-dump

  1. 安装

    curl -L https://npmjs.org/install.sh | sh npm install elasticdump -g

  2. 主要参数说明

    --input: 源地址,可为 ES 集群 URL、文件或 stdin,可指定索引,格式为:{protocol}://{host}:{port}/{index} --input-index: 源 ES 集群中的索引 --output: 目标地址,可为 ES 集群地址 URL、文件或 stdout,可指定索引,格式为:{protocol}://{host}:{port}/{index} --output-index: 目标 ES 集群的索引 --type: 迁移类型,默认为 data,表明只迁移数据,可选 settings, analyzer, data, mapping, alias

  3. 迁移单个索引

注意:
第一条命令先将索引的 settings 先迁移,如果直接迁移 mapping 或者 data 将失去原有集群中索引的配置信息如分片数量和副本数量等,当然也可以直接在目标集群中将索引创建完毕后再同步 mapping 与 data。

elasticdump --input=http://172.16.0.39:9200/companydatabase --output=http://172.16.0.20:9200/companydatabase --type=settings
 elasticdump --input=http://172.16.0.39:9200/companydatabase --output=http://172.16.0.20:9200/companydatabase --type=mapping
 elasticdump --input=http://172.16.0.39:9200/companydatabase --output=http://172.16.0.20:9200/companydatabase --type=data
  1. 迁移所有索引
    以下操作通过 elasticdump 命令将集群172.16.0.39中的所有索引迁移至集群172.16.0.20。

此操作并不能迁移索引的配置,例如分片数量和副本数量,必须对每个索引单独进行配置的迁移,或者直接在目标集群中将索引创建完毕后再迁移数据。

elasticdump --input=http://172.16.0.39:9200 --output=http://172.16.0.20:9200
  1. 脚本
    因为不确定第四种方法是否靠谱,所以使用脚本的方式来进行迁移传输。

    cat elastic_sync.sh

    !/bin/bash

    SOURCEELASTIC="http://172.16.1.100:9200" SOURCEAUTH="" #username and password of es for using curl SOURCEPATH="" #username and password of es for using elasticdump,must be a file DESTINELASTIC="http://10.19.12.13:9200" DESTINAUTH="-u user:pass" DESTINPATH="./pass" #里面存放了目标elasticsearch的账号密码,格式:user:pass

    getIndices(){ [ -f "indices.txt" ] && rm -f indices.txt curl -XGET ${SOURCEAUTH} ${SOURCEELASTIC}/cat/indices > indices.txt cat indices.txt|awk '{print $3}' > indicestemp.txt }

    syncIndices(){ for indice in cat indices_temp.txt do echo "${indice} is beginning!" elasticdump --input=${SOURCEELASTIC}/${indice} --output=${DESTINELASTIC}/${indice} --type=settings --httpAuthFile=${DESTINPATH} if [ $? != 0 ];then echo "$indice already exit!" continue fi elasticdump --input=${SOURCEELASTIC}/${indice} --output=${DESTINELASTIC}/${indice} --type=mapping --httpAuthFile=${DESTINPATH} elasticdump --input=${SOURCEELASTIC}/${indice} --output=${DESTINELASTIC}/${indice} --type=data --httpAuthFile=${DESTIN_PATH} done } getIndices syncIndices

如果单个传输太慢,可以使用screen来做并发传输。

yum -y install screen
for i in `seq 10` #10个并发
    do
        screen -dmS elastic${i} /bin/bash ./elastic_sync.sh
    done

MYSQL迁移

公有云CDB到私有云mariadb集群迁移

mysql备份

公有云有两种备份方式:物理备份和逻辑备份。物理备份是使用xtrabackup生成备份,以文件形式恢复数据;逻辑备份是使用传统sql语句恢复数据。
这次我们选择逻辑备份。从公有云上面,手动备份
在这里插入图片描述
然后其中一台服务器下载。
恢复方法:https://cloud.tencent.com/document/product/236/33364
需要下载xtrabackup、qpress工具

数据恢复

分两部分恢复:

  1. 冷备恢复(不需要停服务,提前做,缩短变更时间)
    参考腾讯云文档成sql文件后,使用原始的方法恢复到私有云的mysql。

    mysql -uUSER -pPASSWORD -PPORT < XXX.sql
    
  2. 增量数据恢复。此处使用mysqlbinlog工具恢复(腾讯云逻辑备份有大坑!!下面注意看)。
    先查看sql文件,看看binlog偏移位置

        cat XXX.sql |head -n 35
    

    binlog

    获取到binlog的文件名后、偏移位置后,上腾讯云后台查看对应的binlog文件:
    在这里插入图片描述
    然后你会操蛋地发现,根本就没有这个binlog的文件!!当时我找了很久的客服,上升了N次问题后,腾讯云侧终于找到问题了:逻辑备份(sql文件的形式)是使用了从库的数据,不会直接从主库做备份,避免主库的压力过大,影响生产(我心里是崩溃的,那你倒是提供从库的binlog啊……)。简单来说,就是公有云后台提供了主库的binlog文件,但sql文件中的文件名还有偏移位置,都是从库的,到时候恢复的时候,肯定是会报错的。所以,只能继续提工单,让腾讯云的技术支持给出对应的主库的binlog文件名、偏移位置。得到正确的MASTER_LOG_FILE跟MASTER_LOG_POS后,可以开始愉快地恢复了。跟运维沟通,把服务的入口关闭后,执行恢复:

        mysqlbinlog --start-position=MASTER_LOG_POS  MASTER_LOG_FILE(sql文件)  | mysql -u${user} -p${password}  -f --socket=/data10/prod/mysql.sock
    

    记住加-f参数,遇到错误继续往下执行(因为不同的实例可能会误报权限错误,但后续做校验的时候,其实是不影响的)。
    如果有多个binlog文件,第二个binlog文件恢复的时候就不需要指定偏移位置了(不需要再加–start-position参数),直接整个恢复。
    最后一个binlog,需要刷新一下出来。在公有云的mysql中执行:

        flush logs;
    

    过几分钟后,公有云后台会有新的binlog出来,这时候再恢复过去。

数据校验

使用腾讯提供的数据校验工具。这里不提供方案。

错误数据恢复

如果校验中,发现错误数据,需要恢复的话比较麻烦,需要删除旧数据,插入新数据。这里推荐使用phpmyadmin工具。公有云的mysql有自带的phpmyadmin,而私有云的phpmyadmin需要我们自己搭建。

公有云登录phpmyadmin方式:
在这里插入图片描述
在这里插入图片描述

使用docker运行phpadmin工具
    docker pull phpmyadmin/phpmyadmin

传入全局变量:PMA_HOST是mysql的IP,PMA_PORT是mysql的端口

docker run --name myadmin -d -e PMA_HOST=10.19.3.1 -e PMA_PORT=122  -p 8080:80 phpmyadmin/phpmyadmin

然后访问运行docker的那台机器的8080端口,输入数据库的账号、密码,登陆进去。
界面化操作就很舒服了。把不一致的数据在私有云中删除,然后在公有云PMA中把数据导出,在私有云PMA中把数据导入。

后续处理

因为数据比较重要,为了方便紧急切换、数据恢复(从私有云再切到公有云),我们需要在迁移完成后,马上刷新一下binlog。这样,我们新产生的数据,都原封不动在新的binlog中,不需要记录偏移位置。恢复的时候,整个恢复就可以了。
私有云数据库中执行:
powershell flush logs;

Redis迁移

其实redis可迁可不迁。但为了不给第二天的mysql过大压力,还是做了迁移。
直接使用腾讯云提供的redis迁移工具。
https://cloud.tencent.com/document/product/239/33786

业务迁移

由运维提供方案。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值