iSCSI 与 ceph
SCSI
小型计算机系统接口(SCSI,Small Computer System Interface)是一种用于计算机及其周边设备之间(硬盘、软驱、光驱、打印机、扫描仪等)系统级接口的独立处理器标准。SCSI标准定义命令、通信协议以及实体的电气特性(换成OSI的说法,就是占据物理层、链接层、套接层、应用层),最大部分的应用是在存储设备上(例如硬盘、磁带机);但,其实SCSI可以连接的设备包括有扫描仪、光学设备(像CD、DVD)、打印机……等等,SCSI命令中有条列出支持的设备SCSI周边设备。理论上,SCSI不可能连接所有的设备,所以有“1Fh - unknown or no device type”这个参数存在。
SAS
(Serial Attached SCSI,串列SCSI)是由并行SCSI物理存储接口演化而来,是由ANSI INCITS T10技术委员会开发的新的存储接口标准。与并行方式相比,串列方式提供更快速的通信传输速度以及更简易的配置。此外SAS支持与串列ATA设备兼容,且两者可以使用相类似的电缆。SATA的硬盘可接在SAS的控制器使用,但SAS硬盘并不能接在SATA的控制器使用。
- 第一代SAS为数组中的每个驱动器提供3.0 Gbps(约3000 Mbps)的传输速率。
- 第二代SAS为数组中的每个驱动器提供6.0 Gbps(约6000 Mbps)的传输速率。
- 第三代SAS为数组中的每个驱动器提供12.0 Gbps(约12000 Mbps)的传输速率。
SATA
串行ATA(Serial ATA: Serial Advanced Technology Attachment)是串列SCSI(SAS: Serial Attached SCSI)的孪生兄弟。两者的排线兼容,SATA硬盘可接上SAS接口。它是一种电脑总线,主要功能是用作主板和大量存储设备(如硬盘及光盘驱动器)之间的数据传输之用。SATA主要用于个人电脑。
SATA版本 | 带宽 | 速度 |
---|---|---|
SATA Express | 16Gb/s | 1969MB/s |
SATA 3.0 | 6Gb/s | 600MB/s |
SATA 2.0 | 3Gb/s | 300MB/s |
SATA 1.0 | 1.5Gb/s | 150MB/s |
iSCSI(Internet Small Computer System Interface,发音为/аɪskʌzi/),Internet小型计算机系统接口,又称为IP-SAN,是一种基于因特网及SCSI-3协议下的存储技术,由IETF提出,并于2003年2月11日成为正式的标准。与传统的SCSI技术比较起来,iSCSI技术有以下三个革命性的变化:
- 把原来只用于本机的SCSI协义通过TCP/IP网络发送,使连接距离可作无限的地域延伸;
- 连接的服务器数量无限(原来的SCSI-3的上限是15);
- 由于是服务器架构,因此也可以实现在线扩容以至动态部署。
功能
iSCSI利用了TCP/IP的port 860 和 3260 作为沟通的渠道。透过两部计算机之间利用iSCSI的协议来交换SCSI命令,让计算机可以透过高速的局域网集线来把SAN模拟成为本地的储存装置。
iSCSI使用 TCP/IP 协议(一般使用TCP端口860和3260)。 本质上,iSCSI 让两个主机通过 IP 网络相互协商然后交换 SCSI 命令。这样一来,iSCSI 就是用广域网仿真了一个常用的高性能本地存储总线,从而创建了一个存储局域网(SAN)。不像某些 SAN 协议,iSCSI 不需要专用的电缆;它可以在已有的交换和 IP 基础架构上运行。然而,如果不使用专用的网络或者子网( LAN 或者 VLAN ),iSCSI SAN 的部署性能可能会严重下降。于是,iSCSI 常常被认为是光纤通道(Fiber Channel)的一个低成本替代方法,而光纤通道是需要专用的基础架构的。但是,基于以太网的光纤通道(FCoE)则不需要专用的基础架构。
虽然 iSCSI 可以与任意类型的 SCSI 设备进行通信,系统管理员几乎总是使用它来连接服务器计算机 (例如,数据库服务器) 和磁盘卷上存储阵列。 使用iSCSI SAN 的目的通常有以下两个:
存储集成 公司希望将不同的存储资源从分散在网络上的服务器移动到统一的位置(常常是数据中心); 这可以让存储的分配变得更为有效。 SAN 环境中的服务器无需任何更改硬件或电缆连接就可以得到新分配的磁盘卷。
灾难恢复 公司希望把存储资源从一个数据中心镜像到另一个远程的数据中心上,后者在出现长时间停电的情况下可以用作热备份。 特别是,iSCSI SAN 使我们只需要用最小的配置更改就可以在 WAN 上面迁移整个磁盘阵列,实质上就是,把存储变成了“可路由的”,就像普通的网络通信一样。
Ceph-iSCSI Gateways
https://www.suse.com/documentation/ses-3/book_storage_admin/data/ceph_iscsi_iscsi.html
LIO
历史
- Linux 2.6.38 为分界线,此前的标准是 Linux SCSI Target , STGT 之后迄今为止的
标准是 Linux-IO Target , LIO 确切的说 Linus Torvalds 在 2011年1月15日将
LIO SCSI Target engine merge 到 Linux 2.6.38 中 - 暂时使用LIO作为IET替代,因为IET当前已不更新,最新版2010年。而LIO已进入内核,
怎么说这几年应该都会持续发展,属于主流应用。
开源iSCSI Target调研
- SCST与LIO
- SCST是一个相对较早且比较成熟的SCSI Target开源实现。
- LIO相比SCST是一个更晚的SCSI Target开源实现,但在与SCST竞争进入Linux内核中,
却以LIO胜出告终。关于二者之间进入Linux内核时的争论,LWN上一篇很 有趣的文章,
A tale of two SCSI Targets,中文翻译为“SCSI Target之 双城记”。 - 虽然LIO因为进入Linux内核而有了更好的发展前景,但SCST也不差,Fusion-io 公司
刚刚收购了SCST的商业支持公司ID7。
- Tgt
- Tgt也是一个通用的SCST Target开源实现,与前两者不同的是,在支持iSCSI协 议上,
Tgt的所有代码是完全工作在用户态的。 - Tgt将LU视为backstore,支持backstore可以模块化,也就是说,你可以写一个模块来
支持你自己定义的LU。Tgt提供了多线程api接口,使得编写backstore时 ,可以使用多
个线程同时处理SCSI请求。 - Tgt的主线程使用epoll LT模型,监听并接收Initiator发来
的读写请求与命令 ,而调用对应的backstore处理模块。
- Tgt也是一个通用的SCST Target开源实现,与前两者不同的是,在支持iSCSI协 议上,
- iSCSI Target支持LU是分布式文件系统时的优化
- iSCSI Target与LU之间支持多连接并发读写请求,对于不要求排序的SCSI命令与数据,可以并发发给LU
- iSCSI Target对SCSI命令与数据进行合并,然后发给LU。
- 比较
- 无论是SCST还是LIO,我都不认为它们是支持分布式文件系统的最佳选择。
首先,它们都是工作在内核态的,一旦出问题,会导致系统挂掉,直接影响跑在系统上的其他线上服务。
其次,SCSI与LIO作为通用的SCSI Target实现,在处理完iSCSI协议后,会把SCSI的
处理交给内核SCSI Driver去处理,这对支持分布式文件做二次开发来说,相对更加困难。 - LIO对于一个LU,分配一个recv线程与一个send线程,recv线程接收Initiator发来的
iSCSI PDU,解析成SCSI请求后交给send线程,send线程将请求发给LU,并将LU返回
的结果返回给Initiator。对于LU是分布式文件系统时,一个send线程的框架让支持
iSCSI Target与LU之间多连接并发读写相对比较困难。而且LIO对iSCSI协议的支持,
很难针对LU是分布式文件系统做优化。LIO的send线程 与recv线程使用一个队列进行
通信,该队列中的SCSI请求,有些不关心顺序,有些却关心,这些都是在send线程遍
历队列时才进行处理的。如果要支持LU的多连接并发读写,需要额外的队列来维护SCSI
请求,这个队列对SCSI请求到达LU的顺序没有要求。当然,也要额外支持多线程等处理。 - Tgt由于工作在用户态,没有缺点1,而且Tgt的backstore可以模块化,开发起来非常方便,
同时backstore支持多线程处理,而且Tgt交给backstore的多线程处理的 list已经对顺序不作要求了。 - 从以上分析来看,使用Tgt让分布式文件系统支持iSCSI更加有优势,而且更加方便。
目前,开源分布式存储项目sheepdog与hlfs都是基于Tgt开发模块来支持 iSCSI协议的。
- 无论是SCST还是LIO,我都不认为它们是支持分布式文件系统的最佳选择。
- Tgt的缺点与改进
- Tgt的backstore在使用多线程时,多个线程竞争一个list,开销较大。可以让 每个线程维护
一个list,主线程通过CAS无锁队列的方式,将SCSI请求根据rr算 法加入到每个线程的list中。 - Tgt的backstore与LU之间连接数与线程数,是1:1关系,且线程数为4,写死了的。
可以修改代码,将连接数改为可配置的。 - Tgt使用一个主线程通过epoll接受所有Initiator的读写请求,当登陆的Initiator较多时,
这里可能成为瓶颈。通常来说,这不是问题,因为会iSCSI Target会部署多个的。
- Tgt的backstore在使用多线程时,多个线程竞争一个list,开销较大。可以让 每个线程维护
iSCSI 与 ceph的更多相关文章
- iSCSI 网关管理 - Storage6
iSCSI网关集成了Ceph存储和iSCSI标准,以提供一个高可用性(HA) iSCSI目标,该目标将RADOS块设备(RBD)映像导出为SCSI磁盘.iSCSI协议允许客户机 (initiator) ...
- Ceph块设备
Ceph块设备 来自这里. 块是一个字节序列(例如,一个512字节的数据块).基于块的存储接口是最常见的存储数据的方法,它通常基于旋转介质,像硬盘.CD.软盘,甚至传统的9道磁带. 基本的块设备命令 ...
- LVM 类型的 Storage Pool - 每天5分钟玩转 OpenStack(8)
LVM 类型的 Storage Pool 不仅一个文件可以分配给客户机作为虚拟磁盘,宿主机上 VG 中的 LV 也可以作为虚拟磁盘分配给虚拟机使用. 不过,LV 由于没有磁盘的 MBR 引导记录,不能 ...
- k8s pv
这个文档描述当前在k8s中PersistentVolumes的使用. 我们建议和volume一起进行了解 Introduction 管理存储和管理计算是截然不同的问题. 持久存储子系统对用 ...
- Hello,Kubernetes
什么是Kubernetes Kubernetes(k8s)是一款开源的以容器为中心的,用于跨主机集群自动部署(automating deployment),控制容器扩展/收缩(scaling)和管理容 ...
- kubernetes系列11—PV和PVC详解
本文收录在容器技术学习系列文章总目录 1.认识PV/PVC/StorageClass 1.1 介绍 管理存储是管理计算的一个明显问题.该PersistentVolume子系统为用户和管理员提供了一个A ...
- [持续交付实践] Jenkins Pipeline 高可用设计方法
前言 这篇写好一段时间了,一直也没发布上来,今天稍微整理下了交下作业,部分内容偷懒引用了一些别人的内容.使用Jenkins做持续集成/持续交付,当业务达到一定规模的时候,Jenkins本身就很容易成为 ...
- Kubernetes持久化存储1——示例
目录贴:Kubernetes学习系列 一.简介 存储管理与计算管理是两个不同的问题.Persistent Volume子系统,对存储的供应和使用做了抽象,以API形式提供给管理员和用户使用.要完成这一 ...
- OpenStack-Ocata版+CentOS7.6 云平台环境搭建 —9.块存储服务(cinder)部署配置
块存储服务部署相关块存储服务(cinder)为实例提供块存储.存储的分配和消耗是由块存储驱动器,或者多后端配置的驱动器决定的.还有很多驱动程序可用:NAS/SAN,NFS,ISCSI,Ceph等.典型 ...
随机推荐
- css3中变形与动画(一)
css3制作动画的几个属性:变形(transform),过渡(transition)和动画(animation). 首先介绍transform变形. transform英文意思:改变,变形. css3 ...
- NOIP2009 提高组T3 机器翻译 解题报告-S.B.S
题目背景 小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章. 题目描述 这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换.对于每个英文单词,软件会先 ...
- SQL/LINQ/Lamda
SQL LINQ Lambda SELECT * FROM HumanResources.Employee from e in Employees select e Employees .Sele ...
- [Azure] 使用 Azure 快速搭建 Redis 服务器
Redis相信玩开源,大数据的朋友们并不陌生,大家最熟悉的使用者就是新浪微博,微博的整体数据缓存都是基于Redis的,而新浪对Redis的使用也非常深,据说是一组64G内存的Redis集群.前段时间我 ...
- Linux 网络编程详解四(流协议与粘包)
TCP/IP协议是一种流协议,流协议是字节流,只有开始和结束,包与包之间没有边界,所以容易产生粘包,但是不会丢包. UDP/IP协议是数据报,有边界,不存在粘包,但是可能丢包. 产生粘包问题的原因 . ...
- IE6 P标签下DIV无法inline-block
IE6 P标签下的DIV标签无法inline-block,使其触发了hasLayout属性再用csshack 使其inline还是不行,始终要换行 解决:把div标签替换成非div标签,比如span等 ...
- javascript: 带分组数据的Table表头排序
如下图: 要求:点击表头排序时,"分组"及"分组明细"的数据层次关系不变 从网上找了一段常规的table排序,改了改,以满足“分组支持”,贴在这里备份 < ...
- JAVA_HOME环境变量失效的解决办法
晚上把oracle自带的weblogic给卸载了,然后打开eclipse,发现报错了:Error: could not open `C:\Java\jre7\lib\amd64\jvm.cfg' JA ...
- PhoneGap奇怪的现象:File FileTransfer download, 手机相册检测不到下载下来的图片(解决)
我有个从服务器下载相片的功能在使用 File FileTransfer download api时,碰到了很奇怪的现象:图片已经从服务器里下载了,手机文件夹里也可以看到下载过来的图片,但是我的手机相册 ...
- Jenkins进阶系列之——17Jenkins升级、迁移和备份
升级Jenkins Jenkins的开发迭代非常快,每周发布一个开发版本,长期支持版每半年更新一次(ps:大版本更新).如此频繁的更新,怎么升级呢? war:下载新版的war文件,替换旧版本war文件 ...