Перейти к содержанию

Добавление узлов

В данном разделе приведена информация о добавлении новых узлов в существующий кластер Picodata.

Идентификация кластера

Для идентификации кластера Picodata используется его имя. Данный параметр задается администратором и используется только при первоначальной сборке кластера. Впоследствии, при добавление к работающему кластеру новых инстансов, указание имени кластера игнорируется.

См. также:

Идентификация узлов

Узел — логическая единица кластера, представленная на программном уровне инстансом (экземпляром приложения) Picodata.

Инстанс может быть идентифицирован по:

  • имени — удобочитаемому параметру, который задается администраторов при запуске инстанса и в дальнейшем может быть изменен (например, при перезапуске инстанса)
  • идентификатору — уникальному ключу в формате UUID, который автоматически присваивается инстансу в момент присоединения к кластеру и в дальнейшем не может быть изменен

Имена и идентификаторы инстансов кластера содержатся в системной таблице _pico_instance.

Обязательные параметры

Для того, чтобы добавить инстанс к существующему кластеру, необходимо:

  • знать имя кластера (предполагается, что оно известно администратору)
  • знать адрес одного из действующих узлов кластера

Указанные два параметра являются обязательными: без них подключение к существующему кластеру невозможно.

Дополнительные параметры

Дополнительно рекомендуется задать значения некоторых необязательных параметров:

Имя используется для удобства и быстрой идентификации инстанса. Если имя не дать, то оно будет сгенерировано автоматически в момент добавления в кластер на основе raft_id инстанса.

Имя инстанса задается один раз и не может быть изменено в дальнейшем (например, оно постоянно сохраняется в снапшотах инстанса). В кластере нельзя иметь два инстанса с одинаковым именем — пока инстанс живой, другой инстанс сразу после запуска получит ошибку при добавлении в кластер. Тем не менее, имя можно повторно использовать, если предварительно исключить первый инстанс с таким именем из кластера.

Использование файлов конфигурации

При запуске инстанса можно использовать как непосредственно одну команду, в которой указаны необходимые параметры, так и файл конфигурации инстанса. Последний способ более предпочтителен, так как позволяет удобнее контролировать параметры запуска. Файл конфигурации удобен для хранения как глобальных параметров, которые впоследствии не будут меняться, так и динамических, которые можно впоследствии переопределить.

Предположим, что имеется ранее запущенный кластер с двумя тирами compute и storage, как описано в разделе Создание кластера. Добавим к нему еще один инстанс для хранения данных. Для этого подготовим конфигурационный файл инстанса со следующим содержанием:

storage-3.yml
cluster:
  name: multi_tier_cluster
  tier:
    compute:
      replication_factor: 1
      bucket_count: 1500
      can_vote: true
    storage:
      replication_factor: 2
      bucket_count: 1500
      can_vote: false

instance:
  tier: storage
  instance_dir: './storage-3'
  peer:
  - 127.0.0.1:3301

  iproto_listen: '0.0.0.0:3304'
  iproto_advertise: '127.0.0.1:3304'
  http_listen: '0.0.0.0:8084'
  pg:
    listen: '0.0.0.0:5435'

  memtx:
    memory: 1024M

Далее запустим инстанс в отдельном окне терминала:

picodata run --config storage-3.yml

Примечание

Если указанная в параметре instance_dir директория не существует, она будет создана автоматически.

Ограничения

При добавлении узла к существующему кластеру нельзя переопределить список тиров и фактор репликации. Данные параметры задаются только при создании кластера.

Проверка присоединения

После успешного присоединения к кластеру новый инстанс появится в таблице _pico_instance в состоянии Online:

(admin) sql> SELECT "name","current_state" FROM _pico_instance;
+-------------+---------------+
| name        | current_state |
+=============================+
| "compute_1" | ["Online", 1] |
|-------------+---------------|
| "storage_1" | ["Online", 1] |
|-------------+---------------|
| "storage_2" | ["Online", 1] |
|-------------+---------------|
| "storage_3" | ["Online", 1] |
+-------------+---------------+
(4 rows)

Проверим состояние репликасета:

(admin) sql> SELECT * FROM _pico_replicaset;
+-----------+-----------------------+---------------------+--------------------+---------+--------+---------------+-----------+----------------------+----------------------+------------------+
| name      | uuid                  | current_master_name | target_master_name | tier    | weight | weight_origin | state     | current_config_versi | target_config_versio | promotion_vclock |
|           |                       |                     |                    |         |        |               |           | on                   | n                    |                  |
+==============================================================================================================================================================================================+
| compute_1 | a5db2a1e-2ab1-49a2-b5 | compute-1           | compute-1          | compute | 1      | auto          | ready     | 1                    | 1                    | {}               |
|           | e3-911be0e6ca1a       |                     |                    |         |        |               |           |                      |                      |                  |
|-----------+-----------------------+---------------------+--------------------+---------+--------+---------------+-----------+----------------------+----------------------+------------------|
| storage_1 | fee5e3f0-57e1-41d6-b4 | storage_1_1         | storage_1_1        | storage | 1      | auto          | ready     | 2                    | 2                    | {}               |
|           | bb-9e13fd261a83       |                     |                    |         |        |               |           |                      |                      |                  |
|-----------+-----------------------+---------------------+--------------------+---------+--------+---------------+-----------+----------------------+----------------------+------------------|
| storage_2 | 31aebae8-83e7-4642-81 | storage_2_1         | storage_2_1        | storage | 0      | auto          | not-ready | 1                    | 1                    | {}               |
|           | bc-4148bce814de       |                     |                    |         |        |               |           |                      |                      |                  |
+-----------+-----------------------+---------------------+--------------------+---------+--------+---------------+-----------+----------------------+----------------------+------------------+
(3 rows)

В данном случаем вновь созданный репликасет остается незаполненным, т.к. фактор репликации 2, а мы создали только один новый инстанс, поэтому для заполнения репликасета создайте инстанс storage-4 аналогичным способом.

См. также: