- 哨兵
- 哨兵时一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现故障时通过投票机制选择新的master,并将所有slave连接到新的master
- 哨兵的作用
- 监控
- 不断检查master和slave是否正常运行
- master存活检测、master与slave运行情况检测
- 通知
- 当被监控的服务器出现问题时,向其他(哨兵间、客户端)发送通知
- 自动故障转移
- 断开master与slave连接,选取一个slave作为master,将其他slave连接到新的master,并告知客户端新的服务器地址
- 监控
- 启动哨兵
- redis-sentinel sentinel-端口号.conf
- 哨兵工作原理
- 阶段一:监控状态
- 用于同步各个节点的状态信息
- 获取各个sentinel的状态
- 获取master的状态
- 获取所有slave的状态
- 用于同步各个节点的状态信息
- 阶段二:通知阶段
- 维护长期信息对等
- 阶段三:故障转移阶段
- 发现问题
- 竞选负责人
- 服务器列表中挑选备选master
- 在线的
- 响应快的
- 与原master断开时间短的
- 优先原则
- 优先级
- offset
- runid
- 发送指令(sentinel)
- 向新的master发送slave no one
- 向其他slave发送slaveof 新master IP和端口
- 阶段一:监控状态
- 集群
- 集群就是使用网络将若干台计算机联通起来,并提供统一的管理方式,对外呈现单机的服务效果
- 集群作用
- 分散单台服务器的访问压力,实现负载均衡
- 分散单台服务器的存储压力,实现可扩展
- 降低单台服务器宕机带来的业务灾难
- Redis集群结构设计
- 槽用来区分数据的存储空间
- key加密后确定存储位置
- 一次命中或两次命中就能找到需要的数据
- 集群搭建
-
配置文件:
- cluster-enabled yes
- cluster-config-file node-6379.conf
- cluster-node-timeout 10000
-
执行命令
-
/src/redis-trib.rb create --replicas 1 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384
-
- 连接集群:redis-cli -c
- 企业级解决方案
- 缓存预热
- 服务器启动后迅速宕机
- 问题排查
- 请求数量较高
- 主从之间数据吞吐量达,数据同步操作频率较高
- 解决方案
- 前置准备工作
- 日常例行统计数据访问记录,统计访问频度较高的热点数据
- 利用LRU数据删除策略,构建数据留存队列
- 准备工作
- 将统计结果中数据分类,根据级别,redis优先加载级别较高的热点数据
- 利用分布式多服务器同时进行数据读取,提速数据加载过程
- 实施
- 使用脚本程序固定触发数据预热过程
- 如果条件允许,使用了CDN(内容分发网络),效果会更好
- 前置准备工作
- 总结:缓存预热就是系统启动前,提前将相关的缓存数据直接加载到缓存系统,避免在用户请求的时候,先查询数据库,然后再将数据缓存的问题。用户直接查询事先被预热的缓存数据
- 缓存雪崩
- 缓存击穿
- 缓存穿透
- 性能指标监控
- 缓存预热