目前为止Redis官方支持的三种集群方式
(以下内容仅为作者的个人理解,如果存在错误欢迎指出)
1:Redis主从配置(容错率较低,master节点宕机后整个服务就不可用了。)
2:Redis哨兵模式(是在主从集群的升级版本,支持master自动切换。不支持横向扩容)
3:Cluster集群模式(需要升级至Redis 3.0)
Redis主从配置
简介:
主:一个Redis服务器为Master节点。负责写入数据,和同步数据至从节点。
从:一台或者多台Redis服务器为Slave节点。不支持写入数据,可以提供同读取数据的服务(但是可能会出现主从数据不一致的情况)
(缺点:不能水平扩容,并且该模式的高可用特性都会受到Master主节点内存的限制。)
主从配置数据同步的过程简介:
当Slave节点首次启动时,会主动向Master节点发起socket连接。在连接成功后会发送SYNC命令进行数据同步(该同步是全量同步),之后主节点会每隔10秒钟(默认配置)向从节点发送PING命令(心跳)来保证连接的有效性。从节点会每隔1秒钟(默认配置)向主节点发送REPLCONF ACK命令来维护数据偏移量的offset。之后会从节点会向主节点发送PSYNC命令来同步增量数据(如果一切正常的情况下是进行增量复制。但是具体是进行全量复制还是,增量复制有很多种情况决定)。
如果需要了解主从配置的具体过程请参考该文章:https://www.cnblogs.com/wade-luffy/p/9639986.html
Redis哨兵模式
简介:
该模式是在主从配置上的升级版。
在主从配置上增加了Redis Sentinel(哨兵)
该模式是从Redis的2.6版本开始提供的,但是当时这个版本的模式是不稳定的,直到Redis的2.8版本以后,这个哨兵模式才稳定下来
(缺点:不能水平扩容,并且该模式的高可用特性都会受到Master主节点内存的限制。)
Redis Sentinel:
Redis Sentinel是Redis高可用的实现方案。Sentinel是一个管理多个Redis实例的工具,它可以实现对Redis的监控、通知、自动故障转移。
监控:
sentinel会每隔一秒钟向redis服务器发送PING名字进行心跳检测,当超过down-after-milliseconds时间内PING连接无效,该节点会被该sentinel标记为主管下线。当对某一个redis实例的主管下线数达到sentinel monitor所配置的数量时,该redis实例会被标记为客观下线。然后sentinel集群会选举出一个领头的sentinel对该客观下线的Redis实例进行故障转移。
故障转移:
当发生故障转移时。sentinel会从该主节点的从节点当中选取出一个从节点,然后将其指定为新的主节点。
选取从节点的机制:
- 网络连接正常
- 5秒钟内回复过info命令
- 10*down-after-milliseconds内与主连接过的
- 从服务器优先级
- 复制偏移量
- 运行id较小的
将该从节点进行主从切换(在切换过程中,该集群是不可用的)然后通知其他的从节点进行主节点的切换。
通知:
Master和Slave服务器切换后,Master的redis.conf、Slave的redis.conf和sentinel.conf的配置文件的内容都会发生相应的改变,即,Master主服务器的redis.conf配置文件中会多一行slaveof的配置,sentinel.conf的监控目标会随之调换。
参考:https://blog.csdn.net/pw191410147/article/details/82968168
来源:CSDN
作者:我想我想想
链接:https://blog.csdn.net/qq_29889637/article/details/104302264