一、哨兵:
是一个分布式结构,对主从结构的服务器进行监控,当主服务器宕机,投票选择从服务器成为主服务器,并连接其他的slave。
配置哨兵配置文件:
启动哨兵redis-sentinel sentinel-6003.conf
连接哨兵redis-cli -p port
首先启动主从服务器(6000,6001,6002),再启动哨兵(6003,6004,6004),当主服务器(6000)挂掉后,哨兵会投票推举,其中一个从服务器(6002)成为一个主服务器
原理:
1)监控阶段: sentinel首先会获取master的状态,再获取slave的状态,每个sentinel之间会共享信息
2)通知阶段: sentinel会获取master和slave的工作状态,并于其他sentinel共享
3)故障转移阶段: 某个sentinel发现master下线后,此时的master状态为SDOWN
主观下线,然后共享该信息,其他sentinel也会发送消息来判断master是否下线,如果超过半数的sentinel认为master下线了,master状态就成为了ODOWN
客观下线。所有sentinel会投票选出一个sentinel来进行故障转移(每个sentinel都会发送一个信息,投票给第一个到达自身的sentinel)。会选出一个slave作为新的master,sentinel会向新的master发送slaveof no one,其他slave发送slaveof masterip masterport
二、集群:
用网络将多个主从服务器结构连接在一起
集群存储设计:
每个主从服务器都会存储多个槽(每个槽存储多个key,每个key会通过hash算法得到对应的值,就存储在对应的槽中)。
获取数据请求:
首先根据key计算得到hash值,如果访问的服务器中有对应的槽就会返回数据,否则告知对应的槽所在的服务器,会去对应的服务器去寻找。
创建集群:
配置服务器:总共6个服务器使用端口6000~6005,使用sed "s/想要被替换的文本/替换成的文本/g" 源文件>生成文件
来对文件进行复制。
开启6个redis后会使用ps命令会出现cluste字样
开启cluster服务redis-cli --cluster create ip:port ip:port ... --cluster-replicas n
表示每个主服务器对应n个从服务器,下图中前三个为master,后三个为slave
操作cluster集群redis-cli -c -p port
主从下线:
slave下线:对服务器没有影响,对应的master会标记不可使用,slave重新上线会重连
master下线:slave会重新成为master,master重新上线会成为slave
1)缓存预热: 系统启动的时候,提前将相关的数据加载到缓存系统,避免用户请求先查询数据库再将数据缓存。
2)缓存雪崩: 某个时间同时有大量的key到期,之后对这些key有大量的访问
3)缓存击穿: 某个和key过期,该key的访问量巨大
4)缓存穿透: 对数据库中不存在的key进行了大量的访问