百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

好慌,Redis这么多集群方案,要用哪种?

mhr18 2024-11-15 22:09 20 浏览 0 评论


不羡鸳鸯不羡仙,一行代码调半天。原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,转载请保留出处。

redis速度快,可靠性高,是互联网公司的标配。它有单机、主从、哨兵、Cluster等四种部署模式。

下面,仅从部署模式上,来说明一下它们的优缺点。

单机模式

单机模式的redis非常简单,你只需要启动一个单一的节点就可以了,安装过程不超过5分钟。

通过redis-benchmark测试简单的命令,QPS可达到10w以上,不得不说非常的让人惊艳了。

单机模式的问题也非常明显。缺乏高可用的机制!

假如redis进程死了,进程就只能够穿透到底层的数据库中,对业务来说非常的危险。如果你把redis当作数据存储来用,情况会更加严重,甚至会丢失数据。

主从模式

所以最基本的redis部署,都会增加一个或者多个slave(现在叫replication)。

当主redis发生问题的时候,能够选取一个slave顶上去。

非常可惜的是,这种模式和传统的MySQL主从一样,切换起来比较蛋疼,需要借助外部的工具,比如keepalived等辅助进行切换,部署和维护难度直接飙升。

keepalived 是一个基于VRRP协议来实现的高可用方案,通过IP漂移实现高可用。从描述上就可以看出它需要网络管理员的参与,和我们轻量级的redis背道而驰。

哨兵模式

哨兵模式就是使用额外的进程来替换keepalived的功能,对redis进程的存活性进行判断。在哨兵模式下,一旦主节点宕机,从节点作为主节点的备份可以随时顶上来。

但哨兵模式一个最大的问题,就是哨兵的数量太多,至少需要3个节点。

对redis进行仲裁的时候,需要n/2+1个节点投票才能确认,这也是分布式系统的一般做法 (quorum)。和Zookeeper类似,哨兵节点做成奇数个,是非常合适的。

哨兵模式可以通过sentinel monitor配置同时检测多套集群,在集群数量适中的时候,还是比较好用的。

但哨兵模式有很多隐藏的坑,比如哨兵的启动,必须在master存活的情况下才能正常运行;另外,如果你的redis配置文件中使用RENAME屏蔽了一些危险命令时,哨兵也不能够启动。

客户端在连接redis的时候,就不能再直接连接redis的实例,它需要从哨兵转上一圈,以便获取一些变更信息。

集群模式


与亲生的Redis Cluster,来一次亲密接触

集群模式可以说是这里面最优雅的方式了。你只需要部署多个对等的redis节点,然后使用客户端命令进行组群就可以了。

ip=192.169.0.23
./bin/redis-cli --cluster create  $ip:7001 $ip:7002 $ip:7003 $ip:7004 $ip:7005 $ip:7006 --cluster-replicas 1

它对节点的要求也是比较多的,一般是采用6个节点,三主三从。当节点超过10个,它的协调性就不那么灵活了,所以单集群的存储和性能上限也很快能到达。

集群模式的一些缺点很隐蔽。它的服务端节点倒是非常稳定了,但有些命令会严重影响性能。比如mget,pipeline等。它们需要把请求分散到多个节点执行、再聚合。节点越多,性能越低。

在下面这篇文章中,我们详细的描述了一些比较通用的redis使用规范,有些就是为了规避cluster模式引起的一些问题。


这可能是最中肯的Redis规范了

其他方案

可以看到redis的这些集群模式,都不是完美的。应对小型的服务可能没有问题,如果是大型的集群和服务,这些部署方式对运维上,使用上来说,都有非常大的挑战。

使用客户端hash的方法,是大型互联网中常用的方式。参考下面的文章,现实中的路由规则,可能会相当复杂,但请求总能够精确的落在某个小的群组上面。


现实中的路由规则,可能比你想象中复杂的多

对于管理大型集群来说,我倒是倾向于主从模式,然后使用Java或者其他语言开发一个可以集中管控的哨兵系统,对上千个集群进行管理。

由于Redis是文本协议,协议非常简单,Netty甚至直接内置了它的解析器,所以开发这么一个哨兵系统是非常简单的。

一些中间层代理软件,也能分担一些路由工作,但由于是中间层,涉及到一层网络转发,对Redis这种以速度取胜的服务来说,就不是很实用。

变种有更多,比如下面这篇文章,使用的是Redis协议,但后端存储却是MySQL,所以你的命令会是被阉割的。


架构秘笈:移花接木。使用mysql模拟redis

从上面的描述中我们就可以看出,Redis能用是一回事,用好是另一回事。

你可能花了一天时间搭建了一个单节点的Redis;我可能花了一周时间写了个Java版的哨兵,还有很多BUG。这两者在不懂技术的领导眼里,是没有区别的--它们都满足了业务的需求。但也不必过分计较,现实一般都比较残酷,计算机系统也没有想象中的那么稳定,墨菲定律总有一个时间会教会他们做人。

当然,领导每天都在教我做人。

作者简介:小姐姐味道 (xjjdog),一个不允许程序员走弯路的公众号。聚焦基础架构和Linux。十年架构,日百亿流量,与你探讨高并发世界,给你不一样的味道。我的个人微信xjjdog0,欢迎添加好友,进一步交流。

推荐阅读:


一图解千愁,jvm内存从来没有这么简单过!


实力解剖一枚挖矿脚本,风骚操作亮瞎双眼


又一P1故障,锅比脸圆


传统企业的人才们,先别忙着跳“互联网”!


面试官很牛,逼我尿遁


又一批长事务,P0故障谁来背锅?


一天有24个小时?别开玩笑了!


《程序人生》杀机!


可怕的“浏览器指纹”,让你在互联网上,无处可藏


2w字长文,让你瞬间拥有「调用链」开发经验


996的乐趣,你是无法想象的


作为高级Java,你应该了解的Linux知识(非广告)


必看!java后端,亮剑诛仙(最全知识点)


学完这100多技术,能当架构师么?(非广告)


Linux上,最常用的一批命令解析(10年精选)


数百篇「原创」文章,助你完成技术「体系化」



相关推荐

Java培训机构,你选对了吗?(java培训机构官网)

如今IT行业发展迅速,不仅是大学生,甚至有些在职的员工都想学习java开发,需求量的扩大,薪资必定增长,这也是更多人选择java开发的主要原因。不过对于没有基础的学员来说,java技术不是一两天就能...

产品经理MacBook软件清单-20个实用软件

三年前开始使用MacBookPro,从此再也不想用Windows电脑了,作为生产工具,MacBook可以说是非常胜任。作为产品经理,值得拥有一台MacBook。MacBook是工作平台,要发挥更大作...

RAD Studio(Delphi) 本月隆重推出新的版本12.3

#在头条记录我的2025#自2024年9月,推出Delphi12.2版本后,本月隆重推出新的版本12.3,RADStudio12.3,包含了Delphi12.3和C++builder12.3最...

图解Java垃圾回收机制,写得非常好

什么是自动垃圾回收?自动垃圾回收是一种在堆内存中找出哪些对象在被使用,还有哪些对象没被使用,并且将后者删掉的机制。所谓使用中的对象(已引用对象),指的是程序中有指针指向的对象;而未使用中的对象(未引用...

Centos7 初始化硬盘分区、挂载(针对2T以上)添加磁盘到卷

1、通过命令fdisk-l查看硬盘信息:#fdisk-l,发现硬盘为/dev/sdb大小4T。2、如果此硬盘以前有过分区,则先对磁盘格式化。命令:mkfs.文件系统格式-f/dev/sdb...

半虚拟化如何提高服务器性能(虚拟化 半虚拟化)

半虚拟化是一种重新编译客户机操作系统(OS)将其安装在虚拟机(VM)上的一种虚拟化类型,并在主机操作系统(OS)运行的管理程序上运行。与传统的完全虚拟化相比,半虚拟化可以减少开销,并提高系统性能。虚...

HashMap底层实现原理以及线程安全实现

HashMap底层实现原理数据结构:HashMap的底层实现原理主要依赖于数组+链表+红黑树的结构。1、数组:HashMap最底层是一个数组,称为table,它存放着键值对。2、链...

long和double类型操作的非原子性探究

前言“深入java虚拟机”中提到,int等不大于32位的基本类型的操作都是原子操作,但是某些jvm对long和double类型的操作并不是原子操作,这样就会造成错误数据的出现。其实这里的某些jvm是指...

数据库DELETE 语句,还保存原有的磁盘空间

MySQL和Oracle的DELETE语句与数据存储MySQL的DELETE操作当你在MySQL中执行DELETE语句时:逻辑删除:数据从表中标记为删除,不再可见于查询结果物理...

线程池—ThreadPoolExecutor详解(线程池实战)

一、ThreadPoolExecutor简介在juc-executors框架概述的章节中,我们已经简要介绍过ThreadPoolExecutor了,通过Executors工厂,用户可以创建自己需要的执...

navicat如何使用orcale(详细步骤)

前言:看过我昨天文章的同鞋都知道最近接手另一个国企项目,数据库用的是orcale。实话实说,也有快三年没用过orcale数据库了。这期间问题不断,因为orcale日渐消沉,网上资料也是真真假假,难辨虚...

你的程序是不是慢吞吞?GraalVM来帮你飞起来性能提升秘籍大公开

各位IT圈内外的朋友们,大家好!我是你们的老朋友,头条上的IT技术博主。不知道你们有没有这样的经历:打开一个软件,半天没反应;点开一个网站,图片刷不出来;或者玩个游戏,卡顿得想砸电脑?是不是特别上火?...

大数据正当时,理解这几个术语很重要

目前,大数据的流行程度远超于我们的想象,无论是在云计算、物联网还是在人工智能领域都离不开大数据的支撑。那么大数据领域里有哪些基本概念或技术术语呢?今天我们就来聊聊那些避不开的大数据技术术语,梳理并...

秒懂列式数据库和行式数据库(列式数据库的特点)

行式数据库(Row-Based)数据按行存储,常见的行式数据库有Mysql,DB2,Oracle,Sql-server等;列数据库(Column-Based)数据存储方式按列存储,常见的列数据库有Hb...

AMD发布ROCm 6.4更新:带来了多项底层改进,但仍不支持RDNA 4

AMD宣布,对ROCm软件栈进行了更新,推出了新的迭代版本ROCm6.4。这一新版本里,AMD带来了多项底层改进,包括更新改进了ROCm的用户空间库和AMDKFD内核驱动程序之间的兼容性,使其更容易...

取消回复欢迎 发表评论: