1、redis的主从复制
(1)项目中只使用一台redis存在的问题:
结构上:单个redis服务器会出现单点故障,并且一台服务器需要处理所有的请求负载,压力较大
容量上:单个redis的容量有限,就算一台redis的服务器的容量为256G,也不能将所有的内容用作redis的存储内存。一般来说,单个reedis的最大使用内存不超过20G
不满足高可用(高可用:系统经过专门的设计后,减少了停工的时间,而保持服务器的高度可用性。要求是“六个九”,即:99.9999%,也就是说在一年中最多中断的时间不能超过31s)
(2)主从复制的概念
通过水平扩展(增加服务器的数量,线性扩展系统性能)的方式,来解决单台redis服务器存在的问题
(3)主从复制
- 读写分离:不仅可以提高服务器的负载能力,还可以根据读请求的1规模自由增加或减少从库的数量
- 数据被复制为了多份:就算有一台服务器出现了故障,也可以从其他的服务器快速恢复
- 一台主库可以拥有多个从库,但是一个从库只能隶属于一个主库
(4)实现方式
修改配置文件,添加端口号和主服务器的IP,然后登录从服务器,从服务器只能做查询操作。
2、哨兵模式
(1)概念
虽然主从复制的方案解决了服务器的压力和容量的问题,但是还是不满足高可用,因为,当master服务器出现故障的时候,系统就不能再正常运行了
哨兵模式是高可用的解决方案,当redis在做master slave的方案(主从复制)的时候,master宕机的话就会被哨兵(负责监控redis的运行情况)监视到,然后从slave里面选出一个master,系统继续恢复运行。
(2)特点
监控redis是否按照预期在良好地运行
如果发现某一个redis结点出现故障,能够通知另一个进程
能够进行切换:当一个master结点不可用的时候,能够从slave里面选出一个作为新的master,其他的slaver结点会将它的master地址改为新的master的地址
3、集群
(1)概念
集群模式是实际使用最多的模式,redis cluster是社区版推出的redis分布式集群解决方案,主要解决redis分布式方面的需求,比如:当遇到单机内存、并发流量等瓶颈的时候,Redis Cluster能够起到很好的负载均衡的作用
redis集群是为了解决高可用和高并发的问题
至少需要三个master和三个slave才能建立集群(去中心化),redis cluster采用无中心结构,每一个结点保存数据和整个集群状态,每一个结点和其他的结点连接
(2)特点
所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽
节点的fail是通过集群中超过半数的节点检测失效时才生效
客户端与redis节点直连,不需要中间proxy层 ,客户端不需要连接集群所有节点连接集群中任何一个可用节点即可
redis-cluster把所有的物理结点映射到[0-16383]slot上(不一定是平均分配) ,cluster负责维护
Redis集群预分好16384个哈希槽 ,当需要在Redis集群中放置一个 key-value时,redis 先对key使用crc16 算法算出一个结果,然后把结果对16384求余数,这样每个key都会对应一个编号在 0-16383之间的哈希槽, redis会根据节点数量大致均等的将哈希槽映射到不同的结点
(3)redis cluster容错
容错性是指软件检测应用程序锁运行的软件或硬件中发生错误并从错误中恢复的能力,通常可以从系统的可靠性、可用性、可测性等几个方面来衡量
投票过程是集群中所有的master参与,如果半数以上的master结点与当前master结点通信超时,则认为当前的master节点不可用
如果集群的任意master不可用,且当前的master没有slave(如果改master有slave的话,slave可以充当master),集群进入fail状态,也可以理解为集群的slot映射不完整的时候进入fail状态,如果集群中超过半数以上的master不可用,那么集群就进入了fail状态