TiDB Binlog 集群部署

    Pump 和 Drainer 均可部署和运行在 Intel x86-64 架构的 64 位通用硬件服务器平台上。在开发、测试和生产环境下,对服务器硬件配置的要求和建议如下:

    推荐使用 TiUP 部署 TiDB Binlog,详细部署方式参考 。

    检查文件完整性,返回 ok 则正确:

    对于 v2.1.0 GA 及以上版本,Pump 和 Drainer 已经包含在 TiDB 的下载包中,其他版本需要单独下载 Pump 和 Drainer:

    1. wget https://download.pingcap.org/tidb-binlog-latest-linux-amd64.tar.gz &&
    2. wget https://download.pingcap.org/tidb-binlog-latest-linux-amd64.sha256

    检查文件完整性,返回 ok 则正确:

    使用样例

    假设有三个 PD,一个 TiDB,另外有两台机器用于部署 Pump,一台机器用于部署 Drainer。各个节点信息如下:

    1. TiDB="192.168.0.10"
    2. PD1="192.168.0.16"
    3. PD2="192.168.0.15"
    4. PD3="192.168.0.14"
    5. Pump="192.168.0.11"
    6. Pump="192.168.0.12"
    7. Drainer="192.168.0.13"
    1. 使用 binary 部署 Pump

      • Pump 命令行参数说明(以在 “192.168.0.11” 上部署为例)

        1. Usage of Pump:
        2. -L string
        3. 日志输出信息等级设置:debuginfowarnerrorfatal (默认 "info")
        4. -V
        5. 打印版本信息
        6. -addr string
        7. Pump 提供服务的 RPC 地址(-addr="192.168.0.11:8250")
        8. -advertise-addr string
        9. Pump 对外提供服务的 RPC 地址(-advertise-addr="192.168.0.11:8250")
        10. -config string
        11. 配置文件路径,如果你指定了配置文件,Pump 会首先读取配置文件的配置;
        12. 如果对应的配置在命令行参数里面也存在,Pump 就会使用命令行参数的配置来覆盖配置文件里的配置。
        13. -data-dir string
        14. Pump 数据存储位置路径
        15. -gc int
        16. Pump 只保留多少天以内的数据 (默认 7)
        17. -heartbeat-interval int
        18. Pump PD 发送心跳间隔 (单位 秒)
        19. -log-file string
        20. -log-rotate string
        21. log 文件切换频率,hour/day
        22. -metrics-addr string
        23. -metrics-interval int
        24. 监控信息上报频率 (默认 15,单位 秒)
        25. -node-id string
        26. Pump 节点的唯一识别 ID,如果不指定,程序会根据主机名和监听端口自动生成
        27. -pd-urls string
        28. PD 集群节点的地址 (-pd-urls="http://192.168.0.16:2379,http://192.168.0.15:2379,http://192.168.0.14:2379")
        29. -fake-binlog-interval int
        30. Pump 节点生成 fake binlog 的频率 (默认 3,单位 秒)
      • Pump 配置文件(以在 “192.168.0.11” 上部署为例)

      • 启动示例

        1. ./bin/pump -config pump.toml

        如果命令行参数与配置文件中的参数重合,则使用命令行设置的参数的值。

    2. 使用 binary 部署 Drainer

        1. Usage of Drainer
        2. -L string
        3. 日志输出信息等级设置:debuginfowarnerrorfatal (默认 "info")
        4. -V
        5. 打印版本信息
        6. -addr string
        7. Drainer 提供服务的地址(-addr="192.168.0.13:8249")
        8. -c int
        9. 同步下游的并发数,该值设置越高同步的吞吐性能越好 (default 1)
        10. -cache-binlog-count int
        11. 缓存中的 binlog 数目限制(默认 8
        12. 如果上游的单个 binlog 较大导致 Drainer 出现 OOM 时,可尝试调小该值减少内存使用
        13. -config string
        14. 配置文件路径,Drainer 会首先读取配置文件的配置;
        15. 如果对应的配置在命令行参数里面也存在,Drainer 就会使用命令行参数的配置来覆盖配置文件里面的配置
        16. -data-dir string
        17. Drainer 数据存储位置路径 (默认 "data.drainer")
        18. -dest-db-type string
        19. Drainer 下游服务类型 (默认为 mysql,支持 tidbkafkafile)
        20. PD 查询在线 Pump 的时间间隔 (默认 10,单位 秒)
        21. -disable-detect
        22. 是否禁用冲突监测
        23. 是否禁用拆分单个 binlog SQL 的功能,如果设置为 true,则每个 binlog
        24. 按顺序依次还原成单个事务进行同步(下游服务类型为 MySQL,该项设置为 False
        25. -ignore-schemas string
        26. db 过滤列表 (默认 "INFORMATION_SCHEMA,PERFORMANCE_SCHEMA,mysql,test"),
        27. 不支持对 ignore schemas table 进行 rename DDL 操作
        28. -initial-commit-ts(默认为 `-1`
        29. 如果 Drainer 没有相关的断点信息,可以通过该项来设置相关的断点信息
        30. 该参数值为 `-1` 时,Drainer 会自动从 PD 获取一个最新的时间戳
        31. -log-file string
        32. log 文件路径
        33. -log-rotate string
        34. log 文件切换频率,hour/day
        35. -metrics-addr string
        36. Prometheus Pushgateway 地址,不设置则禁止上报监控信息
        37. -metrics-interval int
        38. 监控信息上报频率(默认 15,单位:秒)
        39. -node-id string
        40. drainer 节点的唯一识别 ID,如果不指定,程序会根据主机名和监听端口自动生成
        41. -pd-urls string
        42. PD 集群节点的地址 (-pd-urls="http://192.168.0.16:2379,http://192.168.0.15:2379,http://192.168.0.14:2379")
        43. -safe-mode
        44. 是否开启安全模式使得下游 MySQL/TiDB 可被重复写入
        45. 即将 insert 语句换为 replace 语句,将 update 语句拆分为 delete + replace 语句
        46. -txn-batch int
        47. 输出到下游数据库一个事务的 SQL 数量(默认 1
      • Drainer 配置文件(以在 “192.168.0.13” 上部署为例)

      • 启动示例

        初次启动时使用参数 initial-commit-ts, 命令如下:

        1. ./bin/drainer -config drainer.toml -initial-commit-ts {initial-commit-ts}

        如果命令行参数与配置文件中的参数重合,则使用命令行设置的参数的值。

    • 在运行 TiDB 时,需要保证至少一个 Pump 正常运行。
    • 通过给 TiDB 增加启动参数 enable-binlog 来开启 binlog 服务。尽量保证同一集群的所有 TiDB 都开启了 binlog 服务,否则在同步数据时可能会导致上下游数据不一致。如果要临时运行一个不开启 binlog 服务的 TiDB 实例,需要在 TiDB 的配置文件中设置 run_ddl= false
    • Drainer 不支持对 ignore schemas(在过滤列表中的 schemas)的 table 进行 rename DDL 操作。
    • 在已有的 TiDB 集群中启动 Drainer,一般需要全量备份并且获取快照时间戳,然后导入全量备份,最后启动 Drainer 从对应的快照时间戳开始同步增量数据。
    • 如果存在上游 TiDB 能运行但下游 MySQL 不支持的 DDL 语句时(例如下游 MySQL 使用 InnoDB 引擎时同步语句 CREATE TABLE t1(a INT) ROW_FORMAT=FIXED;),Drainer 也会同步失败,此时可以在 Drainer 配置中跳过该事务,同时在下游手动执行兼容的语句,详见跳过事务