Shaun
(Shaun)
2021 年7 月 7 日 06:25
1
tidb 4.0.13
DM 2.0.3
背景:
部署dm为3个work节点,添加source的时候报source is added but there is no free worker to bound,经查询文档说一个work只能绑定一个source。
我这目前情况是,线上有几十个mysql库,需要逐步的一个一个的通过DM迁移并持续增量同步做只读节点,待通过所有测试之后切换为读写在tidb上。
问题:
1.我目前只有3个work节点,怎么来绑定同步几十个不同数据库的数据?
2.可以一个主机上创建多个work么?
3.可以一个work绑定多个source吗?
4.如果以上均不可以 有什么办法解决吗?
一个 DM worker 节点只能同步一个上游数据库,所以如果你上游是10个 mysql,必须建 10个+ DM worker 节点。
官方文档解释:
至于单台机器部署多个 worker 节点,官方配置里貌似没指定不同 port 的功能,这个可能需要其他大佬来看下
1 个赞
xfworld
(魔幻之翼)
2021 年7 月 7 日 07:01
3
单个节点部署多个worker 会引起资源竞争,然后你会发现同步速度达不到预期
最好不要采用这样的方案,除非你同步的数据量很少,然后单节点的资源也足够
如果是这样的场景最好使用其他的CDC 方案,例如 canal,maxwell etc…
但是需要有一定的自研能力,来解决数据处理和路由的功能项
1 个赞
Shaun
(Shaun)
2021 年7 月 7 日 07:32
4
那可以在现有的正在同步的task中增加数据库么,都是一个source的db,只是不同的db
比如说增加一个db2,可以通过修改task_mysql.yaml配置任务来实现么,并且不影响已同步的db1
–配置任务
vi /data1/dm_conf/task_mysql.yaml
name: “task-mysql”
task-mode: “all”
target-database:
host: “10.10.10.10”
port: 4000
user: “root”
password: “xxxxx”
mysql-instances:
source-id: “mysql-replica-mysql”
block-allow-list: “global”
mydumper-config-name: “global”
block-allow-list:
global:
do-dbs: [“db1 ”]
mydumpers:
global:
extra-args: “-B db1 ”
xfworld
(魔幻之翼)
2021 年7 月 7 日 08:06
5
有小伙伴是这么玩的,单个节点上挂了很多worker,当然出了问题就比较惨了
谨慎点,最好测试下在上生产
小王同学Plus
(小王同学 Plus)
2021 年7 月 7 日 08:25
6
这个分情况
第一种情况:如果上游一直存在 db2,但是没有同步到下游,后续因业务变动,需要将 db2 同步到下游 TiDB 中,只修改 task 是不行的。比如你在 pos 300 的位点对 task 进行操作修改,重启 task 时会断点续传,但是 pos 300 位点之前关于 db2 的全量数据是不会同步到下游的。需要人工操作。详细可以参考 https://docs.pingcap.com/zh/tidb-data-migration/stable/faq#迁移任务当前处于-sync-阶段
第二种情况:上游没有 db2,在上游创建 db2 数据库前,可以修改 task 在黑白名单中添加 db2 库。然后再在上游创建数据库,此时 db2 的数据才会同步到 TiDB 中。
当然如果是第一种情况,官网提供方式比较复杂,如果怕出错,可以另启动一个 task,只同步 db2 库。
@shaun 你好,我在大佬的基础上补充下。
如果你已同步的 db1,在从库上的数据可以丢失,且主库上有完整数据,那么按如下方法可以简单实现“第一种情况”需求。
具体为:
停止 dm 同步任务;
删除从库中的 db1;
将 db2 等同源的数据库加入 do_dbs 列表;
启动 dm 同步任务,此时必须加上 --remove-meta
参数。完整命令: dmctl --master-addr <master-addr> start-task --remove-meta <task-config-file>
。
--remove-meta
会清除之前的元数据信息,按照你指定的 task-mode: “all”
模式,全量+增量 同步。说白了,相当于重建同步任务。
Shaun
(Shaun)
2021 年7 月 8 日 01:15
8
如果通过ticdc将tidb中的几十个db分别实时同步至不同的mysql,可以实现吗,那么会有dm的这种问题吗,比如work和source的数量限制等等?
xfworld
(魔幻之翼)
2021 年7 月 8 日 01:42
9
以你实际的使用场景为主啊,任何资源的使用都会有限制的
举个例子:
如果 tidb 的量很大,那么DM 是不是需要提升配置,那么同步到下游的Mysql 各个实例如果配置不够,怎么能hold 住?
有预估和评测才会有答案~
Shaun
(Shaun)
2021 年7 月 8 日 01:53
10
我说的ticdc就是实际场景,接下来等数据都迁移到tidb之后,以tidb读写为主,但还需保留mysql端做其他,所以会用到ticdc将tidb实时同步至mysql,tidb总体数据量1.5T左右,日常同步数据还不算特别的大,下游对应多个mysql节点,ticdc不会有DM这种限制吧?
xfworld
(魔幻之翼)
2021 年7 月 8 日 02:13
11
system
(system)
关闭
2022 年10 月 31 日 19:05
12
此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。