Руководство администратора
В данном руководстве рассматривается развертывание и управление Tarantool-кластером с помощью Tarantool Cartridge.
Примечание
Подробнее про управление экземплярами Tarantool см. в руководстве по Tarantool, в разделе Администрирование сервера.
Перед тем, как развертывать кластер, ознакомьтесь с понятием кластерных ролей и разверните экземпляры Tarantool в соответствии с предполагаемой топологией кластера.
Чтобы развернуть кластер, сначала настройте все экземпляры Tarantool в соответствии с предполагаемой топологией кластера, например:
my_app.router: {"advertise_uri": "localhost:3301", "http_port": 8080, "workdir": "./tmp/router"}
my_app.storage_A_master: {"advertise_uri": "localhost:3302", "http_enabled": False, "workdir": "./tmp/storage-a-master"}
my_app.storage_A_replica: {"advertise_uri": "localhost:3303", "http_enabled": False, "workdir": "./tmp/storage-a-replica"}
my_app.storage_B_master: {"advertise_uri": "localhost:3304", "http_enabled": False, "workdir": "./tmp/storage-b-master"}
my_app.storage_B_replica: {"advertise_uri": "localhost:3305", "http_enabled": False, "workdir": "./tmp/storage-b-replica"}
Затем, запустите экземпляры, например, используя CLI в cartridge
:
$ cartridge start my_app --cfg demo.yml --run_dir ./tmp/run --foreground
И задайте предварительные настройки для кластера, что можно сделать через веб-интерфейс по адресу http://<instance_hostname>:<instance_http_port>
(в этом примере http://localhost:8080
).
В веб-интерфейсе выполните следующие действия:
В зависимости от статуса аутентификации:
Нажмите Configure (Настроить) рядом с первым ненастроенным сервером, чтобы создать первый набор реплик исключительно для роутера (для обработки ресурсоемких вычислений).
Во всплывающем окне выберите роль
vshard-router
или любую другую пользовательскую роль, для которой рольvshard-router
будет зависимой (в данном примере это пользовательская роль с именемapp.roles.api
).(Необязательно) Укажите отображаемое имя для набора реплик, например
router
.Примечание
Как описано в разделе о встроенных ролях, рекомендуется включать кластерные роли в зависимости от рабочей нагрузки на экземпляры, которые работают на физических серверах с аппаратным обеспечением, предназначенным для рабочей нагрузки определенного типа.
Нажмите Create replica set (Создать набор реплик), и созданный набор реплик отобразится в веб-интерфейсе
Предупреждение
Обратите внимание: после того, как экземпляр подключится к набору реплик, НЕВОЗМОЖНО это отменить или переподключить его к другому набору реплик.
Создайте новый набор реплик для мастер-узла хранения данных (для обработки большого количества транзакций).
Выберите роль
vshard-storage
или любую другую пользовательскую роль, для которой рольvshard-storage
будет зависимой (в данном примере это пользовательская роль с именемapp.roles.storage
).(Необязательно) Задайте определенную группу, например
hot
(горячие). Наборы реплик с ролямиvshard-storage
могут относиться к различным группам. В нашем примере группыhot
иcold
предназначены для независимой обработки горячих и холодных данных соответственно. Эти группы указаны в конфигурационном файле кластера. По умолчанию, кластер не входит ни в одну группу.(Необязательно) Укажите отображаемое имя для набора реплик, например
hot-storage
.Нажмите Create replica set (Создать набор реплик).
(Необязательно) Если этого требует топология, добавьте во второй набор реплик дополнительные хранилища:
Нажмите Configure (Настроить) рядом с другим ненастроенным сервером, который выделен для рабочей нагрузки с большим количеством транзакций.
Нажмите на вкладку Join Replica Set (Присоединиться к набору реплик).
Выберите второй набор реплик и нажмите Join replica set (Присоединиться к набору реплик), чтобы добавить к нему сервер.
В зависимости от топологии кластера:
- добавьте дополнительные экземпляры к первому или второму набору реплик, или же
- создайте дополнительные наборы реплик и добавьте в них экземпляры для обработки определенной рабочей нагрузки (вычисления или транзакции).
Например:
(Необязательно) По умолчанию все новые наборы реплик
vshard-storage
получают вес, равный1
, до загрузкиvshard
в следующем шаге.
Примечание
Если вы добавите новый набор реплик после начальной загрузкиvshard
, как описано в разделе об изменении топологии, он по умолчанию получит вес 0.Чтобы разные наборы реплик хранили разное количество сегментов, нажмите Edit (Изменить) рядом с набором реплик, измените значение веса по умолчанию и нажмите Save (Сохранить):
![]()
Для получения дополнительной информации о сегментах и весах набора реплик см. документацию по модулю vshard.
Загрузите
vshard
, нажав соответствующую кнопку или же выполнив командуcartridge.admin.boostrap_vshard()
в административной консоли.Эта команда создает виртуальные сегменты и распределяет их по хранилищам.
С этого момента всю настройку кластера можно выполнять через веб-интерфейс.
Конфигурация кластера задается в конфигурационном файле формата YAML. Этот файл включает в себя топологию кластера и описания ролей.
У всех экземпляров в кластере Tarantool одинаковые настройки. Для этого каждый экземпляр в кластере хранит копию конфигурационного файла, а кластер синхронизирует эти копии: как только вы подтверждаете обновление конфигурации в веб-интерфейсе, кластер валидирует ее (и отклоняет неприемлемые изменения) и передает ее автоматически по всему кластеру.
Чтобы обновить конфигурацию:
Нажмите на вкладку Configuration files (Конфигурационные файлы).
(Необязательно) Нажмите Downloaded (Загруженные), чтобы получить текущую версию конфигурационного файла.
Обновите конфигурационный файл.
Можно добавлять/изменять/удалять любые разделы, кроме системных:
topology
,vshard
иvshard_groups
.Чтобы удалить раздел, просто удалите его из конфигурационного файла.
Создайте сжатую копию конфигурационного файла в виде архива в формате
.zip
и нажмите кнопку Upload configuration (Загрузить конфигурацию), чтобы загрузить ее.В нижней части экрана вы увидите сообщение об успешной загрузке конфигурации или ошибку, если новые настройки не были применены.
В данной главе описывается, как:
- изменять топологию кластера,
- включать автоматическое восстановление после отказа,
- вручную менять мастера в наборе реплик,
- отключать наборы реплик,
- исключать экземпляры.
При добавлении нового развернутого экземпляра в новый или уже существующий набор реплик:
Кластер валидирует обновление конфигурации, проверяя доступность нового экземпляра с помощью модуля membership.
Примечание
Модуль
membership
работает по протоколу UDP и может производить операции до вызова функцииbox.cfg
.Все узлы в кластере должны быть рабочими, чтобы валидация была пройдена.
Новый экземпляр ожидает, пока другой экземпляр в кластере не получит обновление конфигурации (оповещение реализовано с помощью того же модуля
membership
). На этом шаге у нового экземпляра еще нет своего UUID.Как только новый экземпляр понимает, что кластер знает о нем, экземпляр вызывает функцию box.cfg и начинает работу.
Оптимальная стратегия подключения новых узлов к кластеру состоит в том, чтобы развертывать новые экземпляры в наборе реплик с нулевым весом для каждого экземпляра, а затем увеличивать вес. Как только вес обновится и все узлы кластера получат уведомление об изменении конфигурации, сегменты начинают мигрировать на новые узлы.
Чтобы добавить в кластер новые узлы, выполните следующие действия:
Разверните новые экземпляры Tarantool, как описано в разделе по развертыванию.
Если новые узлы не появились в веб-интерфейсе, нажмите Probe server (Найти сервер) и укажите их URI вручную.
Если узел доступен, он появится в списке.
В веб-интерфейсе:
Создайте новый набор реплик с одним из новых экземпляров: нажмите Configure (Настроить) рядом с ненастроенным сервером, отметьте флажками необходимые роли и нажмите Create replica set (Создать набор реплик):
Или добавьте дополнительные экземпляры к существующему набору реплик: нажмите Configure (Настроить) рядом с ненастроенным сервером, нажмите на вкладку Join replica set (Присоединиться к набору реплик), выберите набор реплик и нажмите Join replica set.
При необходимости повторите действия для других экземпляров, чтобы достичь необходимого уровня резервирования.
При развертывании нового набора реплик
vshard-storage
заполните необходимую информацию: нажмите Edit (Изменить) рядом с необходимым набором реплик, увеличьте его вес и нажмите Save (Сохранить), чтобы начать балансировку данных.
Вместо веб-интерфейса можно использовать GraphQL для просмотра и изменения топологии кластера. Конечная точка кластера для выполнения запросов GraphQL — /admin/api
. Можно пользоваться любыми сторонними клиентами, поддерживающими GraphQL, например GraphiQL или Altair.
Примеры:
вывод списка всех серверов в кластере:
query { servers { alias uri uuid } }
вывод списка всех наборов реплик с серверами:
query { replicasets { uuid roles servers { uri uuid } } }
подключение сервера к новому набору реплик с включенной ролью хранилища:
mutation { join_server( uri: "localhost:33003" roles: ["vshard-storage"] ) }
Балансировка (решардинг) запускается через определенные промежутки времени и при добавлении в кластер нового набора реплик с весом, отличным от нуля. Для получения дополнительной информации см. раздел по балансировке в документации по модулю vshard
.
Самый удобный способ мониторинга процесса балансировки заключается в том, чтобы отслеживать количество активных сегментов на узлах хранения. Сначала в новом наборе реплик 0 активных сегментов. Через некоторое время фоновый процесс балансировки начинает переносить сегменты из других наборов реплик в новый. Балансировка продолжается до тех пор, пока данные не будут распределены равномерно по всем наборам реплик.
Чтобы отслеживать текущее количество сегментов, подключитесь к любому экземпляру Tarantool через административную консоль и выполните команду:
tarantool> vshard.storage.info().bucket
---
- receiving: 0
active: 1000
total: 1000
garbage: 0
sending: 0
...
Количество сегментов может увеличиваться или уменьшаться в зависимости от того, переносит ли балансировщик сегменты в узел хранения или из него.
Для получения дополнительной информации о параметрах мониторинга см. раздел по мониторингу хранилищ.
Под отключением всего набора реплик (например, для технического обслуживания) подразумевается перемещение всех его сегментов в другие наборы реплик.
Чтобы отключить набор реплик, выполните следующие действия:
Нажмите Edit (Изменить) рядом с необходимым набором реплик.
Укажите
0
как значение веса и нажмите Save (Сохранить):Подождите, пока процесс балансировки не завершит перенос всех сегментов набора. Можно отслеживать текущее количество сегментов, как описано в разделе по балансировке данных.
После того, как экземпляр будет исключен из кластера, он никогда не сможет снова участвовать в кластере, поскольку ни один экземпляр не будет принимать его.
Чтобы исключить экземпляр из кластера, нажмите … рядом с ним, затем нажмите Expel server (Исключить сервер) и Expel:

