Redis常见集群方案
创始人
2024-05-08 18:15:30
0次

Redis常见集群方案

Redis集群方案目前主流的有三种,分别是Twemproxy、Codis和Redis Cluster。
在这里插入图片描述

Redis Cluster

Redis Cluster 集群是去中心化通过客户端分片的结构,集群元数据信息分布在每个节点上,主备切换依赖于多个节点协商选主。

Redis cluster有slots 16384个,槽跟节点的映射关系保存在每个节点上,节点之间通过gossip协议交换集群元数据信息。

客户端操作key的时候先通过分片算法算出所属的槽,然后随机找一个服务端请求。可能这个槽并不归随机找的这个节点管,节点如果发现不归自己管,

就会返回一个MOVED ERROR通知,引导客户端去正确的节点访问,这个时候客户端就会去正确的节点操作数据。
在这里插入图片描述

Twemproxy

在这里插入图片描述

Twemproxy是一种代理分片机制,由Twitter开源。Twemproxy作为代理,可接受来自多个程序Client的访问,在 Twemproxy 也可以部署LVS或者 HAProxy等负载均衡设备。Twemproxy会按照路由规则,转发给后台的各个Redis/Memcache服务器,再原路返回。该方案很好的解决了单个Redis实例承载能力的问题。当然,Twemproxy本身也是单点,需要用Keepalived做高可用方案。通过Twemproxy可以使用多台服务器来水平扩张redis服务,Twemproxy减少后端资源的连接数以及为缓存横向扩展能力。 twemproxy 支持多种 hash 分片算法,同时具备失败节点自动剔除的功能,可以有效的避免单点故障问题。

Twemproxy的开源版本存在几个问题:

  • 单线程模型无法利用多核,性能不够好,极端情况下代理和资源需要 1:1 部署;
    配置无法在线 Reload,twitter 内部版本应该是支持的,单元测试里面有针对 reload 的 case,PaaS 场景需要不断更新配置;
  • Redis 不支持主从模式(Redis 在作为缓存的场景下确实没必要使用主从),但部分场景需要;
  • 数据指标过少,延时指标完全没有、

Codis

  • Codis是一个采用Proxy-based方式的分布式Redis解决方案。Codis采用一层无状态的proxy层,将分布式逻辑写在proxy上,底层的存储引擎还是Redis,数据的分布状态存储于zookeeper(etcd)中。
  • Codis功能非常全,除了请求转发功能之外,还实现了在线数据迁移、节点扩容缩容、故障自动恢复等功能。
  • 在Codis里面,它把所有的key分为1024个槽,每一个槽位都对应了一个分组,具体槽位的分配,可以进行自定义,现在如果有一个key进来,首先要根据CRC32算法,针对key算出32位的哈希值,然后除以1024取余,然后就能算出这个KEY属于哪个槽,然后根据槽与分组的映射关系,就能去对应的分组当中处理数据了

Codis的架构如下:
在这里插入图片描述

数据可靠性&高可用&容灾&故障转移

数据可靠性

作为codis的实现来讲,数据高可靠主要是redis本身的能力,通常存储层的数据高可靠,主要是单机数据高可靠+远程数据热备+定期冷备归档实现的。

高可用&容灾&故障转移

codis的架构本身分成proxy集群+redis集群,proxy集群的高可用,可以基于zk或者l5来做故障转移,而redis集群的高可用是借助于redis开源的哨兵集群来实现。proxy 通过监听sentinle集群的+switch-master事件来感知redis 主从切换。

对比

CodisTweproxyRedis Cluster
集群模式中心化中心化无中心化
使用方式通过Proxy访问通过Proxy访问使用Smart Client直连Redis,Smart Client内置路由规则
性能有性能损耗有性能损耗高
支持的数据库数量多个多个一个
Pipeline支持支持仅支持单个节点Pipeline,不支持跨节点
需升级客户端SDK?否否是
支持在线水平扩容?支持不支持支持
Redis版本仅支持3.2.8,升级困难支持最新版支持最新版
可维护性组件较多,部署复杂只有Proxy组件,部署简单运维简单,官方持续维护
故障自动恢复需部署哨兵需部署哨兵内置哨兵逻辑,无需额外部署

相关内容

热门资讯

前端-session、jwt 目录:   (1)session (2&#x...
linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
nodejs:本地安装nvm实... 一、背景-使用不同版本node的原因 vue3+ts、nuxt3版本,node...
JAVA集合知识整理 Java集合知识整理 HashMap相关 HashMap的底层数据结构:jdk1.8之...
无刷直流电机介绍及单片机控制实... 无刷直流电机介绍及单片机控制实例前言基本概念优势与劣势使用寿命基本结构使用单片机控制实例电子调速器&...
fwdiary(2) dp2 1.传纸条  AcWing 275. 传纸条 - AcWing 走两条路,走一条最大的...
常用的DOS命令 常用的DOS命令 DOS(Disk Operating System,磁...
<C++> 类和对象(下) 1.const成员函数将const修饰的“成员函数”称之为const成员函数,cons...