Конфигурация кластера
В конфигурацию кластера можно добавить параметры топологии и авторизации, а также настройку времени ожидания сетевых вызовов при шардировании.
Топология кластера настраивается при помощи секций topology и vshard_groups.
Секция topology содержит три главных подраздела:
replicasets- содержит информацию о том, как экземпляры Tarantool организованы в наборы реплик, какие у узлов кластерные роли и веса при шардировании;servers- список всех экземпляров Tarantool;failover- настройки восстановления после сбоев.
Этот подраздел содержит информацию о том, как экземпляры организованы в наборы реплик.
Каждый набор реплик идентифицируется по своему номеру 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: 1master:- dee26aab-0190-461d-9121-56b96b881a59alias: unnamedvshard_group: defaultroles:tracing: trueddl-manager: truemaintenance: truewatchdog: trueaccount_provider: truemetrics: truecommon: truecore: truefailover-coordinator: truestorage: truerunner: truevshard-router: trueconnector: truevshard-storage: trueall_rw: false
В этом подразделе приведен список всех экземпляров Tarantool. Каждый из них идентифицируется по своему номеру UUID. Для каждого указаны следующие параметры:
uri- внутренний URI-адрес экземпляра.disabled- выключен ли экземпляр. По умолчанию:false.replicaset_uuid- UUID набора реплик, в котором состоит экземпляр.
Пример для одного экземпляра:
servers:dee26aab-0190-461d-9121-56b96b881a59:uri: localhost:3301disabled: falsereplicaset_uuid: 5e47bf8e-57f5-4166-96ba-e16f964fb82b
В этом подразделе указываются настройки восстановления после сбоев, аналогичные соответствующим настройкам Cartridge.
Пример:
failover:fencing_enabled: truefailover_timeout: 20fencing_pause: 2mode: eventualfencing_timeout: 10
По умолчанию подраздел отключен:
failover: false
В этой секции указываются группы шардирования, или vshard-группы, к каждой из которых может принадлежать один или несколько наборов реплик. Внутри такой группы данные шардируются между входящими в нее наборами реплик.
В vshard-группе могут состоять только наборы реплик с ролью storage.
Один набор реплик не может состоять в двух разных vshard-группах.
Параметры групп шардирования указываются так же, как при работе с Tarantool.
Значения по умолчанию:
default:rebalancer_max_receiving: 100bootstrapped: truecollect_lua_garbage: falsesync_timeout: 1rebalancer_max_sending: 1sched_ref_quota: 300rebalancer_disbalance_threshold: 1bucket_count: 30000sched_move_quota: 1
См. также настройку времени ожидания сетевых вызовов при шардировании.
Авторизация настраивается при помощи секций auth/auth_external, ldap.
Секция auth позволяет настроить существующую систему авторизации
аналогично тому, как это делается в Tarantool
Cartridge.
Вместо этого можно в секции auth_external указать путь к файлу с
Lua-кодом, где задана нестандартная логика для авторизации входящих
запросов.
Кроме того, ниже рассматривается секция pepper, где можно задать переменную, с помощью которой будут хешироваться пароли.
В этой секции можно указать путь к файлу с 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 thenreturn nil, "no header"endif header == 'error-injection' thenerror('error-injection')endif header == 'invalid-answer' thenreturn 'invalid-answer'endif header == 'invalid-decision' thenreturn {decision = 'invalid-decision',}endif header == 'invalid-token' thenreturn {decision = 'reject',reason = 'invalid token',}endif header == 'fallback-token' thenreturn {decision = 'fallback',}endif header == 'custom-response' thenreturn {decision = 'reject',status_code = 418,reason = 'Hello, world!',headers = {['custom'] = 'header',}}endreturn {decision = 'accept',account = {is_user = true,email = 'example@tarantool.org',role_id = 1,},}endreturn {auth = auth,}
В этой секции указываются параметры авторизации внешних пользователей и систем через 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:389use_tls: falseuse_active_directory: falsesearch_timeout: 2options:- LDAP_OPT_DEBUG_LEVEL: 3roles:- 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:389use_tls: falseuse_active_directory: falsesearch_timeout: 2roles:- domain_groups:- 'cn=svcaccts,ou=groups,dc=my,dc=domain,dc=ru'role: 'supervisor'
В этой секции указывается строка символов, которая в целях усиления безопасности добавляется к паролю перед его хешированием. Если данный параметр не указан в конфигурации, добавляется строка по умолчанию, определенная в коде системы.
Пример:
pepper: 2d60ec7f-e9f0-4018-b354-c54907b9423d
vshard-timeout - отдельная секция, где указывается время, в течение
которого модуль vshard ожидает сетевые запросы. Это время в секундах
передается в функциях
vshard.router.callro()
и
vshard.router.callrw().
Значение по умолчанию - 2 секунды:
vshard-timeout: 2