分布式Redis高可用集群的设计与实现
发布时间:2021-10-09 08:25
Redis作为高效率的Key-Value数据库存储系统,支持多种类型的存储方式与数据操作,加之其协议类型简单,被广泛应用于数据存储及缓存中。对于大数据量业务场景下,必然需要部署多个Redis实例解决单物理机下的内存瓶颈,目前Redis官方的推出的Redis Cluster集群方案虽然可以实现部署多个Redis实例,但是其复杂性过高难以维护和升级,不适合生产环境。本文在大数据量、高并发业务场景下对Redis集群进行需求分析,根据Redis的特性,调研对比当前Redis分布式集群的主流产品,使用了代理模式进行数据分片,设计并实现了分布式高可用的Redis集群方案。该方案中设计了Proxy代理层,由Proxy对外提供了统一的调用接口,屏蔽了底层Redis集群的具体细节。Proxy可以通过部署多实例和负载均衡实现高可用,并使用ZooKeeper作为Proxy多实例的配置中心存放路由信息,实现多Proxy实例的数据一致性。文中主要描述了Proxy代理层的设计与实现,Proxy分为四个模块:NetIO模块,Proxy的网络框架;Packet Handler模块,对Redis通信协议解析处理;ZKR...
【文章来源】:南京大学江苏省 211工程院校 985工程院校 教育部直属院校
【文章页数】:81 页
【学位级别】:硕士
【部分图文】:
图1.1客户端分片??
是基于服务器进行分片的,通过Slot数据结构进行分片,将所有的数据划分到??0-16383?(共16384)个Slot上,每个请求根据Key值进行CRC16计算哈希值??映射到0-16383的某个Slot上[周晓场,2018]。计算Slotld代码如图1.3所示:??slotld?=?crc16(key)?%?16384;??图?1.3?Redis?Cluster?计算?Slotld??计算出Slotld后,由于一个Slot对应一个底层Redis实例,一个Redis实??例分摊16384个Slot的一■部分,根据Slot与Redis的映射关系,四配到特定的??Redis实例。当客户端连接到其中一台Redis实例上发送命令请求,Redis实例??首先进行命令解析,获取请求的Key值,然后计算出Key对应的Slot,如果该??Slot不属于当前Redis实例,Redis会返回给客户端一个moved命令,并告诉??客户端正确的路由信息。??Redis?Cluster优点在与不需要借助第三方代理实现路由转发,在服务器端??进行数据分片,需要在客户端进行重定向[Huang?etal.,?2016],造成能略微下降。??Redis?Cluster可以平滑的进行动态扩容和缩容
Redis?Slave,?Slave将rdb文件镜像加载到内存,完成主从数据库状态的一致性;??(4)?Redis?Master节点此期间进行的写操作同步到Redis?Slave节点执行,??同步操作执行完成。主从同步流程图如图2.1所示。??Redis?Redis??Slave?Master??I?I??I?I??r1,?从节点给主节点发送全量同步命令??Tl ̄|主节点执行bgsave命令并??在后台生成RDB文件,在??<1?缓冲区记录新来的写命令??主节点将生成的RDB?'??/?????加载RDB文??件至内存?主节点将缓冲区中的????????hi??I??执行写命令?I??!??I?i??i?i??i?■??图2.1主从同步流程图??在完成命令同步后,主从数据库状态在主实例接收到写命令之后又不一致,??此时Redis?Master就会向Redis?Slave执行命令传播,将写命令发送给Redis??Slave执行。??在Redis2.8版本之前,Redis同步机制只会进行全量同步,即无论是断线??后重连还是初次进行主从同步都是执行sync命令以及命令传播操作。但Redis??执行bgsave命令会消耗大量的服务器资源,而主服务器发送rdb文件给从服务??器会占用大量的网络资源。所以在Redis2.8之后的版本,对sync命令进行了优??化
【参考文献】:
期刊论文
[1]一种实时数据库的分布式存储方法[J]. 周淳,李贤慧. 计算机系统应用. 2019(04)
[2]基于Reactor模式的高性能反向代理服务器设计[J]. 邢颖,黄启俊,易凡,黄家伟. 自动化技术与应用. 2019(03)
[3]基于NoSQL的特色数据库系统研究[J]. 赵永强. 图书馆工作与研究. 2018(S1)
[4]NoSQL数据库与缓存一致性研究[J]. 叶文. 信息与电脑(理论版). 2018(21)
[5]一种高效的Redis Cluster的分布式缓存系统[J]. 李翀,刘利娜,刘学敏,张士波. 计算机系统应用. 2018(10)
[6]基于分片一致性哈希负载均衡策略与应用[J]. 苏跃明,李晨,田丽华. 计算机技术与发展. 2017(11)
[7]Redis集群可靠性的研究与优化[J]. 李燚,顾乃杰,黄增士,任开新. 计算机工程. 2018(05)
[8]多线程环境下Reactor模式的研究与实现[J]. 李璞,张玲,胡术,潘倩,李艳. 网络新媒体技术. 2017(02)
[9]分布式存储系统中改进的一致性哈希算法[J]. 王康,李东静,陈海光. 计算机技术与发展. 2016(07)
[10]Linux下套接字I/O复用模型介绍[J]. 陈锋. 福建电脑. 2010(11)
硕士论文
[1]基于NoSQL数据库的系统设计与开发[D]. 仝野.南京邮电大学 2018
[2]基于ZooKeeper的配置中心系统设计与实现[D]. 董龙成.西安电子科技大学 2018
[3]基于Redis的分布式Key-Value系统的优化研究[D]. 周晓场.华南理工大学 2018
[4]数据库集群中间件负载均衡模块的设计与实现[D]. 崔丹.北京邮电大学 2017
[5]基于一致性哈希的高可用负载均衡方案的设计与实现[D]. 李志成.浙江大学 2016
[6]基于NIO的Java高性能网络技术的研究与应用[D]. 吴高阳.西安电子科技大学 2014
[7]基于ZooKeeper的分布式处理框架的研究与实现[D]. 谭玉靖.北京邮电大学 2014
[8]基于高并发海量数据的数据库高可用性的研究与实现[D]. 刘盛.天津大学 2012
[9]基于NIO的java高性能网络应用的技术研究[D]. 曾自强.北京邮电大学 2009
本文编号:3426000
【文章来源】:南京大学江苏省 211工程院校 985工程院校 教育部直属院校
【文章页数】:81 页
【学位级别】:硕士
【部分图文】:
图1.1客户端分片??
是基于服务器进行分片的,通过Slot数据结构进行分片,将所有的数据划分到??0-16383?(共16384)个Slot上,每个请求根据Key值进行CRC16计算哈希值??映射到0-16383的某个Slot上[周晓场,2018]。计算Slotld代码如图1.3所示:??slotld?=?crc16(key)?%?16384;??图?1.3?Redis?Cluster?计算?Slotld??计算出Slotld后,由于一个Slot对应一个底层Redis实例,一个Redis实??例分摊16384个Slot的一■部分,根据Slot与Redis的映射关系,四配到特定的??Redis实例。当客户端连接到其中一台Redis实例上发送命令请求,Redis实例??首先进行命令解析,获取请求的Key值,然后计算出Key对应的Slot,如果该??Slot不属于当前Redis实例,Redis会返回给客户端一个moved命令,并告诉??客户端正确的路由信息。??Redis?Cluster优点在与不需要借助第三方代理实现路由转发,在服务器端??进行数据分片,需要在客户端进行重定向[Huang?etal.,?2016],造成能略微下降。??Redis?Cluster可以平滑的进行动态扩容和缩容
Redis?Slave,?Slave将rdb文件镜像加载到内存,完成主从数据库状态的一致性;??(4)?Redis?Master节点此期间进行的写操作同步到Redis?Slave节点执行,??同步操作执行完成。主从同步流程图如图2.1所示。??Redis?Redis??Slave?Master??I?I??I?I??r1,?从节点给主节点发送全量同步命令??Tl ̄|主节点执行bgsave命令并??在后台生成RDB文件,在??<1?缓冲区记录新来的写命令??主节点将生成的RDB?'??/?????加载RDB文??件至内存?主节点将缓冲区中的????????hi??I??执行写命令?I??!??I?i??i?i??i?■??图2.1主从同步流程图??在完成命令同步后,主从数据库状态在主实例接收到写命令之后又不一致,??此时Redis?Master就会向Redis?Slave执行命令传播,将写命令发送给Redis??Slave执行。??在Redis2.8版本之前,Redis同步机制只会进行全量同步,即无论是断线??后重连还是初次进行主从同步都是执行sync命令以及命令传播操作。但Redis??执行bgsave命令会消耗大量的服务器资源,而主服务器发送rdb文件给从服务??器会占用大量的网络资源。所以在Redis2.8之后的版本,对sync命令进行了优??化
【参考文献】:
期刊论文
[1]一种实时数据库的分布式存储方法[J]. 周淳,李贤慧. 计算机系统应用. 2019(04)
[2]基于Reactor模式的高性能反向代理服务器设计[J]. 邢颖,黄启俊,易凡,黄家伟. 自动化技术与应用. 2019(03)
[3]基于NoSQL的特色数据库系统研究[J]. 赵永强. 图书馆工作与研究. 2018(S1)
[4]NoSQL数据库与缓存一致性研究[J]. 叶文. 信息与电脑(理论版). 2018(21)
[5]一种高效的Redis Cluster的分布式缓存系统[J]. 李翀,刘利娜,刘学敏,张士波. 计算机系统应用. 2018(10)
[6]基于分片一致性哈希负载均衡策略与应用[J]. 苏跃明,李晨,田丽华. 计算机技术与发展. 2017(11)
[7]Redis集群可靠性的研究与优化[J]. 李燚,顾乃杰,黄增士,任开新. 计算机工程. 2018(05)
[8]多线程环境下Reactor模式的研究与实现[J]. 李璞,张玲,胡术,潘倩,李艳. 网络新媒体技术. 2017(02)
[9]分布式存储系统中改进的一致性哈希算法[J]. 王康,李东静,陈海光. 计算机技术与发展. 2016(07)
[10]Linux下套接字I/O复用模型介绍[J]. 陈锋. 福建电脑. 2010(11)
硕士论文
[1]基于NoSQL数据库的系统设计与开发[D]. 仝野.南京邮电大学 2018
[2]基于ZooKeeper的配置中心系统设计与实现[D]. 董龙成.西安电子科技大学 2018
[3]基于Redis的分布式Key-Value系统的优化研究[D]. 周晓场.华南理工大学 2018
[4]数据库集群中间件负载均衡模块的设计与实现[D]. 崔丹.北京邮电大学 2017
[5]基于一致性哈希的高可用负载均衡方案的设计与实现[D]. 李志成.浙江大学 2016
[6]基于NIO的Java高性能网络技术的研究与应用[D]. 吴高阳.西安电子科技大学 2014
[7]基于ZooKeeper的分布式处理框架的研究与实现[D]. 谭玉靖.北京邮电大学 2014
[8]基于高并发海量数据的数据库高可用性的研究与实现[D]. 刘盛.天津大学 2012
[9]基于NIO的java高性能网络应用的技术研究[D]. 曾自强.北京邮电大学 2009
本文编号:3426000
本文链接:https://www.wllwen.com/kejilunwen/jisuanjikexuelunwen/3426000.html