Руководство администратора | Tarantool
Документация на русском языке
поддерживается сообществом
Tarantool Cartridge Руководство администратора

Руководство администратора

В данном руководстве рассматривается развертывание и управление Tarantool-кластером с помощью Tarantool Cartridge.

Примечание

Подробнее про управление экземплярами Tarantool см. в руководстве по Tarantool, в разделе Администрирование сервера.

Перед тем, как развертывать кластер, ознакомьтесь с понятием кластерных ролей и разверните экземпляры Tarantool в соответствии с предполагаемой топологией кластера.

Cartridge is compatible with Tarantool 1.10 and Tarantool 2.x. Cartridge doesn’t support Tarantool 3.0 and higher.

Compatibility and known issues
  Tarantool 1.10 Tarantool 2.8 Tarantool 2.10 Tarantool 2.11
Cartridge 2.8.4 + + + +
Cartridge 2.8.3 + + + +
Cartridge 2.8.2 + + + +
Cartridge 2.8.1 + + + +
Cartridge 2.8.0 + + + +
Cartridge 2.7.9 + + + +
Cartridge 2.7.8 Update is broken Update is broken Update is broken Update is broken
Cartridge 2.7.7 Update is broken Update is broken Update is broken Update is broken
Cartridge 2.7.6 Update is broken Update is broken Update is broken Update is broken
Cartridge 2.7.5 + + + -
Cartridge 2.7.4 + + + -
Cartridge 2.7.3 + + - -
Cartridge 2.7.2 + + - -
Cartridge 2.7.1 + + - -
Cartridge 2.7.0 + + - -

Чтобы развернуть кластер, сначала настройте все экземпляры 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
cartridge-cli is deprecated in favor of the tt CLI utility.
This guide uses cartridge-cli as a native tool for Cartridge applications development. However, we encourage you to switch to tt in order to simplify the migration to Tarantool 3.0 and newer versions.

И задайте предварительные настройки для кластера, что можно сделать через веб-интерфейс по адресу http://<instance_hostname>:<instance_http_port> (в этом примере http://localhost:8080).

You can bootstrap a cluster from an existing cluster (original cluster in the example below) via the argparse option TARANTOOL_BOOTSTRAP_FROM or --bootstrap_from in the following form: TARANTOOL_BOOTSTRAP_FROM=admin:SECRET-ORIGINAL-CLUSTER-COOKIE@HOST:MASTER_PORT,.... That option should be present on each instance in replicasets of the target cluster. Make sure that you’ve prepared a valid configuration for the target cluster. A valid topology should contain the same replicaset uuids for each replicaset and instance uuids that differ from original cluster. You can list several instances in this option. This is required for the latests Tarantool bootstrap policy.

Several notes:

  • You can bootstrap specific replicasets from a cluster (for example, data nodes only) instead of the whole cluster.
  • Don’t load data in the target cluster while bootstrapping. If you need to hot switch between original and target cluster, stop data loading in original cluster until bootstrapping is completed.
  • Check logs and box.info.replication on target cluster after bootstrapping. If something went wrong, try again.

Example of valid data in edit_topology request:

Original cluster topology:

{
    "replicasets": [
        {
            "alias": "router-original",
            "uuid": "aaaaaaaa-aaaa-0000-0000-000000000000",
            "join_servers": [
                {
                    "uri": "localhost:3301",
                    "uuid": "aaaaaaaa-aaaa-0000-0000-000000000001"
                }
            ],
            "roles": ["vshard-router", "failover-coordinator"]
        },
        {
            "alias": "storage-original",
            "uuid": "bbbbbbbb-0000-0000-0000-000000000000",
            "weight": 1,
            "join_servers": [
                {
                    "uri": "localhost:3302",
                    "uuid": "bbbbbbbb-bbbb-0000-0000-000000000001"
                }
            ],
            "roles": ["vshard-storage"]
        }
    ]
}

Target cluster topology:

{
    "replicasets": [
        {
            "alias": "router-original",
            "uuid": "cccccccc-cccc-0000-0000-000000000000", // <- this is dataless router,
            // it's not necessary to bootstrap it from original cluster
            "join_servers": [
                {
                    "uri": "localhost:13301", // <- different uri
                    "uuid": "cccccccc-cccc-0000-0000-000000000001"
                }
            ],
            "roles": ["vshard-router", "failover-coordinator"]
        },
        {
            "alias": "storage-original",
            "uuid": "bbbbbbbb-0000-0000-0000-000000000000", // replicaset_uuid is the same as in the original cluster
            // that allows us bootstrap target cluster from original cluster
            "weight": 1,
            "join_servers": [
                {
                    "uri": "localhost:13302", // <- different uri
                    "uuid": "bbbbbbbb-bbbb-0000-0000-000000000002" // <- different instance_uuid
                }
            ],
            "roles": ["vshard-storage"]
        }
    ]
}

В веб-интерфейсе выполните следующие действия:

  1. В зависимости от статуса аутентификации:

    • Если аутентификация включена (в эксплуатационной среде), введите свои учетные данные и нажмите Login (Войти):

      ../../../_images/auth_creds.png

       

    • Если отключен (для удобства тестирования), просто переходите к настройке кластера.

  2. Нажмите Configure (Настроить) рядом с первым ненастроенным сервером, чтобы создать первый набор реплик исключительно для роутера (для обработки ресурсоемких вычислений).

    ../../../_images/unconfigured-router.png

     

    Во всплывающем окне выберите роль vshard-router или любую другую пользовательскую роль, для которой роль vshard-router будет зависимой (в данном примере это пользовательская роль с именем app.roles.api).

    (Необязательно) Укажите отображаемое имя для набора реплик, например router.

    ../../../_images/create-router.png

     

    Примечание

    Как описано в разделе о встроенных ролях, рекомендуется включать кластерные роли в зависимости от рабочей нагрузки на экземпляры, которые работают на физических серверах с аппаратным обеспечением, предназначенным для рабочей нагрузки определенного типа.

    Нажмите Create replica set (Создать набор реплик), и созданный набор реплик отобразится в веб-интерфейсе

    ../../../_images/router-replica-set.png

     

    Предупреждение

    Обратите внимание: после того, как экземпляр подключится к набору реплик, НЕВОЗМОЖНО это отменить или переподключить его к другому набору реплик.

  3. Создайте новый набор реплик для мастер-узла хранения данных (для обработки большого количества транзакций).

    Выберите роль vshard-storage или любую другую пользовательскую роль, для которой роль vshard-storage будет зависимой (в данном примере это пользовательская роль с именем app.roles.storage).

    (Необязательно) Задайте определенную группу, например hot (горячие). Наборы реплик с ролями vshard-storage могут относиться к различным группам. В нашем примере группы hot и cold предназначены для независимой обработки горячих и холодных данных соответственно. Эти группы указаны в конфигурационном файле кластера. По умолчанию, кластер не входит ни в одну группу.

    (Необязательно) Укажите отображаемое имя для набора реплик, например hot-storage.

    Нажмите Create replica set (Создать набор реплик).

    ../../../_images/create-storage.png

     

  4. (Необязательно) Если этого требует топология, добавьте во второй набор реплик дополнительные хранилища:

    1. Нажмите Configure (Настроить) рядом с другим ненастроенным сервером, который выделен для рабочей нагрузки с большим количеством транзакций.

    2. Нажмите на вкладку Join Replica Set (Присоединиться к набору реплик).

    3. Выберите второй набор реплик и нажмите Join replica set (Присоединиться к набору реплик), чтобы добавить к нему сервер.

      ../../../_images/join-storage.png

       

  5. В зависимости от топологии кластера:

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

    Например:

    ../../../_images/final-cluster.png

     

  6. (Необязательно) По умолчанию все новые наборы реплик vshard-storage получают вес, равный 1, до загрузки vshard в следующем шаге.

Примечание

Если вы добавите новый набор реплик после начальной загрузки vshard, как описано в разделе об изменении топологии, он по умолчанию получит вес 0.

Чтобы разные наборы реплик хранили разное количество сегментов, нажмите Edit (Изменить) рядом с набором реплик, измените значение веса по умолчанию и нажмите Save (Сохранить):

../../../_images/change-weight.png

 

Для получения дополнительной информации о сегментах и весах набора реплик см. документацию по модулю vshard.

  1. Загрузите vshard, нажав соответствующую кнопку или же выполнив команду cartridge.admin.boostrap_vshard() в административной консоли.

    Эта команда создает виртуальные сегменты и распределяет их по хранилищам.

    С этого момента всю настройку кластера можно выполнять через веб-интерфейс.

    ../../../_images/bootstrap-vshard.png

     

Конфигурация кластера задается в конфигурационном файле формата YAML. Этот файл включает в себя топологию кластера и описания ролей.

У всех экземпляров в кластере Tarantool одинаковые настройки. Для этого каждый экземпляр в кластере хранит копию конфигурационного файла, а кластер синхронизирует эти копии: как только вы подтверждаете обновление конфигурации в веб-интерфейсе, кластер валидирует ее (и отклоняет неприемлемые изменения) и передает ее автоматически по всему кластеру.

Чтобы обновить конфигурацию:

  1. Нажмите на вкладку Configuration files (Конфигурационные файлы).

  2. (Необязательно) Нажмите Downloaded (Загруженные), чтобы получить текущую версию конфигурационного файла.

  3. Обновите конфигурационный файл.

    Можно добавлять/изменять/удалять любые разделы, кроме системных: topology, vshard и vshard_groups.

    Чтобы удалить раздел, просто удалите его из конфигурационного файла.

  4. Click Upload configuration button to upload configuration file.

    В нижней части экрана вы увидите сообщение об успешной загрузке конфигурации или ошибку, если новые настройки не были применены.

В данной главе описывается, как:

  • изменять топологию кластера,
  • включать автоматическое восстановление после отказа,
  • вручную менять мастера в наборе реплик,
  • отключать наборы реплик,
  • исключать экземпляры.

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

  1. Кластер валидирует обновление конфигурации, проверяя доступность нового экземпляра с помощью модуля membership.

    Примечание

    Модуль membership работает по протоколу UDP и может производить операции до вызова функции box.cfg.

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

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

  3. Как только новый экземпляр понимает, что кластер знает о нем, экземпляр вызывает функцию box.cfg и начинает работу.

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

Чтобы добавить в кластер новые узлы, выполните следующие действия:

  1. Разверните новые экземпляры Tarantool, как описано в разделе по развертыванию.

    Если новые узлы не появились в веб-интерфейсе, нажмите Probe server (Найти сервер) и укажите их URI вручную.

    ../../../_images/probe-server.png

     

    Если узел доступен, он появится в списке.

  2. В веб-интерфейсе:

    • Создайте новый набор реплик с одним из новых экземпляров: нажмите Configure (Настроить) рядом с ненастроенным сервером, отметьте флажками необходимые роли и нажмите Create replica set (Создать набор реплик):

      Примечание

      Если вы добавляете экземпляр vshard-storage, следует помнить, что вес всех таких экземпляров по умолчанию становится равным 0 после начальной загрузки vshard, которая происходит во время первоначального развертывания кластера.

      ../../../_images/zero.png

       

    • Или добавьте дополнительные экземпляры к существующему набору реплик: нажмите Configure (Настроить) рядом с ненастроенным сервером, нажмите на вкладку Join replica set (Присоединиться к набору реплик), выберите набор реплик и нажмите Join replica set.

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

  3. При развертывании нового набора реплик 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
...

Количество сегментов может увеличиваться или уменьшаться в зависимости от того, переносит ли балансировщик сегменты в узел хранения или из него.

Для получения дополнительной информации о параметрах мониторинга см. раздел по мониторингу хранилищ.

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

Чтобы отключить набор реплик, выполните следующие действия:

  1. Нажмите Edit (Изменить) рядом с необходимым набором реплик.

  2. Укажите 0 как значение веса и нажмите Save (Сохранить):

    ../../../_images/zero-weight.png

     

  3. Подождите, пока процесс балансировки не завершит перенос всех сегментов набора. Можно отслеживать текущее количество сегментов, как описано в разделе по балансировке данных.

После того, как экземпляр будет исключен из кластера, он никогда не сможет снова участвовать в кластере, поскольку ни один экземпляр не будет принимать его.

To expel an instance, stop it, then click next to it, then click Expel server and Expel:

../../../_images/expelling-instance.png

 

Примечание

Есть два ограничения:

  • Нельзя исключить лидера, если у него есть реплика. Сначала передайте роль лидера.
  • Нельзя исключить vshard-хранилище, если оно хранит сегменты. Установите значение веса на 0 и дождитесь завершения ребалансировки.

Since Cartridge 2.8.0 you will see an issue if you had a replica set with an expelled instance in box.space._cluster. You can fix it by manually remove expelled instance from box.space._cluster:

-- call thin on leader:
local confapplier = require('cartridge.confapplier')
local topology = require('cartridge.topology')
local topology_cfg = confapplier.get_readonly('topology')
local fun = require('fun')
for _, uuid, _ in fun.filter(topology.expelled, topology_cfg.servers) do
    box.space._cluster.index.uuid:delete(uuid)
end

Примечание

  • Do not expel instances until they’re stopped.
  • Do not forget to clean expelled instence’s data directory and remove it from your pipelines.
  • You can not return expelled instance to the cluster.

In a master-replica cluster configuration with automatic failover enabled, if the user-specified master of any replica set fails, the cluster automatically chooses a replica from the priority list and grants it the active master role (read/write). To learn more about details of failover work, see failover documentation.

The leader is the first instance according to the topology configuration. No automatic decisions are made. You can manually change the leader in the failover priority list or call box.cfg{read_only = false} on any instance.

To disable failover:

  1. Нажмите Failover (Восстановление после отказа):

    ../../../_images/failover-button.png

     

  2. In the Failover control box, select the Disabled mode:

    ../../../_images/failover-disabled.png

     

Важно

The stateful failover mode with Tarantool Stateboard is not recommended for use on large clusters in production. If you have a high load production cluster, use the stateful failover with etcd instead.

Leader appointments are polled from the external state provider. Decisions are made by one of the instances with the failover-coordinator role enabled. There are two options of external state provider:

  • Tarantool Stateboard - you need to run instance of stateboard with command tarantool stateboard.init.lua.
  • etcd v2 - you need to run and configure etcd cluster. Note that only etcd v2 API is supported, so you can still use etcd v3 with ETCD_ENABLE_V2=true.

To enable stateful failover:

  1. Run stateboard or etcd

  2. Нажмите Failover (Восстановление после отказа):

    ../../../_images/failover-button.png

     

  3. In the Failover control box, select the Stateful mode:

    ../../../_images/failover-stateful.png

     

  4. Check the necessary parameters.

In this mode, you can choose the leader with the Promote a leader button in the WebUI (or a GraphQL request).

../../../_images/failover-promote.png

 

Важно

Raft failover in Cartridge is in beta. Don’t use it in production.

The replicaset leader is chosen by built-in Raft, then the other replicasets get information about leader change from membership. Raft parameters can be configured by environment variables.

To enable the Raft failover:

  1. Make sure that your Tarantool version is higher than 2.10.0

  2. Нажмите Failover (Восстановление после отказа):

    ../../../_images/failover-button.png

     

  3. In the Failover control box, select the Raft mode:

    ../../../_images/failover-raft.png

     

  4. Check the necessary parameters.

In this mode, you can choose the leader with the Promote a leader button in the WebUI (or a GraphQL request or manual call box.ctl.promote).

../../../_images/failover-promote.png

 

To change failover priority list:

  1. Нажмите кнопку Edit (Изменить) рядом с необходимым набором реплик:

    ../../../_images/edit-replica-set.png

     

  2. Выполните прокрутку в окне Edit replica set (Изменить набор реплик), чтобы увидеть весь список серверов. Мастером будет верхний сервер.

    ../../../_images/switch-master.png

     

  3. Перенесите необходимый сервер наверх и нажмите Save (Сохранить).

In case of eventual failover, the new master will automatically enter the read/write mode, while the ex-master will become read-only. This works for any roles.

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

../../../_images/users-tab.png

 

Обратите внимание, что вкладка 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 = {...} } -- подпишитесь

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

Each Tarantool node (router/storage) provides an administrative console (Command Line Interface) for debugging, monitoring, and troubleshooting. The console acts as a Lua interpreter and displays the result in the human-readable YAML format.

To connect to a Tarantool instance via the console, you can choose one of the commands:

  • Using the tt CLI utility:

    $ tt connect <instance_hostname>:<port>
    
  • If you have cartridge-cli installed:

    $ cartridge connect <instance_hostname>:<port>
    
  • If you ran Cartridge locally:

    $ cartridge enter <node_name>
    
  • Old-fashioned way with tarantoolctl:

    $ 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.

Cartridge displays cluster and instances issues in WebUI:

../../../_images/cartridge-issues-replication-details.png

 

  • Replication

    • critical: «Replication from … to … isn’t running» – when box.info.replication.upstream == nil;
    • critical: «Replication from … to … state «stopped»/»orphan»/etc. (…)»;
    • warning: «Replication from … to …: high lag» – when upstream.lag > box.cfg.replication_sync_lag;
    • warning: «Replication from … to …: long idle» – when upstream.idle > 2 * box.cfg.replication_timeout;
    ../../../_images/cartridge-issues-high-lag.png

     

    Cartridge can propose you to fix some of replication issues by restarting replication:

    ../../../_images/cluster-issues-replication.png

     

  • Failover:

    • warning: «Can’t obtain failover coordinator (…)»;
    • warning: «There is no active failover coordinator»;
    • warning: «Failover is stuck on …: Error fetching appointments (…)»;
    • warning: «Failover is stuck on …: Failover fiber is dead» – this is likely a bug;
  • Switchover:

    • warning: «Consistency on … isn’t reached yet»;
  • Clock:

    • warning: «Clock difference between … and … exceed threshold» – limits.clock_delta_threshold_warning;
  • Memory:

    • critical: «Running out of memory on …» – when all 3 metrics items_used_ratio, arena_used_ratio, quota_used_ratio from box.slab.info() exceed limits.fragmentation_threshold_critical;
    • warning: «Memory is highly fragmented on …» - when items_used_ratio > limits.fragmentation_threshold_warning and both arena_used_ratio, quota_used_ratio exceed critical limit;
  • Configuration:

    • warning: «Configuration checksum mismatch on …»;
    • warning: «Configuration is prepared and locked on …»;
    • warning: «Advertise URI (…) differs from clusterwide config (…)»;
    • warning: «Configuring roles is stuck on … and hangs for … so far»;
    ../../../_images/cartridge-issues-config-mismatch.png

     

    Cartridge can propose you to fix some of configuration issues by force applying configuration:

    ../../../_images/cartridge-issues-force-apply.png

     

  • Vshard:

    • various vshard alerts (see vshard docs for details);
    • warning: warning: «Group «…» wasn’t bootstrapped: …»;
    • warning: Vshard storages in replicaset %s marked as «all writable».
  • Alien members:

    • warning: «Instance … with alien uuid is in the membership» – when two separate clusters share the same cluster cookie;
    ../../../_images/cartridge-issues-alien-uuid.png

     

  • Expelled instances:

    • warning: «Replicaset … has expelled instance … in box.space._cluster» - when instance was expelled from replicaset, but still remains in box.space._cluster;
  • Deprecated space format:

    • warning: «Instance … has spaces with deprecated format: space1, …»
  • Raft issues:

    • warning: «Raft leader idle is 10.000 on … . Is raft leader alive and connection is healthy?»
  • Custom issues (defined by user):

    • Custom roles can announce more issues with their own level, topic and message. See custom-role.get_issues.

Since Tarantool Enterprise supporting compression, Cartridge can check if you have spaces where you can use compression. To enable it, click on button «Suggestions». Note that the operation can affect cluster perfomance, so choose the time to use it wisely.

../../../_images/compression-suggestion-1.png

 

You will see the warning about cluster perfomance and then click «Continue».

../../../_images/compression-suggestion-2.png

 

You will see information about fields that can be compressed.

../../../_images/compression-suggestion-3.png

 

You can check some general instance info in WebUI. To see it, click on «Server details button».

../../../_images/cartridge-server-details-button.png

 

And then choose one of the tabs to see various parameters:

../../../_images/cartridge-server-details.png

 

It’s possible that some instances have a broken configuration. To do it, perform next actions:

  • Try to reapply configuration forcefully:

    cartridge.config_force_reapply(instaces_uuids) -- pass here uuids of broken instances
    
  • If it didn’t work, you could try to copy a config from healthy instance:

    1. Stop broken instance and remove it’s config directory. Don’t touch any other files in working directory.
    2. Copy config directory from a healthy instance to broken one’s directory.
    3. Start broken instance and check if it’s working.
    4. If nothing had worked, try to carefully remove a broken instance from cluster and setup a new one.

Во время перехода на более новую версию Tarantool, пожалуйста, не забудьте:

  1. Остановить кластер
  2. Убедиться, что включена опция upgrade_schema
  3. Затем снова запустить кластер

Это автоматически запустит box.schema.upgrade() на лидере в соответствии с приоритетом (failover priority) в настройках набора реплик.

См. раздел Аварийное восстановление в руководстве по Tarantool.

См. раздел Резервное копирование в руководстве по Tarantool.

Нашли ответ на свой вопрос?
Обратная связь