谈到Redis服务器的高可用,如何保证备份的机器是原始服务器的完整备份呢?这时候就须要哨兵和复制。node
Redis正是利用这两个功能来保证Redis的高可用。算法
哨兵是Redis集群架构中很是重要的一个组件,哨兵的出现主要是解决了主从复制出现故障时须要人为干预的问题。数据库
**(1)集群监控:**负责监控Redis master和slave进程是否正常工做服务器
**(2)消息通知:**若是某个Redis实例有故障,那么哨兵负责发送消息做为报警通知给管理员架构
**(3)故障转移:**若是master node挂掉了,会自动转移到slave node上分布式
**(4)配置中心:**若是故障转移发生了,通知client客户端新的master地址blog
原理:当主节点出现故障时,由Redis Sentinel自动完成故障发现和转移,并通知应用方,实现高可用性。进程
哨兵机制创建了多个哨兵节点(进程),共同监控数据节点的运行情况。 同时哨兵节点之间也互相通讯,交换对主从节点的监控情况。 每隔1秒每一个哨兵会向整个集群:Master主服务器+Slave从服务器+其余Sentinel(哨兵)进程,发送一次ping命令作一次心跳检测。 这个就是哨兵用来判断节点是否正常的重要依据,涉及两个新的概念:主观下线和客观下线。内存
**1. 主观下线:**一个哨兵节点断定主节点down掉是主观下线。部署
**2.客观下线:**只有半数哨兵节点都主观断定主节点down掉,此时多个哨兵节点交换主观断定结果,才会断定主节点客观下线。
**3.原理:**基本上哪一个哨兵节点最早判断出这个主节点客观下线,就会在各个哨兵节点中发起投票机制Raft算法(选举算法),最终被投为领导者的哨兵节点完成主从自动化切换的过程。
Redis为了解决单点数据库问题,会把数据复制多个副本部署到其余节点上,经过复制,实现Redis的高可用性,实现对数据的冗余备份,保证数据和服务的高度可靠性。
①从数据库向主数据库发送sync(数据同步)命令。
②主数据库接收同步命令后,会保存快照,建立一个RDB文件。
③当主数据库执行完保持快照后,会向从数据库发送RDB文件,而从数据库会接收并载入该文件。
④主数据库将缓冲区的全部写命令发给从服务器执行。
⑤以上处理完以后,以后主数据库每执行一个写命令,都会将被执行的写命令发送给从数据库。
注意:在Redis2.8以后,主从断开重连后会根据断开以前最新的命令偏移量进行增量复制。
**1.主从模式:**读写分离,备份,一个Master能够有多个Slaves。
**2.哨兵sentinel:**监控,自动转移,哨兵发现主服务器挂了后,就会从slave中从新选举一个主服务器。
**3.集群:**为了解决单机Redis容量有限的问题,将数据按必定的规则分配到多台机器,内存/QPS不受限于单机,可受益于分布式集群高扩展性。