【TiDB 版本】
2.1.6
【集群节点分布】
3台机器,每台机器部署1个tidb、1个pd、2个tikv、1个pump,第2台机器多部署1个drainer。
【问题描述】
第2台机器(多部署1个drainer)掉线,发现集群仍可以连接,但“某些”表的insert、select会报错。
TiDB具有3副本高可用,理论上1台机器掉线,不应该出现该情况,请问为什么呢?
【掉线及恢复时间】
09-24 09:05掉线,09-25 10:56发现重启恢复(可从tikv日志看出)。
【日志】
- 第2台机器的第1个tkv的日志(第2个tikv实例日志类似)
tikv_log|attachment (65.9 KB)
- 第1台机器的tidb日志(程序始终访问该tidb-server角色)
tidb_log|attachment (760.5 KB)
- 程序出错日志
progress_log|attachment (1.3 MB)
1 个赞
zzzzzz
(Tz)
2
每台机器的 2个 tikv 有打好 label 么?
请问打label什么意思?如何操作?会影响高可用吗?
qizheng
(qizheng)
4
1, 打 label 是指在 inventory.ini 文件中设置 tikv-server 的 labels 以及 location_labels,具体参考下单机多实例部署 https://pingcap.com/docs-cn/v3.0/how-to/deploy/orchestrated/ansible/#单机多-tikv-实例集群拓扑,label 的含义可以参考下 https://pingcap.com/docs-cn/v3.0/how-to/deploy/geographic-redundancy/location-awareness/
2,如果确认 label 没问题,即同一个机器上的两个 tikv 的 label 相同,再通过 pd-ctl 看下是否宕机的 tikv 上有 leader 没有及时调度到其他节点;
3,当某个 TiKV 负载较高时,也可能报错 TiKV Server timeout,通过监控检查下 TiKV Errors 下的面板是否有大量的报错异常
经检查,inventory.ini的[tikv_servers]未配置labels,同时[pd_servers:vars]也没有配置location_labels。配置如下图
请问这就是导致clusrer高可用失效的原因吗?
修改inventory.ini,增加这2个配置,再ansibli-playbook依次执行stop、deploy、start.yml是否就可以恢复cluster高可用了?
qizheng
(qizheng)
6
没有打 label 同一机器上可能存在两个副本,宕机后会剩下一个副本会造成高可用失效;增加这两个配置后, rollling_update 滚动重启下集群,然后 pd-ctl > config show all 确认下 location-labels 以及 label scheduler 已经加上
编辑inventory.ini如下
执行ansible-playbook rolling_update.yml也成功了,没有报错。但pd-ctl查看配置如下
location-labels仍然为空,并且找不到label_scheduler配置项(config show all也找不到)。请问如何解决?
qizheng
(qizheng)
8
可以 pd-ctl 设置下 config set location-labels host
设置后location-labels为host,但未找到label scheduler。请问如何确认label scheduler已经正确加上?
现在pd-ctl执行config show all显示如下:
scheduler show
如果看不到,尝试
scheduler add label-scheduler
手动添加
依然idea
11
如下图所示,是否表明label-scheduler已经加上?
嗯,也可以去 PD 监控面板, scheduler 中看看
老房
(葱头巴巴)
14
1:
打标签,会加该节点的调度分数,进而触发数据进行重新平衡,所以历史数据会做副本迁移,但因为整个调度有最大线程数,所以再平衡是需要一定时间的,注意不要在这个窗口期出问题。
2:
如果确定生效?可以通过 pt-ctl 命令来查看该 store 下的 region id list,然后在看下同一宿主机下的 store 是否有相同的 region。
3:
可以通过监控:level 分别表示 label 配置的级别,比如 hosts
依然idea
15
针对回复2,是指pd-ctl执行region命令,查看每个region的peers的3个store_id是否分布在不同机器上吗?类似下图:
这个方法不太直观啊。很难找到1个“原先在一台机器上有多副本,在打label后平衡到不同机器上的region”。没法前后比较,验证配置生效,请问有没有什么直观的看法吗?比如监控图什么的?
老房
(葱头巴巴)
16
可以的,我在上面的回答补充了一下。如果需要具体 region id,需要通过 pt-ctl
system
(system)
关闭
17
此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。