本节主要是使用ganesha将cephfs和rgw,映射为nfs,从而提供给其他系统使用。
0、原本计划使用容器继续处理,但没能成功,如果你成功了麻烦告诉我一下如何做的。
#这条路没测试成功,原理上应该是一样的 ceph orch apply nfs mynfs nfspool --placement="1 ceph-0003"
后面是通过编译源码的方式来完成的,操作系统是Ubuntu18.0.4,由于没有高版本的librgw的开发库(Ubuntu18.0.4只有1.1.6,而ganesha却要1.1.7以上),所以最后没能支持rgw,只能支持cephfs:
1、安装所需包
#ceph-0003 apt-get install gcc git cmake autoconf libtool bison flex apt-get install libssl-dev libnfs-dev doxygen libgssglue-dev libkrb5-dev liburcu-dev libntirpc-dev apt-get install libnfsidmap-dev uuid-dev libblkid-dev apt-get install librados-dev librgw-dev libcephfs-dev nfs-ganesha-ceph snap install cmake --classic #缺少libzardfs_client,webclient,暂时没有影响
2、下载源码
#ceph-0003 git clone https://github.com/nfs-ganesha/nfs-ganesha.git cd nfs-ganesha git checkout V3.2 git submodule update --init --recursive
3、编译
#ceph-0003 mkdir build cd build #这里要把rgw的自持去掉,否则无法通过 ccmake ../src >config >generate make make install
4、创建ganesha配置文件
# ceph-0003
# 配置文件是支持cephfs和rgw的
vi /etc/ganesha/ganesha.conf
NFS_CORE_PARAM {
Enable_NLM = false;
Enable_RQUOTA = false;
Protocols = 4;
NFS_Port = 2049;
}
NFSv4 {
Delegations = false;
Minor_Versions = 1, 2;
}
CACHEINODE {
Dir_Chunk = 0;
NParts = 1;
Cache_Size = 1;
}
EXPORT_DEFAULTS {
Attr_Expiration_Time = 0;
}
EXPORT {
Export_ID = 1001;
Protocols = 3,4;
Path = /;
Pseudo = /cephfs;
Access_Type = RW;
#Transport_Protocols = TCP;
Squash = Root_squash;
FSAL {
Name = CEPH;
}
}
EXPORT
{
Export_ID=1002;
NFS_Protocols = 3,4;
Path = "/";
Pseudo = /rgw;
Access_Type = RW;
#Transport_Protocols = TCP;
Squash = Root_squash;
FSAL {
Name = RGW;
User_Id = "s3user";
Access_Key_Id ="J5IWQUN50UJHVH48461Q";
Secret_Access_Key = "5fgLtqd07EI6LS3PamPVNBpqwPPfPYJNxULBlgpj";
}
}
LOG {
Facility {
name = FILE;
destination = "/var/log/ganesha/ganesha.log";
enable = active;
}
}
CEPH {
ceph_conf = '/etc/ceph/ceph.conf';
cluster = "ceph";
name = "rgw.myrealm.myzone";
}
RGW {
ceph_conf = "/etc/ceph/ceph.conf";
}
5、运行ganesha
ganesha.nfsd -f /etc/ganesha/ganesha.conf -L /var/log/ganesha/ganesha.log -N NIV_INFO
6、挂载
#ceph-0004 mount -t nfs4 ceph-0003:/cephfs /mnt/nfs/ ls /mnt/nfs fuse.txt volumes cat /mnt/nfs/fuse.txt fuse ls /mnt/nfs/volumes/ subvg01 subvg02
7、取消挂载
#ceph-0004 umount /mnt/nfs
8、补充:
前面傻了,只用了ubuntu的源,忘记使用ceph的源了。其实用ceph的源后,就可以解决问题了,操作和上面相同,编译方式如下:
#添加ceph源 wget -q -O- 'https://download.ceph.com/keys/release.asc' | sudo apt-key add - sudo apt-add-repository 'deb https://download.ceph.com/debian-octopus/ bionic main' sudo apt-get update #安装需要的软件 apt-get install gcc git cmake autoconf libtool bison flex apt-get install libssl-dev libnfs-dev doxygen libgssglue-dev libkrb5-dev liburcu-dev libntirpc-dev apt-get install libnfsidmap-dev uuid-dev libblkid-dev apt-get install librados-dev librgw-dev libcephfs-dev nfs-ganesha-ceph snap install cmake --classic #缺少libzardfs_client,webclient,暂时没有影响 #下载源码并编译 git clone https://github.com/nfs-ganesha/nfs-ganesha.git git checkout V3.2 git submodule update --init --recursive mkdir build cd build ccmake ../src make make install