期待你上线后不同的节点角色切换后的实际使用体验
视频只简单的介绍了概念和优缺点,没用具体的操作内容,估计要303才有具体操作。
Placement Rules和location-labels是两套不同的调度策略。
通过拓扑 label 进行副本调度
https://docs.pingcap.com/zh/tidb/v8.1/schedule-replicas-by-topology-labels/
- 必须同时配置 PD 的
location-labels和 TiKV 的labels参数,否则 PD 不会根据拓扑结构进行调度。 - 如果你使用 Placement Rules in SQL,只需要配置 TiKV 的
labels即可。Placement Rules in SQL 目前不兼容 PDlocation-labels设置,会忽略该设置。不建议location-labels与 Placement Rules in SQL 混用,否则可能产生非预期的结果。
Placement Rules 使用文档
https://docs.pingcap.com/zh/tidb/v8.1/configure-placement-rules/
Placement Rules in SQL
https://docs.pingcap.com/zh/tidb/v8.1/placement-rules-in-sql/
Placement Rules 特性在 TiDB v5.0 及以上的版本中默认开启。所以如果要使用开始那个,估计得先关闭Placement Rule,不然是没效果的。
pd-ctl config placement-rules disable
当然,应该建议完全用Placement Rules来配置,但文档中的高可用部分还是使用的老方法配置,只是给了Placement Rules的链接。这样做应该有一些误导。
使用Placement Rules
tiup ctl:v8.1.2 pd -u http://192.168.2.121:2379 config placement-rules enable #启用Placement Rules策略
tiup ctl:v8.1.2 pd -u http://192.168.2.121:2379 config placement-rules show --group=pd --id=default#查看策略
cat > rules.json <<EOF
[
{
"group_id": "pd",
"id": "zone1",
"start_key": "",
"end_key": "",
"role": "voter",
"count": 2,
"label_constraints": [
{"key": "zone", "op": "in", "values": ["xian"]},
{"key": "dc", "op": "in", "values": ["xian1"]}
],
"location_labels": ["rack", "host"]
},
{
"group_id": "pd",
"id": "zone2",
"start_key": "",
"end_key": "",
"role": "voter",
"count": 2,
"label_constraints": [
{"key": "zone", "op": "in", "values": ["xian"]},
{"key": "dc", "op": "in", "values": ["xian2"]}
],
"location_labels": ["rack", "host"]
},
{
"group_id": "pd",
"id": "zone3",
"start_key": "",
"end_key": "",
"role": "follower",
"count": 1,
"label_constraints": [
{"key": "zone", "op": "in", "values": ["beijing"]},
{"key": "dc", "op": "in", "values": ["beijing1"]}
],
"location_labels": ["rack", "host"]
}
]
EOF
tiup ctl:v8.1.2 pd -u http://192.168.2.121:2379 config placement-rules save --in=rules.json
参考这里的实践指南
这个好, 又学到一招
从这个问题可以延伸出很多思考,感谢楼主抛砖引玉。
总结到位,学到了!
PRIMARY_REGION = “prod” // 保证 Leader 在 bj1,生产中心,保证你的读写都是在本地中心
REGIONS = “prod, samecity, remote” // 保证副本会分布到其它中心
FOLLOWERS=4; // 4个 flower,也就是一个数据有Leader在内的5份,你一个5个节点,保证每上节点都有一份数据,随意挂2个节点可以保证能正常使用,并且可以在剩下的3个节点中仍然保证高可用
如果不做 FOLLOWERS=4 的设置,默认是一个Leader+2个flower
所以可能 的情况是:数据在挂掉的2个节点+1个存活节点上,这个时候因为只有一个节点上有一份数据,无法择主,自然就出问题了
正常设置了
tiup ctl:v8.1.2 pd -u http://192.168.2.121:2379 config set location-labels zone,dc,rack,host
tiup ctl:v8.1.2 pd -u http://192.168.2.121:2379 config set isolation-level zone
tiup ctl:v8.1.2 pd -u http://192.168.2.121:2379 config set max-replicas 3
就应kv数据就应该分布在3个zone中。
不过因为高版本默认启用的是placement-rules所以,应该关闭了就可以正常使用。
tiup ctl:v8.1.2 pd -u http://192.168.2.121:2379 config placement-rules disable
不过还是建议使用placement-rules,那就要设置策略。
设置策略的文档中是按照region这个label来处理的,所以要先设置kv的labels。
#查询集群拓扑
SELECT store_id,address,label from INFORMATION_SCHEMA.TIKV_STORE_STATUS;
#为tikv设置区域,每一个都要设置对应的labels
tiup ctl:v8.1.2 pd -u http://192.168.2.121:2379 store label 4 region=‘xian1’ host=‘host1’ --force
tiup ctl:v8.1.2 pd -u http://192.168.2.121:2379 store label 1 region=‘xian1’ host=‘host2’ --force
tiup ctl:v8.1.2 pd -u http://192.168.2.121:2379 store label 27 region=‘xian2’ host=‘host1’ --force
tiup ctl:v8.1.2 pd -u http://192.168.2.121:2379 store label 5002 region=‘xian2’ host=‘host2’ --force
tiup ctl:v8.1.2 pd -u http://192.168.2.121:2379 store label 5001 region=‘beijing1’ host=‘host1’ --force
#开启调度策略
tiup ctl:v8.1.2 pd -u http://192.168.2.121:2379 config placement-rules enable
DROP PLACEMENT POLICY default_221; #如果有规则,可以先删除
CREATE PLACEMENT POLICY default_221 \ #修改使用ALTER
SURVIVAL_PREFERENCES=“[region, host]” \ # 数据将以副本的形式放置在不同的 region 里,优先满足跨 region 级别的生存目标,再满足跨 zone 级别的生存目标,最后再满足跨 host 级别的生存目标
PRIMARY_REGION = “xian1” \ #指定主节点
REGIONS = “xian1,xian2” \ #指定哪些可以成为主
FOLLOWERS=4; #指定副本数量
ALTER RANGE GLOBAL PLACEMENT POLICY= ‘default_221’; #给集群分配策略
SHOW PLACEMENT; #查看放置策略的调度进度
如果不需要按表设置的话,这里就够了,也不用去每个库每个表设置,不然太麻烦了。
如果要设置每个表的(一般用于热点或者重要库),可以
ALTER DATABASE 库名 PLACEMENT POLICY=default_221;#更改数据库的调度策略–以前的表还要单独一个个设置
ALTER TABLE 表名 PLACEMENT POLICY=default_221;#更改表的调度策略
之前的设置似乎有问题,SHOW PLACEMENT; #查看放置策略的调度进度,一直显示penging。
用ALTER PLACEMENT POLICY default_221 SURVIVAL_PREFERENCES=“[region, host]” ;改动之后,状态变成SCHEDULED了。
这样应该是对的。而且解决了之前缩容节点一直显示进行中的问题,现在缩容节点也显示成Tombstone了,可以处理删除了。
看来如果不懂具体使用,而且只需要简单的调度的话,用SURVIVAL_PREFERENCES="[region, host]"就够了。
所以,最终使用的配置是
tiup ctl:v8.1.2 pd -u http://192.168.2.121:2379 store label 4 region='xian' zone='xian1' host='xian11' --force
tiup ctl:v8.1.2 pd -u http://192.168.2.121:2379 store label 1 region='xian' zone='xian1' host='xian12' --force
tiup ctl:v8.1.2 pd -u http://192.168.2.121:2379 store label 27 region='xian' zone='xian2' host='xian21' --force
tiup ctl:v8.1.2 pd -u http://192.168.2.121:2379 store label 5002 region='xian' zone='xian2' host='xian22' --force
tiup ctl:v8.1.2 pd -u http://192.168.2.121:2379 store label 5001 region='beijing' zone='beijing1' host='beijing11' --force
#查询集群拓扑
SELECT store_id,address,label from INFORMATION_SCHEMA.TIKV_STORE_STATUS;
#指定生存偏好
####没策略先创建
CREATE PLACEMENT POLICY default_221 SURVIVAL_PREFERENCES="[region, zone, host]" PRIMARY_REGION = "xian" REGIONS = "xian,beijing" FOLLOWERS=4;
####有策略就修改
#SHOW CREATE PLACEMENT POLICY default_221;#查看策略内容
#DROP PLACEMENT POLICY default_221; #删除策略
ALTER PLACEMENT POLICY default_221 SURVIVAL_PREFERENCES="[region, zone, host]" PRIMARY_REGION = "xian" REGIONS = "xian,beijing" FOLLOWERS=4;
ALTER RANGE GLOBAL PLACEMENT POLICY= 'default_221'; #设置应用策略到集群
#查看放置策略的调度进度
SHOW PLACEMENT; # null不处理=>penging等待=>INPROGRESS进行=>SCHEDULED已安排
异地最好也搭建容灾的集群使用ticdc同步吧
目前的方案是两地三中心的集群。
至于双集群ticdc,那是另外的事情,没在讨论范围内。
而且ticdc同步ddl不方便,所以如果ddl经常变更的,暂时不好使用。
您提供的这些参考文档都可以作为操作手册了
此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。