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

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

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

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

Имя кластера

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

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

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

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

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

См. также:

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

Для примера мы запустим кластер из 3 инстансов на локальном сетевом интерфейсе 127.0.0.1. Приведенный набор параметров явно задает имя кластера "cluster_name" и фактор репликации 3.

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

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

Файл конфигурации для инстанса с именем i1:

i1.yml
cluster:
  name: my_cluster
  shredding: False

  tier:
    default:
      replication_factor: 3

instance:
  instance_dir: './i1'
  name: 'i1'
  tier: 'default'
  peer: [ 127.0.0.1:3301 ]

  iproto_listen: '0.0.0.0:3301'
  iproto_advertise: '127.0.0.1:3301'
  http_listen: '0.0.0.0:8081'
  pg:
    listen: '0.0.0.0:5432'

  memtx:
    memory: 64M

Файл конфигурации для инстанса с именем i2:

i2.yml
cluster:
  name: my_cluster
  shredding: False

  tier:
    default:
      replication_factor: 3

instance:
  instance_dir: './i2'
  name: 'i2'
  tier: 'default'
  peer: [ 127.0.0.1:3301 ]

  iproto_listen: '0.0.0.0:3302'
  iproto_advertise: '127.0.0.1:3302'
  http_listen: '0.0.0.0:8082'
  pg:
    listen: '0.0.0.0:5433'

  memtx:
    memory: 64M

Файл конфигурации для инстанса с именем i3:

i3.yml
cluster:
  name: my_cluster
  shredding: False

  tier:
    default:
      replication_factor: 3

instance:
  instance_dir: './i3'
  name: 'i3'
  tier: 'default'
  peer: [ 127.0.0.1:3301 ]

  iproto_listen: '0.0.0.0:3303'
  iproto_advertise: '127.0.0.1:3303'
  http_listen: '0.0.0.0:8083'
  pg:
    listen: '0.0.0.0:5434'

  memtx:
    memory: 64M

Примечание

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

Запуск кластера

Запустите каждый из инстансов в отдельном окне терминала следующими командами:

Запуск инстанса i1:

picodata run --config i1.yml

Запуск инстанса i2:

picodata run --config i2.yml

Запуск инстанса i3:

picodata run --config i3.yml

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

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

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

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

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

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

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

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

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

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

compute-1.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
  instance_dir: './compute-1'
  name: 'compute-1'
  peer:
  - 127.0.0.1:3301

  iproto_listen: '0.0.0.0:3301'
  iproto_advertise: '127.0.0.1:3301'
  http_listen: '0.0.0.0:8081'
  pg:
    listen: '0.0.0.0:5432'

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

  iproto_listen: '0.0.0.0:3302'
  iproto_advertise: '127.0.0.1:3302'
  http_listen: '0.0.0.0:8082'
  pg:
    listen: '0.0.0.0:5433'

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

  iproto_listen: '0.0.0.0:3303'
  iproto_advertise: '127.0.0.1:3303'
  http_listen: '0.0.0.0:8083'
  pg:
    listen: '0.0.0.0:5434'

  memtx:
    memory: 1024M

Примечание

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

Запуск кластера

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

Запустите каждый из инстансов в отдельном окне терминала следующими командами:

Запуск инстанса compute-1:

picodata run --config compute-1.yml

Запуск инстанса storage-1:

picodata run --config storage-1.yml

Запуск инстанса storage-2:

picodata run --config storage-2.yml

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

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

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

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

Для установки зоны доступности добавьте в файл конфигурации инстанса указанный выше параметр. Например:

...
instance:
  tier: storage
  instance_dir: './storage-2'
  failure_domain: { "DC":"['DC1']","HOST":"trn1" }
  peer:
  - 127.0.0.1:3301
...

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

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

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

Добавляемый инстанс должен обладать, как минимум, тем же набором параметров, которые уже есть в кластере. Например, инстанс { "DC":"['DC1']" } не сможет присоединиться к кластеру с зоной { "DC":"['DC1']","HOST":"trn1" } и вернет ошибку.

Как было указано выше, сравнение зон доступности производится без учета регистра символов, поэтому, к примеру, два инстанса с зонами { "DC":"['DC1']" } и { "DC":"['dc1']" } будут относиться к одному региону и, следовательно, не попадут в один репликасет.