TiDB Binlog 运维

    • 安装 Helm 并配置 PingCAP 官方 chart 仓库。

    默认情况下,TiDB Binlog 在 TiDB 集群中处于禁用状态。若要创建一个启用 TiDB Binlog 的 TiDB 集群,或在现有 TiDB 集群中启用 TiDB Binlog,可根据以下步骤进行操作:

    1. 按照以下说明修改 文件:

      • binlog.pump.create 的值设为 true
      • binlog.drainer.create 的值设为 true
      • binlog.pump.storageClassNamebinlog.drainer.storageClassName 设为所在 Kubernetes 集群上可用的 storageClass
      • binlog.drainer.destDBType 设为所需的下游存储类型。

        TiDB Binlog 支持三种下游存储类型:

        • PersistenceVolume:默认的下游存储类型。可通过修改 binlog.drainer.storage 来为 drainer 配置大 PV。

        • 与 MySQL 兼容的数据库:通过将 binlog.drainer.destDBType 设置为 mysql 来启用。同时,必须在 binlog.drainer.mysql 中配置目标数据库的地址和凭据。

        • Apache Kafka:通过将 binlog.drainer.destDBType 设置为 kafka 来启用。同时,必须在 binlog.drainer.kafka 中配置目标集群的 zookeeper 地址和 Kafka 地址。

    2. 为 TiDB 与 Pump 组件设置亲和性和反亲和性:

      默认情况下,TiDB 的 affinity 亲和性设置为 {}。由于目前 Pump 组件与 TiDB 组件默认并非一一对应,当启用 TiDB Binlog 时,如果 Pump 与 TiDB 组件分开部署并出现网络隔离,而且 TiDB 组件还开启了 ignore-error,则会导致 TiDB 丢失 Binlog。推荐通过亲和性特性将 TiDB 组件与 Pump 部署在同一台 Node 上,同时通过反亲和性特性将 Pump 分散在不同的 Node 上,每台 Node 上至多仅需一个 Pump 实例。

      • tidb.affinity 按照如下设置:

      • binlog.pump.affinity 按照如下设置:

        1. binlog:
        2. pump:
        3. affinity:
        4. podAffinity:
        5. preferredDuringSchedulingIgnoredDuringExecution:
        6. - weight: 100
        7. podAffinityTerm:
        8. labelSelector:
        9. matchExpressions:
        10. - key: "app.kubernetes.io/component"
        11. values:
        12. - "tidb"
        13. - key: "app.kubernetes.io/managed-by"
        14. values:
        15. - "tidb-operator"
        16. - key: "app.kubernetes.io/name"
        17. operator: In
        18. values:
        19. - "tidb-cluster"
        20. - key: "app.kubernetes.io/instance"
        21. operator: In
        22. values:
        23. - <release-name>
        24. topologyKey: kubernetes.io/hostname
        25. podAntiAffinity:
        26. preferredDuringSchedulingIgnoredDuringExecution:
        27. - weight: 100
        28. podAffinityTerm:
        29. labelSelector:
        30. matchExpressions:
        31. - key: "app.kubernetes.io/component"
        32. operator: In
        33. values:
        34. - "pump"
        35. - key: "app.kubernetes.io/managed-by"
        36. operator: In
        37. values:
        38. - "tidb-operator"
        39. - key: "app.kubernetes.io/name"
        40. operator: In
        41. values:
        42. - key: "app.kubernetes.io/instance"
        43. values:
        44. - <release-name>
        45. topologyKey: kubernetes.io/hostname
    3. 创建一个新的 TiDB 集群或更新现有的集群:

      • 创建一个启用 TiDB Binlog 的 TiDB 新集群:

        1. helm install pingcap/tidb-cluster --name=<release-name> --namespace=<namespace> --version=<chart-version> -f <values-file>
      • 更新现有的 TiDB 集群以启用 TiDB Binlog:

    默认情况下,仅创建一个下游 drainer。可安装 tidb-drainer Helm chart 来为 TiDB 集群部署多个 drainer,示例如下:

    1. 确保 PingCAP Helm 库是最新的:

      1. helm repo update
      1. helm search tidb-drainer -l
    2. 获取默认的 values.yaml 文件以方便自定义:

    3. 修改 values.yaml 文件以指定源 TiDB 集群和 drainer 的下游数据库。示例如下:

      1. clusterName: example-tidb
      2. clusterVersion: v3.0.0
      3. storageClassName: local-storage
      4. storage: 10Gi
      5. config: |
      6. detect-interval = 10
      7. [syncer]
      8. worker-count = 16
      9. txn-batch = 20
      10. disable-dispatch = false
      11. ignore-schemas = "INFORMATION_SCHEMA,PERFORMANCE_SCHEMA,mysql"
      12. safe-mode = false
      13. db-type = "tidb"
      14. [syncer.to]
      15. host = "slave-tidb"
      16. user = "root"
      17. password = ""
      18. port = 4000

      clusterNameclusterVersion 必须匹配所需的源 TiDB 集群。

      有关完整的配置详细信息,请参阅 。