iSCSI(Internet Small Computer System Interface,發音爲/ˈаɪskʌzi/),Internet小型計算機系統接口,又稱爲IP-SAN,是一種基於因特網及SCSI-3協議下的存儲技術,由IETF提出,並於2003年2月11日成爲正式的標準。與傳統的SCSI技術比較起來,iSCSI技術有如下三個革命性的變化:html
iSCSI (Internet Small Computer Systems Interface), an Internet Protocol (IP)-based storage networking standard for linking data storage facilities. wiki前端
Linux SCSI target framework (tgt) aims to simplify various SCSI target driver (iSCSI, Fibre Channel, SRP, etc) creation and maintenance. Our key goals are the clean integration into the scsi-mid layer and implementing a great portion of tgt in user space.python
MainPage: http://stgt.sourceforge.net/
GitHub: https://github.com/fujita/tgt
Quickstart: https://fedoraproject.org/wiki/Scsi-target-utils_Quickstart_Guidelinux
The generic SCSI target subsystem for Linux (SCST) allows creation of sophisticated storage devices from any Linux box. Those devices can provide advanced functionality, like replication, thin provisioning, deduplication, high availability, automatic backup, etc.git
MainPage: http://scst.sourceforge.net/github
LinuxIO (LIO™) is the standard open-source SCSI target in Linux. It supports all prevalent storage fabrics, including Fibre Channel (QLogic, Emulex), FCoE, iEEE 1394, iSCSI (incl. Chelsio offload support), NVMe-OF, iSER (Mellanox InfiniBand), SRP (Mellanox InfiniBand), USB, vHost, etc.編程
MainPage: http://linux-iscsi.org/index.php/Main_Pagewindows
tgt 是一個用戶態的 SCSI target 框架,在 GNU/Linux 內核直接集成 SCSI target 框架以前,這是一個絕對主流的框架。後端
優勢:
1)簡單,方便使用和維護。
2)另外已經有 ceph 的 target driver,只是須要作性能優化。
3)由於工做在用戶態,因此即便掛掉了,也不會對其餘運行的程序產生影響。
缺點:
1)支持的傳輸協議較少。
2)對 SCSI 協議支持比較簡單,一些 cluster 中的特性好比 PR 等都不支持,因此基於 stgt 的方案不能在 cluster 中使。
3)因爲是用戶態框架,性能問題較差,根據網上的相關數據, tgt 在使用本地存儲的狀況下,性能相比後面會提到的 SCST、 LIO 等是有必定差距的。
SCST 的核心模塊工做在內核裏,能夠支持經過系統模塊(VFS、塊層)訪問的後端存儲如塊設備、文件設備以及 passthrough 的 scsi 設備。
優勢:
1)支持更多傳輸協議。
2)針對性能作了特殊的優化。
3)除了基本的 SCSI 協議支持外,還有一些高級支持:
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,須要手工編譯。
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)工做在內核態,出現問題會影響其餘程序的運行。
本章節描述如何在 CentOS7 下安裝 scsi-target-utils。
// 關閉防火牆 systemctl stop firewalld systemctl disable firewalld
setenforce 0
若是要使 selinux 配置永久生效:
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
安裝 scsi-target-utils
# yum --enablerepo=epel -y install scsi-target-utils libxslt
查看版本
# tgtadm --version 1.0.55
//設置開機啓動 systemctl enable tgtd //啓動 systemctl start tgtd
# tgtadm --lld iscsi --mode system --op show | grep rbd rbd (bsoflags sync:direct)
若是有相似於上面的輸出結果,說明你的tgt加載了rbd模塊。該模塊其實是一個名爲bs_rbd.so的動態連接庫。若是命令沒有輸出,則說明你的tgt還不支持rbd,你須要安裝最新的tgt,或者直接下載編譯最新的源碼。
若是 tgt 不支持 rbd,能夠經過源碼編譯安裝。
yum -y install git git clone https://github.com/fujita/tgt.git
使得 tgt 可以編譯bs_rbd模塊
export CEPH_RBD=1
//先安裝gcc yum -y install gcc //安裝一些依賴 yum -y install librados2-devel librbd1-devel //進入源碼根目錄執行 make cd tgt make
該過程可能會出現以下信息
test -z "/usr/bin/xsltproc" || /usr/bin/xsltproc -o ... http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl tgtd.8.xml http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl tgtadm.8.xml http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl tgtimg.8.xml http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl tgt-admin.8.xml http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl targets.conf.5.xml http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl tgt-setup-lun.8.xml http://docbook.sourceforge.net/release/xsl/current/html/docbook.xsl tgtd.8.xml http://docbook.sourceforge.net/release/xsl/current/html/docbook.xsl tgtadm.8.xml http://docbook.sourceforge.net/release/xsl/current/html/docbook.xsl tgtimg.8.xml http://docbook.sourceforge.net/release/xsl/current/html/docbook.xsl tgt-admin.8.xml http://docbook.sourceforge.net/release/xsl/current/html/docbook.xsl targets.conf.5.xml http://docbook.sourceforge.net/release/xsl/current/html/docbook.xsl tgt-setup-lun.8.xml
注:若是沒有安裝依賴,可能會出現以下問題
問題1:執行
yum -y install librados2-devel
bs_rbd.c:45:28: 致命錯誤:rados/librados.h:沒有那個文件或目錄 #include "rados/librados.h"問題2:執行
yum -y install librbd1-devel
bs_rbd.c:46:24: 致命錯誤:rbd/librbd.h:沒有那個文件或目錄 #include "rbd/librbd.h"問題3:執行
yum -y install libxslt
/bin/sh: /usr/bin/xsltproc: 沒有那個文件或目錄
make install
# tgtadm --version 1.0.74
systemctl restart tgtd tgtadm --lld iscsi --mode system --op show | grep rbd
# mkdir /var/lib/iscsi_disks # dd if=/dev/zero of=/var/lib/iscsi_disks/disk01.img count=0 bs=1 seek=6G # ll -h /var/lib/iscsi_disks 總用量 0 -rw-r--r--. 1 root root 6.0G 11月 5 18:00 disk01.img
vi /etc/tgt/targets.conf <target iqn.2018-11.com.example:imgtgt.targrt0> backing-store /var/lib/iscsi_disks/disk01.img initiator-address 192.168.0.0/24 </target>
編輯完成後,重啓 tgt
systemctl restart tgtd
# tgtadm --lld iscsi --mode target --op show Target 1: iqn.2018-11.com.example:imgtgt.targrt0 System information: Driver: iscsi State: ready I_T nexus information: LUN information: LUN: 0 Type: controller SCSI ID: IET 00010000 SCSI SN: beaf10 Size: 0 MB, Block size: 1 Online: Yes Removable media: No Prevent removal: No Readonly: No SWP: No Thin-provisioning: No Backing store type: null Backing store path: None Backing store flags: LUN: 1 Type: disk SCSI ID: IET 00010001 SCSI SN: beaf11 Size: 6442 MB, Block size: 512 Online: Yes Removable media: No Prevent removal: No Readonly: No SWP: No Thin-provisioning: No Backing store type: rdwr Backing store path: /var/lib/iscsi_disks/disk01.img Backing store flags: Account information: ACL information: 192.168.0.0/24
# ceph osd pool create tgtpool 128 # rbd create --size 10240 tgtpool/image01 # rbd info tgtpool/image01 rbd image 'image01': size 10240 MB in 2560 objects order 22 (4096 kB objects) block_name_prefix: rbd_data.ac726b8b4567 format: 2 features: layering, exclusive-lock, object-map, fast-diff, deep-flatten flags:
注意經過命令配置的 target,服務重啓後會消失。
tgtadm --lld iscsi --mode target --op new --tid 2 --targetname iqn.2018-11.com.example:cephtgt.target0
若是要刪除一個 target
tgtadm --lld iscsi --mode target --op delete --tid 2
建立一個logical unit(LUN)
tgtadm --lld iscsi --mode logicalunit --op new --tid 2 --lun 1 --backing-store tgtpool/image01 --bstype rbd
若是要刪除一個 lun
tgtadm --lld iscsi --mode logicalunit --op delete --tid 2 --lun 1
tgtadm --lld iscsi --op bind --mode target --tid 1 -I ALL or tgtadm --lld iscsi --mode target --op bind --tid 1 -I 192.168.0.120 or tgtadm --lld iscsi --mode target --op bind --tid 1 -I 10.168.0.0/24
除了命令,還能夠經過配置文件來建立 target。
vi /etc/tgt/targets.conf <target iqn.2018-11.com.example:cephtgt.target0> bs-type rbd backing-store tgtpool/image01 initiator-address 192.168.0.0/24 </target>
編輯完成後,重啓 tgt
systemctl restart tgtd
# tgtadm --lld iscsi --mode target --op show Target 2: iqn.2018-11.com.example:cephtgt.target0 System information: Driver: iscsi State: ready I_T nexus information: LUN information: LUN: 0 Type: controller SCSI ID: IET 00010000 SCSI SN: beaf10 Size: 0 MB, Block size: 1 Online: Yes Removable media: No Prevent removal: No Readonly: No SWP: No Thin-provisioning: No Backing store type: null Backing store path: None Backing store flags: LUN: 1 Type: disk SCSI ID: IET 00010001 SCSI SN: beaf11 Size: 10737 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: tgtpool/image01 Backing store flags: Account information: ACL information: ALL
參考連接:
SCST:幾種經常使用iscsi target對比
使用tgt搭建一個基於rbd的SCSI target
經過iscsi協議使用ceph rbd
經過iscsi鏈接到CEPH的RBD(客戶端包括windows和linux)
Configure iSCSI Target (tgt)