PingKai Logo下载

敏捷模式两节点部署拓扑

本文介绍敏捷模式两节点集群的推荐拓扑。仲裁模式的适用场景、选择建议和脚本仲裁示例,请参考敏捷模式两节点仲裁模式使用场景。两节点的状态切换、人工接管和在线修改限制,请参考敏捷模式支持两节点部署

拓扑信息

实例个数物理机配置IP配置
TiDBX(TiDB/PD/TiKV)216 VCore 32 GiB
1 TiB (SSD) 用于存储
10.0.1.1
10.0.1.2
kind: fusion
开启 even-replicas
配置节点标签
Tiarbiter(可选)12 VCore 4 GiB
50 GiB (SSD)
10.0.1.30仅在 service 仲裁模式下部署;可为多套两节点集群共享
Monitoring & Grafana14 VCore 8 GiB
500 GiB (SSD) 用于存储
10.0.1.1默认端口
全局目录配置

拓扑模版

预设主从模式(preset 仲裁)

global:
  kind: fusion
  user: "tidb"
  ssh_port: 22
  deploy_dir: "/tidb-deploy"
  data_dir: "/tidb-data"
  listen_host: 0.0.0.0
  arch: "amd64"

monitored:
  node_exporter_port: 9700
  blackbox_exporter_port: 9715

server_configs:
  pd:
    # 启动 placement-rules 并确保副本数为 2。
    replication.enable-placement-rules: true
    replication.max-replicas: 2

    # isolation-level 必须引用 location-labels 中的某个 label。
    replication.location-labels: ["dc"]
    replication.isolation-level: "dc"

    replication-mode:
      # 启动双副本模式。
      replication-mode: "even-replicas"

      # 故障发生时的降级超时等待时间。
      even-replicas.downgrade-timeout: 20s

      # 选择预设主从仲裁模式。
      even-replicas.arbitration.type: "preset"
      even-replicas.arbitration.primary-label: "dc1"

  tikv:
    # 需要关闭 hibernate-regions,否则 RTO 会比较大。
    raftstore.hibernate-regions: false

tidb_servers:
  - host: 10.0.1.1
  - host: 10.0.1.2

pd_servers:
  # even-replicas 当前面向双 PD 部署场景。
  - host: 10.0.1.1
    config:
      # 每个 PD 节点都必须配置 isolation-level 对应的本地标签值。
      # 例如 isolation-level = "dc" 时,这里需要写 labels: {dc: "dc1"}。
      labels: { dc: "dc1" }
  - host: 10.0.1.2
    config:
      labels: { dc: "dc2" }

tikv_servers:
  - host: 10.0.1.1
    config:
      server.labels: { dc: "dc1" }
  - host: 10.0.1.2
    config:
      server.labels: { dc: "dc2" }

monitoring_servers:
  - host: 10.0.1.1

grafana_servers:
  - host: 10.0.1.1

仲裁服务模式(service 仲裁)

global:
  kind: fusion
  user: "tidb"
  ssh_port: 22
  deploy_dir: "/tidb-deploy"
  data_dir: "/tidb-data"
  listen_host: 0.0.0.0
  arch: "amd64"

monitored:
  node_exporter_port: 9700
  blackbox_exporter_port: 9715

server_configs:
  pd:
    # 启动 placement-rules 并确保副本数为 2。
    replication.enable-placement-rules: true
    replication.max-replicas: 2

    # isolation-level 必须引用 location-labels 中的某个 label。
    replication.location-labels: ["dc"]
    replication.isolation-level: "dc"

    replication-mode:
      # 启动双副本模式。
      replication-mode: "even-replicas"

      # 故障发生时的降级超时等待时间。
      even-replicas.downgrade-timeout: 20s

      # 选择仲裁服务模式。
      even-replicas.arbitration.type: "service"
      even-replicas.arbitration.endpoints: ["http://10.10.10.10:4320"]

  tikv:
    # 需要关闭 hibernate-regions,否则 RTO 会比较大。
    raftstore.hibernate-regions: false

tidb_servers:
  - host: 10.0.1.1
  - host: 10.0.1.2

pd_servers:
  # even-replicas 当前面向双 PD 部署场景。
  - host: 10.0.1.1
    config:
      # 每个 PD 节点都必须配置 isolation-level 对应的本地标签值。
      # 例如 isolation-level = "dc" 时,这里需要写 labels: {dc: "dc1"}。
      labels: { dc: "dc1" }
  - host: 10.0.1.2
    config:
      labels: { dc: "dc2" }

tikv_servers:
  - host: 10.0.1.1
    config:
      server.labels: { dc: "dc1" }
  - host: 10.0.1.2
    config:
      server.labels: { dc: "dc2" }

tiarbiter_servers:
  - host: 10.10.10.10
    port: 4320

monitoring_servers:
  - host: 10.0.1.1

grafana_servers:
  - host: 10.0.1.1

脚本仲裁模式(custom-script)

global:
  kind: fusion
  user: "tidb"
  ssh_port: 22
  deploy_dir: "/tidb-deploy"
  data_dir: "/tidb-data"
  listen_host: 0.0.0.0
  arch: "amd64"

monitored:
  node_exporter_port: 9700
  blackbox_exporter_port: 9715

server_configs:
  pd:
    # 启动 placement-rules 并确保副本数为 2。
    replication.enable-placement-rules: true
    replication.max-replicas: 2

    # isolation-level 必须引用 location-labels 中的某个 label。
    replication.location-labels: ["dc"]
    replication.isolation-level: "dc"

    replication-mode:
      # 启动双副本模式。
      replication-mode: "even-replicas"

      # 故障发生时的降级超时等待时间。
      even-replicas.downgrade-timeout: 20s

      # 选择脚本仲裁模式。
      even-replicas.arbitration.type: "custom-script"
      even-replicas.arbitration.script: ["/bin/bash", "/opt/tidb/bin/keepalived_arbiter.sh", "192.168.1.100"]

  tikv:
    # 需要关闭 hibernate-regions,否则 RTO 会比较大。
    raftstore.hibernate-regions: false

tidb_servers:
  - host: 10.0.1.1
  - host: 10.0.1.2

pd_servers:
  # even-replicas 当前面向双 PD 部署场景。
  - host: 10.0.1.1
    config:
      # 每个 PD 节点都必须配置 isolation-level 对应的本地标签值。
      # 例如 isolation-level = "dc" 时,这里需要写 labels: {dc: "dc1"}。
      labels: { dc: "dc1" }
  - host: 10.0.1.2
    config:
      labels: { dc: "dc2" }

tikv_servers:
  - host: 10.0.1.1
    config:
      server.labels: { dc: "dc1" }
  - host: 10.0.1.2
    config:
      server.labels: { dc: "dc2" }

monitoring_servers:
  - host: 10.0.1.1

grafana_servers:
  - host: 10.0.1.1

使用脚本仲裁时,需要将同一份脚本放到两台 PD 节点的相同路径下,并通过 even-replicas.arbitration.script 指定脚本及其参数。脚本示例请参考敏捷模式两节点仲裁模式使用场景

以上敏捷模式两节点拓扑文件中,详细的配置项说明见通过 TiUP 部署平凯数据库集群的拓扑文件配置

关键参数说明

  • global.kind 必须设置为 fusion,用于声明当前集群采用敏捷模式部署。
  • 两节点部署不建议只保留 tidb_servers。为了正确设置标签和仲裁所需参数,建议显式配置 pd_serverstikv_servers
  • replication.enable-placement-rules 必须设置为 truereplication.max-replicas 必须设置为 2;否则 even-replicas 无法进入正常流程。
  • replication.isolation-level 必须引用 replication.location-labels 中的一个标签名,并且每个 PD、TiKV 节点都必须配置对应的本地标签值。
  • 建议将 raftstore.hibernate-regions 设置为 false,以避免故障切换或恢复时出现较大的恢复延迟。
  • 如果使用 service 仲裁模式,even-replicas.arbitration.endpoints 当前仅支持配置一个仲裁服务地址;虽然配置格式为数组,但填写多个地址会报错。
  • 如果使用 service 仲裁模式,仲裁服务可以由同一个 Tiarbiter/TEM 统一提供给多套两节点集群使用,因此不要求每套集群都额外部署一台独立仲裁机。
  • 集群中的 placement rule 应保持默认单条规则并满足 even-replicas 要求。具体限制和运维说明请参见敏捷模式支持两节点部署

相关说明