资讯 > 行业资讯

程序猿成长日记 | NFS over CephFS vs. NFS over RGW
2017/3/23 15:15:48

  作者:刘扬宽 BoCloud博云 存储开发工程师

  上篇文章 NFS+CephFS构建基于Ceph的NAS服务【1】中,我们介绍了基于ceph的文件接口通过ganesha导出NFS,该方法依赖cephFS中的mds组件。

  本文将介绍基于ceph的对象接口rgw,通过ganesha导出NFS的方式,并与文件接口方式的NFS进行性能对比及分析。

  0、  ceph集群环境准备

  本文介绍的方法,ceph集群只需要部署mon和osd组件,即可使用对象接口导出NFS。由于ceph的Jewel版本默认是10.2.2版本,而该版本的对象存储存在一个BUG,即RGWZoneParams::create(): error creating default zone params: (17) File Exists错误,而下一个10.2.3版本修复了该问题,因此,本文通过源码编译的方式安装了ceph的10.2.3版本。

  1、  编译和安装ganesha-rgw

  在ceph集群中的任一节点上安装ganesha,执行如下命令:
  cd ~; git clone https://github.com/nfs-ganesha/nfs-ganesha.git
  cd nfs-ganesha; git checkout V2.4-stable;
  git submodule update --init –recursive
  cd src; mkdir build; cd build
  cmake -DUSE_FSAL_RGW=ON ../
  make; make install

  如果需要通过源码生成rpm包,需要在nfs-ganesha/src/nfs-ganesha.spec文件中增加打包过程中将rgw.conf加入到rpm包中,然后使用rpmbuild生成nfs-ganesha-2.4.2-0.el7.centos.x86_64.rpm、nfs-ganesha-rgw-2.4.2-0.el7.centos.x86_64.rpm包。

  %if %{with ceph}
  install -m 644 config_samples/ceph.conf   %{buildroot}%{_sysconfdir}/ganesha
  %endif
  ###增加如下内容####
  %if %{with rgw}
  install -m 644 config_samples/rgw.conf   %{buildroot}%{_sysconfdir}/ganesha
  %endif

  再运行一下命令:
  rpmbuild -bb nfs-ganesha.spec --with=rgw
 
  安装完成后,将增加在ganesha.nfsd命令,/usr/lib64/ganesha目录下增加libfsalrgw.so的动态链接库。

  2、  设置并启动ganesha-rgw

  在该节点中安装ceph-radosgw软件包,同时创建好如下的pool:

  .rgw.root
  default.rgw.control
  default.rgw.data.root
  default.rgw.gc
  default.rgw.log
  default.rgw.users.uid
  default.rgw.users.email
  default.rgw.users.keys
  default.rgw.meta
  default.rgw.usage
  default.rgw.buckets.index
  default.rgw.buckets.data
 
  然后执行如下命令创建rgw用户:

  radosgw-admin user create --uid=bocloud   --display-name="bocloud test rgw"    --email=liuyangkuan@beyondcent.com
  以下是输出:
  {
    "user_id":   "bocloud",
      "display_name": "bocloud test rgw",
    "email":   "liuyangkuan@beyondcent.com",
    "suspended":   0,
    "max_buckets":   1000,
    "auid": 0,
    "subusers":   [],
    "keys": [
        {
              "user": "bocloud",
              "access_key": "ACCESS_KEY",
              "secret_key": "SECRET_KEY"
        }
    ],
    "swift_keys":   [],
    "caps": [],
    "op_mask":   "read, write, delete",
      "default_placement": "",
      "placement_tags": [],
      "bucket_quota": {
        "enabled": false,
          "max_size_kb": -1,
          "max_objects": -1
      },
      "user_quota":   {
        "enabled":   false,
          "max_size_kb": -1,
          "max_objects": -1
      },
      "temp_url_keys": []
  }

  创建并编辑/etc/ganesha/rgw.conf文件,内容如下:
  EXPORT
  {
         Export_ID=1;
         Path =   "/";
         Pseudo =   "/";
         Access_Type = RW;
         Protocols = 3,4;
    Squash = No_Root_Squash;
         Transport_Protocols   = TCP;
         FSAL {
                   Name =   RGW;
                   User_Id =   "bocloud";
                   Access_Key_Id   = "ACCESS_KEY";
                   Secret_Access_Key   = "SECRET_KEY";
           }
  }
  RGW {
      ceph_conf =   "/etc/ceph/ceph.conf";
  }
  
  最后在/var/lib/ceph/radosgw/-admin/目录下创建名字为keyring文件,其内容为/etc/ceph/ceph.client.admin.keyring中的内容。

  最后执行命令:
  systemctl stop firewalld
  systemctl start rpcbind
  systemctl start rpc-statd
  ganesha.nfsd -f /etc/ganesha/ceph.conf -L /var/log/ganesha.log -N NIV_INFO

  那么基于ceph-rgw对象接口的NFS就启动了。showmount -e命令能够显示导出的文件系统。需要说明的是,使用nfs客户端挂载该NFS时,需要先创建一个目录,然后在该目录下创建文件或目录,因为第一层的目录相当于对象存储中的bucket。

  3、  NFS over RGW与NFS over CephFS的性能对比

  本次性能测试,集采用了三台配置相同的物理机,配置如下:

  文件接口中涉及的data和metadata pool以及对象接口中的default.rgw.buckets.data和default.rgw.buckets.index采用的3副本,pg_num和pgp_num为128使用了一台千兆网口的物理机做NFS客户端,使用的NFSv4协议。

  3.1 使用dd工具大粒度(1M)顺序读写测试

  3.2 使用fio工具小粒度(4K)随机读写测试

  3.3 性能分析

  由以上测试结果发现,对于MB级别的大粒度IO,CephFS的性能较优,尤其是读性能,已经达到NFS客户端的网络带宽极限。而对于百万级别小文件的小粒度随机IO,RGW的性能更优,对象存储也是专为百万级别的小文件或对象而设计的。由于RGW仅实现了几个基本的POXIS语义中的接口,且文件和目录都以对象形式扁平化地存储在bucket中,因此相比完全实现POXIS语义的CephFS来说,小对象的性能表现更优。

  4、  参考文献

  【1】NFS+CephFS构建基于Ceph的NAS服务http://mp.weixin.qq.com/s/yLMSs57SH3
_x3bKvWLSAVw
  【2】NFS-ganesha WiKi https://github.com/nfs-ganesha/nfs-ganesha/wiki

版权所有:苏州博纳讯动软件有限公司     苏ICP备13004761号      声明:本站使用字体为北大方正授权许可正版字体