【发布时间】: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