rgw实现nfs的首测
rgw实现nfs的首测
zphj1987功能介绍
关于rgw实现nfs接口这个,刚接触的人可能并不清楚这个是个什么样的服务架构,rgw是ceph里面的对象存储接口,而nfs则是纯正的网络文件系统接口,这二者如何结合在一起,关于这个,有几个相关的链接供大家了解
之所以这个功能能实现这么快,原因是nfs-ganesha的开发者Matt Benjamin加入到了Redhat,而ceph目前的开发是Redhat在主导开发,所以功能的实现是非常快的,但是目前官方并没有提供相关的文档,个人推测是功能并未完全开发完成,一旦未完全开发完成的功能放出来,邮件列表和Bug列表就会有很多相关问题,开发者应该还是希望安静的把功能做好,再提供相关的文档,而这个功能也是在ceph 的jewel版本里面才加入的
功能架构图
简单说明一下:
集群配置s3接口,nfs-genesha将s3接口转换成nfs,然后nfs客户端挂载后访问的就是s3的bucket里面的数据了
准备工作
准备代码,这个是需要从源码编译的,并且需要将模块编译进去才可以的,源码分支地址:
这个地方要注意下,需要使用next分支(此分支开发中有编译BUG),换分支V2.3-stable
使用git 进行clone分支到本地
1 | git clone -b V2.3-stable https://github.com/nfs-ganesha/nfs-ganesha.git |
检查是否有这个RGW模块目录
nfs-ganesha/src/FSAL/FSAL_RGW/
默认clone下来后 nfs-ganesha/src/libntirpc/ 这个目录是空的,而这个是因为如果在git里面某个目录嵌套的用了其他项目的代码,并且也是有git的分支的话,clone下来就会是空的,这个在ceph的源码里面也会这样,具体的看看下图:
上面的 git submodule 会将缺的代码下载下来,所以不要漏步骤
代码的编译采用的是cmake的模式(cmake目录后面接的是nfs-ganesha代码的src目录)
注意在执行cmake之前编译环境需要安装librgw2-devel这个包,才能编译成功,执行cmake的时候检查下是否真的开启了
开始编译安装过程,创建一个用于编译的目录
1 | [root@lab8106 newbian]#mkdir mybuild |
编译安装工作就到此完成了,还是比较简单的
配置服务
准备一个s3的环境,我的如下:
1 | radosgw-admin user create --uid=admin --display-name="admin" --access-key=admin --secret=admin |
用户信息如下:
- s3的User_Id:admin
- s3的Access_Key:admin
- s3的Secret_Access_Key:admin
注意,配置ganesha-nfs服务的机器需要安装librgw
修改ganesha-nfs的配置文件
1 | vim /etc/ganesha/ganesha.conf |
修改如下:
1 | EXPORT |
RGW-NFS配置文件的模板路径在:
/usr/share/doc/ganesha/config_samples/rgw.conf
启动ganesha-nfs服务
1 | systemctl restart nfs-ganesha.service |
NFS客户端挂载ganesha-nfs服务
找一台其它的客户端机器
1 | mount -t nfs 192.168.8.106:/ /mnt |
直接挂载即可,这里注意因为rgw是没有文件系统的容量概念的,这里df是看不到的,所以用mount命令检测
1 | root@lab8107:~# mount|grep mnt |
可以查看挂载的目录里面的子目录对应的就是bucket
1 | root@lab8107:~# ll /mnt/ |
总结
在实现这个功能以后,实际上为文件接口和对象接口打通了一个通道,能够方便的实现传统的文件接口的数据到对象接口的转移,在性能方面,本篇并没有做测试,这个交给实际项目中去检测了,如果有问题欢迎探讨
变更记录
Why | Who | When |
---|---|---|
创建 | 武汉-运维-磨渣 | 2016-06-19 |
修改无法编译的BUG | 武汉-运维-磨渣 | 2016-09-08 |
增加git submod下载代码 | 武汉-运维-磨渣 | 2016-10-12 |