Использование кэша Redis в ELMA

Системные требования

  1. Система ELMA версии не ниже 3.9.22, 3.10.12, 3.11.2.
  2. Минимум 3 сервера для кластера кэша Redis с ОС семейства Unix (Linux, OSX, OpenBSD, NetBSD, FreeBSD и производные).

Установка пакета Redis на примере ОС Ubuntu

В общем виде процедура установки выглядит следующим образом:

  1. Обновление информации о доступном ПО (репозиторий).

sudo apt-get update

  1. Установка redis-server.

sudo apt install redis-server

  1. Проверка доступности службы.

service redis-server status (при необходимости запустить service redis-server start).

Проверка доступности подключения к службе

  1. Запустите консоль управления redis-cli.

redis-cli

Вид командной строки изменится на 127.0.0.1:6379>.

  1. Введите ping, после чего должно быть возвращено значение PONG:

127.0.0.1:6379>ping
PONG

  1. Введите exit или нажмите на Ctrl+C для выхода из консоли управления redis-cli.

Сборка и установка пакета Redis

Внимание!
Вариант настройки, описанный ниже, рекомендуется использовать только опытным пользователям.

Скачать пакет с последней версией Redis можно с официального сайта: https://redis.io/download (необходимо использовать версию Stable).

Сборка в общем случае осуществляется с помощью команды make.

Приведем инструкцию на примере установки на Ubuntu 14/16. Требуется:

1. Установить дополнительные пакеты, необходимые для сборки пакета Redis. Для Ubuntu это build-essentials и tcl 8.5 (или новее):

  • sudo apt-get update;
  • sudo apt-get install build-essential;
  • sudo apt-get install tcl8.5.

2. Скачать пакет Redis в какую-либо папку (например, /home/<user>). Это можно сделать вручную или командой:

wget http://download.redis.io/releases/redis-stable.tar.gz (адрес лучше взять со страницы https://redis.io/download).

3. Разархивировать пакет (имя скачанного пакета может быть и другим):

tar xzf redis-stable.tar.gz

4. Перейти в папку с разархивированным пакетом (имя также может отличаться):

cd redis-stable

5. Выполнить сборку пакета, выполнив команду:

make

6. Выполнить проверку собранного сборку пакета, выполнив команду:

make test

7. Выполнить установку собранного пакета и его регистрацию для запуска, выполнив последовательно команды:

  • make install;
  • cd utils;
  • ./install_server.sh (данная команда – интерактивная, при запросе параметров можно использовать значения по умолчанию).

После выполнения этих команд бинарные файлы redis-cli и redis-server будут установлены в /usr/local/bin. Кроме того, будет зарегистрирован сервис с параметрами, указанными в команде install_server.sh.

8. Для запуска сервиса выполнить команду:

sudo service redis_6379 start (имя сервиса может отличаться в зависимости от значений, заданных в команде install_server.sh; для остановки необходимо указать в конце stop вместо start).

Конфигурирование кластера Redis

Официальная документация доступна по адресу: https://redis.io/topics/cluster-tutorial;
Официальная документация по настройке решения высокой доступности: https://redis.io/topics/sentinel;
Неофициальная (упрощенный кластер с одним мастером): https://www.digitalocean.com/community/tutorials/how-to-configure-a-redis-cluster-on-ubuntu-14-04

Упрощенный вариант настройки

Первый сервер – это Мастер, второй и последующие – Слэйв.

Для настройки необходимо отредактировать файл /etc/redis/redis.conf на каждом из серверов:

  • Сделать сервер доступным для всех ip-адресов данного сервера:

bind 0.0.0.0 (в данном случае это делает доступным сервис Redis со всех внешних адресов).

  • Отключить резервное копирование данных на диск (для обеспечения максимальной производительности). Для этого необходимо:
    • закомментировать все строчки, начинающиеся с save (например, #save 900 1);
    • установить значение appendonly no.

Для настройки Мастера дополнительно необходимо:

  • Установить параметр:

tcp-keepalive  60

  • Указать пароль для доступа к Мастеру:

requirepass your_redis_password

  • При необходимости задать ограничение на объем используемой памяти (при достижении предела, некоторые значения будут удаляться в зависимости от заданной в параметре maxmemory-policy стратегии):
    • maxmemory <bytes> (показать в байтах максимальный объем или оставить строчку закомментированной);
    • maxmemory-policy volatile-lru (или другое значение, указанное в комментариях в данном файле);
    • maxmemory-policy noeviction (если не нужно использовать ограничение).

Для настройки Слэйва дополнительно необходимо:

  • Указать пароль для доступа к Слэйву (для корректной работы ELMA следует поставить тот же пароль, что и для Мастера): 

requirepass your_redis_password

  • Указать адрес и порт Мастера:

slaveof your_redis_master_ip 6379

  • Указать пароль Мастера:

masterauth your_redis_password

После этого перезапустить все сервера (сначала Мастер, затем Слэйвы):

sudo service redis_6379 restart

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

  1. В блоке <configSections> добавить пункты:
    <section name="RedisCacheProviderSettings" type="EleWise.ELMA.Cache.Redis.RedisCacheProviderSettings, EleWise.ELMA.Cache.Redis"/>
    <section name="cacheService" type="EleWise.ELMA.Configuration.GenericProviderFeatureSection`1[[EleWise.ELMA.Cache.CacheServiceManager, EleWise.ELMA.SDK]], EleWise.ELMA.SDK" />​
  2. Внутри корневого блока <configuration> добавить блоки с настройками (содержит список имен машин с кэшем Redis, а также пароль для доступа к ним):
    <cacheService defaultProvider="Redis">
       <providers>
          <clear />
          <add name="Redis" type="EleWise.ELMA.Cache.Redis.ElmaCacheService, EleWise.ELMA.Cache.Redis "/>
       </providers>
    </cacheService>
    <RedisCacheProviderSettings connectionString="machine1:6379,machine2:6379,machine3:6379,password=your_redis_password" />​