目录
第一种: 主从模式。
第二种: 哨兵模式
第三种: 集群分片模式
1. 主从模式
搭建主从模式: 原则配从不配主。
①首先需要准备三台redis服务。两台从节点 一台为主节点。 我们为了操作方便我们就在一台虚拟机模拟主从集群模式。只需要让三台redis服务的端口号不同即可。
②修改上面三个配置文件:
port 6380
dump6380.rdb
appendfilename "appendonly6380.aof"③启动三台redis按照相应的配置文件:
④连接三台redis服务:
redis-cli -p 6380
redis-cli -p 6381
redis-cli -p 6382
⑤查看三台redis服务的角色:
⑥配置主从关系(配从不配主):
slaveof ip port
(ip:主节点的ip, port: 主节点的port)⑦再次查看三台redis的角色:
注意:
主节点修改数据时,主节点的数据会同步到所有的从节点。
从节点只能进行读操作,不能执行写操作。
思考:
(1) 如果主节点增加一些数据后,所有从节点数据会不会同步?---会
(2) 主节点能否进行读操作呢? --会
(3) 从节点能否进行写操作? 不能执行写操作
(4) 如果主节点宕机了从节点能否上位。 不能
(5) 如果新增一个从节点,那么该从节点是否可以把主节点之前的数据同步过来。可以
2. 哨兵模式
由于上面主从模式,主节点宕机后,从节点不会自动上位,redis集群中就没有写操作 ,这段时间内无法进行写操作了。
解决上面的问题:----哨兵模式---->【1】监控功能 【2】故障恢复 【3】选举一个master主节点
2.1 监控功能
2.2 master节点的选举
2.3 启动哨兵(这里准备了一台)
①修改哨兵的配置:
②启动哨兵模式:
redis-sentinel sentinel.conf
③测试:
先使用shutdown让主节点宕机 观察sentinel(哨兵界面)的控制台
思考:
如果6380复活了,那么6381会不会让位? 不会。
如果你启动多台虚拟机---注意:关闭防火墙。
无需修改配置文件
3. 分片集群模式
分片集群它是解决我们上面哨兵模式存在的问题。他们始终只有一个master主节点,如果写操作频率过高,势必会导致master节点的压力过大 ,那么就会导致主节点宕机问题。
分片集群结构图:
思考: 客户进行数据的写操作,那么它应该被写入到哪个主节点里面。
解决办法: 使用了分槽技术。默认集群槽的数量为16384个。而每个槽可以存放若干个数据。如果搭建redis集群模式的话,为主节点平均分片这些槽。
存储原理:
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。
搭建redis分片集群(三主三从):
① 7001~7006: 6台redis服务。
创建一个文件夹cluster存放6个redis的配置文件
②修改6台redis配置文件--必须redis服务是空的
1. 修改端口号port:
2. 修改rdb文件的名称(dump文件)
3. 必须开启aof模式并修改aof文件的名称
4. 设置允许任意ip访问。bind * -::*
5. 修改集群文件名 cluster-config-file nodes-7001.conf6. 开启redis集群模式 cluster-enabled yes
③根据配置文件启动6台redis服务
redis-server redisXXX.conf
④ 为上面6台redis设置主从关系并分配槽。(ip之间用空格隔开)
redis-cli --cluster create --cluster-replicas 1 192.168.184.250:7001 192.168.184.250:7002 192.168.184.250:7003 192.168.184.250:7004 192.168.184.250:7005 192.168.184.250:7006
⑤启动redis客户端
redis-cli -c -h 192.168.184.250 -p 7001
⑥测试数据