Redis Cluster
呼唤集群
- redis最高可以达到10万/s,如果业务需要100万/s呢?
- 单机器内存太小,无法满足需求
数据分布
- 顺序分区的数据量不可确定性导致倾斜,不支持批量操作
哈希分布
节点取余分区 hash(key)%nodes
如果要增加分区,数据迁移量在80%左右
数据迁移第一次是无法从数据中取到的,数据库需要进行回写到新节点
一致性哈希分区
比较适合节点多的情况
虚拟槽分区
共享消息模式
搭建集群
- 复制,高可用,切片
- 节点之间通过meet来相互通信
- 给节点指派槽,这样节点可以正常的读写
- 每个主节点有复制一个从节点
安装
- 原生命令安装
- 配置开启节点
- meet
- 指派槽
- 主从
- cluster replicate node-id
- 官方工具安装
Ruby环境
- 下载,编译,安装Ruby
- 安装rubygem redis
- 安装redis-trib.rb
集群伸缩
伸缩原理
扩容集群
- 准备新节点
- 加入集群
- 作用
- 为其迁移槽和数据实现扩容
- 作为从节点负责故障转移
- 迁移槽和数据
客户端实现
第二种方式
优点:会做一个孤立节点的检测
集群扩容
pipeline
收缩集群
客户端路由
moved重定向
客户端不会自己找到异常节点,需要自己写逻辑
ask重定向
smart客户端工作原理
JedisCluster基本使用
- 单例:内置了所有节点的连接池
- 无需手动借还连接池
- 合理设置commons-pool
整合spring
多节点命令实现
四种批量操作实现(mget,mset必须在一个槽)
故障转移
故障发现
故障恢复
常见问题
集群完整性
带宽消耗
Pub/Sub广播(发布一条消息,每个节点都会接收到,加重带宽消耗)
数据倾斜
分两种,数据倾斜和请求倾斜
读写分离
数据迁移
集群VS单机
缓存设计与优化(知识点)
缓存收益与成本
收益
成本
使用场景
缓存更新策略
缓存粒度控制
缓存穿透优化(大量请求不命中)
无底洞问题
热地key重建优化
Redis云平台cachecloud
Redis规模化运维
- 发布构建繁琐,私搭乱建
- 节点&机器运维成本
- 监控报警初级