功能介绍

关于rgw实现nfs接口这个,刚接触的人可能并不清楚这个是个什么样的服务架构,rgw是ceph里面的对象存储接口,而nfs则是纯正的网络文件系统接口,这二者如何结合在一起,关于这个,有几个相关的链接供大家了解

之所以这个功能能实现这么快,原因是nfs-ganesha的开发者Matt Benjamin加入到了Redhat,而ceph目前的开发是Redhat在主导开发,所以功能的实现是非常快的,但是目前官方并没有提供相关的文档,个人推测是功能并未完全开发完成,一旦未完全开发完成的功能放出来,邮件列表和Bug列表就会有很多相关问题,开发者应该还是希望安静的把功能做好,再提供相关的文档,而这个功能也是在ceph 的jewel版本里面才加入的

功能架构图



简单说明一下:

集群配置s3接口,nfs-genesha将s3接口转换成nfs,然后nfs客户端挂载后访问的就是s3的bucket里面的数据了

准备工作

准备代码,这个是需要从源码编译的,并且需要将模块编译进去才可以的,源码分支地址:

https://github.com/nfs-ganesha/nfs-ganesha/tree/V2.3-stable

这个地方要注意下,需要使用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的首测的更多相关文章

  1. [ZZ] GTX760首测

    再一次让AMD难做!NVIDIA新主力GTX760首测 1又见短板高端显卡,GTX760外观对比回顶部 [PConline评测]NVIDIA迅速的步伐真让人吃惊,短时间内拿出GTX780.GTX770 ...

  2. Ceph Bluestore首测

    Bluestore 作为 Ceph Jewel 版本推出的一个重大的更新,提供了一种之前没有的存储形式,一直以来ceph的存储方式一直是以filestore的方式存储的,也就是对象是以文件方式存储在o ...

  3. Centos7安装配置NFS服务和挂载

    现在有3台服务器 s1(主),s2(从), s3(从)需要实现文件实时同步,我们可以安装Nfs服务端和客户端来实现! 一.安装 NFS 服务器所需的软件包:   1 yum install -y nf ...

  4. centos7下搭建nfs服务

    现在有3台服务器 s1(主),s2(从), s3(从)需要实现文件实时同步,我们可以安装Nfs服务端和客户端来实现! 一.安装 NFS 服务器所需的软件包: yum install -y nfs-ut ...

  5. CMPP错误码说明

    与中国移动代码的对应关系. MI::zzzzSMSC返回状态报告的状态值为EXPIREDMJ:zzzzSMSC返回状态报告的状态值为DELETEDMK:zzzzSMSC返回状态报告的状态值为UNDEL ...

  6. 转!!CMPP 网关错误码说明

    http://www.163duanxin.com/msg/1753.htm CMPP错误码说明   与中国移动代码的对应关系. MI::zzzzSMSC返回状态报告的状态值为EXPIREDMJ:zz ...

  7. GTX 770 (GK 104)

    上周的这个时候,NVIDIA GeForce 700系列的旗舰产品GTX 780正式发布,传闻已久的GTX 700家族终于来了!虽然没有任何新架构.新特性的旗舰卡发布总让人觉得少点什么.但从性能上来说 ...

  8. 标签页(tab)切换的原生js,jquery和bootstrap实现

    概述 这是我在学习课程Tab选项卡切换效果时做的总结和练手. 原课程中只有原生js实现,jquery和bootstrap实现是我自己补上的. 本节内容 标签页(tab)切换的原生js实现 标签页(ta ...

  9. 基于SSH框架开发的《高校大学生选课系统》的质量属性的实现

    基于SSH框架开发的<高校大学生选课系统>的质量属性的实现 对于可用性采取的是错误预防战术,即阻止错误演变为故障:在本系统主要体现在以下两个方面:(1)对于学生登录模块,由于初次登陆,学生 ...

随机推荐

  1. iproute2工具

    iproute2工具介绍 iproute2是linux下管理控制TCP/IP网络和流量控制的新一代工具包,出现目的是替代老工具链net-tools.net-tools是通过procfs(/proc)和 ...

  2. spring boot:用shardingjdbc实现多数据源的分库分表(shardingsphere 4.1.1/spring boot 2.3.1)

    一,shardingjdbc的用途 1,官方站介绍: Apache ShardingSphere 是一套开源的分布式数据库中间件解决方案组成的生态圈, 它由 JDBC.Proxy 和 Sidecar( ...

  3. Java爬取同花顺股票数据(附源码)

    最近有小伙伴问我能不能抓取同花顺的数据,最近股票行情还不错,想把数据抓下来自己分析分析.我大A股,大家都知道的,一个概念火了,相应的股票就都大涨. 如果能及时获取股票涨跌信息,那就能在刚开始火起来的时 ...

  4. Asp.Net实现局部刷新,ScriptManager和UpdatePanel控件的使用

    <asp:CheckBoxList ID="LimitCollegeNo" runat="server" CellPadding="5" ...

  5. Git Push 避免输入用户名和密码方法

    1 创建文件存储GIT用户名和密码 在%HOME%目录中,一般为C:\users\Administrator,也可以是你自己创建的系统用户名目录,反正都在C:\users\中.文件名为.git-cre ...

  6. CentOS7通过源码安装nginx

    需要先安装安装环境和库: yum install gcc-c++ yum install -y pcre pcre-devel yum install -y zlib zlib-devel yum i ...

  7. mybatis 架构及基础模块

    1. mybatis整体架构 基础支撑层详解 1.日志模块 mybatis日志模块没有实现类,需要接入第三方的组件,问题是第三方的组件有各自的log级别,为了能接入第三方组件,mybati日志模块定义 ...

  8. Java 复制到剪贴板

    public void copy(String str) { StringSelection stsel = new StringSelection(str); Toolkit.getDefaultT ...

  9. 考场(NOIP/ICPC)沙雕错误锦集(大赛前必看,救命提分良药)

    记住,无论什么测试,一定要先打三题暴力(至少不会被屠得太惨) 2018.10.4 1.记得算内存.(OI一年一场空,没算内存见祖宗) 2018.10.6 1.在二分许多个字符串时(二分长度),要以长度 ...

  10. vue脚手架项目搭建失败

    可能是ssl 的问题 解决办法: 1. npm config set strict-ssl false 2. npm install -g supervisor 以上完成后vue ui 或vue cr ...