登录 尝试免费

部署TiDB Binlog

本文档介绍如何维护TiDB Binlog在Kubernetes上创建TiDB集群。

先决条件

在TiDB集群中部署TiDB Binlog

缺省情况下,TiDB集群的Binlog是关闭的。要创建一个启用TiDB Binlog的TiDB集群,或者在现有的TiDB集群中启用TiDB Binlog,请执行以下步骤。

部署泵

  1. 修改TidbClusterCR文件添加泵配置。

    例如:

    规范:…pump: baseImage: pingcap/tidb-binlog版本:v6.5.0 replicas: 1 storageClassName: local-storage requests: storage: 30Gi schedulerName: default-scheduler config: addr: 0.0.0.0:8250 gc: 7 heartbeat-interval: 2

    从v1.1.6开始,TiDB Operator支持将原始TOML配置传递给组件:

    规范:…pump: baseImage: pingcap/tidb-binlog版本:v6.5.0 replicas: 1 storageClassName: local-storage requests: storage: 30Gi schedulerName: default-scheduler config: | addr = "0.0.0.0:8250" gc = 7 heartbeat-interval = 2

    编辑版本副本storageClassName,requests.storage根据你的集群。

  2. 设置TiDB和Pump的亲和性和反亲和性。

    如果在生产环境中启用TiDB Binlog,建议设置TiDB与Pump组件的亲和性和反亲和性;如果您在内部网的测试环境中启用TiDB Binlog,则可以跳过此步骤。

    缺省情况下,TiDB与Pump的关联为{}。目前,默认情况下,每个TiDB实例没有对应的Pump实例。启用TiDB Binlog后,如果泵和TiDB单独部署,且网络隔离,则ignore-error在TiDB组件中启用,TiDB会丢失binlogs。

    在这种情况下,建议使用亲和特性在同一节点上部署TiDB实例和Pump实例,并使用反亲和特性在不同节点上拆分Pump实例。对于每个节点,只需要一个Pump实例。步骤如下:

    • 配置spec.tidb.affinity如下:

      spec: tidb: affinity: podAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 100 podAffinityTerm: labelSelector: matchExpressions: - key: "app.kubernetes. "操作符:value: - "pump" - key: "app.kubernetes. io/component . "- "tidb-operator" - key: "app.kubernetes. io "操作符:value:—“tidb-cluster”—key:“app.kubernetes. io/name”- ${cluster_name} topologyKey: kubernetes.io/hostname
    • 配置spec.pump.affinity如下:

      spec: pump: affinity: podAffinity: preferredDuringSchedulingIgnoredDuringExecution:—weight: 100 podAffinityTerm: labelSelector: matchExpressions:—key:“app.kubernetes. kubernetes.”操作符:value: - "tidb" - key: "app.kubernetes. io/component . io "- "tidb-operator" - key: "app.kubernetes. io "操作符:value:—“tidb-cluster”—key:“app.kubernetes. io/name”- ${cluster_name} topologyKey: kubernetes.io/hostnamepodAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 100 podAffinityTerm: labelSelector: matchExpressions: - key: "app.kubernetes.io/component" operator: In values: - "pump" - key: "app.kubernetes.io/managed-by" operator: In values: - "tidb-operator" - key: "app.kubernetes.io/name" operator: In values: - "tidb-cluster" - key: "app.kubernetes.io/instance" operator: In values: - ${cluster_name} topologyKey: kubernetes.io/hostname

部署排水器

来部署多个滤干器tidb-drainer创建TiDB集群的Helm图,步骤如下:

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

    Helm回购更新
    舵手搜索报告-排水器- 1
  2. 获取默认值values.yaml文件,方便定制:

    ——version=${chart_version} > values.yaml
  3. 修改values.yaml指定源TiDB集群和排水器的下游数据库。下面是一个例子:

    clusterName: example-tidb clusterVersion: v6.5.0 baseImage:pingcap/tidb-binlog storageClassName: local-storage storage: 10Gi initialCommitTs: "-1" config: | detect-interval = 10 [syncer] worker-count = 16 txn-batch = 20 disable-dispatch = false ignore-schemas = "INFORMATION_SCHEMA,PERFORMANCE_SCHEMA,mysql" safe-mode = false db-type = "tidb" [syncer. info]To] host = "downstream-tidb" user = "root" password = " port = 4000

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

    initialCommitTs是当drain没有检查点时数据复制的开始提交时间戳。必须设置为字符串类型,例如“424364429251444742”

    完整的配置细节请参见Kubernetes上的TiDB Binlog drain配置

  4. 部署排水器:

    重新安装${release_name} pingcap/tidb-drain——namespace=${namespace}——version=${chart_version} -f values.yaml

    如果服务器没有外部网络,请参考部署TiDB集群通过外部网络在机器上下载所需的Docker镜像,并将其上传到服务器。

