1.集群模式
作用:解决单点故障问题
集群的模式:1.主从模式,2、哨兵模式,3、集群化模式
1.1主从模式
特点:1个主节点多个从节点,主节点负责读写操作,而从节点只能负责读操作,当主节点写入内容时,会同步到其他的从节点,以保证数据统一。
为什么配置1主n从,因为读操作非常频繁
配置简单,配从不配主
一台机器开三个
1.创建一个文件夹复制三份redis.conf
6380为master节点
6381和6382为slave节点
修改dump.rdb文件名称,关闭aof
2.修改端口号,分别开启三个服务
3.客户端登陆
查看主从关系info replication
4.配置主从关系
slaveof 主节点ip 主节点端口号
再次查看
测试
1.主节点负责读写操作,从节点负责读
2.如果主节点宕机,从节点会不会上位,还是等待主节点归来
停掉主节点后,从节点不会上位
3.如果新增一个新的小弟,会不会把之前的数据复制过来 ——会
停一个从节点,往主节点写入数据,再开启从节点,查看数据是否一致,一致
缺点:主节点宕机,小弟无法自动上位
1.2哨兵模式
哨兵时时刻刻检查主节点
sentinel.conf哨兵配置文件
修改sentinel monitor mymaster 127.0.0.1 6380 1
重启哨兵服务
redis-sentinel sentinel.conf
关闭当前主节点
原本的主节点回来后,会挂载到现在的主节点下,变成了从节点
1.3集群化模式
内置了哨兵
上面俩个集群只有一个master主节点,如果写操作并发比较大,上面的会堵塞,
使用集群化模式——去中心化模式
多master和多slave
集群化模式的原理
Redis集群中内置了16384个哈希槽,当需要在Redis集群中放置一个key-valuel时,redis先对
key使用crc16算法算出一个结果,然后把结果对16384求余数,这样每个key都会对应一个编
号在0-16383之间的哈希槽,rdis会根据节点数量大致均等的将哈希槽映射到不同的节点。
当你往Redis Cluster中加入一个Key时,会根据crc16(key)mod16384计算这个key应该分布到哪个hash slote中,一个hash slote中会有很多key和value。你可以理解成表的分区,使用单节点时的redis时只有一个表,所有的key都放在这个表里;改用Redis ClusterL以后会自动为你生成16384个分区表,你insert数据时会根据上面的简单算法来决定你的key应该存在哪个分区,每个分区里有很多key.
当写入一个key-value时,它会对你的key经过crc计算获取一个正数,该整数取余16384得到一个0~16383之间的数
搭建redis集群
1.准备服务器——6台——3主3从
主
7001
7002
7003
从
7004
7005
7006
bind * -::*
port 7001
daemonize yes
#打开aof持久化
appendonly yes appendfilename "appendonly7001.aof"
appenddirname "appendonlydir7001"#开启集群模式
cluster-enabled yes
cluster-config-file nodes-7001.conf
cluster-node-timeout 5000
开启上面6个redis
为上面6个服务分配主从关系以及哈希槽
--cluster-replicas 从节点个数 默认前三个为主节点
redis-cli --cluster create --cluster-replicas 1 192.168.64.130:7001 192.168.64.130:7002 192.168.64.130:7003 192.168.64.130:7004 192.168.64.130:7005 192.168.64.130:7006
测试
redis-cli -p 7001 -c