redis提供了三种集群模式.
[1]主从模式
[2]哨兵模式
[3]集群模式
为什么要使用集群:
[1]解决单机故障问题
[2]解决单机压力问题
主从模式
1.启动三个redis服务
准备: 一台linux服务。 开三个redis服务----通过修改port----6380 [主] 6381 6382[从]。
2.修改配置文件
1.port端口号
2.rdb文件名dump638X.rbd
3.关闭aof
3.启动上面三个redis服务
redis-server redis6380.conf
redis-server redis6381.conf
redis-server redis6382.conf
4.进入每个客户端查看redis服务的角色
使用info replication指令可以查看redis服务信息
发现他们都是master角色,这个时候就需要分配主从关系
5.分配主从关系
配从不配主: slavof 主节点ip 主节点port
6.测试
测试从节点是否可以查询到数据
经过测试发现,主节点修改数据时,主节点的数据会同步到所有的从节点
从节点只能进行读操作,不能进行写操作
7.主从模式的优缺点
缺点:主节点宕机,从节点不会上位【没有主节点】
优点: 如果增加一个从节点,该从节点会将主节点的数据同步过来
哨兵模式
由于上面主从模式,主节点宕机后,从节点不会自动上位【导致没有主节点进行写操作】
解决上面的问题:----哨兵模式---->【1】监控功能 【2】故障恢复 【3】选举一个master主节点
1.监控功能
2.master节点的选举
3.启动哨兵
3.1修改哨兵配置文件
启动哨兵模式
redis-sentinel sentinel.conf
使用shutdown让主节点宕机,查看sentinel的控制台
从控制台可以看出,哨兵选择了6382作为新的主节点,并且原来的主节点重启之后,也会跟着新的主节点混
集群模式
不管是主从模式还是哨兵模式,始终只有一个master主节点。如果写操作并发高. 势必会导致master节点的压力过大。
真正的集群:【相当于配置多个主从模式结合哨兵模式的集合体】
集群模式的储存原理
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的配置文件
2.修改6台redis配置文件--必须redis服务是空的,不能有数据
需要修改的配置文件
1.端口号
2.bind绑定--任意客户端可访问
3.dump文件的名称
4.必须开启aof模式并且修改文件名
5.开启集群模式
3.开启上面的6台服务
redis-server redisXXX.conf
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
弹出此界面之后,根据提示输入yes
访问集群
redis-cli -c -h 集群服务器IP -p 端口号