rgw实现nfs的首测
功能介绍
关于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分支到本地
git clone -b V2.3-stable https://github.com/nfs-ganesha/nfs-ganesha.git
cd nfs-ganesha/
git submodule update --init --recursive
检查是否有这个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的时候检查下是否真的开启了

开始编译安装过程,创建一个用于编译的目录
[root@lab8106 newbian]#mkdir mybuild
[root@lab8106 newbian]#cd mybuild
[root@lab8106 mybuild]#cmake -DUSE_FSAL_RGW=ON ../nfs-ganesha/src/
[root@lab8106 mybuild]# ll FSAL/FSAL_RGW/
total 16
drwxr-xr-x 3 root root 83 Jun 19 01:59 CMakeFiles
-rw-r--r-- 1 root root 2979 Jun 19 01:59 cmake_install.cmake
-rw-r--r-- 1 root root 10164 Jun 19 01:59 Makefile
[root@lab8106 mybuild]#make
[root@lab8106 mybuild]#make install
编译安装工作就到此完成了,还是比较简单的
配置服务
准备一个s3的环境,我的如下:
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的配置文件
vim /etc/ganesha/ganesha.conf
修改如下:
EXPORT
{
Export_ID=1;
Path = "/";
Pseudo = "/";
Access_Type = RW;
NFS_Protocols = 4;
Transport_Protocols = TCP;
FSAL {
Name = RGW;
User_Id = "admin";
Access_Key_Id ="admin";
Secret_Access_Key = "admin";
}
}
RGW {
ceph_conf = "/etc/ceph/ceph.conf";
}
RGW-NFS配置文件的模板路径在:
/usr/share/doc/ganesha/config_samples/rgw.conf
启动ganesha-nfs服务
systemctl restart nfs-ganesha.service
NFS客户端挂载ganesha-nfs服务
找一台其它的客户端机器
mount -t nfs 192.168.8.106:/ /mnt
直接挂载即可,这里注意因为rgw是没有文件系统的容量概念的,这里df是看不到的,所以用mount命令检测
root@lab8107:~# mount|grep mnt
192.168.8.106:/ on /mnt type nfs4 (rw,relatime,vers=4.0,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=192.168.8.107,local_lock=none,addr=192.168.8.106)
192.168.8.106:/testnfsrgw on /mnt/testnfsrgw type nfs4 (rw,relatime,vers=4.0,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.8.107,local_lock=none,addr=192.168.8.106)
可以查看挂载的目录里面的子目录对应的就是bucket
root@lab8107:~# ll /mnt/
total 4
drwxrwxrwx 3 root root 0 Jan 1 1970 ./
drwxr-xr-x 25 root root 4096 Apr 13 03:04 ../
drwxrwxrwx 3 root root 0 Jan 1 1970 testnfsrgw/
总结
在实现这个功能以后,实际上为文件接口和对象接口打通了一个通道,能够方便的实现传统的文件接口的数据到对象接口的转移,在性能方面,本篇并没有做测试,这个交给实际项目中去检测了,如果有问题欢迎探讨
变更记录
| Why | Who | When |
|---|---|---|
| 创建 | 武汉-运维-磨渣 | 2016-06-19 |
| 修改无法编译的BUG | 武汉-运维-磨渣 | 2016-09-08 |
| 增加git submod下载代码 | 武汉-运维-磨渣 | 2016-10-12 |
rgw实现nfs的首测的更多相关文章
- [ZZ] GTX760首测
再一次让AMD难做!NVIDIA新主力GTX760首测 1又见短板高端显卡,GTX760外观对比回顶部 [PConline评测]NVIDIA迅速的步伐真让人吃惊,短时间内拿出GTX780.GTX770 ...
- Ceph Bluestore首测
Bluestore 作为 Ceph Jewel 版本推出的一个重大的更新,提供了一种之前没有的存储形式,一直以来ceph的存储方式一直是以filestore的方式存储的,也就是对象是以文件方式存储在o ...
- Centos7安装配置NFS服务和挂载
现在有3台服务器 s1(主),s2(从), s3(从)需要实现文件实时同步,我们可以安装Nfs服务端和客户端来实现! 一.安装 NFS 服务器所需的软件包: 1 yum install -y nf ...
- centos7下搭建nfs服务
现在有3台服务器 s1(主),s2(从), s3(从)需要实现文件实时同步,我们可以安装Nfs服务端和客户端来实现! 一.安装 NFS 服务器所需的软件包: yum install -y nfs-ut ...
- CMPP错误码说明
与中国移动代码的对应关系. MI::zzzzSMSC返回状态报告的状态值为EXPIREDMJ:zzzzSMSC返回状态报告的状态值为DELETEDMK:zzzzSMSC返回状态报告的状态值为UNDEL ...
- 转!!CMPP 网关错误码说明
http://www.163duanxin.com/msg/1753.htm CMPP错误码说明 与中国移动代码的对应关系. MI::zzzzSMSC返回状态报告的状态值为EXPIREDMJ:zz ...
- GTX 770 (GK 104)
上周的这个时候,NVIDIA GeForce 700系列的旗舰产品GTX 780正式发布,传闻已久的GTX 700家族终于来了!虽然没有任何新架构.新特性的旗舰卡发布总让人觉得少点什么.但从性能上来说 ...
- 标签页(tab)切换的原生js,jquery和bootstrap实现
概述 这是我在学习课程Tab选项卡切换效果时做的总结和练手. 原课程中只有原生js实现,jquery和bootstrap实现是我自己补上的. 本节内容 标签页(tab)切换的原生js实现 标签页(ta ...
- 基于SSH框架开发的《高校大学生选课系统》的质量属性的实现
基于SSH框架开发的<高校大学生选课系统>的质量属性的实现 对于可用性采取的是错误预防战术,即阻止错误演变为故障:在本系统主要体现在以下两个方面:(1)对于学生登录模块,由于初次登陆,学生 ...
随机推荐
- spring boot:用itextpdf处理pdf表格文件(spring boot 2.3.2)
一,什么是itextpdf? 1,itextpdf的用途 itextpdf是用来生成PDF文档的一个java类库, 通过iText可以生成PDF文档, 还可以把XML/Html文件转化为PDF文件 2 ...
- spring boot:用redis+lua实现基于ip地址的分布式流量限制(限流/简单计数器算法)(spring boot 2.2.0)
一,限流有哪些环节? 1,为什么要限流? 目的:通过对并发请求进行限速或者一个时间单位内的的请求进行限速,目的是保护系统可正常提供服务,避免被压力太大无法响应服务. 如果达到限制速率则可以采取预定的处 ...
- ansible使用script模块在受控机上执行脚本(ansible2.9.5)
一,ansible的script模块的用途 script 模块用来在远程主机上执行 ansible 管理主机上的脚本, 即:脚本一直存在于 ansible 管理主机本地, 不需要手动拷贝到远程主机后再 ...
- 【Flutter 混合开发】与原生通信-MethodChannel
Flutter 混合开发系列 包含如下: 嵌入原生View-Android 嵌入原生View-iOS 与原生通信-MethodChannel 与原生通信-BasicMessageChannel 与原生 ...
- springboot入门系列(二):SpringBoot整合Swagger
上一篇<简单搭建SpringBoot项目>讲了简单的搭建SpringBoot 项目,而 SpringBoot 和 Swagger-ui 搭配在持续交付的前后端开发中意义重大,Swagger ...
- 1. Deep Q-Learning
传统的强化学习算法具有很强的决策能力,但难以用于高维空间任务中,需要结合深度学习的高感知能力,因此延展出深度强化学习,最经典的就是DQN(Deep Q-Learning). DQN 2013 DQN的 ...
- 10 Servlet_02 资源跳转(主要是内部转发)与中文乱码问题
总的知识点: 1.小的知识点总结: alt + shift + r 重命名快捷键(可以给包和类以及项目重命名) 有序列表 ol li 无序列表 ul type 格式 text 是文本类型 passwo ...
- Linux 系统编程 学习:01-进程的有关概念 与 创建、回收
Linux 系统编程 学习:01-进程的有关概念 与 创建.回收 背景 上一讲介绍了有关系统编程的概念.这一讲,我们针对 进程 开展学习. 概念 进程的身份证(PID) 每一个进程都有一个唯一的身份证 ...
- 基于gin的golang web开发:模型验证
Gin除了模型绑定还提供了模型验证功能.你可以给字段指定特定的规则标签,如果一个字段用binding:"required"标签修饰,在绑定时该字段的值为空,那么将返回一个错误.开发 ...
- [Luogu P2824] [HEOI2016/TJOI2016]排序 (线段树+二分答案)
题面 传送门:https://www.luogu.org/problemnew/show/P2824 Solution 这题极其巧妙. 首先,如果直接做m次排序,显然会T得起飞. 注意一点:我们只需要 ...