一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种实现文件存储QoS的方法及系统与流程

2022-03-02 03:21:43 来源:中国专利 TAG:

一种实现文件存储qos的方法及系统
技术领域
1.本发明涉及信息技术领域,具体地说是一种实现文件存储qos的方法及系统。


背景技术:

2.伴随着云计算的逐渐兴起,对分布式存储系统提出了更高的要求,存储系统需要在保证性能、可靠性等不受影响的前提下,对有限的资源更加合理的分配。对基于nfs-ganesha实现的文件存储来说,可能会出现单个cephfs子目录占用过多资源,导致其他子目录带宽、延迟受到影响,进而影响用户体验;此外,在某些应用场景下,还需要对某些子目录分配更多资源,以便提供更好的服务质量。


技术实现要素:

3.本发明的技术任务是针对以上不足之处,提供一种实现文件存储qos的方法及系统,可以灵活限制cephfs子目录级别读写带宽,防止单个子目录占用过多资源,导致其他子目录性能收到影响;在某些特定场景下,可以为某些子目录分配更多资源,以提供更好的服务质量。
4.本发明解决其技术问题所采用的技术方案是:
5.一种实现文件存储qos的方法,该方法基于nfs-ganesha实现文件存储qos,使用nfs-ganesha将分布式文件系统cephfs导出,通过修改nfs-ganesha源码,读取新增配置文件中的cephfs子目录与读写带宽的映射关系,保存在挂载点的令牌池中;
6.限制nfs-ganesha每秒钟处理的数据包总大小小于令牌池中令牌数量,从而实现cephfs子目录级别的读写带宽限制,防止单个子目录占用过多资源,影响其他子目录性能。
7.ceph是一种开源的分布式存储系统,可以对外提供块存储、对象存储和文件存储服务,cephfs是ceph提供的文件系统,具有高性能、高可用、高可靠等特性。
8.nfs-ganesha是一个开源的企业级nfs服务器,支持将多种存储后端对外导出,提供nfs协议文件系统服务,如果将cephfs作为存储后端,nfs-ganesha通过ceph类库libcephfs实现对cephfs的操作。一个cephfs子目录可以创建一个挂载点,每个挂载点都有一个唯一标识,即挂载点id,客户端通过挂载点挂载nfs文件系统。
9.qos(quality of service,即服务质量)最早起源于网络,是指一个通信网络能利用各种基础技术,为特定应用提供更好服务的能力,对于文件存储来说,qos旨在合理分配有限的io资源,实现资源的按需分配,使每个cephfs子目录都能合理的占用资源。
10.本方法将分布式存储ceph的提供的文件系统cephfs导出为nfs。由于cephfs和nfs都支持posix语义,所以可以将请求透传至cephfs。
11.nfs-ganesha通过监听2049端口,接收客户端发来的nfs请求,客户端发来的read和write请求中都带有length参数,length就是本次请求的数据长度,能够获取请求的数据大小是实现qos的前提条件。
12.优选的,为实现本方法,新增dbus接口,通过该接口更新挂载点的令牌池,接口输
入参数为挂载点id和读写带宽的映射关系。
13.进一步的,新增配置文件,所述配置文件中保存了cephfs子目录挂载点id与读写带宽的映射关系,配置文件结构为每行记录一个挂载点id与读写带宽的映射关系,在nfs-ganesha启动时,按行读取读取配置文件中挂载点id与读写带宽的映射关系,初始化令牌池。
14.优选的,对本方法基于nfs-ganesha实现的文件存储系统来说,一个cephfs子目录可以创建一个挂载点,挂载点对外表现为“{nfs-ganesha的ip}:/{子目录在cephfs中的路径}”,客户端通过执行“mount

t nfs{挂载点}{挂载路径}”将nfs-ganesha导出的nfs文件系统挂载到客户端上,挂载路径为客户端挂载nfs文件系统的路径。
15.优选的,修改nfs-ganesha源码后,nfs-ganesha启动时增加以下步骤:
16.1)、按行读取配置文件中挂载点id与cephfs子目录读写带宽的映射关系。
17.2)、将挂载点id与cephfs子目录读写带宽的映射关系保存在内存,即挂载点的令牌池中,供处理读写请求时使用,尽量减少性能损耗。
18.进一步的,修改nfs-ganesha源码后,新增挂载点时增加以下步骤:
19.1)、调用dbus接口将挂载点id与cephfs子目录读写带宽的映射关系保存在挂载点的令牌池中;
20.2)、新增一行配置,保存挂载点id与cephfs子目录读写带宽的映射关系;
21.修改nfs-ganesha源码后,删除挂载点时增加以下步骤:
22.1)、调用dbus接口将保存在挂载点的令牌池的挂载点id与cephfs子目录读写带宽的映射关系删除;
23.2)、删除配置文件中对应的行,防止重启后读取到配置文件中的脏数据。
24.进一步的,修改nfs-ganesha源码后,nfs-ganesha处理读写请求前增加以下步骤:
25.1)、判断令牌池是否初始化当前挂载点与读写带宽映射关系,若存在,则当前挂载点开启qos,若不存在,则当前挂载点不开启qos;
26.2)、判断该挂载点是否开启qos,如果开启,进入步骤3);如果不开启,开始正常读写流程;
27.3)、判断本次请求是读请求还是写请求,如果是写请求,进入步骤4),如果是写请求,进入步骤5);
28.4)、判断写令牌池中是否还有剩余令牌,如果有,写令牌池令牌数减去本次写请求大小,即请求中的length字段,然后开始正常写流程;如果没有,进入步骤6);
29.5)、判断读令牌池中是否还有剩余令牌,如果有,读令牌池令牌数减去本次读请求大小,即请求中的length字段,然后开始正常读流程;如果没有,进入步骤6);
30.6)、重试次数加1,然后判断重试次数是否小于10,如果小于10,等待一秒后再次进入步骤3,如果大于10,开始正常读写流程。
31.7)、每秒恢复一次令牌池中剩余令牌数量,从而实现每秒只处理指定大小的数据包,达到qos效果。
32.优选的,该方法的实现过程如下:
33.1)、判断该挂载点是否开启qos,如果开启,进入步骤2);如果不开启,开始正常读写流程;
34.2)、判断令牌池中是否还有剩余令牌,如果有,令牌池令牌数减去本次读写请求大小,即请求中的length字段,然后开始正常读写流程;如果没有,进入步骤3);
35.3)、重试次数加1,然后判断重试次数是否小于10,如果小于10,等待一秒后再次进入步骤2);如果大于10,开始正常读写流程;
36.4)、每秒恢复一次令牌池中令牌数量,从而实现每秒只处理指定大小的数据包。
37.本发明还要求保护一种实现文件存储qos的系统,该系统包括:nfs-ganesha服务器,以及至少一个存储器和至少一个处理器;
38.所述至少一个存储器,用于存储机器可读程序;
39.所述至少一个处理器,用于调用所述机器可读程序,执行上述的实现文件存储qos的方法。
40.本发明还要求保护计算机可读介质,所述计算机可读介质上存储有计算机指令,所述计算机指令在被处理器执行时,使所述处理器执行上述的实现文件存储qos的方法。
41.本发明的一种实现文件存储qos的方法及系统与现有技术相比,具有以下有益效果:
42.通过本方法,nfs-ganesha导出cephfs时,可以对指定子目录限制指定读写带宽,防止单个子目录占用过多资源,导致其他子目录性能收到影响;在某些特定场景下,可以为某些子目录分配更多资源,以提供更好的服务质量。
43.另外,通过dbus接口设置令牌池实时生效,无需重启nfs-ganesha或等待配置生效,在云计算场景下,可以实现各公有云厂商的根据子目录容量限制子目录读写带宽的功能。
44.且由于令牌池的恢复、设置操作均在内存中进行,不涉及磁盘io或网络io等耗时操作,所以对nfs-ganesha处理读写请求性能影响不大,经过测试,修改nfs-ganesha源码前后cpu利用率相差在5%以内。
附图说明
45.图1是本发明实施例提供的实现文件存储qos的方法实现流程图。
具体实施方式
46.下面结合附图和具体实施例对本发明作进一步说明。
47.实施例提供一种实现文件存储qos的方法,该方法基于nfs-ganesha实现文件存储qos,使用nfs-ganesha将分布式文件系统cephfs导出,通过修改nfs-ganesha源码,读取新增配置文件中的cephfs子目录与读写带宽的映射关系,保存在挂载点的令牌池中;
48.限制nfs-ganesha每秒钟处理的数据包总大小小于令牌池中令牌数量,从而实现cephfs子目录级别的读写带宽限制,防止单个子目录占用过多资源,影响其他子目录性能。
49.ceph是一种开源的分布式存储系统,可以对外提供块存储、对象存储和文件存储服务,cephfs是ceph提供的文件系统,具有高性能、高可用、高可靠等特性。
50.nfs-ganesha是一个开源的企业级nfs服务器,支持将多种存储后端对外导出,提供nfs协议文件系统服务,如果将cephfs作为存储后端,nfs-ganesha通过ceph类库libcephfs实现对cephfs的操作。一个cephfs子目录可以创建一个挂载点,每个挂载点都有
一个唯一标识,即挂载点id,客户端通过挂载点挂载nfs文件系统。
51.qos(quality of service,即服务质量)最早起源于网络,是指一个通信网络能利用各种基础技术,为特定应用提供更好服务的能力,对于文件存储来说,qos旨在合理分配有限的io资源,实现资源的按需分配,使每个cephfs子目录都能合理的占用资源。
52.本方法将分布式存储ceph的提供的文件系统cephfs导出为nfs。由于cephfs和nfs都支持posix语义,所以可以将请求透传至cephfs。
53.nfs-ganesha通过监听2049端口,接收客户端发来的nfs请求,客户端发来的read和write请求中都带有length参数,length就是本次请求的数据长度,能够获取请求的数据大小是实现qos的前提条件。
54.对基于nfs-ganesha实现的文件存储系统来说,一个cephfs子目录可以创建一个挂载点,挂载点对外表现为“{nfs-ganesha的ip}:/{子目录在cephfs中的路径}”,客户端通过执行“mount

t nfs{挂载点}{挂载路径}”将nfs-ganesha导出的nfs文件系统挂载到客户端上,挂载路径为客户端挂载nfs文件系统的路径。
55.在nfs-ganesha中,每个挂载点都有一个唯一标识,即挂载点id。为了实现对每个挂载点分别限制不同的读带宽和写带宽,就需要保存挂载点id和读写带宽的映射关系,为了尽可能不影响nfs-ganesha处理读写请求的性能,需要将挂载点id与读写带宽的映射关系保存在内存中,即挂载点的令牌池。本发明实施例中,利用nfs-ganesha已经提供的特性,即nfs-ganesha对外暴露dbus接口与外界交互,可以在nfs-ganesha所在主机上执行命令调用dbus接口,故需要新增一个dbus接口,可以通过这个接口更新挂载点的令牌池,接口输入参数为挂载点id和读写带宽的映射关系。
56.但通过dbus接口写入nfs-ganesha的数据是保存在内存中的,所以nfs-ganesha重启后,通过dbus接口写入的挂载点id和读写带宽的映射关系会丢失,所以还需要新增一个配置文件,配置文件中保存了挂载点id与读写带宽的映射关系,配置文件结构为每行记录一个挂载点id与读写带宽的映射关系,在nfs-ganesha启动时,按行读取读取配置文件中挂载点id与读写带宽的映射关系,初始化令牌池。
57.修改nfs-ganesha源码后,nfs-ganesha启动时增加以下步骤:
58.1)、按行读取配置文件中挂载点id与cephfs子目录读写带宽的映射关系。
59.2)、将挂载点id与cephfs子目录读写带宽的映射关系保存在内存,即挂载点的令牌池中,供处理读写请求时使用,尽量减少性能损耗。
60.修改nfs-ganesha源码后,新增挂载点时增加以下步骤:
61.1)、调用dbus接口将挂载点id与cephfs子目录读写带宽的映射关系保存在挂载点的令牌池中;
62.2)、由于通过dbus接口写入的配置重启后会丢失,想要持久化配置,就需要同步修改配置文件,新增一行配置,保存挂载点id与cephfs子目录读写带宽的映射关系;
63.修改nfs-ganesha源码后,删除挂载点时增加以下步骤:
64.1)、调用dbus接口将保存在挂载点的令牌池的挂载点id与cephfs子目录读写带宽的映射关系删除;
65.2)、删除配置文件中对应的行,防止重启后读取到配置文件中的脏数据。修改nfs-ganesha源码后,nfs-ganesha处理读写请求前增加以下步骤:
66.1)、判断令牌池是否初始化当前挂载点与读写带宽映射关系,若存在,则当前挂载点开启qos,若不存在,则当前挂载点不开启qos;
67.2)、判断该挂载点是否开启qos,如果开启,进入步骤3);如果不开启,开始正常读写流程;
68.3)、判断本次请求是读请求还是写请求,如果是写请求,进入步骤4),如果是写请求,进入步骤5);
69.4)、判断写令牌池中是否还有剩余令牌,如果有,写令牌池令牌数减去本次写请求大小,即请求中的length字段,然后开始正常写流程;如果没有,进入步骤6);
70.5)、判断读令牌池中是否还有剩余令牌,如果有,读令牌池令牌数减去本次读请求大小,即请求中的length字段,然后开始正常读流程;如果没有,进入步骤6);
71.6)、重试次数加1,然后判断重试次数是否小于10,如果小于10,等待一秒后再次进入步骤3,如果大于10,开始正常读写流程。
72.7)、此外,若不恢复令牌池中剩余令牌数量,剩余令牌会很快耗尽,所有请求将会重试至最大重试次数,nfs-ganesha无法继续对外提供nfs服务,所以每秒恢复一次令牌池中剩余令牌数量,从而实现每秒只处理指定大小的数据包,达到qos效果。
73.本实施例提供的一种基于nfs-ganesha实现文件存储qos的实现过程如下:
74.1)、判断该挂载点是否开启qos,如果开启,进入步骤2);如果不开启,开始正常读写流程;
75.2)、判断令牌池中是否还有剩余令牌,如果有,令牌池令牌数减去本次读写请求大小,即请求中的length字段,然后开始正常读写流程;如果没有,进入步骤3);
76.3)、重试次数加1,然后判断重试次数是否小于10,如果小于10,等待一秒后再次进入步骤2);如果大于10,开始正常读写流程;
77.4)、每秒恢复一次令牌池中令牌数量,从而实现每秒只处理指定大小的数据包。
78.本发明实施例还提供了一种实现文件存储qos的系统,该系统包括:nfs-ganesha服务器,以及至少一个存储器和至少一个处理器;
79.所述至少一个存储器,用于存储机器可读程序;
80.所述至少一个处理器,用于调用所述机器可读程序,执行本发明上述实施例中所述的实现文件存储qos的方法。
81.本发明实施例还提供了一种计算机可读介质,所述计算机可读介质上存储有计算机指令,所述计算机指令在被处理器执行时,使所述处理器执行本发明上述实施例中所述的实现文件存储qos的方法。具体地,可以提供配有存储介质的系统或者装置,在该存储介质上存储着实现上述实施例中任一实施例的功能的软件程序代码,且使该系统或者装置的计算机(或cpu或mpu)读出并执行存储在存储介质中的程序代码。
82.在这种情况下,从存储介质读取的程序代码本身可实现上述实施例中任何一项实施例的功能,因此程序代码和存储程序代码的存储介质构成了本发明的一部分。
83.用于提供程序代码的存储介质实施例包括软盘、硬盘、磁光盘、光盘(如cd-rom、cd-r、cd-rw、dvd-rom、dvd-ram、dvd-rw、dvd rw)、磁带、非易失性存储卡和rom。可选择地,可以由通信网络从服务器计算机上下载程序代码。
84.此外,应该清楚的是,不仅可以通过执行计算机所读出的程序代码,而且可以通过
基于程序代码的指令使计算机上操作的操作系统等来完成部分或者全部的实际操作,从而实现上述实施例中任意一项实施例的功能。
85.此外,可以理解的是,将由存储介质读出的程序代码写到插入计算机内的扩展板中所设置的存储器中或者写到与计算机相连接的扩展单元中设置的存储器中,随后基于程序代码的指令使安装在扩展板或者扩展单元上的cpu等来执行部分和全部实际操作,从而实现上述实施例中任一实施例的功能。
86.上文通过附图和优选实施例对本发明进行了详细展示和说明,然而本发明不限于这些已揭示的实施例,基与上述多个实施例本领域技术人员可以知晓,可以组合上述不同实施例中的代码审核手段得到本发明更多的实施例,这些实施例也在本发明的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献