关于Placement Rules in SQL副本放置策略问题

【 TiDB 使用环境】测试/ Poc
【 TiDB 版本】7.5.1
当前标签设计为[“cloud”,“region”,“host”],TiKV的标签为{ cloud: “aliyun”, region: “cn-beijing-a”, host: “tikv-1” }、{ cloud: “aliyun”, region: “cn-beijing-b”, host: “tikv-2” }、{ cloud: “aliyun”, region: “cn-beijing4-1”, host: “tikv-3” }类似这样的,5副本配置。
如果想实现Leader节点放在cn-beijing-a或者cn-beijing-b,cn-beijing-a副本1个或者2个,cn-beijing-b副本1个或者2个,cn-beijing4-1副本1个,请问能否实现?

我现在按文档创建了这个策略 CREATE PLACEMENT POLICY testp2 LEADER_CONSTRAINTS=“[+region=cn-beijing-a]” FOLLOWER_CONSTRAINTS=‘{“+region=cn-beijing-a”: 1, “+region=cn-beijing-b”: 2, “+region=cn-beijing4-1”: 1}’; 但是这个leader只能放在cn-beijing-a,想让leader分布在两个region中

https://docs.pingcap.com/zh/tidb/stable/placement-rules-in-sql#使用-primary_region-指定
PRIMARY_REGION 为 Leader 分布的区域,只能指定一个。

1 个赞

想到一个折中的方法,不知是否能在生产使用。CREATE PLACEMENT POLICY testp1 CONSTRAINTS=‘{“+region=cn-beijing-a”:2, “+region=cn-beijing-b”: 2, “+region=cn-beijing4-1”: 1}’;,然后通过scheduler add evict-leader-scheduler store_id来驱逐,不让leader调度到cn-beijing4-1

不知能否解决问题
https://docs.pingcap.com/zh/tidb/stable/geo-distributed-deployment-topology

通过 raftstore.raft-min-election-timeout-ticksraftstore.raft-max-election-timeout-ticks 为 TiKV 节点配置较大的 election timeout tick 可以大幅降低该节点上的 Region 成为 Leader 的概率。但在发生灾难的场景中,如果部分 TiKV 节点宕机,而其它存活的 TiKV 节点 Raft 日志落后,此时只有这个配置了较大的 election timeout tick 的 TiKV 节点上的 Region 能成为 Leader。由于此 TiKV 节点上的 Region 需要至少等待 raftstore.raft-min-election-timeout-ticks 设置的时间后才能发起选举,因此尽量避免将此配置值设置得过大,以免在这种场景下影响集群的可用性。

1 个赞

就是在cn-beijing4-1的store配置文件中增加选举leader的election timeout tick

这也是个办法,我尝试一下

效果不好,配置了这两个参数后,模拟插入数据该节点的leader数量还是在往上增加

这个配置应该是发生故障选举时才用到

这个更灵活,原理一样
https://docs.pingcap.com/zh/tidb/stable/configure-placement-rules#场景二5-副本按-2-2-1-的比例放置在-3-个数据中心且第-3-个中心不产生-leader

2 个赞

多设置一个标签isleader不就好了 :thinking:
LEADER_CONSTRAINTS=“[+isleader=1]”

1 个赞

那FOLLOWER_CONSTRAINTS改咋写,如果能保证按照2:2:1的均匀的分布呢

后面我试着这样操作的:

  1. CREATE PLACEMENT POLICY testp1 CONSTRAINTS=‘{“+region=cn-beijing-a”:2, “+region=cn-beijing-b”: 2, “+region=cn-beijing4-1”: 1}’; 先按2:2:1的方式放置副本
  2. 将region=cn-beijing4-1所在的机器的leader_weight调整为0