假设tikv在一个机房内独立的部署在6台不同的机器上,有一个tikv节点挂down掉了,那么接下来如何处理

【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】
【复现路径】假设其中一个tikv节点down机了
【遇到的问题:问题现象及影响】当前的集群还是可以用的,只是没法创建索引,那么接下来有两种情况发生第一:主机可以恢复,我这里测试主机恢复后,tikv节点自愈,自动加上来了。
第二:假设主机无法启动,这个时候,在该tikv上的region副本为leader的这些leader角色 会让出leader的角色权限到其他正常主机所在的tikv节点上吗?然后会在其他不含这些 region的tikv节点上在自动复制一些follower的角色副本,然后凑够 三个 副本的模式吗

down一个怎么会影响建索引呢?完全没影响才对啊。
不管的话会慢慢在其他tikv补齐副本的。就是如果在补齐之前又挂了一个才会有影响。

这个是我做的草图,可能region的leader分布的部署不是很合理,只是为了说明当 6 节点出现故障,并且6不可恢复的情况,会发生什么

1、前边帖子见过,TiKV异常掉线后,确实会影响索引创建,似乎是因为高版本的fast reorg功能导致的,把这个功能关闭,回退到之前的模式应该可以创索引,我没测试,是这个参数:https://docs.pingcap.com/zh/tidb/stable/system-variables#tidb_ddl_enable_fast_reorg-从-v630-版本开始引入
2、会重新选举leader,发现没leader就会选,但是补副本不是立即补,因为节点离线可能是暂时的,由参数https://docs.pingcap.com/zh/tidb/stable/pd-configuration-file#max-store-down-time控制

4 个赞

不会发生什么,region5的leader会zaitikv3和tikv5之间选一个
region6的leader会在tikv5和tikv4之间选一个
region2的会在tikv4和1上选一个
然后随机选一个没有副本的机器,补齐tikv6上这3个region的副本。

另外,大于3个tikv的情况,建议分个组,这样同一个组的2台机器都坏了也没事儿。不至于所有的tikv都相互关联,任意坏2个就无法提供服务。

是这样的

你这里说的 任意坏两个 指的是不是 同时的情况下 任意坏两个, 如果说时 一个一个坏 ,在新的leader选举出来,新的副本也补齐的情况下,就算是从6个tikv 一个一个的坏,坏到只剩下 3个 tikv,照样可以正常读写 ,我这这样子理解正确吗?因为副本是三个,最后又三个tikv就行
tikv1 tikv2 tikv3
region1-leader region2-leader region3-leader
region4-leader region5-leader region6-leader
region2-follower region3-follower region2-follower
region3-follower region1-follower region1-follower
region2-follower region4-follower region4-follower

这样子理解对吗

因为补齐副本需要时间,leader迁移很快,但是如果有个10k的region,想补齐副本,至少是小时级别的,如果在补齐之前挂掉,那大概率会有多副本丢失的情况,只剩下少副本的region就无法提供服务了。

如果接连挂掉,但是都有时间间隔,都等副本补齐了以后再挂掉是没问题的。

是你说的这样,只要region能满足raft协议的多副本要求,就能正常提供服务

多谢各位 希望这个贴子能给大家很大帮助 小龙虾爱大龙虾,我感觉你是tikv的内部技术,每次你都在,哈哈,爱了爱了

还有一个问题请教下
1.就是选举是按照剩余的tikv的主机节点然后多数原则选举还是按照剩余的该region副本数然后多数原则来选举
2.还有就是 如果在max-store-down-time之后,确实生成副本了,然后几天之后 我那个坏了的节点又修复好了上线了,然后在其他节点生成的region副本和修复好之后的这个tikv上的这个region副本,默认保留那个

1.region是数据复制的最小单元。
2.当然是保留新的,旧的会被识别到是旧的,被删掉,专栏里的tikv源码解读里有解释怎么判断是旧的的

1 个赞

tikv少了补齐很慢的,在这个期间如果再坏一个集群就不能提供服务了

1 个赞

仔细研究下,Mark

留新去旧

可以正常使用

1 个赞

你可以把这个坏的节点剔除集群,然后新增一个进来,这样不影响的呢