一、概览
自从Jewel版本,nfs-ganesha开始支持ceph,ganesha通过两种方式支持将ceph通过posix及nfs语义导出。一种通过rgw,一种通过cephfs,通过FSAL模块 连接到RGW或者CephFS, 其中,FSAL_RGW调用librgw2将NFS协议转义为S3协议再通过RGW存入到Ceph中,FSAL_CEPH 调用libcephfs1将NFS转义为Cephfs协议再存入到Ceph 中。
因此在实际安装部署中需要额外安装这两个基础库,以提供协议转换的支撑。
文章所载基于Jewel 10.2.7版本所示,将J版本的ceph基于ganesha导出nfs部署,并且简单测试一下rgw和cephfs的性能。
二、环境
os: ubuntu16.04
ceph: jewel
nfs-gnesha: v2.5分支
三、安装
3.1 安装基础依赖库
apt install gcc git cmake libtool flex g++ krb5-dev uuid-dev nfs-kernel-server librgw2-dev
3.2 下载nfs-ganesha源码
在源码下载的时候有众多版本供选择,试过其中的v2.5以及v2.3版本,都在编译过程中出现不同程度的错误,排查是jewel版本和nfs-ganesha版本不匹配造成的。至于排查的过程无非与查源码、查环境之类,最终找到一个网友共享出来的源码可供编译。
3.3 编译
由于测试需要支持rgw和cephfs,需要在编译的过程中加上 -DUSE_FSAL_RGW=ON -DUSE_FSAL_CEPH=ON
值得注意的是,需要确保configure输出中检测到rgw和cephfs模块,否则这两个模块将不会被编译进去。
如果安装过程中没有安装好librgw2-devel或者libcephfs1-devel,USE_FSAL_RGW或者USE_FSAL_CEPH状态将为OFF,因此需要观察configure输出,确保– USE_FSAL_CEPH为ON,以及– USE_FSAL_RGW为ON
接下来
make && make install
3.4 配置
EXPORT
{
## Export Id (mandatory, each EXPORT must have a unique Export_Id)
Export_Id = 12345;
## Exported path (mandatory)
Path = "/";
## Pseudo Path (required for NFSv4 or if mount_path_pseudo = true)
Pseudo = "/";
## Restrict the protocols that may use this export. This cannot allow
## access that is denied in NFS_CORE_PARAM.
Protocols = 4;
## Access type for clients. Default is None, so some access must be
## given. It can be here, in the EXPORT_DEFAULTS, or in a CLIENT block
Access_Type = RW;
## Whether to squash various users.
Squash = No_root_squash;
Transport_Protocols = TCP;
## Allowed security types for this export
#Sectype = sys,krb5,krb5i,krb5p;
## Exporting FSAL
FSAL {
Name = RGW;
User_Id = "s3test";//对应修改成用户id
Access_Key_Id = "TEVE5KUE7CVGFWHRMBO0";//对应修改accessid
Secret_Access_Key = "tZhkG3oyHkCyczI3Ll2UXGxCJwDNF2jmkpdH8qrc";//对应修改成secertid
}
}
RGW
{
ceph_conf = "/etc/ceph/ceph.conf";
cluster = "ceph";
name = "client.rgw.mon1";//对应修改成rgw实例名
init_args = "-d --debug-rgw=16";
}
配置的方法查过部分资料,很多说需要关闭集群cephx认证,首次配置时没有对应配置RGW部分,因此没有成功,关闭cephx后成功。但因实际项目需要开启cephx,因此开启cephx后,配置RGW后意外发现正常启动。
3.5 启动ganesha
启动 Ganesha
ganesha.nfsd -f /etc/ganesha/ganesha.conf -L /var/log/nfs-ganesha.log -N NIV_DEBUG
3.6 挂载 NFS
[root@node1 mnt]# mount -t nfs4 192.168.3.4:/ /mnt/nfs
4.测试
在挂载成功后,进行实际测试:
for i in {1..10000};do dd if=/dev/zero of=/mnt/nfs/file_$i bs=4K count=$i
测试过程中发现,bs>4M 时,表现不稳定,有IO ERROR出现。
利用iozone工具测试,发现当进行非4K对齐写时,出现测试失败情况。