基于Redis高可用集群的设计与实现.doc

基于Redis高可用集群的设计与实现.doc

PAGE2

基于Redis高可用集群的设计与实现

摘要本文设计了一套分布式高可用的redis集群方案。该方案利用数据传输不需经过第三方代理而是直接在服务器端分片的技术进行设计,设计主要分为三个模块:主从复制模块,在线完成数据的备份,以免发生数据丢失,缓解主库压力;哨兵模块,实时监控解决redis主从模式下的高可用切换问题;模块,提高了系统的灵活性、扩展性和可用性。完美应对大数据量、高并发业务的场景,不但提高了生产效率,而且降低了生产成本。本方案经过测试,运行稳定,所设计功能均已实现,通过快照就可访问,操作简单。

关键词集群;Redis;高可用;Key-Value

1绪论

1.1课题研究的背景和意义

在互联网时代的背景下,越来越多的用户每天都在不断产生新的数据,各个行业产生的数据量正以前所未有的速度增长。“大数据”一词正式进入我们的视野,在特定的时间段无法通过传统的软件工具捕获,难以进行分析处理的数据集合被称为大数据,在短时间内处理大量的数据显得至关重要redis高可用集群,因此,提供高性能、高可用性的数据服务成为当代应用的关键之一。并且传统的关系型数据库是基于磁盘运行的,磁盘的读写能力显然不能与内存相比,存在严重的性能劣势。现如今数以千万计的请求往往会在瞬间同时到达,例如淘宝每年的双十一活动,用户会在极短的时间内产生上亿的数据量,而此时需要系统在极其短的时间内完成数以万计的读写操作。面对这种情况,传统数据库往往难以承受,极易造成数据库系统瘫痪,甚至有时会导致服务宕机,进而造成数据的丢失。对于此种情况,一个非关系数据库(NoSQL)应运而生,以解决大型数据收集和多种类型数据的挑战,特别是大数据应用的困难。NoSQL是对传统关系数据库的改进和升级。此外,NoSQL数据库使用了一个简单的数据模型,更加注重系统的计算能力,它不同于传统的关系数据库使用复杂的数据模型提供服务。?而关系型数据库的硬件要求很高,其建设成本巨大。NoSQL数据库可以利用集群模式扩展一些廉价的服务器,有效降低经济成本。

Redis作为一种高性能的分布式非关系数据库,是一个开源的高性能密钥数据库,用户将数据存储在密钥对中。它提供多种关键数据类型以满足不同场景下的存储需求,借助于许多高级接口,它可以用于不同的角色,如缓存、队列系统等。但是由于其性能的不足,单台redis服务器往往不足以承担起数据处理的任务,因而更多是采用分布式redis集群的方式,因此在生产环境中它往往是通过集群的方式,来进行对大数据处理的操作。因此,对redis集群的研究有着非常重大的意义。

1.2课程研究现状

Redis最早是由Redis之父提出的,他在2008年正式发布了redis的第一个版本,并且在同年将redis的源码与网上发布,短短几年时间redis在国内外的使用量就飞速增长。直到今天,redis仍然是一个非常优秀的存储服务系统。

在经过对国内外的资料查找和阅读后,我发现目前国内大部分公司仍使用关系型数据库的居多,例如mysql,。然而Redis数据库目前使用的只有国内的几个大公司,例如百度、阿里巴巴、腾讯、新浪微博等互联网企业都已经开始使用,而且传统数据库对硬件有着硬性要求,这就造成其构建成本巨大的问题。Redis数据库可以使用集群方式对一些廉价的服务器进行扩展,这就有效地降低了经济成本,其应用场景也非常广泛,比如做动态缓存、云数据库、高效并行技术等等。在以后对数据处理的场景中,我认为NoSql型数据库占比也会逐渐上升,由于其构建简单,经济成本低,其在未来肯定会大放异彩,并且redis作为NoSql型数据库其中的佼佼者,我认为redis高可用集群在以后有着巨大的应用前景。

1.3本文研究内容

