生产环境中的redis基本都是多节点部署,本文只讨论redis高可用的三种方案,不涉及实际操做。node
(图来源于网络)redis
一个Master,两个Slave,Slave只能读不能写;当Slave与Master断开后须要从新slave of链接才可创建以前的主从关系;Master挂掉后,Master关系依然存在,Master重启便可恢复。数据库
实现原理:缓存
一、Slave启动成功链接到master后会发送一个sync命令;服务器
二、Master接到命令启动后的存盘进程,同时收集全部接收到的用于修改数据集命令,在后台进程执行完毕以后,master将传送整个数据文件到slave,以完成一次彻底同步;网络
三、全量复制:而slave服务在数据库文件数据后,将其存盘并加载到内存中;架构
四、增量复制:Master继续将新的全部收集到的修改命令依次传给slave,完成同步;并发
五、可是只要是从新链接master,一次彻底同步(全量复制)将被自动执行。分布式
(图来源于网络)高并发
由一个或多个Sentinel实例组成的Sentinel系统能够监视任意多个主服务器,以及这些主服务器属下的全部从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器。
Sentinel的功能有:
实现原理:
Redis Sentinel是一个分布式架构,其中包含若干个Sentinel节点和Redis数据节点,每一个Sentinel节点会对数据节点和其他Sentinel节点进行监控,当它发现节点不可达时,会对节点作下线标识
若是被标识的是主节点,它还会和其余Sentinel节点进行“协商”,当大多数Sentinel节点都认为主节点不可达时,它们会选举出一个Sentinel节点来完成自动故障转移的工做,同时会将这个变化实时通知给Redis应用方。
(图来源于网络)
Redis 集群是一个提供在多个Redis节点间共享数据的程序集。自动将数据进行分片,每一个master上放一部分数据提供内置的高可用支持,部分master不可用时,仍是能够继续工做的支撑N个redis master node,每一个master node均可以挂载多个slave node高可用,由于每一个master都有salve节点,那么若是mater挂掉,redis cluster这套机制,就会自动将某个slave切换成master。
Redis Cluster功能特色以下:
1)全部的节点相互链接
2)集群消息通讯经过集群总线通讯,,集群总线端口大小为客户端服务端口+10000,这个10000是固定值
3)节点与节点之间经过二进制协议进行通讯
4)客户端和集群节点之间通讯和一般同样,经过文本协议进行
5)集群节点不会代理查询
6)数据按照Slot存储分布在多个Redis实例上
7)集群节点挂掉会自动故障转移
8)能够相对平滑扩/缩容节点
若是你的数据量不多,主要是承载高并发高性能的场景,好比你的缓存通常就几个G,单机足够了。
若是又多个slave节点,有自动选举的需求,建议搭建一个sentinal集群,去保证redis主从架构的高可用性,就能够了。
若是是海量数据+高并发+高可用的场景,海量数据,若是你的数据量很大,那么建议就用redis cluster,集群方案搭建复杂,遇到的问题也相对多不少。