redis之Cluster

Cluster:无主模型,可以任意一个节点获取跳转到其他节点

不同的分区实现方案

分区可以在程序的不同层次实现。

  1. 客户端分区就是在客户端就已经决定数据会被存储到哪个redis节点或者从哪个redis节点读取。大多数客户端已经实现了客户端分区。

  2. 代理分区
    意味着客户端将请求发送给代理,然后代理决定去哪个节点写数据或者读数据。代理根据分区规则决定请求哪些Redis实例,然后根据Redis的响应结果返回给客户端。redis和memcached的一种代理实现就是Twemproxy

  3. 查询路由(Query routing)
    的意思是客户端随机地请求任意一个redis实例,然后由Redis将请求转发给正确的Redis节点。Redis
    Cluster实现了一种混合形式的查询路由,但并不是直接将请求从一个redis节点转发到另一个redis节点,而是在客户端的帮助下直接redirected到正确的redis节点。

分区三个模式逻辑实现

在这里插入图片描述1.Hash+取模
Hash算法
缺点:取模的值必须固定,影响分布式下的扩张性
新增节点会造成,重新hash

2.random
消息队列
ooxx =kafka(topic && partition)
在这里插入图片描述3.一致性hash算法(ketama)
(1)没有取模
(2)Hash环
在这里插入图片描述
Hash环
在这里插入图片描述
优点:分担其他节点的压力,不会造成全局洗牌(不用取模)
缺点:新增节点造成一部分数据不能命中
(1)问题击穿,给数据库造成压力
方案:每次取离我最近的两个节点

更倾向于作为缓存使用,而不是数据库!

虚拟节点
以前是一个Node+1个IP,得到一个点
现在是一个Node+1个IP+10个数字,得到10个点(解决数据倾斜问题

分区实现方式

1.客户端实现
客户端实现以上的三种逻辑实现,成本高
缺点:redis连接成本很高,对server端造成的
在这里插入图片描述
2.代理
使用代理来实现以上三种逻辑实现 - (e.g redis集群 Twemproxy)
(1)twemproxy
(2)predixy
(3)cluster
(4)codis
在这里插入图片描述弊端: 三个模式不能做数据库
解决方案:预分区
新增节点: 只需要把3,4 和 8,9 的槽位分配给新的节点
在这里插入图片描述
每个节点都有其他节点的槽位映射表
在这里插入图片描述数据分治:聚合很难实现;事务也很难实现
解决方案:需要做事务的数据,存放在一个点 (e.g {00}k1 ,{00}k2 ,使用00取模,保证落在一个节点上 )

如何搭建集群

如何迁移数据

分区文档:http://www.redis.cn/topics/partitioning.html
集群文档:http://www.redis.cn/topics/cluster-tutorial.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值