适用场景
迁移整体思路是通过数据库层面的数据导入与同步,实现将自建的 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. 缩容老的服务实例
当阶段二运行一段时间之后,下线老的服务实例。方式二由于依赖流量切换能力、镜像部署一套服务占用额外的资源等劣势,所以建议优先使用方式一迁移。