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

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

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

Общие сведения

Имя кластера

Кластер в Picodata может быть идентифицирован по имени, которое задается администратором при запуске одного или нескольких инстансов. Имя кластера необходимо инстансам для первоначальной сборки кластера (bootstrap).

Постоянные и динамические параметры

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

  • с помощью параметров команды picodata run
  • через экспорт соответствующих переменных окружения в командной строке
  • с помощью файлов конфигурации, в которых задаются нужные переменные окружения

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

См. также:

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

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

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

my_cluster.yml
cluster:
  name: my_cluster
  default_replication_factor: 2
  shredding: false
instance:
  peer:
  - 127.0.0.1:3301
  audit: null
  log:
    level: info
    destination: null
    format: plain
  memtx:
    memory: 64M
  vinyl:
    memory: 128M
    cache: 128M

Вы можете скопировать в файл этот образец или сгенерировать свой файл конфигурации командой picodata config default. Полный перечень возможных параметров конфигурации приведен в разделе Описание файла конфигурации.

Примечание

Параметры в разделе cluster (имя кластера и фактор репликации) учитываются только при первоначальной сборке кластера и в дальнейшем не могут быть изменены. При добавлении новых узлов в уже работающий кластер эти параметры игнорируются.

Для примера мы запустим кластер из 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_INSTANCE_DIR="./data/my_cluster/i1"
export PICODATA_IPROTO_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_INSTANCE_DIR="./data/my_cluster/i2"
export PICODATA_IPROTO_LISTEN="127.0.0.1:3302"
export PICODATA_PG_LISTEN="127.0.0.1:5433"

picodata run
i3
#!/bin/bash

export PICODATA_CONFIG_FILE="my_cluster.yml"

export PICODATA_INSTANCE_NAME="i3"
export PICODATA_INSTANCE_DIR="./data/my_cluster/i3"
export PICODATA_IPROTO_LISTEN="127.0.0.1:3303"
export PICODATA_PG_LISTEN="127.0.0.1:5434"

picodata run
i4
#!/bin/bash

export PICODATA_CONFIG_FILE="my_cluster.yml"

export PICODATA_INSTANCE_NAME="i4"
export PICODATA_INSTANCE_DIR="./data/my_cluster/i4"
export PICODATA_IPROTO_LISTEN="127.0.0.1:3304"
export PICODATA_PG_LISTEN="127.0.0.1:5435"

picodata run

Полный перечень возможных параметров запуска и их описание содержатся в разделе Аргументы командной строки. Запустите один за другим инстансы в четырех окнах терминала. Приведенные в примере параметры приведут к созданию кластера в рабочей директории ./data/my_cluster с веб-интерфейсом, доступным по адресу 127.0.0.1:8080.

Читайте далее:

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

Тир — это группа инстансов, объединенных по функциональному назначению.

В рамках отдельных тиров данные шардируются независимо друг от друга. Для каждой шардированной таблицы определена принадлежность конкретному тиру.

На каждом тире запускаются свои сервисы плагинов.

Конфигурация инстансов (выделяемая память и т.д.) и фактор репликации также настраивается на уровне тиров.

Набор тиров, равно как и принадлежность инстансов тирам, определяется на момент развертывания кластера и в дальнейшем не изменяется. Каждый инстанс принадлежит ровно одному тиру.

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

Следующий пример показывает запуск кластера, состоящий из двух тиров — compute и storage. Создайте отдельные файлы конфигурации для каждого из тиров:

compute.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: compute
  peer:
  - 127.0.0.1:3301
  memtx:
    memory: 64M
storage.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
  peer:
  - 127.0.0.1:3301
  memtx:
    memory: 1024M

Примечание

Параметры в разделе cluster (имя кластера, состав тиров и их факторы репликации) учитываются только при первоначальной сборке кластера и в дальнейшем не могут быть изменены. При добавлении новых узлов в уже работающий кластер эти параметры игнорируются.

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

Создайте скрипты запуска для каждого из инстансов. В данном примере создается один compute инстанс и 2 storage. Инстансы storage образуют один репликасет.

compute_1
#!/bin/bash

export PICODATA_CONFIG_FILE="compute.yml"

export PICODATA_INSTANCE_NAME="compute_1"
export PICODATA_INSTANCE_DIR="./data/multi_tier_cluster/compute_1"
export PICODATA_IPROTO_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_INSTANCE_DIR="./data/multi_tier_cluster/storage_1"
export PICODATA_IPROTO_LISTEN="127.0.0.1:3302"
export PICODATA_PG_LISTEN="127.0.0.1:5433"

picodata run
storage_2
#!/bin/bash

export PICODATA_CONFIG_FILE="storage.yml"

export PICODATA_INSTANCE_NAME="storage_2"
export PICODATA_INSTANCE_DIR="./data/multi_tier_cluster/storage_2"
export PICODATA_IPROTO_LISTEN="127.0.0.1:3303"
export PICODATA_PG_LISTEN="127.0.0.1:5434"

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 будут относиться к одному региону и, следовательно, не попадут в один репликасет.