支持TLS

启用TiDB组件之间的TLS

如果需要在TiDB集群和TiDB Binlog中启用TLS,请参考启用组件间TLS

创建密钥并使用Pump启动TiDB集群之后,编辑values.yaml文件来设置tlsCluster.enabled价值真正的,并进行相应的配置certAllowedCN

…tlsCluster: enabled: true # certAllowedCN: # - TiDB…

在drain和下游数据库之间启用TLS

如果将下游数据库设置为tidb-drainermysql / tidb,如果您想在drain和下游数据库之间启用TLS,请执行以下步骤。

  1. 创建包含下游数据库的TLS信息的secret。

    Kubectl create secret generic ${downstream_database_secret_name}——namespace=${namespace}——from-file=tls.crt=client。pem——从文件= tls.key = client-key。pem——从文件= ca.crt = ca.pem

    tidb-drainer默认情况下将检查点保存在下游数据库中,因此您只需要配置tlsSyncer.tlsClientSecretName相应的cerAllowedCN

    tlsSyncer: tlsClientSecretName: ${downstream_database_secret_name} # certAllowedCN: # - TiDB
  2. 保存的检查点tidb-drainer其他启用TLS的数据库,创建一个包含检查点数据库的TLS信息的秘密:

    Kubectl create secret generic ${checkpoint_tidb_client_secret}——namespace=${namespace}——from-file=tls.crt=client。pem——从文件= tls.key = client-key。pem——从文件= ca.crt = ca.pem

    编辑values.yaml文件来设置tlsSyncer.checkpoint.tlsClientSecretName价值$ {checkpoint_tidb_client_secret},并进行相应的配置certAllowedCN

    …tlsSyncer: {} tlsClientSecretName: ${downstream_database_secret_name} # certAllowedCN: # - TiDB检查点:tlsClientSecretName: ${checkpoint_tidb_client_secret} # certAllowedCN: # - TiDB…

拆卸泵/排水器节点

如何维护TiDB Binlog集群的节点状态,请参考启动和退出泵或排水器进程

如果要完全移除TiDB Binlog组件,建议先移除Pump节点,再移除drain节点。

如果要移除的TiDB Binlog组件启用了TLS,请将以下内容写入binlog.yaml和执行Kubectl apply -f binlog.yaml启动一个挂载了TLS文件和binlogctl工具。

apiVersion: v1 kind: Pod metadata: name: binlogctl spec: containers: - name: binlogctl image: pingcap/tidb-binlog:${tidb_version} command: ['/bin/sh'] stdin: true stdinOnce: true tty: true volumeMounts: - name: binlog-tls mountPath: /etc/binlog-tls volumes: - name: binlog-tls secret: secretName: ${cluster_name}-cluster-client-secret

泵节点规模

  1. 泵舱刻度:

    Kubectl patch tc ${cluster_name} -n ${namespace}——type merge -p '{"spec":{"pump":{"replicas": ${pump_replicas}}}}'

    在上面的命令中,$ {pump_replicas}是缩放后所需的泵舱数量。

  2. 等待Pump Pods自动脱机并删除。执行如下命令,查看Pod状态。

    查看kubectl获取Po ${cluster_name} -n ${namespace}
  3. (可选)强制泵下线:

    如果离线操作失败,即长时间未删除“Pump Pods”,可以强制将“Pump”标记为离线

    • 如果“泵”未启用TLS,则将“泵”标记为离线

      kubectl运行update-pump-${ordinal_id}——image=pingcap/tidb-binlog:${tidb_version}——namespace=${namespace}——restart=OnFailure——/binlogctl -pd-urls=http://${cluster_name}-pd:2379 -cmd update-pump- node-id ${cluster_name}-pump-${ordinal_id}:8250——state offline
    • 如果“泵”启用了TLS,请将“泵”标记为离线使用先前启动的Pod:

      Kubectl exec binlogctl -n ${namespace}——/binlogctl -pd-urls=https://${cluster_name}-pd:2379 -cmd update-pump -node-id ${cluster_name}-pump-${ordinal_id}:8250——state offline -ssl-ca "/etc/binlog-tls/ca. conf "Crt " -ssl-cert "/etc/binlog-tls/tls. Crt" -ssl-key "/etc/binlog-tls/tls.key"

完全移除泵节点

  1. 拆卸泵节点前,请先执行kubectl patch tc ${cluster_name} -n ${namespace}——type merge -p '{"spec":{"tidb":{"binlogEnabled": false}}}'。在滚动更新TiDB Pods之后,可以删除Pump节点。

    如果直接删除泵节点,可能会导致TiDB失败,因为TiDB没有泵节点可以写入。

  2. 泵内水垢按比例泵到0

  3. 执行Kubectl patch tc ${cluster_name} -n ${namespace}——type json -p '[{"op":"remove", "path":"/spec/pump"}]'删除的所有配置项spec.pump

  4. 执行Kubectl delete STS ${cluster_name}-pump -n ${namespace}命令,删除Pump的statfulset资源。

  5. 执行命令查看Pump集群使用的pvcKubectl get PVC -n ${namespace} -l app.kubernetes.io/component=pump。然后执行命令删除Pump的所有PVC资源Kubectl删除PVC -l app.kubernetes。Io /component=pump -n ${namespace}

拆卸drain节点

  1. 让drain节点离线:

    在以下命令中,$ {drainer_node_id}为待下线的drain节点的节点ID。如果您已经配置了drainerNamevalues.yaml的价值$ {drainer_node_id}$ {drainer_name} 0;的值$ {drainer_node_id}{cluster_name} - {release_name} -drainer-0美元

    • 如果没有启用TLS,请创建一个Pod使drain脱机:

      kubectl run offline-drain -0——image=pingcap/tidb-binlog:${tidb_version}——namespace=${namespace}——restart=OnFailure——/binlogctl -pd-urls=http://${cluster_name}-pd:2379 -cmd offline-drain -node-id ${drainer_node_id}:8249
    • 如果TLS为排水启用,使用先前启动的Pod使排水脱机:

      Kubectl exec binlogctl -n ${namespace}——/binlogctl -pd-urls "https://${cluster_name}-pd:2379" -cmd offline-drain -node-id ${drainer_node_id}:8249 -ssl-ca "/etc/binlog-tls/ca。Crt " -ssl-cert "/etc/binlog-tls/tls. Crt" -ssl-key "/etc/binlog-tls/tls.key"

    查看drain的日志信息。

    Kubectl日志-f -n ${namespace} ${drainer_node_id}

    如果排水器离线,请删除我的pod,表示该节点已成功脱机。

  2. 删除对应的drain Pod:

    执行Helm uninstall ${release_name} -n ${namespace}来删除滤水舱

    如果你不再需要排水,执行Kubectl删除PVC数据-${drainer_node_id} -n ${namespace}删除“drain”的PVC资源。

  3. (可选)Force drain下线:

    如果离线操作失败,排水舱将不会输出排水器离线,请删除我的pod。此时,您可以强制“drain”脱机,即执行步骤2删除“drain”Pod,并将“drain”标记为离线

    • 如果“排水器”未启用TLS,请将“排水器”标记为离线

      kubectl运行update-drain -${ordinal_id}——image=pingcap/tidb-binlog:${tidb_version}——namespace=${namespace}——restart=OnFailure——/binlogctl -pd-urls=http://${cluster_name}-pd:2379 -cmd update-drain -node-id ${drainer_node_id}:8249——state offline
    • 如果TLS为排水启用,使用先前启动的Pod使排水脱机:

      Kubectl exec binlogctl -n ${namespace}——/binlogctl -pd-urls=https://${cluster_name}-pd:2379 -cmd update-drain -node-id ${drainer_node_id}:8249——state offline -ssl-ca "/etc/binlog-tls/ca. conf "Crt " -ssl-cert "/etc/binlog-tls/tls. Crt" -ssl-key "/etc/binlog-tls/tls.key"
下载 请求文档更改 在TiDB论坛上提问
这个页面有帮助吗?
产品
TiDB云
TiDB
定价
获得演示
©2023PingCAP。版权所有。