redis三种集群模式详解---主从模式----哨兵模式---集群模式

244 阅读3分钟

redis提供了三种集群模式.

[1]主从模式

[2]哨兵模式

[3]集群模式

为什么要使用集群:

[1]解决单机故障问题

[2]解决单机压力问题

image.png

主从模式

1.启动三个redis服务

准备: 一台linux服务。 开三个redis服务----通过修改port----6380 [主] 6381 6382[从]。

image.png

2.修改配置文件

1.port端口号

2.rdb文件名dump638X.rbd

3.关闭aof

3.启动上面三个redis服务

redis-server redis6380.conf

redis-server redis6381.conf

redis-server redis6382.conf

image.png

4.进入每个客户端查看redis服务的角色

使用info replication指令可以查看redis服务信息

image.png

发现他们都是master角色,这个时候就需要分配主从关系

5.分配主从关系

配从不配主: slavof 主节点ip 主节点port

image.png

6.测试

image.png

测试从节点是否可以查询到数据

image.png

经过测试发现,主节点修改数据时,主节点的数据会同步到所有的从节点

从节点只能进行读操作,不能进行写操作

image.png

7.主从模式的优缺点

缺点:主节点宕机,从节点不会上位【没有主节点】

优点: 如果增加一个从节点,该从节点会将主节点的数据同步过来

哨兵模式

由于上面主从模式,主节点宕机后,从节点不会自动上位【导致没有主节点进行写操作】

解决上面的问题:----哨兵模式---->【1】监控功能 【2】故障恢复 【3】选举一个master主节点

1.监控功能

image.png

2.master节点的选举

image.png

3.启动哨兵

3.1修改哨兵配置文件

image.png

启动哨兵模式

redis-sentinel sentinel.conf

使用shutdown让主节点宕机,查看sentinel的控制台

image.png

从控制台可以看出,哨兵选择了6382作为新的主节点,并且原来的主节点重启之后,也会跟着新的主节点混

集群模式

不管是主从模式还是哨兵模式,始终只有一个master主节点。如果写操作并发高. 势必会导致master节点的压力过大。

真正的集群:【相当于配置多个主从模式结合哨兵模式的集合体】

image.png

集群模式的储存原理

redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value时,redis 先对 key 使用 crc16 算法算出一个整数结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点。

当你往Redis Cluster中加入一个Key时,会根据crc16(key) mod 16384计算这个key应该分布到哪个hash slot中,一个hash slot中会有很多key和value。你可以理解成表的分区,使用单节点时的redis时只有一个表,所有的key都放在这个表里;改用Redis Cluster以后会自动为你生成16384个分区表,你insert数据时会根据上面的简单算法来决定你的key应该存在哪个分区,每个分区里有很多key。

1.搭建三主三从redis集群服务:

7001~7006: 6台redis服务。

创建一个文件夹cluster存放6个redis的配置文件

image.png

2.修改6台redis配置文件--必须redis服务是空的,不能有数据

需要修改的配置文件

1.端口号

2.bind绑定--任意客户端可访问

3.dump文件的名称

4.必须开启aof模式并且修改文件名

5.开启集群模式

image.png

3.开启上面的6台服务

redis-server redisXXX.conf

image.png

4.分槽、设置主从关系

redis-cli --cluster create --cluster-replicas 1 192.168.94.131:7001 192.168.94.131:7002 192.168.94.131:7003 192.168.94.131:7004 192.168.94.131:7005 192.168.94.131:7006

image.png

弹出此界面之后,根据提示输入yes

访问集群

redis-cli -c -h 集群服务器IP -p 端口号

image.png