Примечание
Есть два ограничения:
- Нельзя исключить лидера, если у него есть реплика. Сначала передайте роль лидера.
- Нельзя исключить vshard-хранилище, если оно хранит сегменты. Установите значение веса на 0 и дождитесь завершения ребалансировки.
В конфигурации кластера мастер-реплика с включенным автоматическим восстановлением после отказа, если происходит отказ указанного пользователем мастера из любого набора реплик, кластер автоматически выбирает следующую реплику из списка приоритетов и назначает ей роль активного мастера (чтение/запись). Когда вышедший из строя мастер возвращается к работе, его роль восстанавливается, и активный мастер снова становится репликой (только для чтения). Это работает для всех ролей.
Чтобы задать приоритет в наборе реплик:
Нажмите Edit (Изменить) рядом с необходимым набором реплик.
Выполните прокрутку в окне Edit replica set (Изменить набор реплик), чтобы увидеть весь список серверов.
Перенесите реплики на необходимые места в списке приоритета и нажмите Save (Сохранить):
По умолчанию, автоматическое восстановление после отказа отключено. Чтобы включить его:
Нажмите Failover (Восстановление после отказа):
В окне Failover control (Управление восстановлением после отказа) нажмите Enable (Включить):
Статус восстановления после отказа изменится на enabled (включено):

Для получения дополнительной информации см. руководство по Tarantool, раздел по репликации.
Чтобы вручную сменить мастера в наборе реплик:
Нажмите кнопку Edit (Изменить) рядом с необходимым набором реплик:
Выполните прокрутку в окне Edit replica set (Изменить набор реплик), чтобы увидеть весь список серверов. Мастером будет верхний сервер.
Перенесите необходимый сервер наверх и нажмите Save (Сохранить).
Новый мастер автоматически войдет в режим для чтения и записи, а предыдущий мастер будет использоваться только для чтения. Это работает для всех ролей.
На вкладке Users (Пользователи) можно включать и отключать аутентификацию, а также добавлять, удалять, изменять и просматривать пользователей, у которых есть доступ к веб-интерфейсу.

Обратите внимание, что вкладка Users (Пользователи) доступна только в том случае, если в веб-интерфейсе реализована авторизация.
Кроме того, некоторые функции (например, удаление пользователей) можно отключить в конфигурации кластера, что регулируется при помощи параметра auth_backend_name, который передается в cartridge.cfg()
.
В Tarantool встроен механизм асинхронной репликации. Как следствие, записи распределяются между репликами с задержкой, поэтому могут возникнуть конфликты.
Для предотвращения конфликтов используется специальный триггер space.before_replace
. Он выполняется каждый раз перед внесением изменений в таблицу, для которой он был настроен. Функция триггера реализована на языке программирования Lua. Эта функция принимает в качестве аргументов исходные значения изменяемого кортежа и новые значения. Функция возвращает значение, которое используется для изменения результата операции: это будет новое значение измененного кортежа.
Для операций вставки старое значение отсутствует, поэтому в качестве первого аргумента передается нулевое значение nil
.
Для операций удаления отсутствует новое значение, поэтому нулевое значение nil
передается в качестве второго аргумента. Функция триггера также может возвращать нулевое значение nil
, превращая эту операцию в удаление.
В примере ниже показано, как использовать триггер space.before_replace
, чтобы предотвратить конфликты репликации. Предположим, у нас есть таблица box.space.test
, которая изменяется в нескольких репликах одновременно. В этой таблице мы храним одно поле полезной нагрузки. Чтобы обеспечить согласованность, мы также сохраняем время последнего изменения в каждом кортеже этой таблицы и устанавливаем триггер space.before_replace
, который отдает предпочтение новым кортежам. Ниже приведен код на Lua:
fiber = require('fiber')
-- определите функцию, которая будет изменять функцию test_replace(tuple)
-- добавьте временную метку к каждому кортежу в спейсе
tuple = box.tuple.new(tuple):update{{'!', 2, fiber.time()}}
box.space.test:replace(tuple)
end
box.cfg{ } -- восстановите из локальной директории
-- задайте триггер, чтобы избежать конфликтов
box.space.test:before_replace(function(old, new)
if old ~= nil and new ~= nil and new[2] < old[2] then
return old -- игнорируйте запрос
end
-- иначе примените как есть
end)
box.cfg{ replication = {...} } -- подпишитесь
В данном разделе описываются параметры, которые можно отслеживать в административной консоли.
В каждом узле Tarantool (роутер/хранилище) есть административная консоль (интерфейс командной строки) для отладки, мониторинга и разрешения проблем. Консоль выступает в качестве интерпретатора Lua и отображает результат в удобном для восприятия формате YAML. Чтобы подключиться к экземпляру Tarantool через консоль, выполните команду:
$ tarantoolctl connect <instance_hostname>:<port>
где <имя_хоста_экземпляра>:<порт>
– это URI данного экземпляра.
Для получения информации об узлах хранения данных используйте vshard.storage.info()
.
tarantool> vshard.storage.info()
---
- replicasets:
<replicaset_2>:
uuid: <replicaset_2>
master:
uri: storage:storage@127.0.0.1:3303
<replicaset_1>:
uuid: <replicaset_1>
master:
uri: storage:storage@127.0.0.1:3301
bucket: <!-- статус сегментов
receiving: 0 <!-- сегменты в состоянии RECEIVING
active: 2 <!-- сегменты в состоянии ACTIVE
garbage: 0 <!-- сегменты в состоянии GARBAGE (запланированы к удалению)
total: 2 <!-- общее количество сегментов
sending: 0 <!-- сегменты в состоянии SENDING
status: 1 <!-- статус набора реплик
replication:
status: disconnected <!-- статус репликации
idle: <idle>
alerts:
- ['MASTER_IS_UNREACHABLE', 'Master is unreachable: disconnected']
Код | Уровень критичности | Описание |
0 | Зеленый | Набор реплик работает в обычном режиме. |
1 | Желтый | Есть некоторые проблемы, но они не влияют на эффективность набора реплик (их стоит отметить, но они не требуют немедленного вмешательства). |
2 | Оранжевый | Набор реплик не восстановился после сбоя. |
3 | Красный | Набор реплик отключен. |
MISSING_MASTER
— В конфигурации набора реплик отсутствует мастер-узел.Уровень критичности: Оранжевый.
Состояние кластера: Ухудшение работы запросов на изменение данных к набору реплик.
Решение: Задайте мастер-узел для набора реплик, используя API.
UNREACHABLE_MASTER
— Отсутствует соединение между мастером и репликой.Уровень критичности:
- Если значение бездействия не превышает порог T1 (1 с) — Желтый,
- Если значение бездействия не превышает порог T2 (5 с) — Оранжевый,
- Если значение бездействия не превышает порог T3 (10 с) — Красный.
Состояние кластера: При запросах на чтение из реплики данные могут быть устаревшими по сравнению с данными на мастере.
Решение: Повторно подключитесь к мастеру: устраните проблемы с сетью, сбросьте текущий мастер, переключитесь на другой мастер.
LOW_REDUNDANCY
— У мастера есть доступ только к одной реплике.Уровень критичности: Желтый.
Состояние кластера: Коэффициент избыточности хранения данных равен 2. Он ниже минимального рекомендуемого значения для использования в производстве.
Решение: Проверить конфигурацию кластера:
- Если в конфигурации указан только один мастер и одна реплика, рекомендуется добавить хотя бы еще одну реплику, чтобы коэффициент избыточности достиг 3.
- Если в конфигурации указаны три или более реплик, проверьте статусы реплик и сетевое соединение между репликами.
INVALID_REBALANCING
— Нарушен инвариант балансировки. Во время миграции узел хранилища может либо отправлять сегменты, либо получать их. Поэтому не должно быть так, чтобы набор реплик отправлял сегменты в один набор реплик и одновременно получал сегменты из другого набора реплик.Уровень критичности: Желтый.
Состояние кластера: Балансировка приостановлена.
Решение: Есть две возможные причины нарушения инварианта:
- Отказ балансировщика.
- Статус сегмента был изменен вручную.
В любом случае обратитесь в техническую поддержку Tarantool.
HIGH_REPLICATION_LAG
— Отставание реплики превышает порог T1 (1 с).Уровень критичности:
- Если отставание не превышает порог T1 (1 с) — Желтый;
- Если отставание превышает порог T2 (5 с) — Оранжевый.
Состояние кластера: При запросах только на чтение из реплики данные могут быть устаревшими по сравнению с данными на мастере.
Решение: Проверьте статус репликации на реплике. Более подробные инструкции приведены в руководстве по разрешению проблем по.
OUT_OF_SYNC
— Нарушилась синхронизация. Отставание превышает порог T3 (10 с).Уровень критичности: Красный.
Состояние кластера: При запросах только на чтение из реплики данные могут быть устаревшими по сравнению с данными на мастере.
Решение: Проверьте статус репликации на реплике. Более подробные инструкции приведены в руководстве по разрешению проблем по.
UNREACHABLE_REPLICA
— Одна или несколько реплик недоступны.Уровень критичности: Желтый.
Состояние кластера: Коэффициент избыточности хранения данных для данного набора реплик меньше заданного значения. Если реплика стоит следующей в очереди на балансировку (в соответствии с настройками веса), запросы перенаправляются в реплику, которая все еще находится в очереди.
Решение: Проверьте сообщение об ошибке и выясните, какая реплика недоступна. Если реплика отключена, включите ее. Если это не поможет, проверьте состояние сети.
UNREACHABLE_REPLICASET
— Все реплики, кроме текущей, недоступны. Уровень критичности: Красный.Состояние кластера: Реплика хранит устаревшие данные.
Решение: Проверьте, включены ли другие реплики. Если все реплики включены, проверьте наличие сетевых проблем на мастере. Если реплики отключены, сначала проверьте их: возможно, мастер работает правильно.
Для получения информации о роутерах используйте vshard.router.info()
.
tarantool> vshard.router.info()
---
- replicasets:
<replica set UUID>:
master:
status: <available / unreachable / missing>
uri: <!-- URI мастера
uuid: <!-- UUID экземпляра
replica:
status: <available / unreachable / missing>
uri: <!-- URI реплики, используемой для slave-запросов
uuid: <!-- UUID экземпляра
uuid: <!-- UUID набора реплик
<replica set UUID>: ...
...
status: <!-- статус роутера
bucket:
known: <!-- количество сегментов с известным назначением
unknown: <!-- количество других сегментов
alerts: [<alert code>, <alert description>], ...
Код | Уровень критичности | Описание |
0 | Зеленый | Роутер работает в обычном режиме. |
1 | Желтый | Некоторые реплики недоступны, что влияет на скорость выполнения запросов на чтение. |
2 | Оранжевый | Работа запросов на изменение данных ухудшена. |
3 | Красный | Работа запросов на чтение данных ухудшена. |
Примечание
В зависимости от характера проблемы используйте либо UUID реплики, либо UUID набора реплик.
MISSING_MASTER
— В конфигурации одного или нескольких наборов реплик не указан мастер.Уровень критичности: Оранжевый.
Состояние кластера: Частичное ухудшение работы запросов на изменение данных.
Решение: Укажите мастера в конфигурации.
UNREACHABLE_MASTER
— Роутер потерял соединение с мастером одного или нескольких наборов реплик.Уровень критичности: Оранжевый.
Состояние кластера: Частичное ухудшение работы запросов на изменение данных.
Решение: Восстановите соединение с мастером. Сначала проверьте, включен ли мастер. Если он включен, проверьте состояние сети.
SUBOPTIMAL_REPLICA
— Есть реплика для запросов только для чтения, но эта реплика не оптимальна относительно сконфигурированных весов. Это значит, что оптимальная реплика недоступна.Уровень критичности: Желтый.
Состояние кластера: Запросы только на чтение направляются на резервную реплику.
Решение: Проверьте статус оптимальной реплики и ее сетевого подключения.
UNREACHABLE_REPLICASET
— Набор реплик недоступен как для запросов только на чтение, так и для запросов на изменение данных.Уровень критичности: Красный.
Состояние кластера: Частичное ухудшение работы запросов на изменение данных и на чтение данных.
Решение: В наборе реплик недоступны мастер и реплика. Проверьте сообщение об ошибке, чтобы найти этот набор реплик. Исправьте ошибку, как описано в решении ошибки UNREACHABLE_REPLICA.
Во время перехода на более новую версию Tarantool, пожалуйста, не забудьте:
- Остановить кластер
- Убедиться, что включена опция
upgrade_schema
- Затем снова запустить кластер
Это автоматически запустит box.schema.upgrade() на лидере в соответствии с приоритетом (failover priority) в настройках набора реплик.
См. раздел Аварийное восстановление в руководстве по Tarantool.
См. раздел Резервное копирование в руководстве по Tarantool.