关于 raft 大多数原则的疑问

Question
tidb 集群初始化时,默认设置的副本数是 3。如果初始化集群的 tikv 数量是 1,此时数据库表都是 1个 region group 都是 1 peer,按理不符合 raft 的大多数原则,但实际集群是可以读写的。这个是什么原理?

因为相当于 1 副本。配置的 3 实际上相当于没生效。

2 个赞

tidb 集群初始化时 可以装1pd 1tidb 1tikv的,高可用都没了

那就是没有高可用了,当测试环境吧

我这测试环境就这个样子

1 副本

相当于你的设置覆盖了默认值。

如果tikv实例是2呢?有试过的吗?

初始化集群的 tikv 数量是 1,就是没有高可用了呗

我理解的这个时候应该就是1副本了

KV实例是一个和 raft 副本是一个 是2个事情吧?

单节点,就算放在一个实例上,实例挂也不高可用

没有高可用后,不涉及这个问题

想看到官方关于这块机制的说明。比较有意思:如果此时扩展 tikv 实例的数量,region 的 peer 数是随之增加的,直到满足 placement-rules 的定义

在琢磨 raft 中

没有高可用了

按理我没做任何“主动”设置,猜是 tidb 数据库对这里有一些“机制”,没发现 raft 提这块内容

一个 region 会是 2 个 peer。此时如果强制down 掉一个 tikv 实例,读写会报错 ERROR 9005 (HY000): Region is unavailable

说的是 默认设置的副本数是 3,预期 一个 region 包括 3 个 peer。当初始化的时候,如果只有一个 tikv 实例,实际生成的 peer 只有 1个,但此时数据库是可用的