为了使用Redis实现高可用性,我们可以使用Spring Data Redis对Redis Sentinel的支持。使用Sentinel,我们可以创建一个自动抵御某些故障的Redis部署。
Redis Sentinel还提供其他附属任务,如监控,通知,并充当客户端的配置提供程序。
在较高的层面上,Sentinel的能力是:
如何运行Sentinel
自Redis 2.8以来,Robis已经发布了稳定版本的Sentinel。
启动Sentinel非常简单。我们在Mac上使用自制软件安装了Redis。此命令允许我们使用该安装运行Sentinel:
1redis-sentinel /path/to/sentinel.conf
如果我们使用redis-sentinel可执行文件(或者如果使用该名称的符号链接到redis-server可执行文件),我们也可以使用上述命令运行Sentinel。
或者,我们可以使用redis-server 可执行文件并在Sentinel模式下启动它,如下所示:
redis-server /path/to/sentinel.conf --sentinel
部署Sentinel之前需要了解的关键概念
在部署到Sentinel之前我们应该审查的一些概念包括:
Spring Data中的配置
当我们使用基于Sentinels的配置时,我们不会向Spring Data Redis提供Redis主机/端口信息。相反,我们提供主服务器的属性和Sentinel URL列表。每个Sentinel进程都有自己的配置文件,列出Redis主服务器,例如:
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
一旦我们配置了master,slave和Sentinels,我们需要在应用程序中更改spring数据redis配置以使用sentinels。
可以使用Jedis和Lettuce完成Java配置:
<font><i>/** * Jedis */</i></font><font> @Bean <b>public</b> RedisConnectionFactory jedisConnectionFactory() { RedisSentinelConfiguration sentinelConfig = <b>new</b> RedisSentinelConfiguration() .master(</font><font>"themaster"</font><font>) .sentinel(</font><font>"127.0.0.1"</font><font>, 26579) .sentinel(</font><font>"127.0.0.1"</font><font>, 26580); <b>return</b> <b>new</b> JedisConnectionFactory(sentinelConfig); } </font><font><i>/** * Lettuce */</i></font><font> @Bean <b>public</b> RedisConnectionFactory lettuceConnectionFactory() { RedisSentinelConfiguration sentinelConfig = <b>new</b> RedisSentinelConfiguration() .master(</font><font>"themaster"</font><font>) .sentinel(</font><font>"127.0.0.1"</font><font>, 26579) .sentinel(</font><font>"127.0.0.1"</font><font>, 26580); <b>return</b> <b>new</b> LettuceConnectionFactory(sentinelConfig); } </font>
application.properties配置:
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.
结论
今天我们回顾了使用Sentinel如何通过Redis实现高可用性以及Spring Data Redis如何支持这一点在我们的Spring应用程序中。有关Sentinel的更多信息, Redis网站 是一个很好的来源。