使用NFS挂载RBD

原文地址: 使用NFS挂载RBD

具体场景

  • Server端创建RBD块设备并挂载到某个目录,然后在Client端通过NFSServer端之前说的目录再挂载到本地,就可以实现在客户端写文件通过NFSServer端的块设备上
  • 这波操作的目的是因为测试EC性能时,Ceph版本还是HammerCephFS不是很稳定,性能不行,所以想用RBD的方式取代,但是Hammer版本中EC是只支持RGW的,并不支持CephFSRBD,至于这个场景具体流程之后会在其他文章分享
  • 这波操作在之前CephHammer版本做过,这次是要在新版本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也可以应用在RBDCephFS,并且增加了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

客户端也执行以上操作,假设客户端ip192.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因为nfsrpcbind前启动

希望帮助大家尽量少些踩坑 ~~~

作者: Tony
日期: 2017-10-31 22:33

你可能感兴趣的:(ceph,存储技术,nfs)