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


 

一、iSCSI 介紹

1. iSCSI 定義

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

  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.

MainPage: http://stgt.sourceforge.net/
GitHub: https://github.com/fujita/tgt
Quickstart: https://fedoraproject.org/wiki/Scsi-target-utils_Quickstart_Guide

  • 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.

MainPage: http://scst.sourceforge.net/

  • 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_Page

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)工作在內核態,出現問題會影響其他程序的運行。

 

二、安裝步驟

本章節描述如何在 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

 

三、使用 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

 

四、使用 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

 

五、連接驗證

1. 使用 ISCSI 客戶端連接

2. 進入磁盤管理查看

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM