Top.Mail.Ru
Приложения | Enterprise

Версия:

latest
Tarantool
Узнайте содержание релиза 2.8
Приложения

Приложения

Приложение A. Журнал аудита

Журнал аудита содержит записи о событиях СУБД Tarantool в формате JSON. Доступны следующие журналы событий:

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

Структура журнала

Ключ Тип Описание Пример
type строка тип события
<“access_denied”>
type_id число идентификатор события
<8>
description строка описание события
<“Authentication failed”>
time строка время события
<“YYYY-MM-DDTHH:MM:SS.03f[+|-]GMT”>
peer строка удаленный клиент
<“ip:port”>
user строка пользователь
<“user”>
param строка параметры события см. ниже

Описание события

Событие Ключ Параметры
авторизация пользователя пройдена auth_ok
{“name”: “user”}
авторизация пользователя не пройдена auth_fail
{“name”: “user”}
пользователь вышел из системы или завершил сеанс disconnect  
неудачные попытки доступа к конфиденциальным данным (личные записи, данные, геолокация и т. д.) access_denied
{“name”: “obj_name”,
“obj_type“: “space”,
“access_type”: “read”}
создание пользователя user_create
{“name”: “user”}
удаление пользователя user_drop
{“name”: “user”}
отключение пользователя user_disable
{“name”: “user”}
включение пользователя user_enable
{“name”: “user”}
выдача (изменение) прав (роли, профили и т.д.) пользователю user_priv
{“name”: “user”}
“obj_name”: “obj_name”,
“obj_type”: “space”,
“old_priv”: “”,
“new_priv”: “read,write”}
сброс пароля пользователя (должен быть указан пользователь, который вносит изменения) password_change
{“name”: “user”}
создание роли role_create
{“name”: “role”}
выдача (изменение) прав для роли role_priv
{“name”: “role”}
“obj_name”: “obj_name”,
“obj_type”: “space”,
“old_priv”: “”,
“new_priv”: “read,write”}

Приложение B. Важные параметры Tarantool

  • box.info
  • box.info.replication
  • box.info.memory
  • box.stat
  • box.stat.net
  • box.slab.info
  • box.slab.stats

Для получения подробной информации см. справочник по модулю `box` в основной документации по Tarantool.

Приложение C. Метрики системы мониторинга

Параметр Описание Тип по SNMP Единицы измерения Предел
Version Версия Tarantool DisplayString    
IsAlive Показатель доступности экземпляра

Integer

(список)

 

0 - недоступен

1 - доступен

MemoryLua объем памяти, занятый Lua Gauge32 МБайт 900
MemoryData объем, используемый для хранения данных Gauge32 МБайт значение задается вручную
MemoryNet объем, используемый для сетевого ввода-выводы Gauge32 МБайт 1024
MemoryIndex объем, используемый для хранения индексов Gauge32 МБайт значение задается вручную
MemoryCache объем, используемый для хранения кэша (только для vinyl) Gauge32 МБайт  
ReplicationLag время задержки с момента последней синхронизации (максимальное значение, если есть несколько файберов) Integer32 сек. 5
FiberCount количество файберов Gauge32 шт. 1000
CurrentTime текущее время в секундах, с 1 января 1970г. Unsigned32 временная отметка Unix в сек.  
StorageStatus статус набора реплик Integer список > 1
StorageAlerts количество Gauge32 шт. >= 1
StorageTotalBkts общее количество сегментов в хранилище Gauge32 шт. < 0
StorageActiveBkts количество сегментов в статусе ACTIVE Gauge32 шт. < 0
StorageGarbageBkts количество сегментов в статусе GARBAGE Gauge32 шт. < 0
StorageReceivingBkts количество сегментов в статусе RECEIVING Gauge32 шт. < 0
StorageSendingBkts количество сегментов в статусе SENDING Gauge32 шт. < 0
RouterStatus статус роутера Integer список > 1
RouterAlerts количество предупреждений для роутера Gauge32 шт. >= 1
RouterKnownBkts количество сегментов в известных наборах реплик Gauge32 шт. < 0
RouterUnknownBkts количество реплик, неизвестных роутеру Gauge32 шт. < 0
RequestCount общее количество запросов Counter64 шт.  
InsertCount общее количество запросов вставки Counter64 шт.  
DeleteCount общее количество запросов на удаление Counter64 шт.  
ReplaceCount общее количество запросов замены Counter64 шт.  
UpdateCount общее количество запросов на обновление Counter64 шт.  
SelectCount общее количество запросов выборки Counter64 шт.  
EvalCount количество вызовов через Eval Counter64 шт.  
CallCount количество вызовов через call Counter64 шт.  
ErrorCount количество ошибок в Tarantool Counter64 шт.  
AuthCount количество завершенных операций по аутентификации Counter64 шт.  

Приложение D. Устаревшие функции

Прекращена поддержка ZooKeeper и orchestrator. Тем не менее, при необходимости их можно использовать.

В следующих разделах описаны соответствующие функциональные возможности.

Управление кластером по API

Для управления кластером используйте оркестратор orchestrator, включенный в комплект поставки. orchestrator использует ZooKeeper для хранения и передачи конфигурации. Для управления кластером в orchestrator есть REST API. Изменение конфигураций в ZooKeeper осуществляется в результате вызова API-функций из orchestrator, что, в свою очередь, приводит к изменениям конфигурации узлов Tarantool.

Мы рекомендуем использовать интерфейс командной строки curl для вызова API-функций из orchestrator.

В следующем примере показано, как зарегистрировать новую зону доступности (DC):

$ curl -X POST http://HOST:PORT/api/v1/zone \
    -d '{
  "name": "Caucasian Boulevard"
  }'

Чтобы проверить, была ли выполнена регистрация DC, попробуйте использовать следующую команду. Результатом будет список всех зарегистрированных узлов в формате JSON:

$ curl http://HOST:PORT/api/v1/zone| python -m json.tool

Чтобы применить новую конфигурацию непосредственно к узлам Tarantool, увеличьте номер версии конфигурации после вызова API-функции. Для этого используйте запрос POST к /api/v1/version:

$ curl -X POST http://HOST:PORT/api/v1/version

В целом, чтобы обновить конфигурацию кластера:

  1. Вызовите метод POST/PUT в orchestrator.
    В результате будут обновлены узлы в ZooKeeper, а также будет инициировано последующее обновление узлов Tarantool.
  2. Обновите версию конфигурации, используя запрос POST к /api/v1/version.
    В результате конфигурация применится к узлам Tarantool.

Для получения дополнительной информации об API оркестратора см. Приложение E.

Настройка геодублирования

По логике узлы кластера могут относиться к некоторой зоне доступности. Физически же зона доступности – это отдельный DC или стойка внутри DC. Можно задать матрицу весов (расстояний) для зон доступности.

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

По умолчанию матрица весов (расстояний) для зон не настроена, а геодублирование для таких конфигураций работает следующим образом:

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

Когда вы задаете матрицу весов (расстояний), вызывая /api/v1/zones/weights, система автоматического масштабирования СУБД Tarantool находит реплику, которая ближе всех к указанному роутеру по весам, и начинает использовать эту реплику для чтения. Если эта реплика недоступна, то выбирается следующая ближайшая реплика с учетом расстояний, указанных в конфигурации.

Приложение E. Справочник по Orchestrator API

Configuring the zones

POST /api/v1/zone

Создание новой зоны.

Запрос

{
"name": "zone 1"
}

Ответ

{
"error": {
    "code": 0,
    "message": "ok"
},
"data": {
    "id": 2,
    "name": "zone 2"
},
"status": true
}

Возможные ошибки

  • zone_exists – указанная зона уже существует
GET /api/v1/zone/{zone_id: optional}

Возврат информации об указанной зоне или обо всех зонах.

Ответ

{
    "error": {
        "code": 0,
        "message": "ok"
    },
    "data": [
        {
            "id": 1,
            "name": "zone 11"
        },
        {
            "id": 2,
            "name": "zone 2"
        }
    ],
    "status": true
}

Возможные ошибки

  • zone_not_found – указанная зона не обнаружена
PUT /api/v1/zone/{zone_id}

Обновление информации о зоне.

Тело

{
    "name": "zone 22"
}

Ответ

{
    "error": {
        "code": 0,
        "message": "ok"
    },
    "data": {},
    "status": true
}

Возможные ошибки

  • zone_not_found – указанная зона не обнаружена
DELETE /api/v1/zone/{zone_id}

Удаление зоны, если в ней нет узлов.

Ответ

{
    "error": {
        "code": 0,
        "message": "ok"
    },
    "data": {},
    "status": true
}

Возможные ошибки

  • zone_not_found – указанная зона не обнаружена
  • zone_in_use – в указанной зоне есть хотя бы один узел

Настройка веса зоны

POST /api/v1/zones/weights

Конфигурация веса зоны.

Тело

{
    "weights": {
        "1": {
            "2": 10,
            "3": 11
        },
        "2": {
            "1": 10,
            "3": 12
        },
        "3": {
            "1": 11,
            "2": 12
        }
    }
}

Ответ

{
    "error": {
        "code": 0,
        "message": "ok"
    },
    "data": {},
    "status": true
}

Возможные ошибки

  • zones_weights_error – ошибка конфигурации
GET /api/v1/zones/weights

Возврат конфигурации веса зоны.

Ответ

{
    "error": {
        "code": 0,
        "message": "ok"
    },
    "data": {
        "1": {
            "2": 10,
            "3": 11
        },
        "2": {
            "1": 10,
            "3": 12
        },
        "3": {
            "1": 11,
            "2": 12
        }
    },
    "status": true
}

Возможные ошибки

  • zone_not_found – указанная зона не обнаружена

Настройка реестра

GET /api/v1/registry/nodes/new

Возврат всех обнаруженных узлов.

Ответ

{
    "error": {
        "code": 0,
        "message": "ok"
    },
    "data": [
        {
            "uuid": "uuid-2",
            "hostname": "tnt2.public.i",
            "name": "tnt2"
        }
    ],
    "status": true
}
POST /api/v1/registry/node

Регистрация обнаруженного узла.

Тело

{
    "zone_id": 1,
    "uuid": "uuid-2",
    "uri": "tnt2.public.i:3301",
    "user": "user1:pass1",
    "repl_user": "repl_user1:repl_pass1",
    "cfg": {
        "listen": "0.0.0.0:3301"
    }
}

Ответ

{
    "error": {
        "code": 0,
        "message": "ok"
    },
    "data": {},
    "status": true
}

Возможные ошибки

  • node_already_registered – указанный узел уже зарегистрирован
  • zone_not_found – указанная зона не обнаружена
  • node_not_discovered – указанный узел не обнаружен
PUT /api/v1/registry/node/{node_uuid}

Обновление параметров зарегистрированного узла.

Тело

Передача только обновляемых параметров.

{
    "zone_id": 1,
    "repl_user": "repl_user2:repl_pass2",
    "cfg": {
        "listen": "0.0.0.0:3301",
        "memtx_memory": 100000
    }
}

Ответ

{
    "error": {
        "code": 0,
        "message": "ok"
    },
    "data": {},
    "status": true
}

Возможные ошибки

  • node_not_registered – указанный узел не зарегистрирован
GET /api/v1/registry/node/{node_uuid: optional}

Возврат информации об узлах в кластере. Если передать node_uuid, вернется информация только по данному узлу.

Ответ

{
    "error": {
        "code": 0,
        "message": "ok"
    },
    "data": {
        "uuid-1": {
            "user": "user1:pass1",
            "hostname": "tnt1.public.i",
            "repl_user": "repl_user2:repl_pass2",
            "uri": "tnt1.public.i:3301",
            "zone_id": 1,
            "name": "tnt1",
            "cfg": {
                "listen": "0.0.0.0:3301",
                "memtx_memory": 100000
            },
            "zone": 1
        },
        "uuid-2": {
            "user": "user1:pass1",
            "hostname": "tnt2.public.i",
            "name": "tnt2",
            "uri": "tnt2.public.i:3301",
            "repl_user": "repl_user1:repl_pass1",
            "cfg": {
                "listen": "0.0.0.0:3301"
            },
            "zone": 1
        }
    },
    "status": true
}

Возможные ошибки

  • node_not_registered – указанный узел не зарегистрирован
DELETE /api/v1/registry/node/{node_uuid}

Удаление узла, если он не относится ни к одному набору реплик.

Ответ

{
    "error": {
        "code": 0,
        "message": "ok"
    },
    "data": {},
    "status": true
}

Возможные ошибки

  • node_not_registered – указанный узел не зарегистрирован
  • node_in_use – указанный узел используется в наборе реплик

API по роутерам

GET /api/v1/routers

Возврат списка всех узлов, которые представляют собой роутер.

Ответ

{
    "data": [
        "uuid-1"
    ],
    "status": true,
    "error": {
        "code": 0,
        "message": "ok"
    }
}
POST /api/v1/routers

Присвоение узлу роли роутера.

Тело

{
    "uuid": "uuid-1"
}

Ответ

{
    "error": {
        "code": 0,
        "message": "ok"
    },
    "data": {},
    "status": true
}

Возможные ошибки

  • node_not_registered – указанный узел не зарегистрирован
DELETE /api/v1/routers/{uuid}

Снятие роли роутера с узла.

Ответ

{
    "error": {
        "code": 0,
        "message": "ok"
    },
    "data": {},
    "status": true
}

Настройка наборов реплик

POST /api/v1/replicaset

Создание набора реплик со всеми зарегистрированными узлами.

Тело

{
    "uuid": "optional-uuid",
    "replicaset": [
        {
            "uuid": "uuid-1",
            "master": true
        }
    ]
}

Ответ

{
    "error": {
        "code": 0,
        "message": "ok"
    },
    "data": {
        "replicaset_uuid": "cc6568a2-63ca-413d-8e39-704b20adb7ae"
    },
    "status": true
}

Возможные ошибки

  • replicaset_exists – указанный набор реплик уже существует
  • replicaset_empty – указанный набор реплик не содержит ни одного узла
  • node_not_registered – указанный узел не зарегистрирован
  • node_in_use – указанный узел используется в другом наборе реплик
PUT /api/v1/replicaset/{replicaset_uuid}

Обновление параметров набора реплик.

Тело

{
    "replicaset": [
        {
            "uuid": "uuid-1",
            "master": true
        },
        {
            "uuid": "uuid-2",
            "master": false,
            "off": true
        }
    ]
}

Ответ

{
    "error": {
        "code": 0,
        "message": "ok"
    },
    "data": {},
    "status": true
}

Возможные ошибки

  • replicaset_empty – указанный набор реплик не содержит ни одного узла
  • replicaset_not_found – указанный набор реплик не обнаружен
  • node_not_registered – указанный узел не зарегистрирован
  • node_in_use – указанный узел используется в другом наборе реплик
GET /api/v1/replicaset/{replicaset_uuid: optional}

Возврат информации обо всех компонентах кластера. Если передать replicaset_uuid, вернется информация только по данному набору реплик.

Тело

{
    "name": "zone 22"
}

Ответ

{
    "error": {
        "code": 0,
        "message": "ok"
    },
    "data": {
        "cc6568a2-63ca-413d-8e39-704b20adb7ae": {
            "uuid-1": {
                "hostname": "tnt1.public.i",
                "off": false,
                "repl_user": "repl_user2:repl_pass2",
                "uri": "tnt1.public.i:3301",
                "master": true,
                "name": "tnt1",
                "user": "user1:pass1",
                "zone_id": 1,
                "zone": 1
            },
            "uuid-2": {
                "hostname": "tnt2.public.i",
                "off": true,
                "repl_user": "repl_user1:repl_pass1",
                "uri": "tnt2.public.i:3301",
                "master": false,
                "name": "tnt2",
                "user": "user1:pass1",
                "zone": 1
            }
        }
    },
    "status": true
}

Возможные ошибки

  • replicaset_not_found – указанный набор реплик не обнаружен
DELETE /api/v1/replicaset/{replicaset_uuid}

Удаление набора реплик.

Ответ

{
    "error": {
        "code": 0,
        "message": "ok"
    },
    "data": {},
    "status": true
}

Возможные ошибки

  • replicaset_not_found – указанный набор реплик не обнаружен
POST /api/v1/replicaset/{replicaset_uuid}/master

Смена мастера в наборе реплик.

Тело

{
    "instance_uuid": "uuid-1",
    "hostname_name": "hostname:instance_name"
}

Ответ

{
    "error": {
        "code": 0,
        "message": "ok"
    },
    "data": {},
    "status": true
}

Возможные ошибки

  • replicaset_not_found – указанный набор реплик не обнаружен
  • node_not_registered – указанный узел не зарегистрирован
  • node_not_in_replicaset – указанный узел находится не в указанном наборе реплик
POST /api/v1/replicaset/{replicaset_uuid}/node

Добавление узла в набор реплик.

Ответ

{
    "error": {
        "code": 0,
        "message": "ok"
    },
    "data": {},
    "status": true
}

Тело

{
    "instance_uuid": "uuid-1",
    "hostname_name": "hostname:instance_name",
    "master": false,
    "off": false
}

Возможные ошибки

  • replicaset_not_found – указанный набор реплик не обнаружен
  • node_not_registered – указанный узел не зарегистрирован
  • node_in_use – указанный узел используется в другом наборе реплик
GET /api/v1/replicaset/status

Возврат статистики по кластеру.

Ответ

{
    "error": {
        "code": 0,
        "message": "ok"
    },
    "data": {
        "cluster": {
            "routers": [
                {
                    "zone": 1,
                    "name": "tnt1",
                    "repl_user": "repl_user1:repl_pass1",
                    "hostname": "tnt1.public.i",
                    "status": null,
                    "uri": "tnt1.public.i:3301",
                    "user": "user1:pass1",
                    "uuid": "uuid-1",
                    "total_rps": null
                }
            ],
            "storages": [
                {
                    "hostname": "tnt1.public.i",
                    "repl_user": "repl_user2:repl_pass2",
                    "uri": "tnt1.public.i:3301",
                    "name": "tnt1",
                    "total_rps": null,
                    "status": 'online',
                    "replicas": [
                        {
                            "user": "user1:pass1",
                            "hostname": "tnt2.public.i",
                            "replication_info": null,
                            "repl_user": "repl_user1:repl_pass1",
                            "uri": "tnt2.public.i:3301",
                            "uuid": "uuid-2",
                            "status": 'online',
                            "name": "tnt2",
                            "total_rps": null,
                            "zone": 1
                        }
                    ],
                    "user": "user1:pass1",
                    "zone_id": 1,
                    "uuid": "uuid-1",
                    "replicaset_uuid": "cc6568a2-63ca-413d-8e39-704b20adb7ae",
                    "zone": 1
                }
            ]
        }
    },
    "status": true
}

Возможные ошибки

  • zone_not_found – указанная зона не обнаружена
  • zone_in_use – в указанной зоне есть хотя бы один узел

Настройка версии конфигурации

POST /api/v1/version

Настройка версии конфигурации.

Ответ

{
    "error": {
        "code": 0,
        "message": "ok"
    },
    "status": true,
    "data": {
        "version": 2
    }
}

Возможные ошибки

  • cfg_error – ошибка конфигурации
GET /api/v1/version

Возврат версии конфигурации.

Ответ

{
    "error": {
        "code": 0,
        "message": "ok"
    },
    "status": true,
    "data": {
        "version": 2
    }
}

Конфигурация шардинга

POST /api/v1/sharding/cfg

Добавление новой конфигурации шардинга.

Ответ

{
    "error": {
        "code": 0,
        "message": "ok"
    },
    "status": true,
    "data": {}
}
GET /api/v1/sharding/cfg

Возврат текущей конфигурации шардинга.

Ответ

{
    "error": {
        "code": 0,
        "message": "ok"
    },
    "status": true,
    "data": {}
}

Сброс конфигурации кластера

POST /api/v1/clean/cfg

Сброс конфигурации кластера.

Ответ

{
    "error": {
        "code": 0,
        "message": "ok"
    },
    "status": true,
    "data": {}
}
POST /api/v1/clean/all

Сброс конфигурации кластера и удаление информации об узлах кластера из каталогов ZooKeeper.

Ответ

{
    "error": {
        "code": 0,
        "message": "ok"
    },
    "status": true,
    "data": {}
}