随着大数据时代的飞速发展,为了满足高性能数据库的需求,目前国内互联网企业使用redis数据库集群的规模越来越大,集群的问题也频频出现,开发者经历了多次架构的调整,经历了一系列改进和升级后,redis的分片技术主要有在客户端分片、通过代理分片以及在服务器端分片的三种方式。

在通过互联网和市场上的实际调研后,分析和比较了各种分布式集群的优缺点后,根据自身所学知识,本文选择通过服务器端分片的方式来设计了基于redis高可用集群。

2项目所需技术

2.1分布式技术

在生产中,较为简单的半结构化数据通常是用分布式系统通常来存储,key-value模型用来存储各项数据,其中key也称为键它往往用来标记内容,往往是一个字符串,存储各种类型的数据则是用value也称为值来存储,它可以存储一个数字,也可以存储一段视频等等,例如和redis都是采用了key-value数据模型。每个存储着各种数据的value都由Key一一对应,采用这种设计模型可以让系统具有很大的优势,有着很好的扩展性。键值对一般是都是利用一种类似于传统的哈希算法存储系统中的各项数据,并且通过其key值进行数据的增删改查功能,这些功能与传统的哈希表的功能极为相似。因此用户可以把Key-Value系统想像成一张巨大的哈希表。但是相对于传统关系型数据库例如mysql提供的多表关联查询功能,因其简单的数据模型原因,分布式系统没有此项功能。但是其拥着这良好的扩展性可以根据键值将各项数据分布存储到各个系统中,增强系统的响应能力,达到系统的集群化。当数据量急剧增加是,系统可以对集群进行新机器的添加来应对这一场景,并且通过键值对将数据重新分配到新的节点中去,从而完美解决了当短时间内大量数据到达集群无法处理的这一问题,从而让集群有了更加优越的性能。

2.数据库

Redis是一个基于内存的key-value数据存储结构。它使用C语言编写,并且将数据都存储在内存中,使用单线程的架构,避免了多线程在同一环境下相互争夺资源的问题,所以redis的运行是极其迅速的。redis本身也为了防止出现故障时导致数据丢失的问题,提供了AOF和RDB这两种数据持久化方案。redis也是采用了与hash表相似的数据结构来存储系统中的键值对,这一点和非关系型数据库大为相似,但相比于等其他的Key-Value数据库,redis为键值对中的Value提供了比较丰富的数据结构,而不像那样把Value当成了黑盒,所以有人也称redis为一个数据结构服务器。不仅如此,redis也有着订阅发布模块,因为它可以实现消息系统。而且redis还具有过期和淘汰策略模块,具有冗余功能。为了提高redis的可用性,方便用户的使用redis还具有主从模式和redis哨兵方案。正是因为redis提供了如此丰富的功能,同时又可靠又快速,因此受到许多用户的喜爱。

2.集群技术

随着redis分布式集群大范围应用,开发者也在不断的进行redis集群的改进和升级。客户端分片、proxy代理分片、服务器端分片是当前redis集群主要的三种模式。

(1)客户端分片:在客户端就已经完成了数据分片,后端上的redis路由信息在客户端存储,redis请求在客户端被分析处理时,它会通过hash算法,哈希操作会发生在命令中的键值和节点名称上,通过分析比较后端redis集群实例上的hash值,将相同hash值的key值和节点名映射上去。但是它不具有高可用功能,因为他是单个节点,所以一旦发生故障不能进行数据转移,因此这个模式社和与数据量较小的场景中。还有就是,当节点数需要增加时,需要管理人员手动操作,增加了维护成本。它的优势在于其架构简单配置灵活,数据在客户端已经完成处理,不需要中间件转发,是一个轻量化的结构。架构如图2-1所示。

图2-1客户端分片

Proxy代理分片:现今和codis两种都是redis主流的代理模式。其中通过c语言开发了,豌豆荚通过go语言开发了codis。redis命令从客户端发出,被两者在代理层接受命令,通过代理层分片的方式将请求分别发宋到后端的不同redis实例中,此模式计算key的hash值对应的哈希槽是利用crc32实现的。采用这种redis代理模式,客户端和、codis代理之间也是通过redis协议进行通信的,和原生的redis没有区别,可以简单的认为与客户端建立连接的是一个内存可以动态扩容和缩容的单个redis实例。此架构如图2-2所示。

图2-代理分片

代理分片的优点是所有的数据都由第三方代理分片完成,所有的路由信息都存储在第三方代理中。所以使得客户端和服务器端都能专一的处理自身原有的应用,不必再用多余的资源进行数据分片,而且因其增加了一个代理层的原因基于Redis高可用集群的设计与实现.doc,增加了数据的安全性,但是当其处理的数据量过大的时,所有数据都汇聚在第三方代理上,由于其实际的性能限制,往往会降低对数据的处理效率,造成数据传输不及时的问题。

服务器分片:Redis的官方在3.0之后推出了模式,在每台redis节点上存储不同的内容来实现的redis的分布式存储。?Redis-优点在与不需要借助第三方代理实现路由转发,它基于服务器分片,具有容错和冗余功能。在整个redis中,每个节点都是一主一从或多从的结构,当主节点发生故障下线的时候,集群会从该主节点下的所有从节点中选中一个节点作为新的主节点,然后告知集群中其他的节点自己成为了新的主节点,并对外提供服务。redis的每一个节点上都有插槽(slot)和,Slot的取值范围是:0-16383,是集群管理的插件。数据分片在slot进行,当获取到key值时,redis会将这个key值通过crc16算法得出结果,然后把该结果对16384求余数,计算公式如图2-3所示。这样编号在0-16383之间的哈希槽都有一个key相对应,然后通过这个哈希槽值找到相对应的节点,随后跳转到这个节点上进行读写操作,该模式架构如图2-4所示。

图2–计算

图2–分片

2.4虚拟化技术

redis高可用集群

对于计算机,一种资源管理技术被称为虚拟化。它把计算机的各种物理资源,例如服务器、网络、内存和存储抽象化。在没有障碍的情况下,用户可以更大限度地使用原始计算机配置资源。这些资源的新虚拟部分不受地理和物理上的限制,虚拟化资源通常是指计算能力和数据存储。

在真实的生产环境中,虚拟化技术使基础物理设备变得半透明化,在相当大的程度上解决了老旧设备可用资源低以及高性能设备物理资源过剩的问题,并被用于最大限度地提高设备的利用率。

系统的技术支持

3.1环境搭建要求

本设计主要是由三台虚拟机构成,其中一台为主服务器,另外两台为从服务器,通过这三台主服务器来模拟整个集群的环境,虚拟机介绍如图3-1所示。

图3-1虚拟机示意图

3.2系统的基本架构

本项目的整体架构:分布式redis高可用集群采用的是第三种集群方式中的服务器分片模式,即redis的Redis-模式。该模式是属于去中心化集群,不需要经过第三方代理实现路由转发,由客户端直接和redis节点直接相连,在服务端进行数据分片。所有redis节点内部都是使用二进制协议来优化传输效率,外部都是通过PING-PONG机制互连,节点故障是当集群中超过一半的节点无法检测到节点时才会发生。集群具体的整体架构图如图3-2所示。

图3-2整体拓扑图

4集群设计

4.1虚拟Linux的安装

在本设计中,使用的虚拟平台是美国威睿公司发布的?版本,选择的系统镜像是红帽的.5版本的Linux系统,首先在Linux官网上下载一个.5的镜像文件作为安装源来进行系统的安装,安装完成之后进入系统,如图4-1所示,首先我们要做的是通过修改本地网卡配置文件来固化IP地址,以免IP地址发生变化,如图4-2所示。

图4-的安装图4-2ip固化

4.的安装

Redis数据库的搭建较为容易,在Linux系统的基础上,使用下载源码包的方式安装即可。因其通过虚拟机配置较为麻烦,可以通过远程连接Linux主机配置安装,Redis的主要配置步骤如下:

首先要在系统中安装配置gcc环境,gcc是配置编译环境必须的软件,然后在redis的官网下载Redis-5.0.4版本源码包,如图4-3所示,随后进行解压、配置、编译、安装的过程,解包命令为“-5.0.4.tar.gz”redis高可用集群,进入redis安装目录中如图4-4所示,因其采用源码包安装,可以获取选择各种版本,定制各种所需功能以及安装灵活。

