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

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

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

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

Кластер в Picodata может быть идентифицирован по имени, которое задается администратором при первоначальном

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

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

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

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

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

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

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

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

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

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

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

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

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

Использование набора файлов

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

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

storage_3

#!/bin/bash

export PICODATA_CONFIG_FILE="storage.yml"

export PICODATA_INSTANCE_NAME="storage_3"
export PICODATA_DATA_DIR="./data/multi_tier_cluster/storage_3"
export PICODATA_LISTEN="127.0.0.1:3304"

picodata run

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

chmod +x storage_3
./storage_3

Примечание

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

Если существующий кластер был запущен с использованием файла конфигурации (например, storage.yml в тестовом кластере из нескольких тиров), то желательно использовать его и для запуска дополнительных инстансов. Также можно использовать параметры из файла иным способом: объявив их через переменные окружения в командной строке или указав в виде аргументов для picodata run.

Минимальный набор параметров состоит из имени кластера и адреса одного из узлов, например:

storage.yml
cluster:
  name: my_cluster

instance:
  peer:
  - 127.0.0.1:3301

Ограничения

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

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

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

picodata> 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)

См. также: