存储知识

ceph - iscsi

2019-03-26  本文已影响0人  running_sheep

iscsi

本世纪初,SAN(Storage Area Network,存储区域网络,采用网状通道Fibre Channel技术,通过FC交换机连接存储阵列和服务器主机,建立专用的数据存储区域网络)通常指的是FC(Fiber Channel)SAN,直到iSCSI问世,为了方便区隔,业界才分别以FC-SAN及iSCSI-SAN的称呼加以分辨。

当时与SAN相对应的是在多用户网络环境中,采用文件协议(File Protocol)数据存取方式的NAS(Network Attached Storage,网络附加存储)方案。

iSCSI的出现,标志着低价化SAN方案的问世,帮助中小企业建置SAN。

所谓iSCSI亦即透过IP网络,将SCSI块数据转换成网络封包的一种传输标准,它和NAS一样透过IP网络来传输数据,但在数据存取方式上,则采用与NAS不同、却与FC-SAN相同的块协议(Block Protocal)。

优点

无传输距离限制、建置管理成本低是iscsi的最大特点,不论是适配卡、 交换机或缆线的购置,iSCSI都比FC便宜许多。其中适配卡部分,只要Host端主机本身内建的一般网络卡或网络芯片,搭配免费下载的iSCSI Initiator驱动程序即可,所以在适配卡方面可以达到完全免费的境界。

由于iSCSI与FC同样支持块协议的数据存取模式,所以比采用文件协议(File Protocol)的NAS,更能透过集中管理的方式,有效避免存储资源的浪费,进而节省不必要支出。

由于iSCSI是透过无处不在的IP网络来传输数据,所以理论上,传输距离也可达到无限制的境界,这对于异地数据的传输及灾备等应用相当有帮助。

拜GbE网络之赐,理论上,iSCSI的速度可达1Gb,虽然速度仍比不上FC SAN的2Gb,但效能上已超越大部分的NAS。更重要的是,一旦10Gb以太网络普及的时候,iSCSI就可能以10Gb的高速狂飙,甚至比FC SAN的新一代版本——4Gb还要快。

缺点

I/O端的速度限制:Brocade指出在Host主机及Target存储设备两处的I/O端速度一直不上来,所以即使10Gb以太网络真的普及,I/O端的速度瓶颈仍然会拖跨这个传输效能。

软件iSCSI Initiator效能不佳:其乃透过软件仿真来执行SCSI指令,所以会耗费掉大量的CPU资源,造成整体效能的低落。

无法兼顾效能及跨平台性:iSCSI Initiator可分为三种,亦即软件Initiator驱动程序、硬件的TOE HBA卡及iSCSI HBA卡。就效能而言,Initiator驱动程序最差、TOE居中、iSCSI HBA卡最佳。但是iSCSI HBA只能走iSCSI协议,而无法透过NFS(Network File System,SUN制定)或CIFS(Common Internet File System,微软制定)等档案系统协议与应用服务器沟通。但Initiator驱动程序及TOE则同时支持iSCSI、NFS及CIFS三种协议。

注:

Fibre Channel (FC) is a high-speed data transfer protocol (commonly running at 1, 2, 4, 8, 16, 32, and 128 gigabit per second rates) providing in-order, lossless[1] delivery of raw block data[2], primarily used to connect computer data storage to servers.[3][4] Fibre Channel is mainly used in storage area networks (SAN) in commercial data centers. Fibre Channel networks form a switched fabric because they operate in unison as one big switch. Fibre Channel typically runs on optical fiber cables within and between data centers, but can also run on copper cabling.

光纤通道(FC)是一种高速数据传输协议(通常以每秒1、2、4、8、16、32和128千兆的速率运行),它提供有序的无损[1]传输原始数据块[2],主要用于将计算机数据存储连接到服务器上。[3][4]光纤通道主要用于商业数据中心的存储区域网络(SAN)。光纤通道网络形成交换结构,因为它们作为一个大交换机一起工作。光纤通道通常运行在数据中心内部和数据中心之间的光纤电缆上,但也可以运行在铜缆上。

SCSI为小型计算机系统接口(英语:Small Computer System Interface; 简写:SCSI),一种用于计算机和智能设备之间(硬盘、软驱、光驱、打印机、扫描仪等)系统级接口的独立处理器标准。 SCSI是一种智能的通用接口标准。

    iSCSI技术是一种由IBM公司研究开发的,是一个供硬件设备使用的可以在IP协议的上层运行的SCSI指令集,这种指令集合可以实现在IP网络上运行SCSI协议,使其能够在诸如高速千兆以太网上进行路由选择。iSCSI技术是一种新储存技术,该技术是将现有SCSI接口与以太网络(Ethernet)技术结合,使服务器可与使用IP网络的储存装置互相交换资料。

iscsi协议使用ceph rbd

ISCSI使用rbd作为后端存储。ISCSI角色分为targetinitiator

target端即磁盘阵列或其他装有磁盘的主机,通过iscsi target工具将磁盘空间映射到网络上,initiator端就可以寻找发现并使用该磁盘。

initiator作为ISCSI的使用者,发送SCSI命令,用于寻找发现网络上的target,并使用网络上的磁盘。

块设备在Ceph集群中的最终存储形式是对象,对象名称与LBA关联(Logical Block Address,逻辑区块地址)。

ceph集群目前支持三种形式的存储接口:文件、对象、块,其中块接口(即RBD)与SCSI块设备读写所要求的接口一致,因此可以基于ceph的RBD提供SCSI存储系统后端,当然如果有足够信心的话也可以完全抛弃ceph提供的这三种基础接口,而在原始的RADOS接口上开发新的块接口,当然除非原始的RBD接口有重要缺陷,否则暂时还看不到重新发明轮子的必要。

CEPH RBD的Iscsi target实现分析

由于 ceph 集群的设计,RBD 设备的读写需要专门的 RBD 客户端,因此支持直接读写 RBD 的机器都需要安装 RBD 客户端软件。目前已有的 RBD 客户端有两种实现,一种是直接集成到内核中的内核驱动形式的实现,另一种是动态库形式的用户态实现(包括python、java 等语言的绑定),这两种实现暂时都只支持 GNU/Linux 系统,同时相比后者,前者还存在一些问题,如:1)只有较新的内核才支持 RBD,2)某些发行版不一定会将RBD 支持编译进内核,3)ceph 的开发迭代周期很短,新特性、BUG 修复等不可能很及时的合入内核,4)稳定性还有待验证。

基于 RBD 的 iSCSI 支持有多种实现思路:

(1)为 iSCSI 客户端增加 RBD 客户端的功能,即在客户端实现 iSCSI initiator 与RBD client 的融合

这种方法iSCSI initiator(终端用户)需要在内核中注册块设备,GNU/Linux 下修改 iSCSI initiator 容易,但是 Windows等系统下的闭源客户端我们无法进行修改。

(2)类似于 MDS 的实现,为 ceph 集群增加 LUS(Logical Unit Server)服务器,由 LUS 负责 iSCSI 业务接入

这种方法,终端用户不用做任何改变,所有的修改都在服务端即 ceph 集群侧进行,需要增加 LUS(LogicalUnit Server)服务器(映射在服务器上的网络块设备)。但是终端用户机器上需要单独开发一个模块与ceph集群交互,闭源的 iSCSI initiator 实现我们很难将它与ceph 客户端模块融合。

(3)选择合适的 iSCSI target 为其增加 RBD 后端支持,并在终端用户与 ceph 集群之间架设 iSCSI 网关。

将 LUS 从 ceph 集群中移出来作为 ceph 集群的客户端,同时又作为终端用户的 iSCSI 服务端,此时整个系统的组织架构如下图所示,这里的 iSCSI 网关实际上就是一个以 ceph 集群为存储后端的 iSCSI target。

其他ceph客户端通过ceph接口访问ceph集群,iSCSI initiator通过iSCSI GW来访问ceph集群。为了使得 ceph 集群提供的 RBD 块设备能够被 iSCSI 网关作为 LUN导出给终端用户使用,这里有两种实现思路:1)使用内核态 RBD客户端将 RBD 块设备映射到 iSCSI 网关本地,然后再由 iSCSI target 将映射到本地的块设备作为 LUN 导出给终端用户使用,2)选择合适的 iSCSI target,并为其增加用户态的RBD 存储后端。

(1)映射 RBD 到本地再导出

常见的 iSCSI target 都支持将块设备作为 target 的后端存储,而 ceph的内核态 RBD 客户端支持将远端的RBD 块设备映射到本地,因此可以选择合适的 iSCSI target将映射到本地的块设备作为 LUN 导出,这是现在流行的或者说暂时相对可行的 ceph iSCSI解决方案。

(2)将 RBD 作为存储后端直接导出

增加新的 iSCSI target 存储后端,新的存储后端通过调用用户态的 RBD 接口实现数据的读写。流行的iSCSI target 实现有如下几种:tgt、IET、SCST、Linux-IO

LIO-TCMU:LIO 也即 Linux-IO,是目前 GNU/Linux 内核自带的 SCSI target 框架,TCMU 基于前面所提到的 UIO,其最初的设计目标就是为了支持用户态的 RBD、gluster 等,因此如果需要 LIO-TCMU 支持用户态 RBD,只需要设计用户态应用程序即可。

Ceph ISCSI的架构图

实例

LIO利用TCMU与Ceph的librbd库进行交互,并将RBD images映射给iSCSI客户端。

在OSD 节点上安装ISCSI GW

包:

targetcli-2.1.fb47 or      newer package 

python-rtslib-2.1.fb64 or      newer package 

tcmu-runner-1.3.0 or      newer package

ceph-iscsi-config-2.4 or      newer package

ceph-iscsi-cli-2.5 or      newer package 

(1)创建一个iscsi gw的配置文件

# touch /etc/ceph/iscsi-gateway.cfg

...

trusted_ip_list = 192.168.0.10,192.168.0.11

注意:需要修改的地方就行把trusted_ip_list替换成自己实际场景的节点ip

(2)重启iscsi服务

# systemctl daemon-reload

# systemctl enable rbd-target-api

# systemctl start rbd-target-api

(3)创建iscsi target(可通过ceph-api实现)

首先要在存储设备上划分磁盘阵列的磁盘空间(即Virtual disk),设置好iSCSI 目标方(target)

执行gwcli命令进入iscsi

创建iscsi target

> /> cd /iscsi-target

> /iscsi-target>  create iqn.2003-01.com.redhat.iscsi-gw:iscsi-igw

创建iSCSI网关

> /iscsi-target> cd iqn.2003-01.com.redhat.iscsi-gw:iscsi-igw/gateways

> /iscsi-target...-igw/gateways>  create ceph-gw-1 10.172.19.21 skipchecks=true

> /iscsi-target...-igw/gateways>  create ceph-gw-2 10.172.19.22 skipchecks=true

注:IP是用于iSCSI数据传输的IP,它们可以与trusted_ip_list中列出的用于管理操作的IP相同,也可以不同,看有没有做多网卡分离

创建一个rbd设备disk_1

> /iscsi-target...-igw/gateways> cd /disks

> /disks> create pool=rbd image=disk_1 size=90G

创建iqn

> /disks> cd /iscsi-target/iqn.2003-01.com.redhat.iscsi-gw:iscsi-igw/hosts

> /iscsi-target...eph-igw/hosts>  create iqn.1994-05.com.redhat:rh7-client

创建chap的用户名密码

并且chap必须设置,否则服务端是禁止连接的

> /iscsi-target...at:rh7-client>  auth chap=myiscsiusername/myiscsipassword

增加磁盘到客户端

> /iscsi-target...at:rh7-client> disk add rbd.disk_1

安装配置完之后就可以挂载使用了

(4)挂载

安装iscsi工具

# yum install iscsi-initiator-utils

# yum install device-mapper-multipath

配置多路径

# mpathconf --enable --with_multipathd y

devices {

        device {

                vendor                 "LIO-ORG"

                hardware_handler       "1 alua"

                path_grouping_policy   "failover"

                path_selector          "queue-length 0"

                failback               60

                path_checker           tur

                prio                   alua

                prio_args              exclusive_pref_bit

                fast_io_fail_tmo       25

                no_path_retry          queue

        }

}

重启服务

# systemctl reload multipathd

配置chap认证

修改配置客户端的名称为之前设置的名称

# vi /etc/iscsi/initiatorname.iscsi 

 InitiatorName= iqn.1994-05.com.redhat:rh7-client

修改chap认证配置文件

 # vi /etc/iscsi/iscsid.conf

 node.session.auth.authmethod = CHAP

 node.session.auth.username = myiscsiusername

 node.session.auth.password = myiscsipassword

查询iscsi target

# iscsiadm -m discovery -t -st 10.172.19.21

Discover targets at a given IP address:

-m discovery  //侦测target

-t sendtargets  //通过iscsi协议

-p IP:port  //指定target的IP和port,不写port的话,默认为3260

被发现的目标也叫做节点

连接target

# iscsiadm -m node -T iqn.2003-01.com.redhat.iscsi-gw:iscsi-igw -l

# multipath –ll

注:由于需要实现存储设备的多路径访问及故障切换,故需要运行multipath服务,这个在os中已经安装好了。Multipath服务原理为iSCSI磁阵中的一个真实的virtual disk通过与2个冗余阵列控制器连接的端口对外提供映射,故服务器上可以看到两个物理磁盘,但此磁盘对应一个真实的一个真实的virtual disk,故这两条路径间可以实现故障切换和负载均衡。

参考

https://sebastien-han.fr/blog/2017/01/05/Ceph-RBD-and-iSCSI/

https://blog.csdn.net/younger_china/article/details/79407574

https://blog.csdn.net/skdkjzz/article/details/42747113

https://blog.csdn.net/rocson001/article/details/50886093

https://blog.csdn.net/shuningzhang/article/details/50081731

http://www.cppblog.com/runsisi/archive/2015/08/15/211568.html

https://cloud.tencent.com/info/bd74acc63f5f11f29add31acbcf9322d.html

https://blog.51cto.com/ityunwei2017/1421544

https://blog.csdn.net/lsbhjshyn/article/details/7894235

上一篇下一篇

猜你喜欢

热点阅读