Настроить Redis Cluster

Продукты
Все продукты

Работа с Redis Cluster доступна в Creatio версии 7.18.0 и выше.

Отказоустойчивость хранилищ Redis, которые работают с Creatio, обеспечивается при помощи механизма Redis Cluster. Подробнее читайте в официальной документации вендора.

Отказоустойчивость Redis Cluster 

Механизм Redis Cluster работает, даже если большая часть экземпляров Redis неработоспособны. Это достигается благодаря следующим свойствам:

  • Репликация данных. Для работы Redis Cluster используется асинхронная репликация — над значениями не выполняются операции слияния. Из-за асинхронной репликации система Redis Cluster не гарантирует, что все данные будут сохранены во время отказа.
  • Мониторинг. Для выполнения своих задач все узлы кластера подключены с помощью шины TCP: каждый экземпляр подключен ко всем остальным узлам кластера с помощью шины кластера. Узлы используют gossip-протокол для распространения информации об изменении в кластере (обнаружении новых экземпляров, проверки связи с существующими экземплярами, отправки других сообщений кластера). Шина кластера также используется для отправки сообщений Pub/Sub по кластеру и организации ручной отработки отказа по запросу пользователей. Отказоустойчивость настроенной конфигурации должна регулярно проверяться и подтверждаться тестовыми отказами.
  • Автоматическое восстановление работоспособности (failover). Redis Cluster может функционировать, когда часть Master-экземпляров не работает как ожидается при условии, что для каждого из недоступных Master-экземпляров есть по крайней мере один Slave-экземпляр. Благодаря миграции реплик Master-экземпляры, которые больше не реплицируются ни одним Slave-экземпляром, получат новый Slave-экземпляр от Master-экземпляра, который обслуживается несколькими Slave-экземплярами. При этом приложения Creatio, которые используют Redis, переконфигурируют соединение согласно состояния Redis Cluster. Для обеспечения отказоустойчивости необходимо не менее шести экземпляров Redis, запущенных на разных физических или виртуальных компьютерах.
  • Масштабирование. Механизм Redis Cluster позволяет добавлять и удалять узлы во время работы кластера. Redis Cluster можно масштабировать до 1000 экземпляров благодаря автоматическому шардированию данных.

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

Redis Cluster разворачивается на операционных системах Linux с Redis Server версии 4.0 и выше.

Redis является однопоточным приложением и нагружает только одно ядро процессора, поэтому для работы одного экземпляра Redis необходим узел (физический или виртуальный компьютер), как минимум, с двухъядерным процессором. Для обеспечения максимальной отказоустойчивости рекомендуется использовать количество физических машин, равное количеству экземпляров Redis, чтобы каждая связка Master-Slave была распределена на разные физические сервера. Для расчета требований к серверам воспользуйтесь калькулятором системных требований.

Установка и настройка Redis Cluster

Минимальная отказоустойчивая конфигурация Redis Cluster 

Рекомендуется использовать конфигурацию минимум с шестью экземплярами Redis. Подробнее читайте в официальной документации вендора. Эта конфигурация основана на шести узлах (физических или виртуальных компьютерах), каждый из которых содержит запущенные экземпляры Redis (Рис. 1).

Рис. 1 — Конфигурация Redis Cluster из шести узлов
scr_redis_cluster_configuration_ru.png

В штатном режиме Slave-экземпляры работают только на чтение. Данные на них асинхронно реплицируются из Master-экземпляров. Master-экземпляры работают и на чтение, и на запись. В случае если на узел попадает команда с ключом, который находится в другом узле, то возвращается информация о том, на каком узле необходимо выполнить операцию.

Если один из Master-экземпляров Redis становится недоступным, то начинается процесс восстановления работоспособности (failover). В рамках этого процесса один из Slave-экземпляров Redis становится новым Master-экземпляром, с которым продолжает работать клиентское приложение.

Важно. В любой конфигурации с асинхронной репликацией данных существует риск потери записей. Это возможно, поскольку данные могут не попасть на Slave-экземпляр Redis, который стал новым Master-экземпляром. Автоматическая переконфигурация, в рамках которой назначается новый Master-экземпляр, может занять до 15 секунд.

Установка Redis Cluster 

Redis Cluster поставляется вместе с дистрибутивом Redis. Для установки используйте самую новую на дату релиза Creatio версию Redis. Для этого воспользуйтесь инструкцией, которая приведена в официальной документации вендора.

Для мониторинга состояния кластера при подключении к одному из узлов рекомендуется выполнять следующие проверки:

  • Посмотреть конфигурацию кластера с помощью команды cluster nodes.
  • Проверить общую работоспособность кластера при помощи redis-cli: redis-cli --cluster check SOME_NODE_IP:SOME_NODE_PORT, где SOME_NODE_IP:SOME_NODE_PORT — это IP-адрес одного из узлов кластера.

Настройка Creatio для работы с Redis Cluster 

  1. В параметр connectionString конфигурационного файла ConnectionStrings.config добавьте параметр clusterHosts:

    <add name="redis" connectionString="clusterHosts=[SOME_NODE_1_IP:SOME_NODE_1_PORT],...,[SOME_NODE_N_IP:SOME_NODE_N_PORT]" />

    где clusterHosts — это IP-адреса узлов кластера.

  2. Убедитесь, что в вашем приложении включена функциональность Feature-UseRetryRedisOperation. Она запускает внутренний механизм Creatio для повтора операций с Redis, которые завершились с ошибкой. Эта проверка выполняется:

    1. Для приложений .NET Framework (Windows) в файле Web.config, который находится в корневой папке приложения.
    2. Для приложений .NET Core (Linux) в файле Terrasoft.WebHost.dll.config.

      <add key="Feature-UseRetryRedisOperation" value="true" /> 
      
  3. Убедитесь, что в секции redis файлов Web.config (.NET Framework) и Terrasoft.WebHost.dll.config (.NET Core) настройки имеют следующие значения:

    <redis connectionStringName="redis" enablePerformanceMonitor="false" executionTimeLoggingThresholdSec="5" featureUseCustomRedisTimeouts="false" clientRetryTimeoutMs="4000" clientReceiveTimeoutMs="3000" clientSendTimeoutMs="3000" clientConnectTimeoutMs="5000" clientSyncTimeoutMs="5000" clientAsyncTimeoutMs="5000" deactivatedClientsExpirySec="0" operationRetryIntervalMs="5000" operationRetryCount="25" clientsManager="Terrasoft.Redis.StackExchangeAdapters.RedisClientsManagerAdapter, Terrasoft.Redis.StackExchangeAdapters" abortOnConnectFail="false" timeToCheckConfigurationSeconds="60" /> 

    где

    • enablePerformanceMonitor — включает мониторинг времени выполнения операций с Redis. Рекомендуется включать для отладки и поиска проблем. По умолчанию выключен, поскольку влияет на производительность приложения.
    • executionTimeLoggingThresholdSec — операции с Redis, которые выполнялись дольше указанного времени, будут записаны в лог. По умолчанию 5 секунд.
    • clientConnectTimeoutMs — максимальное время установки сетевого соединения с сервером Redis. По умолчанию 5000 миллисекунд.
    • clientSyncTimeoutMs — максимальное время выполнения синхронных операций Redis. По умолчанию 5000 миллисекунд.
    • clientAsyncTimeoutMs — максимальное время выполнения асинхронных операций Redis. По умолчанию 5000 миллисекунд.
    • operationRetryIntervalMs — если внутренний цикл повтора сбойных операций не привел к успешному выполнению операции, то такая операция откладывается на указанное время. После этого операция выполняется с новым клиентом, который уже может иметь установленное соединение с новым Master-экземпляром. По умолчанию 5000 миллисекунд.
    • operationRetryCount — количество повторных попыток выполнения операции с новым Redis-клиентом. По умолчанию 25.