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

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

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

Сборка и установка пакета 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

 

В данной инструкции опишем настройку для упрощенного варианта

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

Для настройки необходимо отредактировать файл /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" />​