敏捷模式两节点部署拓扑
本文介绍敏捷模式两节点集群的推荐拓扑。仲裁模式的适用场景、选择建议和脚本仲裁示例,请参考敏捷模式两节点仲裁模式使用场景。两节点的状态切换、人工接管和在线修改限制,请参考敏捷模式支持两节点部署。
拓扑信息
注意
下表中拓扑实例的 IP 为示例 IP。在实际部署时,请替换为实际的 IP。
如果使用
service仲裁模式,Tiarbiter/TEM 可以作为共享仲裁组件,为多套敏捷模式两节点集群提供仲裁服务;不要求每套集群都单独部署一台仲裁机。
| 实例 | 个数 | 物理机配置 | IP | 配置 |
|---|---|---|---|---|
| TiDBX(TiDB/PD/TiKV) | 2 | 16 VCore 32 GiB 1 TiB (SSD) 用于存储 | 10.0.1.1 10.0.1.2 | kind: fusion 开启 even-replicas 配置节点标签 |
| Tiarbiter(可选) | 1 | 2 VCore 4 GiB 50 GiB (SSD) | 10.0.1.30 | 仅在 service 仲裁模式下部署;可为多套两节点集群共享 |
| Monitoring & Grafana | 1 | 4 VCore 8 GiB 500 GiB (SSD) 用于存储 | 10.0.1.1 | 默认端口 全局目录配置 |
拓扑模版
注意
- 仲裁模式的使用场景和选择建议请参考敏捷模式两节点仲裁模式使用场景。
- 下列模版中的拓扑实例 IP 均为示例 IP。在实际部署时,请替换为实际的 IP。
预设主从模式(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_servers和tikv_servers。 replication.enable-placement-rules必须设置为true,replication.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要求。具体限制和运维说明请参见敏捷模式支持两节点部署。
相关说明
- 规划两节点仲裁模式时,请先参考敏捷模式两节点仲裁模式使用场景。
- 完成拓扑规划后,请继续参考使用 TiUP 部署敏捷模式平凯数据库集群执行部署、启动和验证步骤。
- 如果你需要了解两节点部署的状态切换、人工接管、强制降级或在线修改限制,请参见敏捷模式支持两节点部署。
- 如果部署目录配置为相对路径,则会部署在用户的 Home 目录下。