4. Redis高可用方案
4.1 主从
4.1.1 概述
主从复制是指master节点把数据同步给其他的slave节点。
4.1.2 作用
-
数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。
-
故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。
-
负载均衡:在主从复制的基础上,配合读写分离,可以大大提高Redis服务器的并发量。
4.1.3 缺点
一旦主节点宕机,写服务无法使用,就需要手动去切换,重新选取主节点,手动设置主从关系。
4.2 哨兵
4.2.1 原理
哨兵会定时的去ping主节点,一旦主节点没有及时响应情况下,该哨兵就会通知其他哨兵也去ping主节点,如果有大于等于配置文件的哨兵数量认为该主节点不可用的情况下,哨兵就会在剩余的从节点中重新投票选举出一个主节点,避免整个Redis集群无法提供写服务。
4.2.2 作用
-
集群监控:负责监控redis master和slave进程是否正常工作
-
故障转移:如果master node挂掉了,会自动转移到slave node上
4.2.3 哨兵选举新主节点原理
-
先筛选掉那些网络不好,经常掉线的从库
-
第一轮打分 replic-priority 根据优先级来打分 优先级越高得分越高
-
与主节点同步程度越高 得分越高
-
每一个redis实例都有一个id,id越小得分越高
4.2.4 缺点
-
访问瞬断:当主节点挂掉的时候,哨兵会选举出来一个主节点,选举的时候是没有办法去访问Redis的,会存在访问瞬断的情况。
-
浪费内存:每个Redis节点存储的数据都是相同的。
-
主节点压力大:如果读的操作很多,有很多从节点可以分担压力,但是如果写的操作很多,压力全在主节点那里。
4.3 Cluster分片集群
4.3.1 概述
Cluster集群是一个多主多从的分布式服务集群,Redis Cluster将所有数据划分为16384个slots(槽位),每个主节点都有对应的哈希槽,存放数据的时候,会根据crc16算法计算key的hash值来确定应该把key存贮到哪个槽位上,每个主节点都可以存放不同的数据,比哨兵模式更加节约内存。
4.3.2 优点
-
节约内存:每个主节点都可以存放不同的数据。
-
并发量高:Cluster分片集群有多个master,可以提供更高的并发量。