DM work数不够 source is added but there is no free worker to bound

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 节点。

官方文档解释:
image

至于单台机器部署多个 worker 节点,官方配置里貌似没指定不同 port 的功能,这个可能需要其他大佬来看下

1 个赞

单个节点部署多个worker 会引起资源竞争,然后你会发现同步速度达不到预期

最好不要采用这样的方案,除非你同步的数据量很少,然后单节点的资源也足够

如果是这样的场景最好使用其他的CDC 方案,例如 canal,maxwell etc…
但是需要有一定的自研能力,来解决数据处理和路由的功能项

1 个赞

那可以在现有的正在同步的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

有小伙伴是这么玩的,单个节点上挂了很多worker,当然出了问题就比较惨了

谨慎点,最好测试下在上生产

这个分情况

第一种情况:如果上游一直存在 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,在从库上的数据可以丢失,且主库上有完整数据,那么按如下方法可以简单实现“第一种情况”需求。
具体为:

  1. 停止 dm 同步任务;
  2. 删除从库中的 db1;
  3. 将 db2 等同源的数据库加入 do_dbs 列表;
  4. 启动 dm 同步任务,此时必须加上 --remove-meta 参数。完整命令: dmctl --master-addr <master-addr> start-task --remove-meta <task-config-file>
    --remove-meta 会清除之前的元数据信息,按照你指定的 task-mode: “all” 模式,全量+增量 同步。说白了,相当于重建同步任务。

如果通过ticdc将tidb中的几十个db分别实时同步至不同的mysql,可以实现吗,那么会有dm的这种问题吗,比如work和source的数量限制等等?

以你实际的使用场景为主啊,任何资源的使用都会有限制的

举个例子:
如果 tidb 的量很大,那么DM 是不是需要提升配置,那么同步到下游的Mysql 各个实例如果配置不够,怎么能hold 住?

有预估和评测才会有答案~

我说的ticdc就是实际场景,接下来等数据都迁移到tidb之后,以tidb读写为主,但还需保留mysql端做其他,所以会用到ticdc将tidb实时同步至mysql,tidb总体数据量1.5T左右,日常同步数据还不算特别的大,下游对应多个mysql节点,ticdc不会有DM这种限制吧?

看下面的原形图:

CDC 对接的下游可以支持

但是针对量级的问题,还是会有资源的要求,具体你可以参考:
https://docs.pingcap.com/zh/tidb/v5.1/ticdc-overview (使用限制)
https://docs.pingcap.com/zh/tidb/v5.1/monitor-ticdc (参数监控)

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。