redis之cluster集群

1、redis-cluster集群:redis3.0引入的分布式存储方案

2、集群:由多个node节点组成,redis数据分布在这些节点之中

(1)在集群之中也分主节点和从节点
(2)自带哨兵模式

3、redis-cluster集群的数据流向

1集群模式中,主从一一对应,数据写入和读取与主从复制一样,主负责写,从只能读
2集群模式自带哨兵模式,可以自动实现故障切换,但是在故障切换完成之前,整个集群都将不可用,切换完毕之后,集群会立刻恢复

redis之cluster集群_第1张图片

4、集群模式按照数据分片

(1)数据分片:集群的核心功能,每个主都可以对外提供读、写的功能,但是数据是一一对应写入主的对应从节点。在集群模式中,可以容忍数据的不完整
(2)高可用:集群的主要目的

5、数据分片的实现过程

(1)redis的集群引入了hash槽的概念,在redis集群当中有16384个hash槽位(0-16383)
(2)根据集群当中的主从节点数,分配hash槽位,每个主从节点只负责一部分的hash槽位
(3)每次读写都涉及到hash槽位,key通过CRC16校验之后,对16384取余数,余数值决定数据放入哪个hash槽位,通过这个值找到对应槽位所在的节点,然后直接跳转到这个节点
(4)hash槽位的值是连续的,如果出现不连续的hash值,或者有hash槽位没有被分配,集群将会报错
(5)主从复制:主宕机之后,主节点原来负责的hash槽位将会不可用,需要从节点代替主节点继续负责原有的hash槽位,保证集群的正常工作,所有故障切换的过程中,会提示集群不可用,切换完成,集群继续工作

redis之cluster集群_第2张图片

6、实验过程

1修改配置文件

redis之cluster集群_第3张图片

redis之cluster集群_第4张图片

redis之cluster集群_第5张图片

redis之cluster集群_第6张图片

(2)创建集群
redis-cli -h 20.0.0.41 --cluster create 20.0.0.41:6379 20.0.0.42:6379 20.0.0.43:6379 20.0.0.44:6379 20.0.0.45:6379 20.0.0.46:6379 --cluster-replicas 1
replicas 1:规定一个主只有一个从(主从的配合是随机分配的)
在集群模式当中,只能选择0库,集群不能切换库,只能使用默认库

redis之cluster集群_第7张图片

查看集群中的所有节点:cluster nodes

redis之cluster集群_第8张图片

redis之cluster集群_第9张图片

error表示:客户端尝试读取键值对test1,但是实际槽位在4768,集群要求客户端移动到4768所在的主机节点获取数据

redis之cluster集群_第10张图片

添加键(创建键值对时,hash槽位已经分配好了):

redis之cluster集群_第11张图片

3模拟故障

redis之cluster集群_第12张图片

redis之cluster集群_第13张图片

(4)恢复故障

redis之cluster集群_第14张图片

redis之cluster集群_第15张图片

实时监控redis工作过程的日志:monitor

redis之cluster集群_第16张图片

7、集群的流程

(1)集群自带主从和哨兵
(2)每个主节点之间互相隔离,可以容忍数据的不完整,目的是高可用
(3)以hash槽位决定每个节点的读写操作,在创建key时,系统已经分配好了指定槽位
(4)出现moved不是报错,只是提醒客户端去分配的槽位节点获取数据

你可能感兴趣的:(redis,数据库,缓存)