【问题标题】:Having replication factor more than number of nodes in cockroachdb复制因子超过 cockroachdb 中的节点数
【发布时间】:2020-12-22 10:36:02
【问题描述】:

我已经设置了一个三节点不安全集群,用于在本地机器上进行测试。我创建了一个数据库并添加了一个记录很少的表。我查询了 Zone 配置,它显示 num_replicas 为 3,并且 range 的副本为 {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 个节点吗?我的理解或疑问有什么问题吗?

【问题讨论】:

  • 在集群中添加另一个节点后,即当集群中的节点数变为5时,副本增加到五个{1,2,3,4,5}。但我不知道这种行为的确切原因。

标签: replication cockroachdb raft


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2016-06-23
    • 2017-11-28
    • 2017-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-09
    • 2017-02-02
    • 2017-01-20
    相关资源
    最近更新 更多