Redis
Categories:
Проблема стандартного режима (In-Memory)
По умолчанию Authelia хранит сессии в оперативной памяти (in-memory). Это приводит к:
- Потере сессий при перезагрузке Authelia.
- Невозможности масштабирования (если запущено несколько экземпляров Authelia, сессии не синхронизируются).
- Риску отказа — при падении сервера все пользователи разлогиниваются.
Как Redis решает эти проблемы?
Проблема | Решение через Redis |
---|---|
Потеря сессий при перезагрузке | Сессии хранятся на внешнем сервере и сохраняются после рестарта |
Несколько экземпляров Authelia | Все ноды читают/пишут сессии в единое хранилище |
Высокая нагрузка | Redis оптимизирован для частых операций чтения/записи |
Конфигурация
session:
redis:
host: '127.0.0.1'
port: 6379
timeout: '5s'
max_retries: 0
username: 'authelia'
password: 'authelia'
database_index: 0
maximum_active_connections: 8
minimum_idle_connections: 0
tls:
server_name: 'myredis.rabrain.ru'
skip_verify: false
minimum_version: 'TLS1.2'
maximum_version: 'TLS1.3'
certificate_chain: |
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
private_key: |
-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----
high_availability:
sentinel_name: 'mysentinel'
# If `sentinel_username` is supplied, Authelia will connect using ACL-based
# authentication. Otherwise, it will use traditional `requirepass` auth.
sentinel_username: 'sentinel_user'
sentinel_password: 'sentinel_specific_pass'
nodes:
- host: 'sentinel-node1'
port: 26379
- host: 'sentinel-node2'
port: 26379
route_by_latency: false
route_randomly: false
Опции
host
Хост redis или путь к сокету unix. Если используется буквенный адрес IPv6, он должен быть заключен в квадратные скобки и взят в кавычки:
host: '[fd00:1111:2222:3333::1]'
timeout
Таймаут соединения с Redis.
max_retries
Максимальное количество повторных попыток при неудачной команде. Установка этого параметра в 0 полностью отключает повторные попытки.
port
Порт, на котором прослушивается Redis.
username
Имя пользователя для аутентификации в redis. Поддерживается только в redis 6.0+, и в настоящее время redis предлагает обратную совместимость с аутентификацией только по паролю. Вероятно, вам не нужно задавать это значение, если вы не проходили через процесс настройки ACL redis.
password
Пароль для аутентификации в Redis.
Настоятельно рекомендуется, чтобы это была случайная буквенно-цифровая строка из 64 или более символов, и пароль пользователя был изменен на это значение.
database_index
Номер индекса базы данных redis, то же значение, что и в команде redis SELECT.
maximum_active_connections
Максимальное количество соединений, открытых к redis в одно и то же время.
minimum_idle_connections
Минимальное количество соединений redis, которые следует держать открытыми, пока они не превышают максимальное количество активных соединений. Это полезно, если возникают большие задержки при установлении соединений.
tls
Если определено, включает соединение через TLS-сокет и дополнительно управляет параметрами проверки TLS-соединения для сервера redis.
По умолчанию Authelia использует системный сертификат доверия для проверки TLS-соединений, а глобальная опция certificates_directory может быть использована для дополнения этого параметра.
high_availability
При определении этой сессии включается соединение с redis sentinel. Возможно, в будущем мы добавим кластер redis.
sentinel_name
Имя ведущего сервера redis sentinel. Оно задается в конфигурации redis sentinel, это не имя хоста. Для конфигурации высокой доступности оно должно быть определено в данный момент.
sentinel_username
Имя пользователя для подключения к Redis Sentinel. Если оно указано, оно будет использоваться вместе с паролем sentinel_password для аутентификации на основе ACL для Redis Sentinel. Если указан только пароль, соединение с Redis Sentinel будет аутентифицировано с помощью традиционной аутентификации requirepass.
sentinel_password
Пароль для подключения к Redis Sentinel. Если указан с именем sentinel_username, Authelia настраивает аутентификацию на Redis Sentinel с помощью аутентификации на основе ACL. В противном случае используется аутентификация по requirepass.
Настоятельно рекомендуется, чтобы это была случайная буквенно-цифровая строка из 64 или более символов, и пароль пользователя был изменен на это значение.
nodes
Список узлов redis sentinel для балансировки нагрузки. Этот список добавляется к хосту в разделе redis выше. Необходимо определить либо хост redis, либо один сентинел-узел redis. Хост redis должен быть узлом redis sentinel, а не обычным узлом. Отдельные узлы redis определяются с помощью команд redis sentinel.
- host: redis-sentinel-0
port: 26379
host
Хост этого узла redis sentinel.
port
Порт этого узла redis sentinel.
route_by_latency
Приоритет отдается узлам redis sentinel с низкой задержкой, если установлено значение true.
route_randomly
Случайным образом выбирает узлы redis sentinel, если установлено значение true.