Имея коэффициент репликации больше, чем количество узлов в cockroachdb

Я настроил небезопасный кластер с тремя узлами для тестирования на локальной машине. Я создал базу данных и добавил таблицу с несколькими записями. Я запросил конфигурацию зоны, и она показала, что 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 узла? Я что-то неправильно понял в своем понимании или вопросах?

После добавления еще одного узла в кластер, т. е. когда количество узлов в кластере становится равным 5, количество реплик увеличивается до пяти {1, 2, 3, 4, 5}. Но точную причину такого поведения я не знаю.

IhtkaS 23.12.2020 14:41
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
513
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Хотя в документации CockroachDB это неясно, кластер будет применять коэффициент репликации только при наличии соответствующего количества узлов или более. Таким образом, после установки коэффициента репликации 5 для базы данных foo и добавления четвертого узла кластер может перебалансировать реплики на этот новый узел, если это имеет смысл, но он не увеличит количество реплик до 5, пока не появится пятый узел.

Другие вопросы по теме