Ceph是统一存储,包括块、文件、对象。其中块存储必须映射给linux内核,然后才能用,而内核客户端代码的更新收到了linus的限制,已经好久没更新了。librbd又不能直接用,不过道是可以用nbd映射一下使用。cephfs目前还不太适合生产环境。目前*nix
对nfs的支持还是很全面的,而对librbd、cephfs的支持就是大不一样了。so,使ceph支持nfs协议很有意义了,but!ceph是分布式存储,被ganesha一搞,出现了单节点问题,所以只能想办法从HA角度解决了,这也是一种无奈,唉。。。
(~~一丝光~~)从nfs v4.1开始支持并行存储,这或许是一缕新曙光。
NFS-Ganesha架构
实施
RGW搭建
关于RGW的安装搭建请于Ceph官网查看
用户创建
创建一个S3用户专门服务于nfs-ganesha
1 | sudo radosgw-admin --uid=nfs_ganesha_user --display="User for NFS-Ganesha" |
user
、access_key
、secret_key
是后续nfs-ganesha配置是需要使用到的。
nfs-ganesha编译部署
获取Project
1 | // clone nfs-ganesha project |
在正式开始编译前,需要安装一些包,libntirpc
强制使用了GSS,使用-DUSE_GSS=OFF
是不能关闭GSS使用的。所以在编译nfs-ganesha时不需要关闭GSS。
本人编译使用的系统是rhel7.2,需要安装一些软件包krb5-libs-1.14.1-27.el7_3.x86_64
、krb5-devel-1.14.1-27.el7_3.x86_64
、libgssglue-0.4-2.el7.nux.x86_64
、libgssglue-devel-0.4-2.el7.nux.x86_64
编译安装
1 | // libntirpc 编译 |
配置启动
配置RGW的Keyring
librgw 访问ceph时会用到keyring,它回去/var/lib/ceph/radosgw/ceph-admin
这个目录下去找keyring
,这个目录需要用户自己创建并,copy一个keyring进去,这个keyring可以是admin,也可以是rgw实用的keyring,从权限管理角度建议使用rgw的keyring
撰写ganesha.conf.rgw
1 | ################################################### |
运行ganesha进程
1 | sudo ganesha.nfsd -f /home/xxxxx/.local/etc/ganesha/ganesha.conf.rgw -F -L /var/log/ganesha.log |
客户端连接
1 | sudo mount -t nfs4 192.168.1.82:/nfs_bucket /mnt |
docker容器部署
镜像
gannesha配置
配置上来讲与编译部署没有太大差别
1 | # NFS protocol options |
运行ganesha容器
由于Ganesha 的 FSAL 使用到了librgw,所以在镜像中会装好ceph-common
、librgw2
等。
1 | docker run -d --net=host -v /home/xxx/ceph/etc_ceph/:/etc/ceph:ro -v /home/xxx/ceph/ganesha/:/etc/ganesha:ro -v /home/xxx/ceph/var_lib_ceph/:/var/lib/ceph --name nfs -e GANESHA_BOOTSTRAP_CONFIG=no ananace/nfs-ganesha-ceph |
docker 启动是需要设置环境变量GANESHA_BOOTSTRAP_CONFIG=no
,默认配置为yes
;若为yes
的化,nfs-ganesha在启动的时候会重置/etc/ganesha/ganesha.conf
配置文件。