目录
一. 呼唤集群
二. 数据分布
三. 搭建集群
四. 集群伸缩
五. 客户端路由
六. 集群原理
七. 开发运维常见问题
一. 呼唤集群
二. 数据分布
image.png image.png image.png哈希分布
-
节点取余分区
- 客户端分片: 哈希+取余。
- 节点伸缩: 数据节点关系变化,导致数据数据迁移。
- 迁移数量和添加节点数量有关:建议翻倍扩容。
-
一致性哈希分区
- 客户端分片:哈希+顺时针 (优化取余)
- 节点伸缩: 只影响临近节点,但是还是有数据迁移
- 翻倍伸缩: 保证最小迁移数据和负载均衡
-
虚拟槽分区
- 预设虚拟槽: 每个槽映射一个数据子集,一般比节点数大
- 良好的哈希函数:例如CRC16
- 服务端管理节点,槽,数据: 例如Redis Cluster
三. 搭建集群
基本架构
image.png image.png image.png image.png image.png image.png image.png image.pngRedis Cluster特性
- 复制
- 高可用
- 分片
安装
-
原生命令安装
- 配置开启节点
- meet
- 指派槽
- 主从
-
官方工具安装
下载,编译,安装Ruby
image.png image.png image.png image.png四. 集群伸缩
伸缩原理
image.png扩容集群
- 准备新节点
- 加入集群
- 迁移槽和数据
缩容集群
image.png image.png image.png五. 客户端路由
moved重定向
ask
重定向smart
客户端
image.png image.png image.png image.png image.png image.png image.png
smart客户端
-
smart客户端原理
- 从集群中选一个可运行节点,使用Cluster slots初始化槽和节点映射。
- 将cluster slots的结果映射到本地,为每个节点创建JedisPool.
- 准备执行命令。
-
smart客户端使用:
jedisCluster
image.png
。、
六. 集群原理
七. 开发运维常见问题
集群完整性
带宽消耗
Pub/Sub广播
数据倾斜
读写分离
数据迁移
集群vs单机
集群完整性 image.png image.png image.png image.png image.png image.png image.png image.png image.png image.png image.png image.png image.png image.png image.png image.png
网友评论