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

Создание кластера

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

Кластер на нескольких серверах

Разворачивание кластера на нескольких серверах отражает сценарии полноценного использования Picodata в распределенной среде.

Предположим, что таких серверов два: 192.168.0.1 и 192.168.0.2. Порядок действий будет следующим:

На 192.168.0.1:

picodata run --listen 192.168.0.1:3301 --peer 192.168.0.1:3301

На 192.168.0.2:

picodata run --listen 192.168.0.2:3301 --peer 192.168.0.1:3301

На что нужно обратить внимание:

Во-первых, для параметра --listen вместо стандартного значения 127.0.0.1 надо указать конкретный адрес. Формат адреса допускает упрощения — можно указать только хост 192.168.0.1 (порт по умолчанию :3301), или только порт, но для наглядности лучше использовать полный формат <HOST>:<PORT>.

Значение параметра --listen сохраняется в системной таблице _pico_peer_addresses, но может измениться при перезапуске инстанса.

Во-вторых, надо дать инстансам возможность обнаружить друг друга для того, чтобы механизм discovery правильно собрал все найденные экземпляры Picodata в один кластер. Для этого в параметре --peer нужно указать адрес какого-либо соседнего инстанса. По умолчанию значение параметра --peer установлено в 127.0.0.1:3301. Параметр --peer не влияет больше ни на что, кроме механизма обнаружения других инстансов.

Параметр --advertise используется для установки публичного IP-адреса и порта инстанса. Параметр сообщает, по какому адресу остальные инстансы должны обращаться к текущему. По умолчанию он равен --listen, поэтому в примере выше не упоминается. Но, например, в случае --listen 0.0.0.0 его придется указать явно:

picodata run --listen 0.0.0.0:3301 --advertise 192.168.0.1:3301

Значение параметра --advertise анонсируется кластеру при запуске инстанса. Его можно поменять при перезапуске инстанса или в процессе его работы командой picodata set-advertise.

Примечание

Если не использовать параметр cluster-id, то по умолчанию кластер будет носить имя demo.

Именование инстансов

Чтобы проще было отличать инстансы друг от друга, им можно давать имена:

picodata run --instance-id barsik

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

Репликация и зоны доступности (failure domains)

Количество инстансов в репликасете определяется значением переменной replication_factor. Внутри кластера используется один и тот же replication_factor.

Управление количеством происходит через параметр --init-replication-factor, который используется только в момент запуска первого инстанса. При этом значение из аргументов командной строки записывается в конфигурацию кластера. В дальнейшем значение параметра --init-replication-factor игнорируется.

По мере усложнения топологии возникает еще один вопрос — как не допустить объединения в репликасет инстансов из одного и того же датацентра. Для этого в Picodata имеется параметр --failure-domainзона доступности, отражающая признак физического размещения сервера, на котором выполняется инстанс Picodata. Это может быть как датацентр, так и какое-либо другое обозначение расположения: регион (например, eu-east), стойка, сервер, или собственное обозначение (blue, green, yellow). Ниже показан пример запуска инстанса Picodata с указанием зоны доступности:

picodata run --init-replication-factor 2 --failure-domain region=us,zone=us-west-1

Добавление инстанса в репликасет происходит по следующим правилам:

  • Если в каком-либо репликасете количество инстансов меньше необходимого фактора репликации, то новый инстанс добавляется в него при условии, что их параметры --failure-domain отличаются (регистр символов не учитывается).
  • Если подходящих репликасетов нет, то Picodata создает новый репликасет.

Параметр --failure-domain играет роль только в момент добавления инстанса в кластер. Принадлежность инстанса репликасету впоследствии не меняется.

Как и параметр --advertise, значение параметра--failure-domain каждого инстанса можно редактировать, перезапустив инстанс с новыми параметрами.

Добавляемый инстанс должен обладать, как минимум, тем же набором параметров, которые уже есть в кластере. Например, инстанс dc=msk не сможет присоединиться к кластеру с --failure-domain region=eu/us и вернет ошибку.

Как было указано выше, сравнение зон доступности производится без учета регистра символов, поэтому, к примеру, два инстанса с аргументами --failure-domain region=us и --failure-domain REGION=US будут относиться к одному региону и, следовательно, не попадут в один репликасет.

Добавляемый инстанс использует алгоритм discovery для получения от raft информации о текущем лидере raft-группы.

Удаление инстанса (expel)

Данная процедура позволяет исключить инстанс из состава кластера.

Если инстанс хранит сегменты шардированных данных, перед его удалением данные будет автоматически перераспределены.

Для удаления инстанса из кластера потребуется пароль Администратора СУБД (admin), который должен быть заранее установлен в консоли администратора:

picodata admin ./admin.sock
ALTER USER "admin" WITH PASSWORD 'T0psecret'

Для удаления инстанса из кластера используйте команду picodata expel:

picodata expel barsik --peer 192.168.0.1:3301

См. также: