1. 程式人生 > >iSCSI網絡磁盤共享

iSCSI網絡磁盤共享

ecb gcc fcoe block iscs 虛擬 entos cache 設備驅動

ISCSI簡介

ISCSI(Internet Small Computer System Interface,Internet 小型計算機系統接口)是一種由IBM公司研究開發的IP SAN技術,它是通過 TCP/IP 網絡傳輸 SCSI 指令的協議,讓 SCSI 命令通過網絡傳送到遠程 SCSI 設備上,而 SCSI 協議只能訪問本地的 SCSI 設備。

iSCSI 使用客戶/服務器模型。客戶端稱為 initiator,服務器端稱為 target。
iSCSI 是傳輸層之上的協議,使用 TCP 連接建立會話。在 initiator 端的 TCP 端口號隨機選取, target 的端口號默認是 3260。

  • Initiator:通常指用戶主機系統,用戶產生 SCSI 請求,並將 SCSI 命令和數據封裝到 TCP/IP 包中發送到 IP 網絡中。
  • Target:通常存在於存儲設備上,用於轉換 TCP/IP 包中的 SCSI 命令和數據。

這裏選用的SCSI target的架構是SCST

SCST簡介

SCST是Generic SCST Target Subsystem forLinux的簡稱,意為Linux通用SCSI目標子系統,是Linux SCSI目標子系統的一種實現。它為SCST Target Driver和Linux內核之間提供了一個統一的接口,同時提供Linux內核與存儲後端的句柄連接,連接真實或模擬的存儲後端與目標驅動程序。

SCST由三部分構成:scst、iscsi-scst和scstadmin

1. SCST

SCST在Linux內核層和SCSI目標驅動層之間提供統一的、持久的接口,它盡可能地簡化了目標驅動的開發。SCST支持如下5種I/O模式:

    (1).pass-through:此模式下,initiators的SCSI命令將不被修改地直接傳給Target端的SCSI硬件。
    (2).fileio:默認情況下SCST的導出模式是fileio,它允許使用文件系統上的文件或者塊設備作為虛擬的SCSI設備或光驅。Fileio模式可以充分利用Linux的cache。NV_CACHE是fileio的一種模式,它可以提供最好的性能。
    (3).blockio:繞開系統的page-cache(頁面緩存)直接bio。該模式適用於後端存儲設備比較高端或者不需要caching的應用或者需要大量塊級吞吐的環境。
    (4).user space:在SCST環境中使用用戶空間的虛擬SCSI設備模擬執行。
    (5).performance:不與底層的SCSI設備發生實際的數據傳輸,只提供直接的性能改進措施。

2.iSCSI-SCST

目標驅動,與設備驅動程序一起工作。主要負責接收主機命令,維護目標端和啟動段的傳輸通道,並根據命令處理狀態向主機返回信息。在Initiator看來,Target就是一個專屬的SCSI Host,將用戶分配的LUN或DISK映射成為遠程可訪問的虛擬設備。
目前為止SCST支持的Target驅動包括:iSCSI-SCST、FC Target、FCoE Target、SAS、InfiniBand和並行的SCSI設備。

3. scstadmin

scstadmin是SCST的配置和管理腳本,它可以接受命令行輸入或者直接讀取SCST的配置文件(/etc/scst.conf)來管理scst。

環境準備:

節點 系統 IP
target CentOS7.2 192.168.26.200
initiator1 Windows 7 192.168.26.128
initiator2 CentOS7.2 192.168.26.201

安裝步驟如下:

一、target安裝SCST服務:

1.配置前關閉所有主機的防火墻和安全性策略

systemctl stop firewalld
systemctl disable firewalld
setenforce 0

2.下載源代碼包( http://scst.sourceforge.net/downloads.html )

svn checkout svn://svn.code.sf.net/p/scst/svn/trunk scst-trunk

技術分享圖片

3.保證代碼包編譯不出錯,應該預先安裝一些包

yum install gcc perl-ExtUtils-MakeMaker perl-Data-Dumper -y
rpm -ivh kernel-devel-3.10.0-514.el7.x86_64.rpm
這裏的kernel-devel的版本要與系統的kernel版本對應,uname -r

4.共享磁盤

mkdir /mnt/vd1
mkdir /mnt/vd2
mount /dev/sdb1 /mnt/vd1
mount /dev/sdc1 /mnt/vd2
chmod -R 777 /mnt/*

5.安裝SCST服務

cd scst-trunk
make help  #根據所需的包進行編譯
#編譯安裝scst
make scst
make scst_install

#編譯安裝iscsi
make iscsi
make iscsi_install

#安裝scstadm
make scstadm_install

6.配置

cp scst-trunk/iscsi-scst/etc/scst.conf /etc/
vi /etc/scst.conf
   HANDLER vdisk_fileio {
    DEVICE disk01 {
        filename /dev/sdb1    #磁盤1
        nv_cache 1
    }
    DEVICE disk02 {
        filename /dev/sdc1    #磁盤2
        nv_cache 1
    }
}

    TARGET_DRIVER iscsi {
    enabled 1

    TARGET iqn.2006-10.net.vlnb:tgt {
        LUN 0 disk01
        LUN 1 disk02

        enabled 1
    }
}

7.啟動SCST服務

chkconfig scst on
systemctl start scst.service

8.查看scst組件

lsmod |grep scst

技術分享圖片

Initiator端發起服務

Windows:

控制面板—->管理工具—->iSCSI發起程序
技術分享圖片

在目標中填入安裝scst主機的ip ,快速連接
技術分享圖片
技術分享圖片
技術分享圖片
打開磁盤管理可以看到2塊共享磁盤
技術分享圖片

Linux

1.用lsblk命令查看磁盤的狀況

技術分享圖片

2.安裝並啟動iscsi

yum install -y iscsi-initiator-utils 
systemctl start iscsi  
chkconfig iscsi on 

3.發現target目標

iscsiadm -m discovery -t sendtargets -p 192.168.26.200:3260 

技術分享圖片

4.登錄發現的目標節點

iscsiadm -m node -T iqn.2006-10.net.vlnb:tgt -p 192.168.26.200:3260  -l

技術分享圖片

5.再次用lsblk命令查看磁盤狀況

技術分享圖片

iSCSI網絡磁盤共享