redis 架构
*******************************************
单机:单机环境常用于测试,实际应使用主从哨兵,或者集群
*******************************************
主从哨兵
master:可读可写,负责写入数据,并将数据发送给slave
slave:只可读,同步master的数据
sentinel:监控redis节点与其余sentinel节点,当master节点发生故障时,负责故障转移,将slave节点切换为mster节点
主从同步过程:
slave节点发送同步请求,
master节点接受同步请求,将数据生成快照文件,并将写入命令存入缓冲区,
发送快照给slave,slave接收快照数据,并开始写入
slave写入完成后,发送缓冲区命令给slave,slave接受缓冲命令并写入
slave写入完成后,之后master每写入命令,都将对应命令发送给slave,主从同步完成
故障转移:
当一个sentinel监控到master故障,则master节点主观下线;
当有足够数量的sentinel认为master节点不可用时,则master客观下线,触发故障转移;
sentinel选出一个主sentinel负责故障转移;
主sentinel优先选取复制偏移量最大的slave节点,如果有多个slave节点,则在选取run id最小的节点作为主节点,
将其余slave的主节点切换为新的主节点;
若原先的主节点恢复重启,则降级为slave节点,主节点为新的master节点
**************************************
redis cluster
实现原理:redis cluster共有16384(0-16383)个hash槽,每个主节点维护一部分hash槽,主节点下可以有一到多个从节点,当对应的主节点故障后,可以切换为主节点,实现整个集群的高可用,同时redis cluster支持动态增减主节点,当增加主节点时,需要将其它主借点的hash槽移一部分交给新增加的主节点,删除主节点时,需要将主节点的hash槽移出给其余主节点后,才能够删除
主节点故障转移:
当集群中的一个节点认为另一个节点不可用时,则为主观下线
当有足够数量的节点认为该节点不可用时,则为客观下线,若该节点为主节点,则触发主节点故障转移
持有hash槽的主节点负责投票给从节点,从节点获得超过半票后,从节点升级为主节点,其余从节点切换主节点为新的主节点