一种分布式块设备并发读写方法及装置与流程

文档序号:32480286发布日期:2022-12-09 21:57阅读:85来源:国知局
一种分布式块设备并发读写方法及装置与流程

1.本技术涉及分布式存储技术领域,尤其涉及一种分布式块设备并发读写方法及装置。


背景技术:

2.在分布式块存储中,一般有多个客户端节点同时打开并操作同一个块设备,块设备由前端(客户端)+后端组成,这些操作除了扩缩容、创建、删除快照或者修改块设备的其他属性,虽然他们修改的是不同的元数据,这些操作都需要发送到卷的某个owner客户端去执行,这样不仅无法并发处理不同请求,还在一定程度上让压力集中在单个节点,还包括io读写。
3.现在主流的分布式块设备都要求客户端保证操作的互斥与同步,导致跨网络客户端节点间必须互相感知并同步,这样不仅限制了使用场景,增加了块设备的使用难度,还限制了多客户端的io并发。


技术实现要素:

4.本技术实施例提供一种分布式块设备并发读写方法及装置,用以提高分布式块设备并发请求能力。
5.本技术实施例提供一种分布式块设备并发读写方法,包括:
6.预先配置与卷相关联的数个不同功能的锁,任一锁被配置用于描述所述卷的操作状态;以及
7.预先将卷的逻辑空间按照设定大小划分为数个子区块,并为每个子区块配置多个子区块标识,所述子区块标识用于描述所述子区块的读写状态;
8.在分布式块设备的一个后端节点布置有块定位bcs服务,在多个客户端需要读写同一个卷的情况下,利用所述bcs服务与多个客户端,基于子区块标识,执行交互,以完成对所述卷的读写。
9.可选的,预先配置的与卷相关联的数个不同功能的锁包括:
10.规格锁size_lock,与卷的大小相关联,其被配置为在查询卷时读所述size_lock,在扩缩容时写所述size_lock;
11.卷名锁name_lock,与卷的名称相关联,其被配置为在查询卷时读所述name_lock,在重命名时写所述name_lock;
12.快照锁snap_lock,与卷的快照相关联;
13.迁移锁migrate_lock,与卷的迁移相关联;
14.各锁具有锁定lock、同步sync以及排他excl三种稳定状态,且各状态之间可相互切换;
15.所述方法还包括基于任一锁来配置客户端对于该卷对应的权限。
16.可选的,还包括为任一分布式块设备配置一个块标识io_map;
17.为每个子区块配置的子区块标识io_map至少包括:
18.子区块状态标识stat[id],具有指定的标识值以指示该子区块的读写状态;
[0019]
子区块详情标识slice_info,其具有如下结构:
[0020]
读写子标识slice_info.runing,表示正在读写该slice的客户端;
[0021]
等待子标识slice_info.wait,表示等待中的客户端。
[0022]
可选的,在多个客户端需要读写同一个卷的情况下,利用所述bcs服务与多个客户端,基于子区块标识,执行交互包括:
[0023]
利用所述bcs服务记录各客户端的基本信息,以完成初始化;
[0024]
获取客户端的读写请求,更新客户端的读写请求所对应的块标识io_map以及子区块详情标识slice_info,以完成各客户端的读写操作。
[0025]
可选的,获取客户端的读写请求,更新客户端的读写请求所对应的块标识io_map以及子区块详情标识slice_info,以完成各客户端的读写操作包括:
[0026]
在读写请求跨越至少两个子区块的情况下,利用所述bcs服务,更新对应的io_map、slice_info、slice_info.runing以及slice_info.wait,以依序执行多个客户端的读写请求。
[0027]
本技术还提出一种分布式块设备并发读写装置,包括处理器,其被配置为:
[0028]
预先配置与卷相关联的数个不同功能的锁,任一锁被配置用于描述所述卷的操作状态;以及
[0029]
预先将卷的逻辑空间按照设定大小划分为数个子区块,并为每个子区块配置多个子区块标识,所述子区块标识用于描述所述子区块的读写状态;
[0030]
在分布式块设备的至少一个后端节点布置有块定位bcs服务,在多个客户端需要读写同一个卷的情况下,利用所述bcs服务与多个客户端,基于子区块标识,执行交互,以完成对所述卷的读写。
[0031]
可选的,预先配置的与卷相关联的数个不同功能的锁包括:
[0032]
规格锁size_lock,与卷的大小相关联,其被配置为在查询卷时读所述size_lock,在扩缩容时写所述size_lock;
[0033]
卷名锁name_lock,与卷的名称相关联,其被配置为在查询卷时读所述name_lock,在重命名时写所述name_lock;
[0034]
快照锁snap_lock,与卷的快照相关联;
[0035]
迁移锁migrate_lock,与卷的迁移相关联;
[0036]
各锁具有锁定lock、同步sync以及排他excl三种稳定状态,且各状态之间可相互切换;
[0037]
所述处理器还被配置为:基于任一锁来配置客户端对于该卷对应的权限。
[0038]
可选的,所述处理器还被配置为为任一分布式块设备配置一个块标识io_map;
[0039]
为每个子区块配置的子区块标识io_map至少包括:
[0040]
子区块状态标识stat[id],具有指定的标识值以指示该子区块的读写状态;
[0041]
子区块详情标识slice_info,其具有如下结构:
[0042]
读写子标识slice_info.runing,表示正在读写该slice的客户端;
[0043]
等待子标识slice_info.wait,表示等待中的客户端。
[0044]
可选的,在多个客户端需要读写同一个卷的情况下,所述处理器还被配置为:
[0045]
利用所述bcs服务记录各客户端的基本信息,以完成初始化;
[0046]
获取客户端的读写请求,更新客户端的读写请求所对应的子区块的子区块标识io_map以及子区块详情标识slice_info,以完成各客户端的读写操作。
[0047]
可选的,所述处理器还被配置为:
[0048]
在读写请求跨越至少两个子区块的情况下,利用所述bcs服务,更新对应的io_map、slice_info、slice_info.runing以及slice_info.wait,以依序执行多个客户端的读写请求。
[0049]
本技术实施例针对卷的不同操作和元数据的特点,缩小互斥区间,不再以整个卷为锁是粒度,利用设计的smp_lock实现不同客户端元数据缓存的一致性,从而提高了分布式块设备并发请求能力。
[0050]
上述说明仅是本技术技术方案的概述,为了能够更清楚了解本技术的技术手段,而可依照说明书的内容予以实施,并且为了让本技术的上述和其它目的、特征和优点能够更明显易懂,以下特举本技术的具体实施方式。
附图说明
[0051]
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本技术的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
[0052]
图1为本技术实施例的并发读写方法的基本流程图;
[0053]
图2为本技术实施例的锁切换过程以及锁的状态示例;
[0054]
图3为本技术实施例的io_map的一种结构示例;
[0055]
图4为本技术实施例三个块存储客户端的并发读写流程示意。
具体实施方式
[0056]
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
[0057]
本技术实施例提供一种分布式块设备并发读写方法,如图1所示,包括:
[0058]
在步骤s101中,预先配置与卷相关联的数个不同功能的锁,任一锁被配置用于描述所述卷的操作状态。在一些实施例中,预先配置的与卷相关联的数个不同功能的锁(smp_lock锁设计)包括:
[0059]
规格锁size_lock,与卷的大小相关联,其被配置为在查询卷时读所述size_lock,在扩缩容时写所述size_lock;
[0060]
卷名锁name_lock,与卷的名称相关联,其被配置为在查询卷时读所述name_lock,在重命名时写所述name_lock;
[0061]
快照锁snap_lock,与卷的快照相关联;
[0062]
迁移锁migrate_lock,与卷的迁移相关联;
[0063]
如图2所示,各锁具有锁定lock、同步sync以及排他excl三种稳定状态,且各状态之间可相互切换,可以用中间状态来表示切换中的锁。具体的具体切换过程和锁的状态如表1所示:
[0064]
表1
[0065][0066][0067]
其中:
[0068]
lock_stat:表示锁的状态名称。
[0069]
next_stat:表示下一个状态,为0表示当前就是稳态。
[0070]
rep_stat:表示副本的状态。
[0071]
can_read:表示哪些客户端可读。
[0072]
can_rdlock:表示哪些客户端可以加读锁,当某个资源被加了该锁后,不能再加独占锁和写锁。
[0073]
can_wrlock:表示哪些客户端可以加写锁。
[0074]
can_xlock:表示哪些客户端可以加独占锁,只允许拥有该锁的客户端进行操作。
[0075]
any:表示任何拥有该资源的客户端。
[0076]
auth:表示被授权的客户端。
[0077]
xcl:表示排他执行的客户端。
[0078]
所述方法还包括基于任一锁来配置客户端对于该卷对应的权限。
[0079]
具体的,例如:有3个块设备客户端c1、c2和c3。他们都缓存有某个卷的size(元数据),且c1:size_lock、c2:size_lock、c3:size_lock状态均为lock_sync,auth为c1。某时刻c2要读取size,通过上表可知,所有副本都为lock_sync,所有客户端都可读可加读锁。
[0080]
预先将卷的逻辑空间按照设定大小划分为数个子区块,并为每个子区块配置多个子区块标识,所述子区块标识用于描述所述子区块的读写状态。
[0081]
在一些实施例中,还包括为任一分布式块设备配置一个块标识io_map;为每个子区块配置的子区块标识至少包括:
[0082]
子区块状态标识stat[id],具有指定的标识值以指示该子区块的读写状态;
[0083]
子区块详情标识slice_info,其具有如下结构:
[0084]
读写子标识slice_info.runing,表示正在读写该slice的客户端;
[0085]
等待子标识slice_info.wait,表示等待中的客户端。
[0086]
本示例中进一步介绍,sgio_lock锁设计,本示例中sgio_lock以不同区间为粒度,实现不同客户端可以并发下发io请求,上层用户在使用不同客户端时不再需要花费大量精
力进行同步,具体包括:
[0087]
为任一分布式块设备配置一个块标识io_map
[0088]
将卷的逻辑空间默认按照1mb大小进行划分为1个子区块slice,例如每个slice的状态用2bit表示,0:clean,可以读写,1:正在读,2:正在写。即,slice对应的状态为stat[id],id为该slice的逻辑顺序,比如区间[1m,2m),[1.5m,1.9m]的id为1。一次io可能跨越多个slice,比如区间[1.5m,2.5m]对应的stat[1],stat[2]。
[0089]
如图3所示,为了记录slice的操作详情,定义结构slice_info。其中,slice_info.runing代表正在读写该slice的客户端,正常情况下可以有多个客户端读,1个客户端在写。slice_info.wait代表等待中的客户端,比如正在被读的slice,写请求到来时会被放到wait中。job.c代表哪个客户端。job.t代表io类型,读或写。本示例中为一个块设备设计一个io_map,io_map包含所有子区块的slice_info。可以通过io_map[idx]查询操作slice的slice_info。例如,0-1m的数据的子区块slice id是0,其slice_info可以通过:io_map[0]来获取。
[0090]
在步骤s102中,在分布式块设备的至少一个后端节点布置有块定位bcs服务,在多个客户端需要读写同一个卷的情况下,利用所述bcs服务与多个客户端,基于子区块标识,执行交互,以完成对所述卷的读写。
[0091]
本技术实施例针对卷的不同操作和元数据的特点,缩小互斥区间,不再以整个卷为锁是粒度,而是依赖smp_lock设计实现不同客户端元数据缓存的一致性。
[0092]
在一些实施例中,在多个客户端需要读写同一个卷的情况下,利用所述bcs服务与多个客户端,基于子区块标识,执行交互包括:
[0093]
利用所述bcs服务记录各客户端的基本信息,以完成初始化;
[0094]
获取客户端的读写请求,更新客户端的读写请求所对应的块标识io_map以及子区块详情标识slice_info,以完成各客户端的读写操作。
[0095]
在一些实施例中,获取客户端的读写请求,更新客户端的读写请求所对应的块标识io_map以及子区块详情标识slice_info,以完成各客户端的读写操作包括:
[0096]
在读写请求跨越至少两个子区块的情况下,利用所述bcs服务,更新对应的io_map、slice_info、slice_info.runing以及slice_info.wait,以依序执行多个客户端的读写请求。
[0097]
具体如图4所示,本示例中有三个块存储客户端(前端)(c1、c2、c3),他们要读写同一个卷。集群中有一个节点部署bcs(block coordinate service)服务,负责协调客户端的并发io请求,可以采用如下步骤实现:
[0098]
a.客户端(c1、c2、c3)连接到存储集群并初始化的时候,需要与bcs服务交互,让其记录客户端的基本信息。
[0099]
b.客户端c1期望读取[0,2m),bcs收到请求并发现stat[0],stat[1]为0,代表可读写,更新stat[0]=1,stat[1]=1,io_map[1]。c1收到bcs回复后下发读请求到存储后端。
[0100]
c.客户端c2期望读取[1m,3m),因为跨越两个slice,且他们的状态分别为stat[1]为1,stat[2]为0,所以可以读取,再更新stat[2]为1,更新io_map[1],io_map[2],前者的slice_info的running列表中有c1、c2。c2收到bcs回复后下发读取请求到存储后端。
[0101]
d.操作b完成,c1完成读取[0,2m),发送任务完成消息到bcs,查询对应的slice_
info,running客户端都已完成,更新io_map[1]:running客户端中只有c2,stat[1]仍为1,io_map[0]:running客户端为空,stat[0]为0
[0102]
e.客户端c3期望写[0,2m),bcs收到请求,查询对应slice的状态,stat[0]为0,满足要求,更新stat[0]为2,更新io_map[0]。因为stat[1]为1,c2客户端还在读取[1m,2m),c3暂时无法写这个slice。更新io_map[1]:添加c3到waiting列表,client_id为c3,type为写。bcs回复c3。
[0103]
操作c完成,c2读取[1m,3m)完成,更新io_map[1]:running客户端为空,但是waitting列表中有c3,type为写,则将c3从waitting中移除,将c3添加到running客户端中,并将stat[1]更新为2,通知c3可以下发[1m,2m)的写请求。
[0104]
本技术的方案细化锁的粒度,通过锁切换让元数据修改在不同节点执行,通过bcs服务协调不同客户端的不同卷区间的io请求,从而有效提高了分布式块设备并发请求能力。
[0105]
本技术还提出一种分布式块设备并发读写装置,包括处理器,其被配置为:
[0106]
预先配置与卷相关联的数个不同功能的锁,任一锁被配置用于描述所述卷的操作状态;以及
[0107]
预先将卷的逻辑空间按照设定大小划分为数个子区块,并为每个子区块配置多个子区块标识,所述子区块标识用于描述所述子区块的读写状态;
[0108]
在分布式块设备的至少一个后端节点布置有块定位bcs服务,在多个客户端需要读写同一个卷的情况下,利用所述bcs服务与多个客户端,基于子区块标识,执行交互,以完成对所述卷的读写。
[0109]
在一些实施例中,预先配置的与卷相关联的数个不同功能的锁包括:
[0110]
规格锁size_lock,与卷的大小相关联,其被配置为在查询卷时读所述size_lock,在扩缩容时写所述size_lock;
[0111]
卷名锁name_lock,与卷的名称相关联,其被配置为在查询卷时读所述name_lock,在重命名时写所述name_lock;
[0112]
快照锁snap_lock,与卷的快照相关联;
[0113]
迁移锁migrate_lock,与卷的迁移相关联;
[0114]
各锁具有锁定lock、同步sync以及排他excl三种稳定状态,且各状态之间可相互切换;
[0115]
所述处理器还被配置为:基于任一锁来配置客户端对于该卷对应的权限。
[0116]
在一些实施例中,所述处理器还被配置为为任一分布式块设备配置一个块标识io_map;
[0117]
为每个子区块配置的子区块标识io_map至少包括:
[0118]
子区块状态标识stat[id],具有指定的标识值以指示该子区块的读写状态;
[0119]
子区块详情标识slice_info,其具有如下结构:
[0120]
读写子标识slice_info.runing,表示正在读写该slice的客户端;
[0121]
等待子标识slice_info.wait,表示等待中的客户端。
[0122]
在一些实施例中,在多个客户端需要读写同一个卷的情况下,所述处理器还被配置为:
[0123]
利用所述bcs服务记录各客户端的基本信息,以完成初始化;
[0124]
获取客户端的读写请求,更新客户端的读写请求所对应的子区块的子区块标识io_map以及子区块详情标识slice_info,以完成各客户端的读写操作。
[0125]
在一些实施例中,所述处理器还被配置为:
[0126]
在读写请求跨越至少两个子区块的情况下,利用所述bcs服务,更新对应的io_map、slice_info、slice_info.runing以及slice_info.wait,以依序执行多个客户端的读写请求。
[0127]
本技术实施例针对卷的不同操作和元数据的特点,缩小互斥区间,不再以整个卷为锁是粒度,依赖设计的simple_lock实现不同客户端元数据缓存的一致性,从而提高了分布式块设备并发请求能力。
[0128]
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
[0129]
上述本技术实施例序号仅仅为了描述,不代表实施例的优劣。
[0130]
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端(可以是手机,计算机,服务器或者网络设备等)执行本技术各个实施例所述的方法。
[0131]
上面结合附图对本技术的实施例进行了描述,但是本技术并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本技术的启示下,在不脱离本技术宗旨和权利要求所保护的范围情况下,还可做出很多形式,这些均属于本技术的保护之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1