深入浅出redis-sentinel
2016-05-29 15:14
465 查看
作为第一次想要认真的将我学习到的东西分享给各位,还有很多的问题希望在和大家的探讨中获得答案。
前提:
本内容针对于jedis2.7.2 和redis 3.0.5这两个版本的说明,其中缓存服务端中使用的连接池是JedisSentinelPool
概述:
缓存服务端:
服务器通过从sentinelPool连接池中获取到一个jedis的连接
(默认配置了timeout时间,但是建议在使用结束后将jedis.close()将对应jedis的连接放回到连接池,以便下个一个线程获取)
redis服务器:
部署redis服务的机器
redis-sentinel服务:
sentinel在redis服务器上的表现是监控redis主从机的一个服务,当监听并且客观判断主机宕机后,从从机中筛选一台机器作为新的主机
sentinel在缓存服务器上的表现是:给缓存服务器提供了当前有效的主机IP和PORT
介绍:
如果说缓存服务端是左岸,redis服务器是右岸的话,redis-sentinel无疑是中间的连接桥梁。所以这边我们将详细的介绍一下这个桥梁是如何发挥作用的。
首先从JedisSentinelPool中的配置说起,见下:
<bean id="redisSentinel" class="redis.clients.jedis.JedisSentinelPool">
<constructor-arg index ="0" value="mymaster" /><!-- 当前主机的别名 -->
<constructor-arg index ="1">
<set>
<value>IP1:port1</value><!-- 对应的sentinel监控的ip:端口 -->
<value>IP2:port2</value>
</set>
</constructor-arg>
<constructor-arg index ="2" ref="poolConfig" /><!-- 连接池的配置 -->
<constructor-arg name ="password" value="${redis.pass}" /><!-- 如果你设置的sentinel需要访问的密码的话,这边需要配置 -->
</bean>
说明:
初始化:
1、连接池初始化的时候遍历sentinel中的而配置,获取主机是名称是“mymaster”的相关信息,找到则返回对应的主机地址,并且创建对应的连接池。
2、注册每个sentinel的监听器,实现监控sentinel是否宕机,如果出现宕机,则会定时的ping这台机器。
3、监听器通过向redis服务器发布消息,检查主机地址是否发生变化。如果发生变化则会自动的更新我们pool中的相关信息。
4、如果配置的所有sentinel中的服务都挂掉的话,那么说明主机地址发生变化的话是无法同步到程序的,原因很简单。因为通过第三点我们知道监听器是进行监听的并更新对应的主机信息的,如果sentinel的服务挂掉的话。对应的监听的消息发布是没有意义的。
ps:需要注意的是,因为我们配置的sentinel是监控同一台主机,我们监控都是使用机器别名,所以我们sentinel服务中的配置文件中的监控主机的名字要配置一样的。
在redis服务器上sentinel是怎么工作的:
1、启动一个redis-sentinel服务(进入到redis/redis-3.0.5/src 路径下: ./redis-sentinel .././sentinel.conf)出现一个立方体的图标的话说明启动成功,启动不同的端口的话只要修改sentinel.conf配置文件就可以实现,并且每个sentinel服务是自动识别sentinel服务的,以便访问及主机投票使用。
2、当一台机器宕机,在sentinel中状态是sdown(主观宕机),通过轮询其他的sentinel服务器是否认为主机宕机,超过一半的机器投票同意,则这台主机的单机状态变成odown(客观宕机),之后会筛选新的从机作为主机。
3、宕机的主机再次回复的时候,sentinel会主动修改这条机器的角色送master改成slave并且依附于当前的主机上。
关于主机筛选的机制以及主从复制的相关详细流程之后我会陆续研究并整理出相应的文档供大家参考。
$(".MathJax").remove();
前提:
本内容针对于jedis2.7.2 和redis 3.0.5这两个版本的说明,其中缓存服务端中使用的连接池是JedisSentinelPool
概述:
缓存服务端:
服务器通过从sentinelPool连接池中获取到一个jedis的连接
(默认配置了timeout时间,但是建议在使用结束后将jedis.close()将对应jedis的连接放回到连接池,以便下个一个线程获取)
redis服务器:
部署redis服务的机器
redis-sentinel服务:
sentinel在redis服务器上的表现是监控redis主从机的一个服务,当监听并且客观判断主机宕机后,从从机中筛选一台机器作为新的主机
sentinel在缓存服务器上的表现是:给缓存服务器提供了当前有效的主机IP和PORT
介绍:
如果说缓存服务端是左岸,redis服务器是右岸的话,redis-sentinel无疑是中间的连接桥梁。所以这边我们将详细的介绍一下这个桥梁是如何发挥作用的。
首先从JedisSentinelPool中的配置说起,见下:
<bean id="redisSentinel" class="redis.clients.jedis.JedisSentinelPool">
<constructor-arg index ="0" value="mymaster" /><!-- 当前主机的别名 -->
<constructor-arg index ="1">
<set>
<value>IP1:port1</value><!-- 对应的sentinel监控的ip:端口 -->
<value>IP2:port2</value>
</set>
</constructor-arg>
<constructor-arg index ="2" ref="poolConfig" /><!-- 连接池的配置 -->
<constructor-arg name ="password" value="${redis.pass}" /><!-- 如果你设置的sentinel需要访问的密码的话,这边需要配置 -->
</bean>
说明:
初始化:
1、连接池初始化的时候遍历sentinel中的而配置,获取主机是名称是“mymaster”的相关信息,找到则返回对应的主机地址,并且创建对应的连接池。
2、注册每个sentinel的监听器,实现监控sentinel是否宕机,如果出现宕机,则会定时的ping这台机器。
3、监听器通过向redis服务器发布消息,检查主机地址是否发生变化。如果发生变化则会自动的更新我们pool中的相关信息。
4、如果配置的所有sentinel中的服务都挂掉的话,那么说明主机地址发生变化的话是无法同步到程序的,原因很简单。因为通过第三点我们知道监听器是进行监听的并更新对应的主机信息的,如果sentinel的服务挂掉的话。对应的监听的消息发布是没有意义的。
ps:需要注意的是,因为我们配置的sentinel是监控同一台主机,我们监控都是使用机器别名,所以我们sentinel服务中的配置文件中的监控主机的名字要配置一样的。
在redis服务器上sentinel是怎么工作的:
1、启动一个redis-sentinel服务(进入到redis/redis-3.0.5/src 路径下: ./redis-sentinel .././sentinel.conf)出现一个立方体的图标的话说明启动成功,启动不同的端口的话只要修改sentinel.conf配置文件就可以实现,并且每个sentinel服务是自动识别sentinel服务的,以便访问及主机投票使用。
2、当一台机器宕机,在sentinel中状态是sdown(主观宕机),通过轮询其他的sentinel服务器是否认为主机宕机,超过一半的机器投票同意,则这台主机的单机状态变成odown(客观宕机),之后会筛选新的从机作为主机。
3、宕机的主机再次回复的时候,sentinel会主动修改这条机器的角色送master改成slave并且依附于当前的主机上。
关于主机筛选的机制以及主从复制的相关详细流程之后我会陆续研究并整理出相应的文档供大家参考。
$(".MathJax").remove();
相关文章推荐
- redis安装问题小结
- 使用 Redis 和 Python 构建一个共享单车的应用程序
- Redis偶发连接失败案例实战记录
- Redis中实现查找某个值的范围
- win 7 安装redis服务【笔记】
- redis的hGetAll函数的性能问题(记Redis那坑人的HGETALL)
- Redis和Memcached的区别详解
- 分割超大Redis数据库例子
- Redis总结笔记(一):安装和常用命令
- Redis sort 排序命令详解
- 用Redis实现微博关注关系
- Redis实现信息已读未读状态提示
- redis中修改配置文件中的端口号 密码方法
- 在Ruby on Rails上使用Redis Store的方法
- Redis和Memcache的区别总结
- 在Node.js应用中使用Redis的方法简介
- Redis服务器的启动过程分析
- web 应用中常用的各种 cache详解
- 利用yum安装Redis的方法详解
- 从MySQL到Redis的简单数据库迁移方法