Skip to content
Snippets Groups Projects
Commit 5b4be770 authored by Alexander Tolstoy's avatar Alexander Tolstoy
Browse files

docs: upload topology and glossary

parent e720fa4a
No related branches found
No related tags found
1 merge request!144Docs md
Pipeline #6952 passed
......@@ -22,6 +22,10 @@
**Репликасет** — буквально «набор реплик», экземпляров приложений, в которых хранится один и тот же набор реплицированных данных. В зависимости от роли реплик в Picodata есть реплики _active (RW)_ и _standby (RO)_.
**Failure domain** — букв. _"домен отказа"_. Термин обозначает зону доступности инстанса Picodata, т.е. признак физического размещения сервера, на котором запущен инстанс (географический регион, датацентр, стойка и т.д.). Зона доступности используется для того чтобы в один репликасет по возможности попадали инстансы с разным размещением, повышая таким образом отказоустойчивость как отдельного репликасета, так и кластера в целом.
**Bucket** — виртуальная неделимая единица хранения данных, обеспечивающая локальность данных (т. е. их нахождение на каком-то одном репликасете).
**Горизонтальное масштабирование** — шардинг, т.е. распределение bucket'ов между различными репликасетами, находящихся на разных серверах. Каждый такое репликасет называется шардом.
---
title: Topology RFC (v3.1)
title: Topology RFC (v3.11)
tags: Picodata, RFC
---
## Topology RFC (v3.1)
## Topology RFC (v3.11 for Workgroups)
*2022-06-13*
*2022-06-17*
*Yaroslav Dynnikov*
*Alexander Tolstoy*
В данном документе рассматриваются различные сценарии работы с кластером. Все они основаны на одном и том же принципе: запуске и объединении отдельных экземпляров Picodata в распределенный кластер. При этом сложность развертывания и поддержания работоспособности кластера зависит только от сложности его топологии.
......@@ -31,12 +32,13 @@ picodata run --data-dir i3 --listen :3303
```
> Q: Нужно ли для небольшого кластера указывать параметр `--peer`?
>
> A: Это не обязательно, т.к. по умолчанию `--peer` имеет такое же значение по умолчанию как и `--listen`: _127.0.0.1:3301_.
## Кластер на нескольких серверах
Выше был показан запуск Picodata на одном сервере, что удобно для тестирования и отладки, но не отражает сценариев полноценного использования кластера. Поэтому пора запустить Picodata на нескольких серверах. Предположим, что их два: `192.168.0.1` и `192.168.0.2`. Порядок запуска будет таким:
Выше был показан запуск Picodata на одном сервере, что удобно для тестирования и отладки, но не отражает сценариев полноценного использования кластера. Поэтому пора запустить Picodata на нескольких серверах. Предположим, что их два: `192.168.0.1` и `192.168.0.2`. Порядок запуска будет следующим:
На `192.168.0.1`:
```shell
......@@ -55,7 +57,7 @@ picodata run --listen 0.0.0.0 --advertise 192.168.0.2 --peer 192.168.0.1
Во-вторых, надо дать инстансам возможность обнаружить друг друга для того чтобы механизм [discovery](discovery.md) правильно собрал все найденные экземпляры Picodata в один кластер. Для этого в параметре `--peer` нужно указать адрес какого-либо соседнего инстанса. По умолчанию значение параметра `--peer` установлено в `127.0.0.1:3301`. Параметр `--peer` не влияет больше ни на что, кроме механизма обнаружения других инстансов.
Параметр `--advertise` сообщает, по какому адресу остальные инстансы должны обращаться к текущему инстансу. По умолчанию он определяется автоматически как `<HOSTNAME>:<LISTEN_PORT>`.
Параметр `--advertise` используется для установки публичного IP-адреса инстанса. Параметр сообщает, по какому адресу остальные инстансы должны обращаться к текущему инстансу. По умолчанию он определяется автоматически как `<HOSTNAME>:<LISTEN_PORT>`.
Значение параметра `--advertise` анонсируется кластеру при запуске инстанса. Его можно поменять при перезапуске инстанса или в процессе его работы командой `picodata set-advertise`.
......@@ -89,7 +91,7 @@ picodata run --replication-factor 2 --failure-domain region=us,zone=us-west-1
Добавление инстанса в репликасет происходит по следующим правилам:
- Если в каком-либо репликасете количество инстансов меньше необходимого фактора репликации, то новый инстанс добавляется в него при условии, что их параметры `--failure-domain` отличаются.
- Если подходящих репликасетов нет, то Picodata создаёт новый репликасет.
- Если подходящих репликасетов нет, то Picodata создает новый репликасет.
Параметр `--failure-domain` играет роль только в момент добавления инстанса в кластер. **Принадлежность инстанса репликасету впоследствии не меняется**.
......@@ -98,7 +100,7 @@ picodata run --replication-factor 2 --failure-domain region=us,zone=us-west-1
- Либо перезапустив инстанс с новыми параметрами.
- Либо в процессе его работы командой `picodata set-failure-domain`.
Добавляемый инстанс должен обладать тем же набором параметров, которые уже есть в кластере. Например, инстанс `dc=msk` не сможет присоединиться к кластеру с `--failure-domain region=eu/us` и вернёт ошибку.
Добавляемый инстанс должен обладать тем же набором параметров, которые уже есть в кластере. Например, инстанс `dc=msk` не сможет присоединиться к кластеру с `--failure-domain region=eu/us` и вернет ошибку.
## Группы репликасетов
......@@ -155,12 +157,17 @@ replication-factor = 4
name = "router"
storage-weight = 0
```
Пример запуска инстанса Picodata c использованием файла конфигурации:
```
picodata run --cfg custom-config.toml
```
## Динамическое переключение голосующих узлов в Raft (Raft voter failover)
Все узлы Raft в кластере делятся на два типа: голосующие (`voter`) и неголосующие (`learner`). За консистентность Raft-группы отвечают только узлы первого типа. Для коммита каждой транзакции требуется собрать кворум из `N/2 + 1` из голосующих узлов. Неголосующие узлы в кворуме не участвуют.
Чтобы сохранить баланс между надёжностью кластера и удобством его эксплуатации, в Picodata предусмотрена удобная функция — динамическое переключение типа у узлов. Если один из голосующих узлов становится недоступен или прекращает работу (что может нарушить кворум в Raft), то тип `voter` автоматически присваивается одному из доступных неголосующих узлов. Переключение происходит незаметно для пользователя.
Чтобы сохранить баланс между надежностью кластера и удобством его эксплуатации, в Picodata предусмотрена удобная функция — динамическое переключение типа у узлов. Если один из голосующих узлов становится недоступен или прекращает работу (что может нарушить кворум в Raft), то тип `voter` автоматически присваивается одному из доступных неголосующих узлов. Переключение происходит незаметно для пользователя.
Количество голосующих узлов в кластере не настраивается и зависит только от общего количества инстансов. Если инстансов 1 или 2, то голосующий узел один. Если инстансов 3 или 4, то таких узлов три. Для кластеров с 5 или более инстансами — пять голосующих узлов.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment