多个pb和多个tikv是如何进行通信的,该如何合理的部署集群才能够指定节点

比如我有九台不同区域的服务器,每三台服务器作为一个组的话:
global:
user: “root”
ssh_port: 22
deploy_dir: “/tikv-deploy”
data_dir: “/tikv-data”
log_dir: “/tikv-log”
pd_servers:

  • host: 11.0.0.1
  • host: 11.0.0.2
  • host: 11.0.0.3

tikv_servers:

  • host: 10.0.0.1
  • host: 10.0.0.2
  • host: 10.0.0.3
  • host: 10.0.0.4
  • host: 10.0.0.5
  • host: 10.0.0.6
  • host: 10.0.0.7
  • host: 10.0.0.8
  • host: 10.0.0.9

我想知道这个是如何再多个pb进行通信的,然后写入和查询数据是从哪个tikv进行操作数据的,如何进行指定写入某个节点,还是说九个节点都会进行同步数据

只有PD leader是干活的,TiDB 在选择 TiKV 节点进行数据写入和查询时,主要依赖于 PD的调度和 Region 的分布策略。假如TIKV每三台服务器作为一个组的话,想让3副本分布在不同的组,可以在PD 设置中添加 TiKV label 的等级配置,并且在TIKV上设置 Label 信息就可以。
参考下这里https://docs.pingcap.com/zh/tidb/stable/three-data-centers-in-two-cities-deployment#labels-设计

1 个赞

kv和pd分开

多理解下官网文档
https://docs.pingcap.com/zh/tidb/stable/schedule-replicas-by-topology-labels#设置-pd-的-location-labels-配置

tikv之间是不通信的,主要是pd和tikv之间进行通信,同时pd之间进行通信,然后3个pd有一个是leader,用来承载业务,其他的主要就是备份,主leader故障会自动切换到其他pd。写入都是有pd决定的(分布情况pd有记录,查询数据时pd发现数据在哪个节点上,就会负载到哪个节点上),一般不设置label的话,就会平均写入到9个tikv中,如果设置了label,就会按照label规则来写入。
另外tikv时按region存放的,可以设置副本,例如你的副本数是3,那每个region会存放3份,可能放到任意3个tikv上(不设置label的情况),其中一般主要是region leader工作,其他做备份,也可以设置follower 读,这时副本也可以被读取。

tikv之间应该是有通信的吧,rocksraft写日志之后,还要将这个日志同步到其他tikv节点的rocks raft实例,其他节点还要回复他们已经写入成功,多数回复之后才能写入rocksdb,才算持久化,这个过程tikv是互相通信的吧

2 个赞

其他节点还要回复他们已经写入成功。 这句话回复他们写入成功,是回复谁,PDleader吧

我意思是我数据写入的时候,我如何指定region,而不是让他再九个tikv中随机选择三个

给tikv打label,然后设置placement rule,
https://docs.pingcap.com/zh/tidb/v8.1/placement-rules-in-sql#placement-rules-in-sql

例如我有不同地区的tikv,如果是使用pd进行通信的话,然后pb都是leader进行数据操作的,如何才能实现从美国来的请求走美国的tikv存储,法国走法国的,例如最优连接选择

那光tikv打label不够,直接用两地三中心类似的部署方式吧。。。
跨数据中心部署拓扑 | TiDB 文档中心

+1,写的好透彻