通过iscsi协议使用ceph rbd

通过iscsi协议使用ceph rbd

Ceph iscsi gatway基本框架图:
 
通过iscsi协议使用ceph rbd_第1张图片

1. 常见的几种iscsi target

GNU/Linux 系统中流行的 SCSI target 框架或 iSCSI target 实现有如下几种: tgt、SCST、 Linux-IO。 

1.1 tgt

tgt 是一个用户态的 SCSI target 框架,在 GNU/Linux 内核直接集成 SCSI target框架之前,这是一个绝对主流的框架。
它的优点是:
1)简单,方便使用和维护;
2)另外已经有ceph的target driver,只是需要做性能优化;
3)因为工作在用户态,所以即使挂掉了,也不会对其他运行的程序产生影响;
它的缺点是:
1)支持的传输协议较少;
2)对SCSI协议支持比较简单,一些cluster中的特性比如PR等都不支持,所以基于stgt的方案不能在cluster中使用;
3)由于是用户态框架,性能问题较差,根据网上的相关数据, tgt 在使用本地存储的情况下,性能相比后面会提到的 SCST、 LIO 等是有一定差距的。
 

1.2. SCST

SCST的核心模块工作在内核里,可以支持通过系统模块(VFS、块层)访问的后端存储如块设备、文件设备以及 passthrough的scsi设备。
它的优点是:
1)支持更多传输协议
2)针对性能做了特殊的优化
3)除了基本的SCSI协议支持外,还有一些高级支持:
SCST支持永久性预留(Persistent Reservation, PR);这是一个用于高可用集群中的存储设备的 I/O 隔离与存储设备故障切换、接管的特性。通过使用 PR 命令,initiator 可以在一个 target 上建立、抢占、查询、重置预留策略。在故障接管过程中,新的虚拟资源可以重置老的虚拟资源的预留策略,从而让故障切换更快、更容易地进行。
SCST 可以使用异步事件通知(AEN)来通告会话状态的变更。AEN 是一个 SCSI target 用来向 initiator 进行 target 端的事件告知的协议特性,即使在没有服务请求的时候也可以进行。于是 initiator 就可以在 target 端发生事件时,如设备插入、移除、调整尺寸或更换介质时,可以得到通知。这让 initiator 可以以即插即用的方式看到 target 的变化。
4)SCST 的开发者声称,它们的设计在健壮性和安全性方面更加符合 SCSI 标准。SCSI 协议要求,如果一个 initiator 要清除另一个 initiator 的预留资源时,预留者必须要得到清除通知,否则,多个 initiator 都可能来改变预留数据,就可能会破坏数据。SCST 可以实现安全的预留、释放操作,避免类似事情发生。
5)SCST 也支持非对称逻辑卷分配(ALUA)。ALUA 允许 target 管理员来管理 target 的访问状态和路径属性。这让多路径路由机制可以选择最好的路径,从而根据 target 的访问状态,优化带宽的使用。换句话说,在多路径环境下,target 管理员可以通过改变访问状态来调整 initiator 的路径。
6)各大存储服务提供商都是基于SCST。
7)提供更细粒度的访问控制策略以及QoS保证机制(限制initiator连接的个数)。
它的缺点是:
1)结构复杂,二次开发成本较高。
2)工作在kernel,如果挂了,会导致整个机器down掉,影响其他程序。
3)kernel部分没有并入linux,需要手工编译。
 

1.3. LIO

LIO 也即 Linux-IO,是目前 GNU/Linux 内核自带的 SCSI target 框架(自 2.6.38版本开始引入,真正支持 iSCSI 需要到 3.1 版本) ,对 iSCSI RFC 规范的支持非常好,包括完整的错误恢复都有支持。整个 LIO 是纯内核态实现的,包括前端接入和后端存储模块,为了支持用户态后端,从内核 3.17 开始引入用户态后端支持,即 TCMU(Target Core Module in Userspace)
优点:
1)支持较多传输协议
2)代码并入linux内核,减少了手动编译内核的麻烦。
3)提供了python版本的编程接口rtslib。
4)LIO在不断backport SCST的功能到linux内核,社区的力量是强大的。
5)LIO也支持一些SCST没有的功能。如LIO 还支持“会话多连接”(MC/S)。
6)LIO支持最高级别的ERL。 
缺点:
1)不支持AEN,所以target状态发生变化时,只能通过IO或者用户手动触发以检测处理变化。
2)结构相对复杂,二次开发成本较高。
3)工作在内核态,出现问题会影响其他程序的运行。

2. tgt方式

说明:
IQN命名的格式:
iqn...[:]


1) 安装tgt
wget http://apt-mirror.sepia.ceph.com/centos6-qemu-kvm/scsi-target-utils-1.0.38-48.bf6981.ceph.el6.x86_64.rpm
rpm -ivh  scsi-target-utils-1.0.38-48.bf6981.ceph.el6.x86_64.rpm


使能tgt服务
systemctl enable tgtd.service
systemctl start tgtd.service


2) 验证tgt是否支持rbd
 


3) 创建iscsi target
创建存储池和rbd镜像
ceph osd pool create iscsi-pool 1024 1024
rbd create iscsipool/image01 --size 10240


通过修改配置的方式
vi /etc/tgt/targets.conf添加如下配置

    driver iscsi
bs-type rbd
backing-store iscsipool/image01



重启target服务
systemctl start tgtd.service


查看创建的scsi target
tgtadm --lld iscsi --mode target --op show
  通过iscsi协议使用ceph rbd_第2张图片


使用命令行创建
创建一个iscsi target
tgtadm --lld iscsi --mode target --op new --tid 2 --targetname iqn.2016-08.com.example02:iscsi


删除target:
tgtadm --lld iscsi --mode target --op delete --tid 2


在指定target上创建一个lun
tgtadm --lld iscsi --mode logicalunit --op new --tid 2 --lun 1 --backing-store iscsipool/image01 --bstype rbd


删除lun命令:
tgtadm --lld iscsi --mode logicalunit --op delete --tid 2 --lun 1


查看创建的scsi target
 
通过iscsi协议使用ceph rbd_第3张图片



3. iscsi initiator配置(客户端)

3.1 连接Target

1) 安装iscsi-initiator
rpm -ivh iscsi-initiator-utils-6.2.0.873-10.el6.x86_64.rpm
2) 发现目标设备
iscsiadm -m discovery -t sendtargets -p 172.93.21.14
 
3) 挂载目标设备
iscsiadm -m node -T iqn.2016-08.rbdstore.example.com:iscsi -l
去挂载命令:
iscsiadm -m node -T iqn.2016-08.rbdstore.example.com:iscsi -u
  通过iscsi协议使用ceph rbd_第4张图片

3.2 验证

挂载设备到本地目录
mkfs.ext4 /dev/sda
mkdir /mnt/block-device-iscsi
mount /dev/sda /mnt/block-device-iscsi/


使用fio测试

通过iscsi协议使用ceph rbd_第5张图片

 

你可能感兴趣的:(ceph)