Redis的sentinel使用及spring集成

1. senital.conf文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

port 26379

#sentinel监控的redis的名字、IP和端口,最后一个数字是sentinel做决策的时候需要投赞同票的最少的sentinel的数量。
sentinel monitor mymaster 127.0.0.1 6379 1

#如果多久没联系上redis-servevr,认为这个redis-server进入到失效(SDOWN)状态。
sentinel down-after-milliseconds mymaster 10000

#可选的安全连接密码
#sentinel auth-pass mymaster xxx

#failover(提升一个slave成为master)过期时间,如果超过这个时间没触发成功failover,sentinel会认为failover失败。
sentinel failover-timeout mymaster 30000

#选项指定了在执行故障转移时, 最多可以有多少个从服务器同时对新的主服务器进行同步, 这个数字越小, 完成故障转移所需的时间就越长。
sentinel config-epoch mymaster 2

#当failover时,可以指定一个“通知”脚本用来告知当前集群的情况。
#脚本被允许执行的最大时间为60秒,如果超时,脚本将会被终止(KILL)
#sentinel notification-script mymaster /var/redis/notify.sh

#failover之后重配置客户端
# sentinel client-reconfig-script <master-name> <script-path>
# Generated by CONFIG REWRITE

2. 步骤

spring配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
<property name="maxTotal" value="200" />
<property name="maxIdle" value="30" />
<property name="maxWaitMillis" value="30000" />
<property name="testOnBorrow" value="false" /><!-- 向调用者输出“链接”资源时,是否检测是有有效,如果无效则从连接池中移除,并尝试获取继续获取。设为true,一个挂都不能用 -->
<property name="testOnReturn" value="true" /><!-- 向连接池“归还”链接时,是否检测“链接”对象的有效性。 -->
</bean>

<bean id="jedisPool" class="redis.clients.jedis.JedisSentinelPool">
<constructor-arg index="0" value="mymaster" />
<constructor-arg index="1">
<set>
<value>127.0.0.1:26379</value>
<value>127.0.0.1:36379</value><!--配置了两个哨兵 -->
</set>
</constructor-arg>
<constructor-arg index="2" ref="jedisPoolConfig" />
</bean>

3. 步骤

启动sentinel:

1
redis-server ./sentinel.conf --sentinel

也可以单独指定端口,这里启动两个哨兵

1
2
redis-server ./sentinel.conf --sentinel --port 26379
redis-server ./sentinel.conf --sentinel --port 36379

启动redis主从,初始启动6379的redis实例为主,7379为从:

1
2
redis-server --port 6379
redis-server --port 7379

通过redis-cli将7379配置为6379的从:

1
2
redis-cli -p 7379
> SLAVEOF 127.0.0.1 6379

在哨兵26379中查看当前主服务器相关信息:

1
2
redis-cli -p 26379
127.0.0.1:26379> sentinel masters

4. 测试

随意杀掉两个哨兵和两个redis主从实例的一个查看是否工作正常。