复制因子超过 cockroachdb 中的节点数

Having replication factor more than number of nodes in cockroachdb

我已经设置了一个三节点不安全集群用于在本地机器上进行测试。我创建了一个数据库并添加了一个包含少量记录的 table 。我查询了区域配置,它显示 num_replicas 是 3 并且范围有副本作为 {1, 2, 3}

root@:26257/foo> show zone configuration for database foo;
     target     |              raw_config_sql
----------------+-------------------------------------------
  RANGE default | ALTER RANGE default CONFIGURE ZONE USING
                |     range_min_bytes = 134217728,
                |     range_max_bytes = 536870912,
                |     gc.ttlseconds = 90000,
                |     num_replicas = 3,
                |     constraints = '[]',
                |     lease_preferences = '[]'
(1 row)

Time: 2ms total (execution 2ms / network 0ms)

root@:26257/foo> show ranges from database foo;
  table_name | start_key | end_key | range_id | range_size_mb | lease_holder | lease_holder_locality | replicas | replica_localities
-------------+-----------+---------+----------+---------------+--------------+-----------------------+----------+---------------------
  bar        | NULL      | NULL    |       36 |      0.000105 |            2 |                       | {1,2,3}  | {"","",""}
(1 row)

然后我使用以下查询将 num_replicas 更改为 5。现在副本的数量超过了集群中可用的节点数量,我没有收到任何错误。

 root@:26257/foo> ALTER RANGE default CONFIGURE ZONE USING num_replicas = 5, gc.ttlseconds = 100000;
 CONFIGURE ZONE 1

 Time: 174ms total (execution 174ms / network 0ms)
 root@:26257/foo> show zone configuration for database foo;
     target     |              raw_config_sql
----------------+-------------------------------------------
  RANGE default | ALTER RANGE default CONFIGURE ZONE USING
                |     range_min_bytes = 134217728,
                |     range_max_bytes = 536870912,
                |     gc.ttlseconds = 100000,
                |     num_replicas = 5,
                |     constraints = '[]',
                |     lease_preferences = '[]'
(1 row)

然后我向集群中添加了一个节点,并期望该范围的副本会增长。它没有被复制,但被重新平衡到附加节点 {1, 2, 4}。

cockroach node ls --insecure
  id
------
   1
   2
   3
   4
   

来自 SQl 控制台

root@:26257/foo> show ranges from database foo;
  table_name | start_key | end_key | range_id | range_size_mb | lease_holder | lease_holder_locality | replicas | replica_localities
-------------+-----------+---------+----------+---------------+--------------+-----------------------+----------+---------------------
  bar        | NULL      | NULL    |       36 |      0.000105 |            2 |                       | {1,2,4}  | {"","",""}
(1 row)

根据文档,副本列应列出具有此范围副本的节点。 num_replicas 设置为 5,此列不应该显示所有 4 个节点吗?我的理解或疑问有错吗?

虽然在 CockroachDB 文档中并不清楚,但只有当节点数量达到或超过匹配数量时,集群才会应用复制因子。因此,在将数据库 foo 的复制因子设置为 5 并添加第四个节点后,如果有意义,集群可能会将副本重新平衡到该新节点,但它不会将副本数量增加到 5,直到有第五个节点。