温故知新,redis集群复习

之前部署redis以及搞分布式锁开发,又把redis集群给学习了一遍。今天来记录一下笔记。

 

集群定义

 

redis集群是一个提供多个redis实例间共享数据的程序集。

 

集群优势

 

一台redis能够提供的存储能力是有限的,并且单机会有高可用性的弊端。所以就有了redis集群,redis集群会自动分割数据到不同node上;并且部分node不可达时能够继续提供服务。

 

集群的数据分片处理

 

redis集群没有使用一致性hash算法而使用hash槽进行数据分片。redis集群有15384个槽。每个node负责一部分槽。例如0-5000;5001-10000;10001-16384

每次操作通过对key进行15384取模得到一个数字,用这个数字来匹配使用哪个对应的node。比如16386取模未1,属于0-5000,放到这个段对应的redis节点上。当有新node加入,那么会从每个机器上取一部分槽分配给他;有旧节点删除时,会将他负责的槽分配给其他node。确保每个槽都可用。

 

集群的主从复值模型

 

redis集群中每个节点负责一部分hash槽,但如果这个node宕机,那么当前集群中就有一部分hash槽不可用。为了避免这个问题,每个node应该有N-1个复制品。组成主从模式,比如A B C组整一个集群;那么a1 b1 c1 为各自的从节点。当有一个master宕机后。还能有从节点转为master节点继续提供服务。除非集群中某个redis及其所有从节点都宕机。

 

数据一致性

 

由于redis采用主从复制时异步复制。当set值成功后便立刻返回客户端。再进行从节点的数据复制。这就导致当写和返回客户端成功后,数据还没被发送给从节点master就宕机了。那么重新选举的从节点就会出现数据的丢失问题。这也是为了性能和一致性之间做的权衡。

网络分区问题,即部分网络不通但部分网络通畅。导致可能集群中大部分节点间通讯正常,某个master节点通讯不畅,但和客户端通讯正常。这时候就会出现重新选举。导致B的master被降级成从节点。这时候客户端像B中存储的数据便丢失了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章