有奖捉虫:办公协同&微信生态&物联网文档专题 HOT

适用场景

迁移整体思路是通过数据库层面的数据导入与同步,实现将自建的 Apollo 集群迁移到 TSE Apollo 集群。
请参考以下步骤进行操作:

步骤1:TSE 创建 Apollo 实例

通过 TSE 控制台 创建 Apollo 实例,创建的环境信息需跟自建的 Apollo 一致。在数据库迁移的过程中,将会覆盖 TSE Apollo 实例原本的数据,所以建议 TSE Apollo 实例为空库,或在迁移前确保 TSE Apollo 的数据可以被覆盖。

步骤2:源 Apollo 数据库开启公网访问并检查配置

TSE Apollo 迁移任务支持通过公网的方式,接入源数据库类型为自建数据库、腾讯云数据库、第三方云厂商数据库等,并实施数据迁移。
在开始迁移任务前,您需要先为您的源数据开启公网访问,并将迁移任务的 IP 地址添加到源数据库的白名单中,以便迁移任务可以与需要访问的数据库连通。
同时,请根据以下提供的校验项检查您的源 Apollo 数据库配置,校验失败将会导致迁移失败。

操作指引

1. 根据源数据库所在地域,在下方获取对应地域 迁移任务 的 IP 地址,将其加入到源数据库的白名单中。

  • 自建数据库,请在防火墙设置中允许 迁移任务 IP 地址访问。
  • Windows 系统:打开控制面板找到 Windows 防火墙,查看防火墙策略。
  • Linux 系统:请执行 iptables -L 命令,查看服务器防火墙策略。
  • 腾讯云数据库或者 CVM 上的自建数据库,请参考如下指导将 迁移任务的 IP 地址添加到安全组中。
    • 登录源数据库,在实例列表,单击实例 ID,进入实例管理页面。
    • 在实例管理页面,选择安全组页或者数据安全页, 添加 DTS 服务的 IP 地址到安全组中。
  • 第三方云厂商数据库,请添加 迁移任务 IP 地址到相关的安全组配置中。
  • 迁移任务的 IP 地址:
    地域 迁移任务 IP 地址
    广州 111.230.198.143,118.89.34.161,123.207.84.254,139.199.74.159
    上海 111.231.139.59,111.231.142.94,115.159.71.186,182.254.153.245
    北京 123.207.145.84,211.159.157.165,211.159.160.104,58.87.92.66
    成都 111.231.225.99,118.24.42.158
    重庆 139.186.122.1/24,129.28.12.1/24,129.28.14.1/24,139.186.77.242,139.186.109.1/24, 139.186.131.1/23,94.191.102.144,94.191.98.210
    杭州ec 111.231.139.59,111.231.142.94,115.159.71.186,182.254.153.245
    南京 129.211.166.117,129.211.167.130
    天津 154.8.246.150,154.8.246.48
    深圳 118.126.124.6,118.126.124.83
    中国香港 119.29.180.130,119.29.208.220,124.156.168.151,150.109.72.54
    北京金融 62.234.240.36,62.234.241.241
    深圳金融 118.89.251.206,139.199.90.75
    上海金融 115.159.237.246,211.159.242.74
    新加坡 119.28.103.40,119.28.104.184,119.28.116.123,150.109.11.113
    雅加达 43.129.33.41,43.129.35.144
    曼谷 150.109.164.203,150.109.164.82
    孟买 119.28.246.130,119.28.246.18
    首尔 119.28.150.71,119.28.157.173
    东京 150.109.195.201,150.109.196.137
    硅谷 49.51.38.216,49.51.39.189
    弗吉尼亚 170.106.2.63,49.51.85.120
    多伦多 45.113.70.156,45.113.70.6,49.51.10.104,49.51.9.221
    法兰克福 49.51.132.38,49.51.133.85
    莫斯科 162.62.16.46,162.62.21.243

2. 根据以下的配置校验项,检查您的源 Apollo 数据库配置正确:

校验项 说明
innodb_stats_on_metadata 源数据库环境变量参数 innodb_stats_on_metadata 需要设置为 OFF。 innodb_stats_on_metadata 参数开启时,每当查询 information_schema 元数据库里的表,Innodb 就会更新 information_schema.statistics 表,导致访问时间变长。关闭后可加快对于 schema 库表的访问。
MySQL 5.6.6 之前版本 innodb_stats_on_metadata 参数预设值为 ON,需要修改为 OFF。MySQL 5.6.6 及其以后的版本预设值为 OFF,不存在问题。
数据库版本 源数据库版本 ≤ 8.0
数据库权限 源数据库账号需要至少具备以下权限: RELOAD,LOCK TABLES,REPLICATION CLIENT,REPLICATION SLAVE,SHOW DATABASES,SHOW VIEW,PROCESS
实例参数检查 1. 源库变量 connect_timeout 必须大于10。
2. 源库表的 row_format 不能为 FIXED。
3. 源库表lower_case_table_names 变量必须为0。
BINLOG相关参数检查 1. log_bin 变量必须设置为 ON。
2. binlog_format 变量必须设置为 ROW。
3. binlog_row_image 必须设置为 FULL。
4. server_id 参数需要手动设置,且值不能设置为0。
5. 不允许设置 do_db,ignore_db。
外键依赖检查 外键依赖只能设置为 NO ACTION、RESTRICT。 部分库表迁移时,有外键依赖的表必须齐全。

步骤3:TSE Apollo 中创建迁移任务

在完成源 Apollo 集群数据库的公网访问配置后,请在 TSE Apollo 实例详情页面 - 迁移任务页面下配置并开启迁移任务。

  • 接入类型:当前仅支持公网接入。
  • 数据库类型:当前仅支持MySQL数据库。
  • 主机地址:请填入源 Apollo 数据库实例公网地址。
  • 端口:请填入源 Apollo 数据库实例公网端口。
  • 账号:请填入源 Apollo 数据库账号。
  • 密码:请填入源 Apollo 数据库密码。
  • 数据库配置:请填入源 Apollo 数据库与 TSE Apollo 数据库的映射关系。
    • 源数据库:请填入源 Apollo 数据库名称。
    • 目标数据库:请选择 TSE Apollo 相应的环境。

单击提交后,迁移任务将开始执行。

步骤4:数据同步

在完成迁移任务的配置后,将开启源 Apollo 数据库的全量+增量数据迁移,在任务执行过程当中支持向源 Apollo 数据库写入新的数据,目标TSE Apollo 数据库将会实时同步新的数据。

注意事项

  • 在执行数据迁移时,会占用一定源数据库实例资源,可能会导致源数据库实例负载上升,增加数据库自身压力。如果您的数据库配置过低,建议您在业务低峰期进行迁移。
  • 默认采用无锁迁移来实现,迁移过程中对源数据库不加全局锁(FTWRL),仅对无主键的表加表锁,其他不加锁。
  • 迁移任务执行时,会使用执行迁移任务的账号在源数据库中写入系统库tencentdb,用于记录迁移任务过程中的数据对比信息。
    • 为保证后续数据对比问题可定位,迁移任务结束后不会删除源数据库中的tencentdb
    • tencentdb系统库占用空间非常小,约为源数据库存储空间的千分之一到万分之一(例如源数据库为50GB,则tencentdb系统库约为5MB-50MB) ,并且采用单线程,等待连接机制,所以对源数据库的性能几乎无影响,也不会抢占资源。

操作指引

  • 您可以在 TSE Apollo 实例详情页 - 迁移任务页面下查看迁移任务当前运行的进度与状态:
  • 当迁移任务执行至同步增量阶段后,任务将持续同步源 Apollo 数据库中的增量数据,建议您在完成 步骤五:业务应用迁移 后,终止迁移任务。
  • 如果在迁移任务执行过程中出现错误,且检查您的源 Apollo 数据库配置无误,可通过 快速提工单,联系腾讯云助手协助。

步骤5:业务应用迁移

方式一:原地迁移(推荐)

原地迁移为在原有的服务上,通过逐步修改服务实例的 Apollo 地址来完成整体的迁移。整个过程如下所示:

1. 服务全部实例指向自建 Apollo

2. 迁移部分实例到 TSE Apollo

1) 迁移前,人工校验服务的配置内容两边是否一致
2)修改业务应用配置的 Apollo 服务地址,灰度部分服务实例指向 TSE Apollo 集群的服务地址
3)灰度一段时间之后,再迁移剩余的服务实例

如果迁移过程中业务出现问题,则及时回滚配置,连回自建 Apollo。

3. 迁移全部实例到 TSE Apollo

迁移过程中,如果有配置变更则需要同时修改自建 Apollo 和 TSE Apollo 的配置。

4. 下线自建 Apollo

可以通过以下两种方式确认自建 Apollo 集群是否还有客户端使用:

1) 查看 ConfigService 机器 8080 端口的连接数是否为0,如果为0表示没有客户端连接
2) 查看 ConfigDB 的 Instance 表,确认近期没有客户端拉取配置

如果以上两点都确认完成之后,建议的下线自建 Apollo 集群的流程:

1) Kill ConfigService 的进程,不 Kill AdminService 和 Portal 的进程。ConfigService 用于对客户端提供服务,Kill ConfigService 就可认为切断整个 Apollo 服务。只 Kill ConfigService 进程为了下线过程中如果有残留客户端,则可以快速拉起 ConfigService 恢复,减少影响面。
2) 当第一步灰度一段时间之后(1周到1个月),再回收其它服务的资源。

方式二:先扩容再缩容

先扩再缩的方式,总的来说先部署一组新的服务并指向 TSE Apollo,通过流量切换的方式把流量从老的服务实例迁移到新的服务实例。最后再缩容掉老的服务实例。

1. 部署一组新的服务实例,流量指向老的服务实例

2. 流量切换到新的服务实例

如果流量切换之后发现业务异常,则切回老的服务实例。

3. 缩容老的服务实例

当阶段二运行一段时间之后,下线老的服务实例。方式二由于依赖流量切换能力、镜像部署一套服务占用额外的资源等劣势,所以建议优先使用方式一迁移。