Конфигурация сервера Reindexer
В этом разделе рассматривается настройка сервера и определение его параметров, а также настройка индивидуальных уровней доступа для разных пользователей. В качестве примера используется вариант Standalone
(Автономный сервер). Настройки Reindexer, установленного из deb/rpm-пакета, через brew или собранного из исходников отличаются от конфигурирования сервера при использовании официального Docker-образа. Различия будут рассмотрены в этом разделе.
Способы настройки сервера Reindexer
Настройки сервера Reindexer могут задаваться с помощью:
- конфигурационного файла
reindexer.conf
; - аргументов командной строки, которые указываются при запуске сервера.
Если один и тот же параметр задан и в файле, и в командной строке, приоритет отдается значению, указанному в командной строке. Таким образом, параметры, заданные в конфигурационном файле сервера Reindexer, можно временно (для текущего запуска) переопределить, используя опции командной строки.
Структура файла конфигурации, настройки и соответствующие им аргументы командной строки
Чтобы использовать файл конфигурации, путь к нему необходимо задать в качестве аргумента командной строки
-c
(--config
) при запуске сервера, например:- file/path/config.conf
. Если этот аргумент не указать при запуске сервера Reindexer, файл конфигурации использоваться не будет.
Для запуска сервера Reindexer из предсобранного пакета с помощью скрипта автозапуска по умолчанию используется команда:
/usr/bin/reindexer_server -c /etc/reindexer.conf -d --pidfile=/run/reindexer/reindexer_server.pid
Она предписывает использовать файл конфигурации, который располагается в локальной файловой системе по адресу /etc/reindexer.conf
.
Конфигурационный файл по умолчанию выглядит следующим образом:
# Reindexer server configuration file
storage:
path: /var/lib/reindexer
engine: leveldb
startwitherrors: false
autorepair: false
# Network configuration
net:
httpaddr: 0.0.0.0:9088
rpcaddr: 0.0.0.0:6534
webroot: ${REINDEXER_INSTALL_PREFIX}/share/reindexer/web
# Enables authorization via login/password (requires users.yml file in db directory)
security: false
# Idle timeout for http transactions
tx_idle_timeout: 600
# Http read|write operations timeouts
# Optional timeout (seconds) for HTTP read operations (i.e. selects, get meta, transactions and others).
# Default is 0 (forever waiting).
http_read_timeout: 10
# Optional timeout (seconds) for HTTP write operations (i.e. update, delete, put meta, add index, transactions new|modify|commit and others). May not be set to 0.
# Default is 60 seconds.
http_write_timeout: 30
# Logger configuration
logger:
serverlog: /var/log/reindexer/reindexer_server.log
corelog: /var/log/reindexer/reindexer_server.log
httplog: /var/log/reindexer/reindexer_server.log
rpclog: ""
loglevel: info
# System options
system:
user: reindexer
# Debugging features
debug:
pprof: false
allocs: false
# Metrics configuration
metrics:
prometheus: false
# Metrics collect period in millisecods
collect_period: 1000
# Clients connections statistic
clientsstats: false
Ниже в описании параметров конфигурации из файла
reindexer.conf
в скобках (после аббревиатуры CLI — Command Line Interface) указаны соответствующие им аргументы командной строки.
Файл конфигурации состоит из 6 разделов:
storage
- настройки дискового хранилища. Здесь настраиваются параметры:
path
(CLI:-s
,--db
) — путь к дисковому хранилищу. Если не задан, по умолчанию используется/tmp/reindex
;engine
(CLI:-e
,--engine
) — тип дискового хранилища. Возможные значения —leveldb
иrocksdb
;startwitherrors
(CLI:--startwitherrors
) — флаг, определяющий, можно ли запускать сервер при ошибках считывания данных для той или иной базы из дискового хранилища;autorepair
(CLI:--autorepair
) — флаг, определяющий, разрешается ли задействование автоматического восстановления дискового хранилища после неожиданных остановок сервера;
net
- сетевые настройки. Здесь настраиваются параметры:
-
httpaddr
(CLI:-p
,--httpaddr
) — адрес и порт для доступа к серверу Reindexer по протоколу HTTP. По умолчанию используется порт9088
; -
rpcaddr
(CLI:-r
,--rpcaddr
) — адрес и порт для доступа к серверу Reindexer по протоколу RPC. По умолчанию используется порт6534
; -
grpcaddr
(CLI:-g
,--grpcaddr
) — адрес и порт для доступа к серверу Reindexer по протоколу gRPC, обычный для данного случая номер порта —16534
; -
grpc
(CLI:--grpc
) — флаг, определяющий, следует ли включить поддержку gRPC. При необходимости использования gRPC этот флаг должен быть выставлен явно; -
rpc_threading
(CLI:-X
,--rpc-threading
) — режим обработки входящих соединений со стороны клиентов при использовании RPC. Возможные значения:shared
(используется по умолчанию) — разделяемый режим, в котором сервер Reindexer создает фиксированное количество потоков для обработки клиентских подключений — по одному потоку на каждое физическое ядро процессора. Все подключения будут распределены между этими потоками. Запросы, от клиентов в рамках различных подключений могут быть принудительно выполнены последовательно;dedicated
— выделенный режим. Сервер создает по отдельному потоку для обслуживания каждого соединения. Из-за существенных накладных расходов на создание потоков этот подход может оказаться неэффективным при частых повторных подключениях, инициируемых одним и тем же клиентом, либо при значительном количестве одновременно подключающихся клиентов. Вместе с тем выделенный режим позволяет достичь наибольшей степени параллелизма при выполнении запросов;
-
http_threading
(CLI:--http-threading
) — режим обработки входящих соединений со стороны клиентов при использовании HTTP. Возможные значения:shared
(используется по умолчанию) — разделяемый режим, в котором сервер Reindexer создает фиксированное количество потоков для обработки клиентских подключений — по одному потоку на каждое физическое ядро процессора. Все подключения будут распределены между этими потоками. Запросы, от клиентов в рамках различных подключений могут быть принудительно выполнены последовательно;dedicated
— выделенный режим. Сервер создает по отдельному потоку для обслуживания каждого соединения. Из-за существенных накладных расходов на создание потоков этот подход может оказаться неэффективным при частых повторных подключениях, инициируемых одним и тем же клиентом, либо при значительном количестве одновременно подключающихся клиентов. Вместе с тем выделенный режим позволяет достичь наибольшей степени параллелизма при выполнении запросов;
Настройки организации потоков для обработки клиентских подключений применительно к RPC и HTTP независимы и задаются индивидуально для каждого протокола;
max_http_req
(CLI:--max-http-req
) — максимально допустимый размер HTTP-запроса в байтах. По умолчанию действует ограничение в 2 мегабайта. Значение0
соответствует неограниченной длине запроса. Вместе с тем потоковая передача данных (streaming) не поддерживается;webroot
(CLI:-w
,--webroot
) — путь к каталогу со статическими файлами, которые должны отдаваться в ответ на запросы ресурсов с соответствующими URL по протоколу HTTP. Назначается корневым каталогом дерева документов сервера;updatessize
(CLI:--updatessize
) — максимальный размер кешируемых обновлений данных в байтах. Значение по умолчанию — 1 гигабайт;security
(--security
) — флаг, определяющий, нужно ли задействовать механизмы авторизации/аутентификации клиентов при их обращениях через HTTP или RPC.tx_idle_timeout
(--tx-idle-timeout
) — тайм-аут отсутствия активности для созданных через HTTP транзакций (таких, как добавление данных в существующую транзакцию, ее коммит или откат);http_read_timeout
(--http-read-timeout
) — опциональный тайм-аут (в секундах) длительности операций чтения данных через HTTP (таких, как select, get meta и других). По умолчанию равен 0 - бесконечное ожидание;http_write_timeout
(--http-write-timeout
) — опциональный тайм-аут (в секундах) длительности операций записи данных через HTTP (таких, как update, delete, put meta, операции с индексами и транзакциями new|modify|commit|rollback и другими). Не может быть равным 0. По умолчанию равен 60 секундам.
logger
- настройки логирования. Здесь настраиваются параметры:
- пути для файлов логов:
corelog
(CLI:--corelog
) — логи ядра, то есть главной подсистемы Reindexer, за счет которой реализуется управление данными;serverlog
(CLI:--serverlog
) — логи сервера — подсистемы Reindexer, которая отвечает за взаимодействие с клиентами;httplog
(CLI:--httplog
) — логи взаимодействия по HTTP;rpclog
(CLI:--rpclog
) — логи взаимодействия по RPC;
Если для любого из этих параметров (
corelog
,serverlog
,httplog
илиrpclog
) установить значениеnone
, соответствующий вид логирования будет отключен. Например с помощью аргумента командной строки--corelog=none
отключаются логи ядра.
loglevel
(CLI:-l
,--loglevel
) — уровень логирования. Возможные варианты в порядке возрастания количества логируемых событий:none
,error
,warning
,info
,trace
;
system
- системные настройки. Здесь настраиваются параметры:
user
(CLI:-u
,--user
) — имя локального пользователя в операционной системе, от имени которого должен исполняться -роцесс сервера Reindexer;allocator_cache_limit
— рекомендуемый максимальный размер незанятой части кэша аллокатора в байтах;allocator_cache_part
— рекомендуемый максимальный размер незанятой части кэша аллокатора в долях от всей занимаемой reindexer-ом памяти;
Если для любого из параметров (
allocator_cache_limit
,allocator_cache_part
) установить значение-1
(-1.0
), соответствующий способ контроля размера свободной части кеша будет отключен. Значение по умолчанию-1
(-1
). Данные параметры значимы только при использовании менеджера памяти tcmalloc (входит в комплект google-perftools).
debug
- флаги, определяющие, должна ли подготавливаться отладочная информация. Здесь настраиваются параметры:
pprof
(CLI:-f
,--pprof
) — включение http-обработчиков для pprof;allocs
(CLI:-a
,--allocs
) — статистика выделения оперативной памяти;
metrics
— настройки сбора метрик. Здесь настраиваются параметры:
prometheus
(CLI:--prometheus
) — флаг, определяющий, должны ли подготавливаться метрики для системы мониторинга Prometheus;collect_period
(CLI:--prometheus-period
) — периодичность сбора метрик для Prometheus в миллисекундах;clientsstats
(CLI:--clientsstats
) — флаг, определяющий, нужно ли собирать статистику о соединениях с клиентами.
Конфигурирование сервера Reindexer через командную строку
Пример команды для запуска и конфигурирования Reindexer через командную строку:
/usr/bin/reindexer_server -c /etc/reindexer.conf -d --pidfile=/run/reindexer/reindexer_server.pid
Такая команда применяется для запуска Reindexer с помощью скрипта автозапуска из предсобранного пакета. Здесь используются аргументы:
- ключ
-c
(--config
) задает путь к конфигурационному файлу, который надлежит использовать серверу; - параметр
-d
(--daemonize
) предписывает серверу запускаться в режиме демона; - аргумент
--pidfile
определяет путь к файлу процесса сервера.
Для получения краткой справки об аргументах командной строки запустите сервер с параметром
-h
(--help
).
Еще один пример запуска сервера Reindexer с аргументами командной строки для конфигурирования:
reindexer_server --db /tmp/rx --rpc-threading dedicated --http-threading shared
Здесь используются аргументы:
--db
- путь к дисковому хранилищу;--rpc-threading
- режим обработки входящих соединений со стороны клиентов при использовании RPC (в данном случае используется выделенный режимdedicated
);--http-threading
- режим обработки входящих соединений со стороны клиентов при использовании HTTP (в данном случае используется разделяемый режимshared
).
Настройка индивидуальных уровней доступа для пользователей
К каждой отдельной базе данных можно назначать индивидуальные уровни доступа каждого клиента, определяемого именем пользователя. Для этого нужно:
- в каталогах баз данных (обычно пути к ним соответствуют шаблону
/var/lib/reindexer/<database_name>/
) разместить YAML-файлы с именемusers.yml
; - установить значение
true
флагуsecurity
в разделеnet
файла настроекreindexer.conf
или использовать аргумент командной строки--security
при запуске сервера.
Если активирован флаг
security
, и при этом Reindexer не найдет файла users.yml в том или ином каталоге базы данных, он автоматически создаст там такой файл с реквизитами доступа по умолчанию: логинreindexer
, парольreindexer
.
Файл users.yml
должен иметь вид:
user_data_read:
hash: $1$salt1$sxceK5uCFboYZNAuscl7U.
roles:
*: data_read
user_data_write:
hash: $1$salt2$mVTUg8rz3JZbWZdu8BmgB.
roles:
*: data_write
user_db_admin:
hash: $1$salt3$vX3bUgz2B6qUtO8/Pp8..1
roles:
*: db_admin
user_owner:
hash: $1$salt4$FP6vfMCasfDJIl7o3YzvC.
roles:
*: owner
Значения параметров в файле users.yml
:
-
user_data_read
,user_data_write
,user_db_admin
,user_owner
— имена пользователей; -
hash
— для каждого пользователя:- если начинается с символа
$
— хеш пароля с возможным добавлением к нему некоторой произвольной последовательности символов — соли (salt) — в формате BSD MD5 Crypt. Может быть сгенерирован с помощью утилитыopenssl
с применением команды вида:openssl passwd -1 -salt <salt> <password>
, где<salt>
— соль, а<password>
— пароль в виде строк; - в противном случае — пароль в открытом виде (не рекомендуется из соображений безопасности);
- если начинается с символа
-
roles
— описание ролей пользователей по отношению к базам данных:*
— символ, обозначающий все базы данных. Вместо него может использоваться имя конкретной базы данных или несколько имен, разделенные запятыми;- возможные роли:
data_read
— пользователь с этой ролью имеет право чтения информации из базы данных;data_write
— пользователь с такой ролью имеет право записи в базу данных;db_admin
— пользователь с данной ролью имеет право управлять базой данных, что подразумевает наличие прав записи, создания/удаления неймспейсов и модификации индексов;owner
— пользователь имеет все привилегии, связанные с доступом к базе данных, включая создание и удаление базы данных с заданным именем.
Конфигурирование сервера Reindexer при использовании официального Docker-образа
При использовании официального Docker-образа Reindexer сервер конфигурируется путем передачи в контейнер параметров окружения:
RX_DATABASE
- путь к дисковому хранилищу. По умолчанию используется значение/db
;RX_CORELOG
- путь к файлу логов ядра. Значение по умолчаниюstdout
. Для отключения логирования нужно установить значениеnone
;RX_HTTPLOG
- путь к файлу логов взаимодействия по протоколу HTTP. Значение по умолчаниюstdout
. Для отключения логирования нужно установить значениеnone
;RX_SERVERLOG
- путь к файлу логов сервера — подсистемы Reindexer, отвечающей за взаимодействие с клиентами. Значение по умолчаниюstdout
. Для отключения логирования нужно установить значениеnone
;RX_RPCLOG
- путь к файлу логов взаимодействия по RPC. Значение по умолчаниюstdout
. Для отключения логирования нужно установить значениеnone
;RX_LOGLEVEL
- уровень логирования. Возможные варианты в порядке возрастания количества логируемых событий:none
,warning
,error
,info
,trace
. Значение по умолчаниюinfo
;RX_PPROF
- флаг, определяющий, нужно ли включать http-обработчики для pprof. По умолчанию они отключены;RX_SECURITY
- флаг, определяющий, нужно ли включать механизмы авторизации/аутентификации клиентов при их обращениях через HTTP или RPC. По умолчанию они отключены;RX_PROMETHEUS
- флаг, определяющий, должны ли подготавливаться метрики для системы мониторинга Prometheus. По умолчанию их подготовка отключена.