为什么Ceph需要iSCSI?
Ceph架构
Ceph官方https://docs.ceph.com/en/pacific/architecture/给出的基本架构如下图所示:
- RADOS:为Ceph的核心,是Ceph最底层架构。具有可靠、分布式等特性,提供ceph系统高可靠、高可拓展、高性能。用户数据最终通过这一层来存储数据到磁盘。
- LIBRADOS:为RADOS层的上一层,LIBRADOS是一个库,它允许应用程序通过访问该库来与RADOS系统进行交互,支持多种编程语言,比如C、C++、Python、Ruby和PHP等。
- RADOSGW + RBD + CEPH FS:为上层应用提供三种不同的接口。
- RADOSGW:提供了两种类型的API,一种是和AWS的S3接口兼容的API,另一种是和OpenStack的Swift对象接口兼容的API。
- RBD:通过librbd库提供了块存储访问接口。RBD通过Linux内核客户端和QEMU/KVM驱动来提供一个分布式的块设备。它可以为虚拟机提供虚拟磁盘,或者通过内核映射为物理主机提供磁盘空间。
- CEPH FS:目前提供两种接口,一种是标准的posix接口,另一种通过libcephfs库提供文件系统访问接口。文件系统的元数据服务器MDS用于提供元数据访问。数据直接通过librados库访问。
Ceph在应用场景的局限性
局限有哪些?
Ceph虽然提供了RBD、RGW、CephFS三种应用服务,可以支持大部分应用场景和需求,但一部分特定场景仍需要解决。
- 兼容性:基于IP/FC-SAN的遗留应用程序需要,这些应用程序针对VMware(70%+),Hyperv,Xen等。
- 高级特性:(1)Multipath & load balance (Active/Active),(2)VMware VAAI (vStorage APIs for Array Integration),(3)Windows ODX (Offloaded Data Transfer)。
为什么存在局限?
局限原因:上述场景需要提供块接口支持,而RBD虽然有librbd和KRBD两种方式,但仍有如下限制。
- Librbd用户态接口,普通应用不能直接使用,需要适配Librbd提供的接口,客户经常用到的VMWare EXSi、Windows/Solaris操作系统是无法直接对接librbd,导致兼容性上的局限。
- KRBD通过rbd map方式将image在客户端映射成本地块设备,虽然在兼容性上有提高,但只能部署在linux高内核版本系统,上面兼容性部分场景仍无法满足。
- Multipath等高级特性也无法直接对接rbd image,但KRBD在不同客户端映射的本地块设备也是不同的wwn,因此也无法支持。
如何解决局限?
上面Ceph无法满足的特性场景在业界解决的通用方法就是使用iSCSI。块接口与SCSI块设备读写所要求的接口也比较一致,可以使用RBD作为SCSI 存储系统后端。因此在Ceph的基础上提供对接iSCSI能力就成为解决上面问题的最好方案。
什么是iSCSI?
SCSI
小型计算机系统接口(Small Computer System Interface;简写:SCSI),一种用于计算机和外部设备之间(硬盘、光驱、软驱、打印机等)系统级接口的独立处理器标准。SCSI是一种智能的通用接口标准,它是各种计算机和外部设备之间的接口标准。其发展历程可参考SCSI维基百科。
客户端-服务器架构
下面部分内容参考:iSCSI存储和存储多路径介绍
- 客户端