图4-源码包下载

图4-4软件解压图

进入redis-5.0.4目录当中,执行命令进行编译安装,安装过程如图4-5所示,安装完成之后,如果想要检查上一步操作是否执行正确,可以通过echo$?命令来检查,执行结果如果为0则表示正常,安装没有错误;返回几就代表有几个错误。检测如图4-6所示。

图4-5安装执行图

图4-6执行检查图

到此为止,Redis数据库已经安装完毕,其他两台redis也可以通过此步骤安装,以实现完成以三台Redis数据库为基本环境来展开整体设计的目的。

4.主从模式配置

Redis在开始之际推出了主从模式和哨兵模式,在.0后才推出了集群模式。主从模式是Redis三种模式中最简单的,在主从复制中,数据库分为主数据库()和从数据库(slave)两类。它的工作机制为当slave启动后会主动向发送sync命令,主端接受这个命令之后,将保存快照在后台以及缓存这一时间端内主端执行的命令,然后将保存后的文件和命令发送到从端,从端接受到之后会将这些命令一一执行,一旦开始复制,从端都会同步主端上所有执行的写命令,以确保主从两端数据的高度一致性。示意图如图4-7所示。

图4-7主从节点的复制

它有以下几种特点:

(1)主数据库可以执行读取和写入操作。当读写操作引起数据更改时,数据将自动与从属数据库同步。

(2)一个从只能对应一个主,但是一个主可以拥有多个从。

(3)从属数据库通常仅可读,并且从主数据库接收同步数据。

(4)如果从属数据库宕机对其他从数据库的读操作以及主数据库的读写不会产生影响。重启后,数据将重新同步主数据库。

(5)挂掉后,redis对外不提供写服务,只提供读操作。重新启动后,redis将再次向提供外部的写入服务。

redis高可用集群

(6)主端宕机后,不会重新在从端中选择一个节点成为。

4.3.主服务器的安装

通过远程控制连接虚拟主机,首先要开启redis,然后执行/.sh命令来开启redis-服务,此脚本命令在redis目录中的utils目录下。我们也可以通过shell来编写一个redis服务启动控制脚本,开启示意图如4-8所示。开启之后我们通过ps命令可以看到redis的进程号以及它的端口号为6379。然后在通过命令可以看到redis仅仅是监听本机,如图4-9所示,然后通过修改redis的配置文件/etc/redis/6379.conf来监听所有端口,示意图如图4-10所示,随后再次重启redis服务,可以发现redis可以监听所有主机,如图4-11所示。通过redis-cli命令进入数据库,需要验证数据是否可以写入,如图4-12所示。

图4-8服务开启图

图4-9监听示意图

图4-10配置文件

图4-11监听所有主机

图4-12数据库验证读写操作

4.3.从服务器的安装

同理,可以在通过上述步骤进行redis数据库的安装,安装完成之后执行脚本命令开启redis服务,随后需要修改redis的配置文件/etc/redis/6379.conf来更改监听主机以及设置为从服务器,它的主服务器为,如图4-13所示。修改完成之后需要重启redis服务。通过命令可以看到监听主机发生改变。

图4-13配置修改图

4.3.主从复制测试

首先在主服务器上写入数据并且查看,如图4-14所示,随后在上查看数据,可以看到和一样的数据,但是不能删除数据,提示没有权限,如图4-15所示。

图4-14主服务器图

图4-15从服务器验证图

到此Redis数据库主从复制模式安装已经结束,服务已经正常运行,从图中可以看到,在redis主服务器上写入数据,可以在从服务器上查看数据,但是从服务器不能写入和删除数据。通过此操作,可以降低服务器的压力redis高可用集群,也提高了数据的安全性,但是当主从服务器中的故障时,整个环境将不再工作,为此引入了redis的哨兵模式解决这一问题,当故障时整个集群会自动从slave中挑选一台成为继续为整个环境提供服务,实现了故障切换功能。

4.哨兵模式配置

4.4.哨兵模式介绍

主从模式的缺点就是不具备高可用性,当主端挂掉以后,redis将不能再对外提供写入服务,的出现出现就是为了解决这一问题。

中文含义为哨兵,它的作用就是监控redis的运行状况,假如整个环境中只有一个redis节点,那么模式将没有任何意义。它是建立在主从模式的基础上,当主端挂掉后,会从所有的从端中重新选择一个从做为主端,并将所有从节点的配置文件中的属性修改为指向新的主服务器。重新启动主端后,它将不再是主端,而将充当从端以接收新主端的同步数据。由于哨兵也是可能被暂停的过程,因此哨兵还要配置多个共同形成一个哨兵集群。当配置了多个哨兵时,哨兵将自动相互监视。而且,一个redis可以被多个哨兵监控,一个哨兵或多个哨兵也可以监控多个redis。

它的工作方式如图4-16,从图中可以看所有的redis节点都处于系统下,并且会定时检测所有节点的状态。当主节点出现故障下线的时候,系统发现后会对主节点进行故障切换。它会从主节点下的所有的从节点中选取一个作为新的主节点,如图4-17所示,如果选择成为新的主节点,那么还会成为的从节点,同时系统还会继续监视已经下线的,在重新启动后会将其设置为的从节点。

图4-节点和哨兵系统

图4-17故障转移

4.4.哨兵模式配置

进入从服务器,同理,根据上述过程,分布在上安装配置redis数据库,安装完成之后,依旧通过脚本命令,开启redis服务。然后修改redis的配置文件,同一样,将监控主机改为所有主机和配置主服务器为的ip,随后重新启动redis服务,可以看到已经同步了的数据,如图4-18所示。

图4-数据

至此为止,已经实现了一主两从的主从复制模式,主节点为,从节点为和,接下来就要模拟哨兵模式的故障切换基于Redis高可用集群的设计与实现.doc,实现当主端宕机之后,系统会从主端所有的从节点中选举出一个新主端出来的过程。

下面开始进行哨兵模式的安装配置过程。首先我们进入到主机上,在/etc/redis目录下复制一份哨兵模式的配置文件.conf,使用vim命令编辑文件,如图4-19所示。

图4-哨兵模式配置图

然后在配置文件中进行修改,首先要关闭保护模式,然后设置当前系统认定主端失效的最小间隔时间是10000毫秒,意思是当主端在规定时间内一直

公告:
1. 本站所有资源来源于用户上传和网络,如有侵权请联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系站长处理!
6. 本站不售卖代码,资源标价只是站长收集整理的辛苦费!如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
7. 站长QQ号码 2205675299

资源库 - 资源分享下载网 » 基于Redis高可用集群的设计与实现.doc

常见问题FAQ

关于资源售价和售后服务的说明?
本站所有资源的标价均为本站收集资源的辛苦费,不代表资源本身的价值。软件是高智慧高价值的商品,不可能是白菜价。本站资源标价只是赞助费用,收取的赞助费仅用来维持本站的日常运营!毕竟收集整理资料需要投入云计算资源和站长大量的精力。
代码有没有售后服务和技术支持?
由于代码的运行具有不可预见性,本站不保证代码完整可运行,不提供技术支持和售后服务。 本站原创代码都是站长自己开发的,可以有偿提供技术支持服务。 网站里标明【亲测】的代码都是站长亲测过的,其他的代码由于精力有限,没有一一测试,不能保证代码就一定能够使用,更没有技术支持服务,下载前请自行斟酌。
有没有搭建服务?
由于搭建服务比较费时费力,所以本站除了原创代码外均不提供搭建服务。本站分享代码纯属兴趣爱好,不以盈利为目的,请勿咨询有没有搭建服务,谢谢理解。
链接地址失效了怎么办?
请带上资源链接地址联系客服,工作时间内我们看到后将第一时间回复。
关于解压密码
本站资源一般都没有加密,如果发现需要解压密码的,那么就输入 hao.35dc.com 试试。

发表评论

资源库,由老程序员细心甄别、精心筛选,只为提供优质的源码资源

关于我们 联系我们