1. Обзор
Для обеспечения высокой доступности с Redis мы можем использовать поддержку Spring Data Redis для Redis Sentinel. С помощью Sentinel мы можем создать развертывание Redis, которое автоматически противостоит определенным сбоям.
Redis Sentinel также предоставляет другие сопутствующие задачи, такие как мониторинг, уведомления и выступает в качестве поставщика конфигурации для клиентов.
На высоком уровне возможности Sentinel:
- Автоматическое аварийное переключение . Когда мастер работает не так, как ожидалось, Sentinel запускает для нас процесс восстановления после сбоя, когда подчиненный становится мастером. Кроме того, другие ведомые устройства перенастроены на использование нового главного устройства, и приложения, использующие сервер Redis, информируются о новом используемом адресе.
- Источник конфигурации . Когда происходит аварийное переключение, Sentinels сообщит новый адрес. Это потому, что Sentinel действует как источник полномочий для клиентов. Когда клиенты выполняют обнаружение службы, они подключаются к Sentinels для запроса адреса текущего мастера Redis, ответственного за данную службу.
- Мониторинг Sentinel периодически проверяет, работают ли наши главные и подчиненные экземпляры так, как они предназначены.
- Уведомлять Sentinel может быть настроен на уведомление множества целей при возникновении ошибки с одним из экземпляров Redis. Эти цели включают другие приложения, системного администратора или API.
2. Как запустить Sentinel
Стабильная версия Sentinel поставляется с Redis начиная с Redis 2.8.
Запуск Sentinel очень прост. Когда мы рассматривали Spring Data Redis (с Spring Boot) в моей предыдущей статье, мы установили Redis, используя homebrew на Mac. Эта команда позволяет нам запустить Sentinel с этой установкой:
1
|
redis-sentinel /path/to/sentinel .conf |
Если мы используем исполняемый файл redis-sentinel (или если у нас есть символическая ссылка с этим именем на исполняемый файл redis-server ), мы также можем запустить Sentinel с помощью приведенной выше команды.
В качестве альтернативы, мы можем использовать исполняемый файл redis-server и запустить его в режиме Sentinel, например так:
1
|
redis-server /path/to/sentinel .conf --sentinel |
3. Основные понятия, которые необходимо знать перед развертыванием Sentinel
Некоторые концепции, которые мы должны рассмотреть перед развертыванием в Sentinel, включают:
- Для длительного развертывания Redis нам требуется как минимум три экземпляра Sentinel.
- Мы должны поместить три экземпляра Sentinel в компьютеры или виртуальные машины, которые, как считается, выходят из строя независимо, а не вместе. Например, это может означать разные зоны доступности.
- Redis использует асинхронную репликацию и поэтому не гарантирует, что полученные записи будут сохраняться во время сбоев, даже при использовании Sentinel. Тем не менее, мы можем развернуть Sentinel, который сокращает время записи.
- Любая установка высокой доступности должна периодически проверяться, и Sentinel ничем не отличается. Нам нужно тестировать как в средах разработки, так и в наших производственных средах. Планируя и тестируя на отказ, мы ограничиваем наши сбои.
4. Конфигурация в Spring Data
Когда мы используем конфигурацию на основе Sentinels, мы не предоставляем информацию о хосте / порте Redis для Spring Data Redis. Вместо этого мы предоставляем свойство для главного сервера и список URL-адресов Sentinel. Каждый процесс Sentinel имеет свой собственный файл конфигурации, в котором указан главный сервер Redis, например:
1
2
3
4
|
sentinel monitor themaster 127.0.0.1 6379 2 sentinel down-after-milliseconds themaster 60000 sentinel failover-timeout themaster 180000 sentinel parallel-syncs themaster 1 |
После того, как мы сконфигурировали нашего ведущего, подчиненных и Sentinels, нам нужно изменить конфигурацию повторного отображения данных пружины в нашем приложении для работы со стражами.
4.1 Конфигурация Java
Конфигурация Java может быть выполнена с использованием Jedis и Lettuce:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
/** * Jedis */ @Bean public RedisConnectionFactory jedisConnectionFactory() { RedisSentinelConfiguration sentinelConfig = new RedisSentinelConfiguration() .master( "themaster" ) .sentinel( "127.0.0.1" , 26579) .sentinel( "127.0.0.1" , 26580); return new JedisConnectionFactory(sentinelConfig); } /** * Lettuce */ @Bean public RedisConnectionFactory lettuceConnectionFactory() { RedisSentinelConfiguration sentinelConfig = new RedisSentinelConfiguration() .master( "themaster" ) .sentinel( "127.0.0.1" , 26579) .sentinel( "127.0.0.1" , 26580); return new LettuceConnectionFactory(sentinelConfig); } |
4.2 Конфигурация свойств
ProperySource , такой как application.properties , может быть использован для конфигурации. Например, если мы используем localhost:
1
2
|
spring.redis.sentinel.master= themaster # Name of our Redis server. spring.redis.sentinel.nodes= localhost:26579, localhost:26580, localhost:26581 # Comma-separated list of host:port pairs. |
5. Заключение
Сегодня мы рассмотрели, как можно добиться высокой доступности с помощью Redis с помощью Sentinel и как это поддерживает Spring Data Redis в наших приложениях Spring. Для получения дополнительной информации о Sentinel, сайт Redis является хорошим источником.
На моем сайте также есть информация, начиная с Spring Data Redis и Spring Boot и нескольких статей о Spring Framework в целом.
Опубликовано на Java Code Geeks с разрешения Майкла Гуда, партнера нашей программы JCG . См. Оригинальную статью здесь: Spring Data Redis: высокая доступность с Sentinel Мнения, высказанные участниками Java Code Geeks, являются их собственными. |