前言

Redis集群模式主要有2种:

主从集群

分布式集群。

前者主要是为了高可用或是读写分离,后者为了更好的存储数据,负载均衡。

本文主要讲解主从集群。

主从切换原理

Redis的主从原理与MySQL相似,都是设置两台机器,一主一从。也就是常说的热备与冷备。设置主从的同时,设置两个哨兵进程,用来检测主节点是否宕机。若发现主节点宕机,立马从从节点内选取出合适的节点 作为新的主节点。这点与VIP(虚拟IP技术有点相似)。说的有点抽象,可看原理图,加深印象。原理图如下所示(略):

基本部署操作

操作简略如下:

主节点:启动Redis Server进程与Redis Sentinel进程

从节点:启动Redis Server进程与Redis Sentinel进程

注:特别注意主从节点的redis.conf与sentinel.conf文件的配置,详细更改见Github地址。

测试实验

主要测试实验如下所示:

切换前

主从节点,通过INFO命令查询集群信息;

主从哨兵节点,通过Sentienl masters与Sentinel slaves查询集群信息;

主节点更新数据值,查看从节点是否有更改。

关闭主节点

从节点,通过INFO命令查询集群信息;

主从哨兵节点,通过Sentienl masters与Sentinel slaves查询集群信息;

从节点更新数据值。

开启主节点

主从节点,通过INFO命令查询集群信息;

主从哨兵节点,通过Sentienl masters与Sentinel slaves查询集群信息;

判断主节点是否更新了之前从节点 插入的数据。

实验进行

由于主从的Log太多,这边就放置一张选举 主从切换部分的截图。

redis 集群主从 redis集群主从切换原理_更新数据

主要总结:

切换前,Redis Server与Sentinel 应当都能够获取到整个集群的信息(包括主从节点),且主节点信息更新,从节点也会更新。

切换中,Sentinel哨兵会重新选举,从节点会更新为主节点。

切换后,原主节点会作为从节点(注意 并不会切换为主节点),切会获取到宕机这段时间的数据,并且作为冷备运行。

当原从节点宕机后,原主节点会再次被选举为主节点。

注: 当使用哨兵后,Jedis内将使用JedisSentinelPool,而不再使用JedisPool,因为后者不具有高可用的性能。

Reference