原文地址: 使用NFS挂载RBD
具体场景
- 在
Server
端创建RBD
块设备并挂载到某个目录,然后在Client
端通过NFS
将Server
端之前说的目录再挂载到本地,就可以实现在客户端写文件通过NFS
到Server
端的块设备上 - 这波操作的目的是因为测试
EC
性能时,Ceph
版本还是Hammer
,CephFS
不是很稳定,性能不行,所以想用RBD
的方式取代,但是Hammer
版本中EC
是只支持RGW
的,并不支持CephFS
和RBD
,至于这个场景具体流程之后会在其他文章分享 - 这波操作在之前
Ceph
的Hammer
版本做过,这次是要在新版本Luminous
上实践,由于遇到了很多问题,大部分都是新版本缘故引入的,故与大家分享
PS:
Luminous
新版本提供了新的NFS
的处理方式,不再需要用这种老式的RBD
的手段,之后也会在其他文章分享出来
Hammer版本
操作步骤
1. 使用RBD方式导出NFS,步骤如下:
1.1 create RBD block device image (size unit: MB)
# rbd create --size 1024 ec-pool/test_image
1.2 map RBD device
# rbd map ec-pool/test_image
[Optional] check mapped device
# rbd showmapped
1.3 create filesystem on the device
# mkfs.ext4 /dev/rbd0
1.4 mount it,
# mkdir -p /vol/test_image
# mount /dev/rbd0 /vol/test_image/
1.5 export it, modify the /etc/exports
# cat /etc/exports
/vol/test_image *(rw,async,no_subtree_check,no_root_squash)
# service nfs-kernel-server restart
# exportfs -r
1.6 check mount info for NFS server
# showmount -e 192.168.1.167
2. 在客户端以nfs方式mount上述导出的文件夹
# mount -t nfs 192.168.1.167:/vol/test_image /mnt
Luminous版本
Create RBD image
之前EC Pool
只能为RGW
服务 ,直到Luminous
版本,EC Pool
也可以应用在RBD
和CephFS
,并且增加了data-pool
这样的新特性,具体请参考官网:http://docs.ceph.com/docs/lum...
所以创建image
的方式也有所改变
Enable ec overwrites
ceph osd pool set ec_pool allow_ec_overwrites true
Create pool and image
由于EC
不支持omap
,所以在CephFS
或者RBD
场景使用EC
时,需要将data
存在EC Pool
中,将metadata
存在Replicated Pool
中
// 创建pool
ceph osd pool create ec-pool 12 12 erasure // ec pool, store data
ceph osd pool create md-pool 12 12 replicated // replicated pool, store metadata
ceph osd pool create ssd-pool 12 12 replicated // replicated pool, used as cache pool
// 创建image
rbd create --size 1024 --data-pool ec-pool md-pool/test_image
Map RBD
这一步之前的操作是rbd map ec-pool/test_image
,所以当前需要执行
rbd map md-pool/test_image
但是一直timeout
,通过查看dmesg
和网上资料发现是因为linux kernel
版本太低,所以升级了一下内核到4.3
版本之后就可以work
了
升级内核版本请参考:
- 内核版本过低导致RBD Feature不支持
- RBD Feature
Check map
rbd showmapped
Create filesystem on RBD
mkfs.ext4 /dev/rbd0
Mount
mkdir -p /vol/test_image
mount /dev/rbd0 /vol/test_image/
Modify export for nfs on server
vim /etc/exports
/vol/test_image *(rw,async,no_subtree_check,no_root_squash) // Modify it to /etc/exports
Server
Install NFS on server and client
Server
端执行一下操作
Install
yum -y install nfs-utils rpcbind
Start service
nfs
依赖rpcbind
,所以必须先启动rpcbind
,这很重要
service rpcbind start
service nfs start
exportfs -r
Client
客户端也执行以上操作,假设客户端ip
为192.168.1.1
,服务端为192.168.1.2
Check mount
查看是否可以挂载
showmount -e 192.168.1.2
Mount server to client
mount -t nfs 192.168.1.2:/vol/test_image /mnt
总结
遇到的主要问题
-
EC Pool
创建image
因为新版本改动 -
rbd map
因为linux kernel
版本低 -
nfs
因为nfs
在rpcbind
前启动
希望帮助大家尽量少些踩坑 ~~~
作者: Tony
日期: 2017-10-31 22:33