Добавление узлов¶
В данном разделе приведена информация о добавлении новых узлов в существующий кластер 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
аналогичным
способом.
См. также: