如何通过Ceph-RBD和ISCSI-target实现硬盘共享

今天就跟大家聊聊有关如何通过Ceph-RBD和ISCSI-target实现硬盘共享,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

创新互联-专业网站定制、快速模板网站建设、高性价比临淄网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式临淄网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖临淄地区。费用合理售后完善,10余年实体公司更值得信赖。

1 问题提出

   现在要求把机房的设备存储都利用起来,建立一个存储池,能满足用多少创建多少而且能够跨平台挂载创建的硬盘。目前,验室的机房目前已经建立起来了CEPH的集群,存储池达到了257TB,于是设想创建一个RBD(RADOS block device),然后通过ISCSI-target把创建的RBD导出来用于客户端的挂载。

2 可行性分析

   上述的问题的实现主要是两部分,一部分是创建RBD,另一部分是通过安装ISCSI-target把RBD导出,用于Ceph集群外主机挂载。目前的实验环境已经可以成功的创建RBD用于Ceph集群内的装有RBD客户端的主机挂载,剩下的就是第二部分的实现。由于Ceph已经支持通过iscsi协议来使用rbd,所以在理论上是可行的。

3 实现过程

3.1 环境说明

实验平台:ubuntu14.04 server,内核:3.13.0-32-generic

Ceph版本:version 0.94.2

服务端 ISCSI-target采用Linux SCSI target framework (tgt)(http://stgt.sourceforge.net/)

服务端IP:172.25.1.55

3.2 创建RBD

在ceph-admin节点执行下面命令:

rbd create --size {megabytes} {pool-name}/{image-name}

比如创建大小为1GB,名为ceph-rbd1的RBD:

rbd create --size 1024 ceph-rbd1

未指定pool-name则默认创建到rbd池里面

查看RBD:rbd ls {poolname} 不加poolname默认查看rbd池下的RBD

查看RBD详细信息:

rbd info {pool-name}/{image-name}

比如查看ceph-rbd1:rbd info ceph-rbd1 不加pool-name默认rbd池

3.3 映射RBD

创建好的RBD需要映射到客户机才能使用,客户机需要内核支持Ceph块设备和文件系统,推荐内核2.6.34或更高版本。

检查Linux版本和对RBD的支持:

modprobe rbd

Linux哲学,不返回消息就是最好的消息。所以modprobe rbd没有返回消息说明内核对rbd支持。

在ceph-osd节点执行下面命令:

rbd map rbd/ceph-rbd1

格式是rbd map {pool-name}/{image-name} 不加{pool-name}默认rbd

查看映射后的RBD在操作系统中的设备名:

rbd showmapped

可以看到创建的RBD在操作系统的设备名是/dev/rbd1

fdisk –l /dev/rbd1#参看分区情况

如果用于本机挂载执行接下来步骤:

mkfs.xfs /dev/rbd1 #格式化RBD
mkdir /mnt/ceph-vol1 #创建挂载点
mount /dev/rbd1 /mnt/ceph-vol1 #挂载RBD,可以写入数据测试一下挂载后的RBD

不过我们的目的是Ceph集群外主机挂载RBD,所以上面的步骤了解一下即可,集群外主机挂载RBD需要用到ISCSI-target。

3.4 配置rbdmap

根据网络文档了解到,创建rbd块设备并rbd map后,如果不及时rbd unmap,关机的时候系统会停留在umount此rbd设备上。所以要配置rbdmap。官方文档无rbdmap的介绍,而且这个脚本也不是官方发布的,为避免遇到这种问题先下载并设置开机启动rbdmap,将来再尝试不加入这个脚本会不会出现问题。

sudo wget https://raw.github.com/ceph/ceph/a4ddf704868832e119d7949e96fe35ab1920f06a/src/init-rbdmap -O /etc/init.d/rbdmap #获得脚本文件
sudo chmod +x /etc/init.d/rbdmap #增加执行权限
sudo update-rc.d rbdmap defaults #添加开机启动

修改rbdmap的配置文件/etc/ceph/rbdmap将映射好的rbd添加进去,注意/etc/ceph/rbdmap路径是wget时的当前路径 ,我wget时是在/etc/ceph路径下的。

vi /etc/ceph/rbdmap
# RbdDevice     Parameters
#poolname/imagename   id=client,keyring=/etc/ceph/ceph.client.keyring
rbd/ceph-rbd1      id=client,keyring=/etc/ceph/ceph.client.keyring

如果使用了cephx那么,keyring=/etc/ceph/ceph.client.keyring就要加上了

3.5 配置ISCSI-target

Linux SCSI target framework (tgt)用来将 Linux 系统仿真成为 iSCSI target 的功能;安装tgt,并检查是否支持rbd:

apt-get install tgt
tgtadm --lld iscsi --op show --mode system | grep rbd

rbd (bsoflags sync:direct)#返回这个信息表明支持rbd

文件的了解:
/etc/tgt/targets.conf:主要配置文件,设定要分享的磁盘格式与哪几颗;

/usr/sbin/tgt-admin:在线查询、删除 target 等功能的设定工具;

/usr/sbin/tgt-setup-lun:建立 target 以及设定分享的磁盘与可使用的客户端等工具软件。

/usr/sbin/tgtadm:手动直接管理的管理员工具 (可使用配置文件取代);

/usr/sbin/tgtd:主要提供 iSCSI target 服务的主程序;

/usr/sbin/tgtimg:建置预计分享的映像文件装置的工具 (以映像文件仿真磁盘);

SCSI 有一套自己分享 target 档名的定义,基本上,藉由 iSCSI 分享出来的 target 檔名都是以 iqn 为开头,意思是:『iSCSI Qualified Name (iSCSI 合格名称)』的意思。那么在 iqn 后面要接啥档名呢?通常是这样的:

iqn.yyyy-mm.:identifier

单位网域名的反转写法  :这个分享的target名称

比如:target iqn.2015-9.localhost:iscsi 在接下看的配置中会用到

我们主要是修改 /etc/tgt/targets.conf,把创建好的RBD信息添加进去。

vim /etc/tgt/targets.conf

# 此档案的语法如下:


    backing-store 存储设备名 -1
    backing-store 存储设备名 -2


    driver iscsi #驱动
    bs-type rbd # 后端存储类型 – 默认 rdwr, 可选 aio, 等...在这里选rbd
backing-store rbd/ceph-rbd1  # <==LUN 1 (LUN 的编号通常照顺序)Format is /

backing-store (虚拟的装置), direct-store (实际的装置): 设定装置时,如果你的整个磁盘是全部被拿来当 iSCSI 分享之用,那么才能够使用 direct-store 。不过,根据网络上的其他文件, 似乎说明这个设定值有点危险的样子。所以,基本上还是建议单纯使用模拟的 backing-store 较佳。

当然,配置文件中还有其他的一些参数可以参考:/usr/share/doc/tgt/examples/targets.conf.example里面的内容。

然后重启tgt:/etc/init.d/tgt restart

参看端口是否开启:netstat -tlunp | grep tgt 默认3260端口

观察一下target 相关信息,以及提供的 LUN 数据内容:

tgt-admin –show
Target 1: iqn.2015-9.localhost:iscsi  <==就是我们的 target
    System information:
        Driver: iscsi
        State: ready
    I_T nexus information:
    LUN information:
        LUN: 0
            Type: controller     <==这是个控制器,并非可以用的 LUN 喔!
  ……省略中间……..
        LUN: 1
            Type: disk    <==第一个 LUN (Logical Unit Number)
            SCSI ID: IET     00010001
            SCSI SN: beaf11
            Size: 10995116 MB, Block size: 512 <==容量
            Online: Yes
            Removable media: No
            Prevent removal: No
            Readonly: No
            SWP: No
            Thin-provisioning: No
            Backing store type: rbd
            Backing store path: rbd/ceph-rbd1 <==磁盘所在的实际文件名
            Backing store flags:
    Account information:
    ACL information:
        ALL

至此ISCSI-target就已经配置好了。

3.6 windows客户端挂载

iSCSI initiator:就是能够使用 target 的客户端,通常是服务器。 也就是说,想要连接到 iSCSI target 的服务器,也必须要安装 iSCSI initiator 的相关功能后才能够使用 iSCSI target 提供的磁盘。

上面配置都成功的话就可以进行正常挂载,我是在windows7上面进行的挂载。windows7自带有iSCSI initiator。

打开控制面板—》系统与安全—》管理工具 iSCSI 发起程序

点发现门户然后填入你的服务端IP或DNS

可以看到当前的状态是不活动的,可以点击连接:

 连接成功后相当于挂载了一个硬盘,这时我们可以在磁盘管理中进行分区和格式化等一些操作,格式化成功后可以看到磁盘已经在系统中了。

3.7 linux客户端挂载

本次主要针对的windows客户端挂载,成功的挂载说明服务器端是没有问题的,如果要在linux上进行挂载,只需要安装iSCSI initiator然后进行简单的配置。具体的配置方法下面的参考文献中的鸟哥文章有详细介绍,这里只是说明其是具有可行性的,不进行实例验证了。

注意,linux客户端和windows客户端都是ceph集群外的主机,集群内的不需要用到iscsi就可以进行创建挂载。

看完上述内容,你们对如何通过Ceph-RBD和ISCSI-target实现硬盘共享有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注创新互联行业资讯频道,感谢大家的支持。


本文名称:如何通过Ceph-RBD和ISCSI-target实现硬盘共享
文章链接:http://cdiso.cn/article/jeppsg.html

其他资讯