问题描述
我已经设置了一个三节点不安全集群用于在本地机器上进行测试。我创建了一个数据库并添加了一个包含几条记录的表。我查询了 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,直到有一个第五节点。