我有3个tikv使用的默认的 "max-replicas": 3,为什么我停掉两个tikv,服务就不能用了?

v3.0.0 按理来说每个节点的tikv都有有3个副本,我刚刚好有三个tikv,停掉两个tikv按理来说不应该影响服务的!

可以看下文章哈,目前你对 tidb 的副本数和分布有误解。

region 的三副本不会完全存在于一台 tikv 服务器上。 https://book.tidb.io/session1/chapter4/tidb-scheduling.html#第4章-讲调度

我看了文档,还是不理解,我设置副本3个,我有三个tikv节点,表示每份数据都在每个节点上面都有备份,所以我停掉两个tikv,剩余的一个tikv上面有全部的数据,服务不应该不能用了。这里面是不是还有别的东西

你好,

看下 region 篇: https://github.com/pingcap-incubator/tidb-in-action/blob/master/session1/chapter2/tidb-storage.md

这个我看过了,文档有这样一句话,(简单来说,需要想办法把数据复制到多台机器上,这样一台机器挂了,其他的机器上的副本还能提供服务;) 安这个理解的话,我现在副本3个,有3个tikv,每个副本在不同节点上面,最后效果就是数据都复制到了其它的机器上面,三台机器上面都有全部的数据,每个机器上面都有全部的数据,挂了两台节点,剩余的一台机器按理应该要正常提供服务了

简单先了解一个概念,raft要写成功要超过半数以上,你设置3个,半数以上是2,挂两个就没法用了。

你好,

三个副本均匀的分布在三台 tikv 上,当一台 tikv 发生故障,tikv 可以对外服务,因为半数以上节点存活

如果两天 tikv 同时发生故障,不满足节点半数以上存活,所以 tikv 不能对外提供服务,region 在分布均匀的情况下,一台服务器上单个 region 不会超过两副本。所以 region 也算不出 leader。集群不可用。

上图中也是类似的情况,虚线连接的 region 4,存储着 [p-t) key range 的数据,但是在 tikv 3(按顺序规定的) 中就不存在 region 4 的数据,所以当 tikv 3 发生故障对 region 4 上的数据就没有影响。

所以并不是每个 tikv store 上存在 region 4 的三个副本, region 4 的三个副本他们试均匀分布在 tikv 节点上的。

其它的节点也是挂掉半数以上服务就不能用了吗?

pd 也是类似的,tidb 是无状态的,所以只有他不会 ,tidb 宕机会影响连接执行,集群的并发。

3.0.0集群节点:2个tidb,3个pd,3个tikv。 我刚刚测试 集群,在循环不断插入10000条数据中,停掉一个pd,然后在重启这个pd节点,发现数据可能会多一条, 对于tikv,停掉一个tikv节点然后在重启,发现数据可能会少一条。 这是什么原因了?

该问题已新开帖,具体进度可查看下帖: