Конфигурация кластера¶
В конфигурацию кластера можно добавить параметры топологии и авторизации, а также настройку времени ожидания сетевых вызовов при шардировании.
Параметры топологии¶
Топология кластера настраивается при помощи секций topology и vshard_groups.
Примечание
Рекомендуется создать и настроить эти секции в отдельных файлах:
topology.yml
и vshard_groups.yml
, поместив эти файлы в папку config
в корне проекта.
Секция topology¶
Секция topology
содержит три главных подраздела:
replicasets
– содержит информацию о том, как экземпляры Tarantool организованы в наборы реплик, какие у узлов кластерные роли и веса при шардировании;servers
– список всех экземпляров Tarantool;failover
– настройки восстановления после сбоев.
replicasets¶
Этот подраздел содержит информацию о том, как экземпляры организованы в наборы реплик.
Каждый набор реплик идентифицируется по своему номеру UUID. Для каждого приводятся следующие параметры:
weight
– вес набора реплик. По умолчанию:0
(подключен, но пока не принимает данные). При указанном весе 0 попытки шардирования будут приводить к ошибке на роутере (vshard-router
).master
– UUID экземпляра-мастера в этом наборе реплик.alias
– человекопонятное имя набора реплик.vshard_group
– группа шардирования, к которой относится набор реплик. По умолчанию:default
.roles
– список кластерных ролей, включенных (true
) или выключенных (false
) для набора реплик.all_rw
– являются ли все узлы в наборе реплик мастерами. По умолчанию:false
.
Пример для одного набора реплик:
replicasets:
5e47bf8e-57f5-4166-96ba-e16f964fb82b: # UUID набора реплик
weight: 1
master:
- dee26aab-0190-461d-9121-56b96b881a59
alias: unnamed
vshard_group: default
roles:
tracing: true
ddl-manager: true
maintenance: true
watchdog: true
account_provider: true
metrics: true
common: true
core: true
failover-coordinator: true
storage: true
runner: true
vshard-router: true
connector: true
vshard-storage: true
all_rw: false
servers¶
В этом подразделе приведен список всех экземпляров Tarantool. Каждый из них идентифицируется по своему номеру UUID. Для каждого указаны следующие параметры:
uri
– внутренний URI-адрес экземпляра.disabled
– выключен ли экземпляр. По умолчанию:false
.replicaset_uuid
– UUID набора реплик, в котором состоит экземпляр.
Пример для одного экземпляра:
servers:
dee26aab-0190-461d-9121-56b96b881a59:
uri: localhost:3301
disabled: false
replicaset_uuid: 5e47bf8e-57f5-4166-96ba-e16f964fb82b
failover¶
В этом подразделе указываются настройки восстановления после сбоев, аналогичные соответствующим настройкам Cartridge.
Пример:
failover:
fencing_enabled: true
failover_timeout: 20
fencing_pause: 2
mode: eventual
fencing_timeout: 10
По умолчанию подраздел отключен:
failover: false
Секция vshard_groups¶
В этой секции указываются группы шардирования, или vshard-группы, к каждой из которых может принадлежать один или несколько наборов реплик. Внутри такой группы данные шардируются между входящими в нее наборами реплик.
В vshard-группе могут состоять только наборы реплик с ролью storage
.
Один набор реплик не может состоять в двух разных vshard-группах.
Параметры групп шардирования указываются так же, как при работе с Tarantool.
Значения по умолчанию:
default:
rebalancer_max_receiving: 100
bootstrapped: true
collect_lua_garbage: false
sync_timeout: 1
rebalancer_max_sending: 1
sched_ref_quota: 300
rebalancer_disbalance_threshold: 1
bucket_count: 30000
sched_move_quota: 1
См. также настройку времени ожидания сетевых вызовов при шардировании.
Параметры авторизации¶
Авторизация настраивается при помощи секций auth/auth_external, ldap.
Секция auth
позволяет настроить существующую систему авторизации аналогично тому, как это
делается в Tarantool Cartridge.
Вместо этого можно в секции auth_external
указать путь к файлу с Lua-кодом, где задана нестандартная логика для авторизации входящих запросов.
Кроме того, ниже рассматривается секция pepper, где можно задать переменную, с помощью которой будут хешироваться пароли.
Секция auth_external¶
В этой секции можно указать путь к файлу с Lua-кодом, где
пользователь может самостоятельно задать логику для авторизации входящих запросов.
Код должен вернуть таблицу с параметром auth
, в котором лежит функция для проверки
входящих запросов в формате HTTP.
Функция вернет либо nil
, если доступ запрещен, либо объект, содержащий аутентификационную информацию.
Пример. Укажем путь к файлу auth.lua
с логикой для авторизации входящих запросов:
auth_external: {__file: auth.lua}
Содержание auth.lua
определяется пользователем самостоятельно.
Например, в файле может быть указана такая логика обработки:
-- Функция авторизует пользователя по HTTP-заголовку
local function auth(request)
local header = request.headers['custom_token']
if header == nil then
return nil, "no header"
end
if header == 'error-injection' then
error('error-injection')
end
if header == 'invalid-answer' then
return 'invalid-answer'
end
if header == 'invalid-decision' then
return {
decision = 'invalid-decision',
}
end
if header == 'invalid-token' then
return {
decision = 'reject',
reason = 'invalid token',
}
end
if header == 'fallback-token' then
return {
decision = 'fallback',
}
end
if header == 'custom-response' then
return {
decision = 'reject',
status_code = 418,
reason = 'Hello, world!',
headers = {
['custom'] = 'header',
}
}
end
return {
decision = 'accept',
account = {
is_user = true,
email = 'example@tarantool.org',
role_id = 1,
},
}
end
return {
auth = auth,
}
Секция ldap¶
В этой секции указываются параметры авторизации внешних пользователей и систем через LDAP:
domain
– доменное имя, которое используется в доменном логине пользователя (user@domain
).organizational_units
– названия организационных подразделений или групп пользователей. Параметр опциональный и будет пропущен, если для него не задано значение.hosts
– адрес подключения к серверу LDAP.use_active_directory
– параметр, определяющий использование Active Directory (служба каталогов Microsoft). Значение по умолчанию:false
.Если установлено значение
true
, используйте адрес электронной почты для входа в систему и атрибут Active Directoryuserprincipalname=email
в качестве фильтра, гдеemail
– адрес электронной почты пользователя. Часть с именем пользователя вemail
будет распознана одинаково независимо от регистра (aBc@mail.ru
иAbC@mail.ru
– это один и тот же пользователь).use_tls
– параметр, определяющий использование TLS. Значение по умолчанию:false
.search_timeout
– время ожидания ответа от сервера LDAP в секундах. Значение по умолчанию:2
.options
– настройки LDAP. Параметр опционален. Доступные настройки:LDAP_OPT_DEBUG_LEVEL
– уровень отладки клиентской библиотеки.LDAP_OPT_PROTOCOL_VERSION
– версия протокола LDAP.LDAP_OPT_X_TLS_CACERTDIR
– путь к директории с корневыми сертификатами.LDAP_OPT_X_TLS_CACERTFILE
– полный путь к файлу корневого сертификата.LDAP_OPT_X_TLS_NEWCTX
– создание нового контекста библиотеки TLS.LDAP_OPT_X_TLS_REQUIRE_CERT
– стратегия проверки сертификатов. Принимает целое значение от 0 до 4, где:0
–LDAP_OPT_X_TLS_NEVER
,1
–LDAP_OPT_X_TLS_HARD
,2
–LDAP_OPT_X_TLS_DEMAND
,3
–LDAP_OPT_X_TLS_ALLOW
,4
–LDAP_OPT_X_TLS_TRY
.
Подробное описание этих настроек LDAP приведено на странице ldap_get_option().
roles
– описание ролей, которые будут назначаться пользователю в зависимости от групп LDAP, в которых он состоит. Вложенные параметры:role
– роль, назначенная пользователю или внешнему приложению для авторизованного доступа и действий в системе (читать подробнее про роли).domain_groups
– LDAP-группы, которые соответствуют указанной выше роли. В параметрах групп указываются:cn
(common name) – общее имя.ou
(organization unit name) – организационное подразделение или группа пользователей.dc
(domain component) – компонент домена.
Если пользователь состоит сразу в нескольких LDAP-группах, он получает разрешения на действия из всех ролей, назначенных для этих групп.
Пример
В примере заданы настройки для:
LDAP-группы
tarantool
с рольюadmin
;LDAP-группы
svcaccts
с рольюsupervisor
.
Для них указаны основные параметры авторизации, отключен Active Directory и отключен TLS:
ldap:
- domain: 'my.domain.ru'
organizational_units: ['tarantool']
hosts:
- server.my.domain.ru:389
use_tls: false
use_active_directory: false
search_timeout: 2
options:
- LDAP_OPT_DEBUG_LEVEL: 3
roles:
- domain_groups:
- 'cn=tarantool,ou=groups,dc=my,dc=domain,dc=ru'
role: 'admin'
- domain: 'my.domain.ru'
organizational_units: ['svcaccts']
hosts:
- server.my.domain.ru:389
use_tls: false
use_active_directory: false
search_timeout: 2
roles:
- domain_groups:
- 'cn=svcaccts,ou=groups,dc=my,dc=domain,dc=ru'
role: 'supervisor'
Секция pepper¶
В этой секции указывается строка символов, которая в целях усиления безопасности добавляется к паролю перед его хешированием. Если данный параметр не указан в конфигурации, добавляется строка по умолчанию, определенная в коде системы.
Пример:
pepper: 2d60ec7f-e9f0-4018-b354-c54907b9423d
Настройка времени ожидания сетевых вызовов при шардировании¶
vshard-timeout
– отдельная секция, где указывается время, в течение которого
модуль vshard
ожидает сетевые запросы.
Это время в секундах передается в функциях
vshard.router.callro()
и vshard.router.callrw().
Значение по умолчанию – 2 секунды:
vshard-timeout: 2