Создание кластера¶
В данном разделе приведена информация по развертыванию кластера Picodata из нескольких инстансов для разных сценариев. Описанные способы предназначены в первую очередь для локального использования при разработке. О промышленной эксплуатации читайте в разделе Развертывание кластера через Ansible.
Простой кластер¶
Файл конфигурации¶
Для развертывания кластера используйте следующий файл конфигурации:
my_cluster.yml
cluster:
cluster_id: my_cluster
default_replication_factor: 2
instance:
peer:
- 127.0.0.1:3301
audit: false
shredding: false
log:
level: info
format: plain
destination: null
memtx:
memory: 64M
checkpoint_count: 2
checkpoint_interval: 3600.0
vinyl:
memory: 128M
cache: 128M
Вы можете скопировать в файл этот образец или сгенерировать свой файл конфигурации командой picodata config default. Полный перечень возможных параметров конфигурации приведен в разделе Описание файла конфигурации.
Для примера мы запустим кластер из 4 инстансов на локальном сетевом
интерфейсе 127.0.0.1
. Приведенный набор параметров явно задает имя
кластера "cluster_id" и фактор репликации 2. В
данном примере файл конфигурации используется для запуска всех
инстансов.
Скрипты инстансов¶
Создайте скрипты запуска для инстансов, указав в них путь к общему файлу конфигурации (в примере он находится в той же директории, что и сами скрипты), а также индивидуальные настройки:
i1
#!/bin/bash
export PICODATA_CONFIG_FILE="my_cluster.yml"
export PICODATA_INSTANCE_ID="i1"
export PICODATA_DATA_DIR="./data/my_cluster/i1"
export PICODATA_LISTEN="127.0.0.1:3301"
export PICODATA_HTTP_LISTEN="127.0.0.1:8080"
export PICODATA_PG_LISTEN="127.0.0.1:5432"
picodata run
i2
#!/bin/bash
export PICODATA_CONFIG_FILE="my_cluster.yml"
export PICODATA_INSTANCE_ID="i2"
export PICODATA_DATA_DIR="./data/my_cluster/i2"
export PICODATA_LISTEN="127.0.0.1:3302"
picodata run
i3
#!/bin/bash
export PICODATA_CONFIG_FILE="my_cluster.yml"
export PICODATA_INSTANCE_ID="i3"
export PICODATA_DATA_DIR="./data/my_cluster/i3"
export PICODATA_LISTEN="127.0.0.1:3303"
picodata run
i4
#!/bin/bash
export PICODATA_CONFIG_FILE="my_cluster.yml"
export PICODATA_INSTANCE_ID="i4"
export PICODATA_DATA_DIR="./data/my_cluster/i4"
export PICODATA_LISTEN="127.0.0.1:3304"
picodata run
Полный перечень возможных параметров запуска и их описание содержатся в
разделе Аргументы командной строки. Запустите
один за другим инстансы в четырех окнах терминала. Приведенные в примере
параметры приведут к созданию кластера в рабочей директории
./data/my_cluster
с веб-интерфейсом, доступным по адресу
127.0.0.1:8080.
Читайте далее:
Кластер из нескольких тиров¶
Тир — это группа инстансов, объединенных по функциональному назначению.
В рамках отдельных тиров данные шардируются независимо друг от друга. Для каждой шардированной таблицы определена принадлежность конкретному тиру.
На каждом тире запускаются свои сервисы плагинов.
Конфигурация инстансов (выделяемая память и т.д.) и фактор репликации также настраивается на уровне тиров.
Набор тиров, равно как и принадлежность инстансов тирам, определяется на момент развертывания кластера и в дальнейшем не изменяется. Каждый инстанс принадлежит ровно одному тиру.
Файлы конфигурации¶
Следующий пример показывает запуск кластера, состоящий из двух тиров — compute и storage. Создайте отдельные файлы конфигурации для каждого из тиров:
compute.yml
cluster:
cluster_id: multi_tier_cluster
tier:
compute:
replication_factor: 1
can_vote: true
storage:
replication_factor: 2
can_vote: false
instance:
tier: compute
peer:
- 127.0.0.1:3301
memtx:
memory: 64M
storage.yml
cluster:
cluster_id: multi_tier_cluster
tier:
compute:
replication_factor: 1
can_vote: true
storage:
replication_factor: 2
can_vote: false
instance:
tier: storage
peer:
- 127.0.0.1:3301
memtx:
memory: 1024M
Скрипты инстансов¶
Создайте скрипты запуска для каждого из инстансов. В данном примере создается один compute инстанс и 2 storage. Инстансы storage образуют один репликасет.
compute_1
#!/bin/bash
export PICODATA_CONFIG_FILE="compute.yml"
export PICODATA_INSTANCE_ID="compute_1"
export PICODATA_DATA_DIR="./data/multi_tier_cluster/compute_1"
export PICODATA_LISTEN="127.0.0.1:3301"
export PICODATA_HTTP_LISTEN="127.0.0.1:8080"
export PICODATA_PG_LISTEN="127.0.0.1:5432"
picodata run
storage_1
#!/bin/bash
export PICODATA_CONFIG_FILE="storage.yml"
export PICODATA_INSTANCE_ID="storage_1"
export PICODATA_DATA_DIR="./data/multi_tier_cluster/storage_1"
export PICODATA_LISTEN="127.0.0.1:3302"
picodata run
storage_2
#!/bin/bash
export PICODATA_CONFIG_FILE="storage.yml"
export PICODATA_INSTANCE_ID="storage_2"
export PICODATA_DATA_DIR="./data/multi_tier_cluster/storage_2"
export PICODATA_LISTEN="127.0.0.1:3303"
picodata run
Зоны доступности (failure domains)¶
Использование зон доступности¶
По мере усложнения топологии возникает еще один вопрос — как не
допустить объединения в репликасет инстансов из одного и того же
датацентра. Для этого в Picodata имеется параметр --failure-domain
(переменная 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
будут
относиться к одному региону и, следовательно, не попадут в один
репликасет.
Удаление инстанса (expel)¶
Данная процедура позволяет исключить инстанс из состава кластера.
Если инстанс хранит сегменты шардированных данных, перед его удалением данные будет автоматически перераспределены.
Для удаления инстанса из кластера потребуется пароль Администратора СУБД
(admin
), который должен быть заранее установлен в консоли администратора:
picodata admin ./admin.sock
ALTER USER "admin" WITH PASSWORD 'T0psecret'
Для удаления инстанса из кластера используйте команду picodata expel:
picodata expel barsik --peer 192.168.0.1:3301
См. также: