CentOS7 下安裝 iSCSI Target(tgt) ,使用 Ceph rbd

 

1、iSCSI 介紹

1. iSCSI 定義

iSCSI(Internet Small Computer System Interface,發音爲/ˈаɪskʌzi/),Internet小型計算機系統接口,又稱爲IP-SAN,是一種基於因特網及SCSI-3協議下的存儲技術,由IETF提出,並於2003年2月11日成爲正式的標準。與傳統的SCSI技術比較起來,iSCSI技術有如下三個革命性的變化:html

  1. 把原來只用於本機的SCSI協義透過TCP/IP網絡發送,使鏈接距離可做無限的地域延伸;
  2. 鏈接的服務器數量無限(原來的SCSI-3的上限是15);
  3. 因爲是服務器架構,所以也能夠實如今線擴容以致動態部署。

iSCSI (Internet Small Computer Systems Interface), an Internet Protocol (IP)-based storage networking standard for linking data storage facilities. wiki前端

  • Initiator: an iSCSI client
  • Target: an iSCSI server

2. 幾種常見的 iSCSI Target

  • STGT

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

  • SCST

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

  • LIO

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

3. 優缺點比較

(1)STGT

tgt 是一個用戶態的 SCSI target 框架,在 GNU/Linux 內核直接集成 SCSI target 框架以前,這是一個絕對主流的框架。後端

優勢
1)簡單,方便使用和維護。
2)另外已經有 ceph 的 target driver,只是須要作性能優化。
3)由於工做在用戶態,因此即便掛掉了,也不會對其餘運行的程序產生影響。

缺點
1)支持的傳輸協議較少。
2)對 SCSI 協議支持比較簡單,一些 cluster 中的特性好比 PR 等都不支持,因此基於 stgt 的方案不能在 cluster 中使。
3)因爲是用戶態框架,性能問題較差,根據網上的相關數據, tgt 在使用本地存儲的狀況下,性能相比後面會提到的 SCST、 LIO 等是有必定差距的。

(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,須要手工編譯。

(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、安裝步驟

本章節描述如何在 CentOS7 下安裝 scsi-target-utils。

1. 關閉防火牆

// 關閉防火牆
systemctl stop firewalld
systemctl disable firewalld

2. 關閉selinux

setenforce 0

若是要使 selinux 配置永久生效:

sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

3. 經過 yum 安裝 tgt

(1)安裝 scsi-target-utils

安裝 scsi-target-utils

# yum --enablerepo=epel -y install scsi-target-utils libxslt

查看版本

# tgtadm --version
1.0.55

(2)啓動 tgtd 服務

//設置開機啓動
systemctl enable tgtd

//啓動
systemctl start tgtd

(3)查看是否支持 rbd

# tgtadm --lld iscsi --mode system --op show | grep rbd
    rbd (bsoflags sync:direct)

若是有相似於上面的輸出結果,說明你的tgt加載了rbd模塊。該模塊其實是一個名爲bs_rbd.so的動態連接庫。若是命令沒有輸出,則說明你的tgt還不支持rbd,你須要安裝最新的tgt,或者直接下載編譯最新的源碼。

4. 源碼編譯安裝 tgt

若是 tgt 不支持 rbd,能夠經過源碼編譯安裝。

(1)clone 源碼

yum -y install git

git clone https://github.com/fujita/tgt.git

(2)設置 CEPH_RBD 變量

使得 tgt 可以編譯bs_rbd模塊

export CEPH_RBD=1

(3)make

//先安裝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: 沒有那個文件或目錄

(4)執行 make install

make install

(5)成功後查看版本

# tgtadm --version
1.0.74

(6)再次查看是否支持 rbd

systemctl restart tgtd
tgtadm --lld iscsi --mode system --op show | grep rbd

 

3、使用 img 做爲 target

1. 建立 img

# 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

2. 經過配置文件來建立 target

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

3. 查看激活的 target

# 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

 

4、使用 rbd 做爲 target

1. 建立 rbd 池和 image

# 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:

2. 經過命令來建立 target

注意經過命令配置的 target,服務重啓後會消失。

(1)建立一個 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

(2)建立一個 lun

建立一個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

(3)設置 IP 訪問限制

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

3. 經過配置文件來建立 target

除了命令,還能夠經過配置文件來建立 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

4. 查看激活的 target

# 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

 

5、鏈接驗證

1. 使用 ISCSI 客戶端鏈接

2. 進入磁盤管理查看

參考連接
SCST:幾種經常使用iscsi target對比
使用tgt搭建一個基於rbd的SCSI target
經過iscsi協議使用ceph rbd
經過iscsi鏈接到CEPH的RBD(客戶端包括windows和linux)
Configure iSCSI Target (tgt)

相關文章
相關標籤/搜索