Redis集群个人笔记

Redis有三种集群模式:

1、主从模式

2、Sentinel模式

3、Cluster模式

 

主从模式

主从模式是三种模式中最简单的,分为两类:主数据库(master)和从数据库(slave)

读写分离策略:从节点可以扩展redis的读能力,有效应对大并发量的读操作

  • 一个master可以拥有多个slave,一个slave只能对应一个master
  • slave挂了不影响其他节点工作,重启后会从master同步数据过来
  • master挂了,不会重新选一个master,但不影响slave的读
  • master可以进行读写操作,当数据发生变化时会自动将数据同步给slave;
  • slave一般只负责读,并且接收master同步过来的数据

缺点:

master节点在主从模式中是唯一,若master挂掉,redis无法提供写的服务;

主从模式不具备高可用

 

Sentinel(哨兵)模式

它的作用就是监控redis集群的运行状况,当使用sentinel模式的时候,客户端不要直接连接Redis,

而是连接sentinel的ip和端口,由sentinel来提供可用的redis服务。

  • sentinel模式是建立在主从模式的基础上
  • 当master挂了,sentinel会在slave中选择一个做为master
  • master重启后,会变成slave节点
  • sentinel可以启动多个形成一个集群,sentinel之间也会自动监控

缺点:

sentinel主要针对主节点的高可用切换,slave节点作为备份节点不提供服务,不能解决读写分离问题;

Cluster模式

哨兵模式已经可以实现高可用,但是在这种模式下每台redis服务都存储相同的数据,很浪费内存,所以在

redis3.0加入了cluster模式,实现分布式存储,也就是说每个节点存储不同的数据。

客户端与redis节点直连,不需要中间代理层,客户端连接集群中任何一个节点即可。

cluster模式就是为了解决单机redis容量有限的问题,将redis的数据根据一定规则分配到多台机器。

Redis Cluster没有使用一致性hash,而是使用数据分片引入 hash槽(hash slot)来实现,集群预分好16384个桶,当往集群中放置一个key-value时,redis先对key使用crc16算出一个结果,然后把结果对16384求余,映射到对应的节点槽,一个hash槽中会有很多key-value。

Hash槽的好处在于方便的添加和移除节点:

当需要增加节点时,只需要把其他节点的某些槽移到新的节点;

当需要移除节点时,只需要把移除节点上的槽移到其他节点;

新增和移除节点的时候不用停掉所有redis服务。

 

举例节点分配:

节点A:0 - 5460;

节点B:5461 - 10922;

节点C:10923 - 16383.

当存入一个值,按照hash槽的算法,CRC16(key)%16384 = 6782。就会把key的存储分配到节点B。

当获取这个key时,也是同样的算法,内部跳转到B节点上获取数据。

 

新增一个节点时,从各个节点的前端各取一部分槽到新的节点上;

删除一个节点时,将节点的槽移动到其他节点,然后再删除这个节点。

 

Cluster模式为了保证数据的高可用,加入主从模式:

一个主节点对应一个或多个从节点,主节点提供数据读取,从节点是从主节点主动拉取数据备份,当这个主节点挂掉后,就会在从节点选举一个来当主节点。

以上3个主节点,如果没有加入从节点 ,如果其他一个主节点挂掉,就无法访问整个集群;所以在建立集群的时候,一定要为每个主节点添加从节点。

 

 

 

 

 

你可能感兴趣的:(Redis)