微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

复制因子超过 cockroachdb

如何解决复制因子超过 cockroachdb

我已经设置了一个三节点不安全集群用于在本地机器上进行测试。我创建了一个数据库添加一个包含几条记录的表。我查询了 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,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,|     gc.ttlseconds = 100000,|     num_replicas = 5,|     lease_preferences = '[]'
(1 row)

然后我向集群添加一个节点,并期望该范围的副本增长。它没有被复制,但被重新平衡到额外的节点 {1,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,4}  | {"",""}
(1 row)

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

解决方法

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。