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

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

В данном разделе приведена информация по развертыванию кластера Picodata из нескольких инстансов для разных сценариев. Описанные способы предназначены в первую очередь для локального использования при разработке. О промышленной эксплуатации читайте в разделе Развертывание кластера через Ansible.

Простой кластер

Файл конфигурации

Для развертывания кластера используйте следующий файл конфигурации:

my_cluster.yml
cluster:
  name: my_cluster
  default_replication_factor: 2

instance:
  peer:
  - 127.0.0.1:3301
  audit: null
  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_name" и фактор репликации 2. В данном примере файл конфигурации используется для запуска всех инстансов.

Скрипты инстансов

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

i1
#!/bin/bash

export PICODATA_CONFIG_FILE="my_cluster.yml"

export PICODATA_INSTANCE_NAME="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_NAME="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_NAME="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_NAME="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:
  name: 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:
  name: 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_NAME="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_NAME="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_NAME="storage_2"
export PICODATA_DATA_DIR="./data/multi_tier_cluster/storage_2"
export PICODATA_LISTEN="127.0.0.1:3303"

picodata run

Зоны доступности (failure domains)

Использование зон доступности

Зона доступности — дополнительный параметр instance.failure_domain, который может быть использован в скрипте отдельного инстанса для того, чтобы не допустить объединения в репликасет инстансов из одного и того же датацентра.

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

Для установки зоны доступности добавьте в скрипт инстанса строку, которая объявит значение переменной PICODATA_FAILURE_DOMAIN. Например:

export PICODATA_FAILURE_DOMAIN="region=us,zone=us-west-1"

После запуска инстанса посредством скрипта, содержащего такую строку, добавление инстанса в репликасет произойдет так:

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

Значение переменной PICODATA_FAILURE_DOMAIN играет роль только в момент добавления инстанса в кластер. Принадлежность инстанса репликасету впоследствии не меняется. Для изменения зоны доступности следует остановить инстанс, отредактировать значение переменной PICODATA_FAILURE_DOMAIN в скрипте и затем перезапустить скрипт.

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

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

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

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

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

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

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

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

picodata expel 6c73a2e6-d072-4bf7-91e3-f829e766a25a --peer 192.168.0.1:3301

См. также: