云存储网关"NFS V4优化"选项详解-阿里云开发者社区

开发者社区> xiaoli_test> 正文

云存储网关"NFS V4优化"选项详解

简介: 本文主要介绍了云存储网关的“NFS V4优化”选项的工作原理,如果您并没有需求必须使用NFSv3的方式挂载网关的NFS共享,建议您都以NFSv4的方式挂载并打开这个选项,从而获得更理想的文件上传效率。
+关注继续查看

背景

阿里云云存储网关支持以传统文件访问协议(NFS/SMB)来访问阿里云对象存储服务,网关通过暴露一个文件共享来和后端的OSS Bucket映射。用户操作对应的文件共享也就相当于在相应的OSS Bucket上进行操作,大大的便利了习惯于传统文件协议的用户。

NFS网络文件系统是在Linux机器上通用的一种文件系统,允许用户能够以本地文件系统类似的方式通过网络来访问远端服务器上的文件。NFS自推出以来,历经了NFSv2、NFSv3、NFSv4几个版本,现在的Linux机器上基本都已经用的NFSv4的版本,NFSv3在一些稍微老些版本的机器上还有使用,NFSv2已经几乎没有人使用了。

云存储网关是支持以NFSv3和NFSv4两个版本的协议来进行访问的,为了使这两个版本都能支持(主要是为了兼顾NFSv3的支持),在实现方面实际上有些权衡,导致默认情况下数据上传到OSS Bucket的效率对NFSv4协议来说其实不是最优的。这也就是为什么引入“NFS V4优化“这个选项的原因。

原理解析

使用过云存储网关的用户应该都知道,在用户写入一个文件到云存储网关的NFS共享里面之后,云存储网关会在后台将这个文件上传到该共享所对应的OSS Bucket里面。但是网关在什么时候开始文件的上传呢?是这个文件完全写入完成才开始上传呢?还是说文件没有完全写完的时候就开始上传了,边写边传呢?

OSS更新某个文件或者说是对象的时候,是原子性的,要么通过一次PutObject来完成,要么通过调用Multipart Upload相关的API接口来完成,即使只修改文件的很少一部分,也是如此。所以对一个文件如果写入了10次,实际上最后调用一次API就好了。这样比较理想的做法是在文件做了关闭动作表明当次修改完成之后,再根据用户是否对文件做了修改来决定是不是需要上传。听起来很完美,对不对?对NFSv4协议来说,这确实是比较完美的。但是考虑到NFSv3协议的话,事情就有了一点点变化,因为NFSv3协议原生并没有Close语义!!!用户在客户端关闭了某个文件之后,从服务器的角度来说,并不知道用户关闭了文件这件事情,所以对NFSv3而言我们并没有办法采用这边提到的完美的上传解决方案。

所以为了对NFSv3和NFSv4能够提供一种通用的解决方案,之前文件网关提供了“同步延迟”这个选项来控制文件上传的真正时机。这个选项的效果基本可以做到在绝大多数情况下,只在文件关闭的时候将这个文件上传到OSS Bucket。但是实际上它是通过检测在一定时间段内是否有写入来侦测是否需要上传的,假设同步延迟的值是10秒,也就是说对某个文件如果10秒内没有新的写入,就会尝试将该文件上传,否则就会延迟上传的时间。考虑到绝大数情况下用户基本都是打开文件然后持续的写入最后关闭文件,所以对这些情况基本是能够做到在文件关闭的时候才上传这种效果的。

但是如果用户打开文件之后,并不是持续的写入,而是间隔的写入,并且写入的间隔大于“同步延迟”的话(或者用户想尽早看到文件出现在OSS Bucket里面而干脆将同步延迟设置成了零)就可能会造成一些中间没有意义的上传。如何优化这种情况呢?

介绍到在这,相信您已经明白了新的“NFS V4优化“选项该出场了。考虑到现在绝大多数的Linux机器基本都已经支持NFSv4版本了,而且对绝大多数用户来说并没有强烈的需求需要指定使用NFSv3版本。所以“NFS V4优化”选项实现了前文提到的那种完美的方案,只有在用户在客户端关闭了文件的时候,才尝试上传文件到OSS Bucket。在这个选项打开时,尝试用NFSv3协议挂载共享就会失败。

配置

在升级到最新版本的云存储网关之后就可以体验“NFS V4优化”选项了,可以新建NFS共享的时候勾上这个选项,也可以对一个已有的共享打开或者关闭这个选项。如果您本地已经挂载了NFS共享,您可以使用mount命令看到当前挂载的NFS的版本。在笔者的CentOS 7.6上,当前挂载的NFS版本是4.1。

[root@iZbp116y3gfxxlyq58wu9iZ ~]# mount
...
172.16.159.155:/nfsv4optimize on /mnt/v4optimize type nfs4 (rw,relatime,vers=4.1,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=172.16.159.131,local_lock=none,addr=172.16.159.155)

这就说明你的机器默认已经支持了NFSv4,如果所有的客户端上的输出都具有“vers=4.x”这种输出,那就可以很安全的打开“NFS V4优化”选项了。
set

打开该选项之后,尝试用NFSv3的方式挂载的话会出错。

[root@iZbp116y3gfxxlyq58wu9iZ ~]# mount 172.16.159.155:/nfsv4optimize /mnt/v4optimize/ -overs=3

mount.nfs: access denied by server while mounting 172.16.159.155:/nfsv4optimize

如果因为某些无法避免的原因必须要使用NFSv3的方法的挂载的话,可以动态关闭这个选项之后再尝试挂载。

[root@iZbp116y3gfxxlyq58wu9iZ ~]# mount 172.16.159.155:/nfsv4optimize /mnt/v4optimize/ -overs=3

[root@iZbp116y3gfxxlyq58wu9iZ ~]# mount

...
172.16.159.155:/nfsv4optimize on /mnt/v4optimize type nfs (rw,relatime,vers=3,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=172.16.159.155,mountvers=3,mountport=32888,mountproto=udp,local_lock=none,addr=172.16.159.155)

验证

接下来我们通过一个简单的例子来看这个选项的效果。我们在客户端写了一个简单的程序,它打开一个共享里面的文件,每一分钟写入一些内容,我们可以通过观察OSS Bucket对应的这个文件的修复时间来判断到底上传了几次。

import time

with open("/mnt/v4optimize/v3test/test_file", "w") as f:
    for i in range(1,5):
        f.write("hello world!")
        f.flush()
        time.sleep(60)

为了性能默认的NFS挂载参数一般是以async的模式来挂载共享的,也就是说客户端操作系统会缓存一部分数据,然后再一起写到NFS共享里面。为了消除这一部分的影响让测试结果更精确,我们需要以sync的方式挂载该NFS共享来测试。

[root@iZbp116y3gfxxlyq58wu9iZ /]# mount 172.16.159.155:/nfsv4optimize /mnt/v4optimize/ -osync

[root@iZbp116y3gfxxlyq58wu9iZ /]# mount
...

172.16.159.155:/nfsv4optimize on /mnt/v4optimize type nfs4 (rw,relatime,sync,vers=4.1,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=172.16.159.131,local_lock=none,addr=172.16.159.155)

之后我们可以通过OSS控制台观察这个文件的修改时间来判断到底发生了几次上传。
time

当前共享的同步延迟选项设置的是0秒。根据前面的判断,不打开“NFS V4优化”选项,我们应该看到多次上传。通过观察会发现OSS Bucket里面的文件修改时间确实每一分钟会修改一次,符合我们的预期。如果打开该优化选项,只会看到文件的修改时间变了一次。感兴趣的用户也可以自己做一下这个测试。

总结

本文主要介绍了云存储网关的“NFS V4优化”选项的工作原理,如果您并没有需求必须使用NFSv3的方式挂载网关的NFS共享,建议您都以NFSv4的方式挂载并打开这个选项,从而获得更理想的文件上传效率。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
10081 0
8月23日云栖精选夜读 | 阿里推出 PolarFS 分布式文件系统:将存储与计算分开,提升云数据库性能(附论文)
没错 我们就是阿里F4 (阿里云、钉钉、支付宝、天猫) 接下来 说说我们出道这件事 本打算秘密出道 没想到刚出重庆江北机场 就被一群死忠粉团团围住 坐上官方出道指定用车荣威RX8 开启出道之行 这颗蛋蛋也忒大了 (还好车够大) 冒着44度的高温来到重庆 当然不只是为了吃喝玩乐 为重庆智博会站台 才是我们这次出道的真正目的 对了对了 还要介绍一下云栖大会·重庆峰会 毕竟看点多多呀 看点1 工业互联网平台发布 据说,这个平台可以帮助80%的中小企业及制造企业,降低20%以上的开发成本与时间,提高效益。
2846 0
粒子群优化算法(PSO)之基于离散化的特征选择(FS)(一)
欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习、深度学习的知识! 作者:Geppetto 在机器学习中,离散化(Discretization)和特征选择(Feature Selection,FS)是预处理数据的重要技术,提高了算法在高维数据上的性能。
1195 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
10883 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13886 0
高阶魔方与数据编排 - 数据库存储优化之路
标签 PostgreSQL , cluster , 预排 , 一维数据 , 多维数据 , 视觉编排 , 数据编排 , IO优化 背景 中华文化源远流长,比如这句古语“远水不救近火,远亲不如近邻”,在数据库的优化中亦有体现。
1791 0
阿里云容器网络文件系统 CNFS 1.0 发布,体验云原生时代的容器共享存储
简介:CNFS 通过将阿里云的文件存储抽象为一个 Kubernetes 对象(CRD)进行独立管理,包括创建、删除、描述、挂载,监控及扩容等运维操作,使用户可以在享受容器使用文件存储带来的便捷的同时,提高文件存储的性能和数据安全,并提供容器一致的声明式管理。
121 0
阿里巴巴达摩院夺得首届“马栏山杯”国际音视频算法优化大赛【画质损伤修复赛道】冠军
首届“马栏山杯”国际音视频算法优化大赛颁奖盛典暨高峰论坛于9月8日举行。这场由中国工业与应用数学学会、中国网络社会组织联合会作为指导单位,湖南省互联网信息办公室、湖南省科学技术协会主办,中国(长沙)马栏山视频文创产业园、芒果TV承办的算法盛事,云集了全球优秀的算法精英。一大批来自高校、科研院所、互联网企业才子才女们,共1294支队伍报名参赛,其中北京大学34支,清华大学25支,麻省理工学院等国外顶级名校37支。
506 0
+关注
xiaoli_test
暂无
15
文章
0
问答
来源圈子
更多
阿里云存储基于飞天盘古2.0分布式存储系统,产品包括对象存储OSS、块存储Block Storage、共享文件存储NAS、表格存储、日志存储与分析、归档存储及混合云存储等,充分满足用户数据存储和迁移上云需求,连续三年跻身全球云存储魔力象限四强。
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载