天天看點

iSCSI(一) iSCSI詳解 及 iSCSI配置

iSCSI(一) iSCSI詳解 及 iSCSI配置

       在叢集系統中存儲是很重要的一部分,而且存儲相關的内容:從硬體裝置、接口到檔案系統、傳輸網絡、資料協定等,涉及的知識非常多,這裡不發散,重點認識iSCSI。在前面《高可用叢集》簡單認識了DAS/NAS/SAN,下面将會認識iSCSI, 并進行iSCSI的基本配置實作。

1、認識iSCSI

       iSCSI(Internet Small Computer System Interface,Internet 小型計算機系統接口)是一種由IBM公司研究開發的IP SAN技術,該技術是将現有SCSI接口與以太網絡(Ethernet)技術結合,基于 TCP/IP的協定連接配接iSCSI服務端(Target)和用戶端(Initiator),使得封裝後的SCSI資料包可以在通用網際網路傳輸,最終實作iSCSI服務端映射為一個存儲空間(磁盤)提供給已連接配接認證後的用戶端。

1-1、SCSI

iSCSI(一) iSCSI詳解 及 iSCSI配置
       SCSI(Small Computer System Interface)是一種I/O技術,規範了一種并行的I/O總線和相關的協定,SCSI的資料傳輸是以塊的方式進行的。
       如上圖,SCSI總線通過SCSI控制器來和硬碟之類的裝置進行通信, SCSI控制器稱為Target,通路的用戶端應用稱為Initiator。窄SCSI總線最多允許8個、寬SCSI總線最多允許16個不同的SCSI裝置和它進行連接配接,每個SCSI裝置都必須有自己唯一的SCSI ID(裝置的位址)。
       LUN(Logical Unit Number,邏輯單元号)是為了使用和描述更多裝置及對象而引進的一個方法,每個SCSI ID上最多有32個LUN,一個LUN對應一個邏輯裝置。
       廣泛應用于小型機上,正在成為PC 伺服器的标準接口,實作高速資料傳輸(可達320MB/s),常見的SCSI裝置:硬碟、磁盤陣列、列印機、CD光牒刻錄機等。

1-2、iSCSI實作

iSCSI(一) iSCSI詳解 及 iSCSI配置
1、iSCSI Initiator
         iSCSI 啟動器,從本質上說,iSCSI 啟動器是一個用戶端裝置,用于将請求連接配接并啟動到伺服器(iSCSI 目标)。
iSCSI(一) iSCSI詳解 及 iSCSI配置
        如上圖,iSCSI 啟動器有三種實作方式:可以完全基于硬體實作,比如 iSCSI HBA 卡;硬體TOE卡與軟體結合的方式;完全基于軟體實作,而軟體 iSCSI 啟動器适用于大部分主流作業系統平台,下面就是用軟體方式來配置。
2、iSCSI Target
       即 iSCSI 目标,它是 iSCSI 網絡的伺服器元件,通常是一個儲存設備,用于包含所需的資料并回應來自 iSCSI 啟動器的請求。
3、工作過程
iSCSI(一) iSCSI詳解 及 iSCSI配置
iSCSI(一) iSCSI詳解 及 iSCSI配置
       Initiator送出請求後,會在本地的作業系統會生成了相應的SCSI指令和資料I/O請求,然後這些指令和請求被封裝加密成IP資訊包,通過以太網(TCP/IP)傳輸到Targer。
       當Targer接收到資訊包時,将進行解密和解析,将SCSI指令和I/O請求分開。SCSI指令被發送到SCSI控制器,再傳送到SCSI儲存設備。
       裝置執行SCSI指令後的響應,經過Target封裝成iSCSI響應PDU,再通過已連接配接的TCP/IP網絡傳送給Initiator。
        Initiator會從iSCSI響應PDU裡解析出SCSI響應并傳送給作業系統,作業系統再響應給應用程式。

1-3、iSCSI與FC SAN

iSCSI(一) iSCSI詳解 及 iSCSI配置
        FC(FiberChannel,光纖通道)是利用光纖信道結合光纖通道交換機實作高速的資料存儲網絡。FC性能很好,但價格卻貴得驚人,管理起來也非常困難。
        是以iSCSI利用現有的以太網絡,使用者隻需要少量的投入,就可以友善、快捷地對資訊和資料進行互動式傳輸和管理。當然iSCSI與FC相比也存在明顯的不足,如速度性能、安全可靠性。
iSCSI(一) iSCSI詳解 及 iSCSI配置

1-4、SAN與NAS / iSCSI與NFS

iSCSI(一) iSCSI詳解 及 iSCSI配置
        通過前面文章知道,SAN與NAS是完全不同架構的存儲方案,前者支援Block協定,後者則支援File協定;SAN結構中,檔案管理系統(FS)還是分别在每一個應用伺服器上,會産生I/O操作,而NAS則是每個應用伺服器通過網絡共享協定(如:NFS、CIFS)使用同一個檔案管理系統,是以CPU密集型應用可以選用NAS。SAN是将目光集中在磁盤、錄音帶以及聯接它們的可靠的基礎結構,而NAS是将目光集中在應用、使用者和檔案以及它們共享的資料上,顯得更"進階"。将來從桌面系統到資料集中管理到儲存設備的全面解決方案将是NAS加SAN。
        以上差別具體到iSCSI和NFS:iSCSI可優化空間更大,性能稍好,但技術難度更高;而NFS在系統層面的支援更多,像一些備份、恢複等操作較簡單。

2、相關準備配置

2-1、具體使用資源

iSCSI(一) iSCSI詳解 及 iSCSI配置

1、各主機系統:RHEL 5.8 64bit

2、Target:

Soft:scsi-target-utils

IP:192.168.18.240

LUN1:/dev/sda5 50G(以分區代替)

LUN2:/dev/sda6 20G

2、三台節點主機node1,node2,node3:

Soft:iscsi-initiator-utils

Node1: IP:192.168.18.241 host name:node1.tjiyu,com;

Node2: IP:192.168.18.242 host name:node2.tjiyu.com;

Node3: IP:192.168.18.243 host name:node3.tjiyu.com;

2-2、配置前所需要的準備

       各節點Initiator和Target端需要做以下準備:

1、配置IP、關閉防火牆/SELINUX;

2、配置各節點名稱;

3、時間同步;

       在前面《heartbeat v2 haresource 配置可用叢集》說到的高可用叢集已有詳細介紹,這裡就不再給出了。
       當然我們這裡可以用Target端主機作為跳闆機,因為很多相同的指令都要在各節點上執行,可以另外加一台跳闆機,可以SSH連接配接各節點,這樣就可以在跳闆機上給各節點分發指令了。
       首先在Target上配置各節點的hostname,友善操作:
iSCSI(一) iSCSI詳解 及 iSCSI配置
       然後生成Target端的SSH KEY,再發給到各主機,如下:
[[email protected] ~]# ssh-keygen -t rsa -f ~/.ssh/id_rsa -P ''

    [[email protected] ~]# ssh-copy-id -i .ssh/id_rsa.pub [email protected]

    [[email protected] ~]# ssh-copy-id -i .ssh/id_rsa.pub [email protected]

    [[email protected] ~]# ssh-copy-id -i .ssh/id_rsa.pub [email protected]
           
       接着為指令前面正常部分設定為别名,友善操作,最後嘗試給各節點同步時間,如下:
[[email protected] ~]# alias ssh_node='for I in {1..3}; do ssh node$I'

        [[email protected] ~]# ssh_node 'ntpdate cn.ntp.org.cn'; done
           
iSCSI(一) iSCSI詳解 及 iSCSI配置
iSCSI(一) iSCSI詳解 及 iSCSI配置

3、下載下傳安裝

       配置好yum源,直接在target端安裝scsi-target-utils,這個隻是iSCSI軟體的管理工具(類似ipvsadm),具體的資料處理子產品已整合在核心中,如下:
[[email protected] ~]# yum install scsi-target-utils
           
iSCSI(一) iSCSI詳解 及 iSCSI配置
       各節點上分别執行安裝iscsi-initiator-utils,當然也可以在Target上通過SSH執行,但那是串行的,不如分别在各節點上分别執行快,如下:
[[email protected] ~]# yum install iscsi-initiator-utils
           
iSCSI(一) iSCSI詳解 及 iSCSI配置

4、認識配置工具

4-1、target端配置工具(tatadm)

iSCSI(一) iSCSI詳解 及 iSCSI配置
       Target端安裝scsi-target-util後,提供了相應的管理配置工具tgtadm,可以用target、LUN、使用者都進管理,不過因為iSCSI子產品工作在核心,tgtadm的配置隻在記憶體中,下次開機重新開機不會生效,是以可以用過配置檔案/etc/tgt/targets.conf來配置,啟動時另一個工具tgt-adm會讀取該檔案。
       tatadm使用文法如下:
tgtadm --lld [driver] --op [operation] --mode [mode] [OPTION]...

        (1)、添加一個新的 target 且其ID為 [id], 名字為 [name].

            --lld [driver] --op new --mode target --tid=[id] --targetname [name]

        (2)、顯示所有或某個特定的target:

            --lld [driver] --op show --mode target [--tid=[id]]

        (3)、向某ID為[id]的裝置上添加一個新的LUN,其号碼為[lun],且此裝置提供給initiator使用。[path]是某"塊裝置"的路徑,此塊裝置也可以是raid或lvm裝置。lun0已經被系統預留。

            --lld [driver] --op new --mode=logicalunit --tid=[id] --lun=[lun] --backing-store [path]

        (4)、删除ID為[id]的target:

            --lld [driver] --op delete --mode target --tid=[id]

        (5)、删除target [id]中的LUN [lun]:

            -lld [driver] --op delete --mode=logicalunit --tid=[id] --lun=[lun]

        (6)、定義某target的基于主機的通路控制清單,其中,[address]表示允許通路此target的initiator用戶端的清單:

            --lld [driver] --op bind --mode=target --tid=[id] --initiator-address=[address]

        (7)、解除target [id]的通路控制清單中[address]的通路控制權限:

            --lld [driver] --op unbind --mode=target --tid=[id] --initiator-address=[address]
           

4-2、Initiator端配置工具(iscsiadm)

iSCSI(一) iSCSI詳解 及 iSCSI配置
       而Initiator各節點安裝iscsi-initiator-utils後,也提供了一些配置管理工具,其中最主要的是iscsiadm 指令,提供了對 iSCSI 目标節點、會話、連接配接以及發現記錄的操作,iscsiadm使用文法如下:
iscsiadm

        -m, 同 --mode, 其選項有 discovery, node, fw(啟動值), host, iface(iSCSI 接口)和 session。

        -I,同 --interface, 表示接口。

        -o, 同 --op, 可實作對資料庫的操作,其選項有 new, delete, update 和 show。

        -n, 同 --name, 指定其資料記錄裡的名字。

        -t, 同 --type, 其選項有 sendtargets(st), fw 和 isns, 僅在 -m 模式為 discovery 時有效。

        -p, 同 --portal, 指定其目标主機的 IP 位址和端口,預設端口為 3260。

        -L, 同 --loginall,其選項有 all,manual 和 automatic,指定其登入會話時的類型。

        -T, 同 --targetname,表示其目标名字。

        -v, 同 --value,通常在 --op=update 時指定其值。
           

5、配置target端

5-1、建立分區當作LUN

       按上面的資源配置設定,在target端建立兩個分區/dev/sda5和/dev/sda6,分别當作LUN,注意這時并不需要格式化檔案系統,因為檔案系統不在target端,過程如下:
[[email protected] ~]# fdisk /dev/sda

        [[email protected] ~]# partprobe /dev/sda

        [[email protected] ~]# fdisk -l
           
iSCSI(一) iSCSI詳解 及 iSCSI配置
iSCSI(一) iSCSI詳解 及 iSCSI配置

5-2、啟動tgtd服務

       啟動target端的tgtd服務,并配置開機啟動,檢視網絡連接配接情況,可以看到tgtd監聽了tcp的3260端口,如下:
[[email protected] ~]# chkconfig tgtd on

        [[email protected] ~]# chkconfig tgtd --list

        [[email protected] ~]# service tgtd start

        [[email protected]host ~]# netstat -tunlp |grep tgtd
           
iSCSI(一) iSCSI詳解 及 iSCSI配置

5-3、建立target及LUN,并綁定網絡

       先建立一個target,ID為1,名稱為iqn.2016-10.com.tjiyu:mystore.disk1(全局唯一辨別名);然後給該target綁定網絡192.168.18.0/24,也就是對這個網絡内的主機可以發現該target;接着給該target建立兩個LUN,使用上面建立的兩個分區,注意LUN的ID從1開始配置設定,因為0已經被target控制器占用了,如下:
[[email protected] ~]# tgtadm --lld iscsi -o new -m target -t 1 -T iqn.2016-10.com.tjiyu:mystore.disk1

        [[email protected] ~]# tgtadm -L iscsi -o bind -m target -t 1 -I 192.168.18.0/24

        [[email protected] ~]# tgtadm -L iscsi -o new -m logicalunit -t 1 -l 1 -b /dev/sda5

        [[email protected] ~]# tgtadm -L iscsi -o new -m logicalunit -t 1 -l 2 -b /dev/sda6
           
iSCSI(一) iSCSI詳解 及 iSCSI配置
       檢視下配置的資訊,LUN的0已經被target控制器占用了,如下:
[[email protected] ~]# tgtadm -L iscsi -o show -m target
           
iSCSI(一) iSCSI詳解 及 iSCSI配置
iSCSI(一) iSCSI詳解 及 iSCSI配置

5-4、配置通路使用者

       iSCSI可以配置基于IP或基于使用者(CHAP)的認證方式,基于IP像上面綁定開放網絡就可以了;基于使用者除了綁定網絡,還需要配置通路使用者(如果使用基于使用者的認證,必須首先開放基于IP的認證),CHAP是雙向的認證機制,我們這裡隻配置單向的使用者認證。
       先建立帳号tjiyu,并為其授予通路上面ID為1的target的權限(綁定),如下:
[[email protected] ~]# tgtadm --lld iscsi --op new --mode account --user tjiyu --password 123456

        [[email protected] ~]# tgtadm --lld iscsi --op bind --mode account --tid 1 --user tjiyu

        [[email protected] ~]# tgtadm --lld iscsi --op show --mode account
           
iSCSI(一) iSCSI詳解 及 iSCSI配置

6、配置各initiator節點

6-1、配置initiator名稱

       分别在各節點配置initiator名稱,名稱也是iqn格式的(可以用iscsi-name生成),直接配置在檔案/etc/iscsi/initiatorname.iscsi中就好,如下:
[[email protected] ~]# vim /etc/iscsi/initiatorname.iscsi

        [[email protected] ~]# cat /etc/iscsi/initiatorname.iscsi

        InitiatorName=iqn.2016-10.com.tjiyu:node1_4rs3r3

        InitiatorAlias=node1
           
iSCSI(一) iSCSI詳解 及 iSCSI配置
iSCSI(一) iSCSI詳解 及 iSCSI配置
iSCSI(一) iSCSI詳解 及 iSCSI配置

6-2、配置target通路使用者

       因為上面在target端建立并綁定了使用者tjiyu,是以各Initiator節點需要先開放CHAP認證,并配置該使用者資訊,initiator配置檔案為/etc/iscsi/iscsid.conf,在檔案中修改這三項即可,注意,看清楚是哪三項,因為有幾個配置相似,過程如下:
[[email protected] ~]# vim /etc/iscsi/iscsid.conf
           
iSCSI(一) iSCSI詳解 及 iSCSI配置

6-3、啟動各節點iscsi服務

       各節點執行的指令一樣,可以在跳闆機上執行,先配置開機啟動,然後啟動iscsi服務,注意,上面檢視安裝資訊看到還有一個iscsid服務,它會随着iscsi服務一起啟動的,如下:
[[email protected] ~]# ssh_node 'chkconfig iscsi on'; done

        [[email protected] ~]# ssh_node 'service iscsi start'; done
           
iSCSI(一) iSCSI詳解 及 iSCSI配置

6-4、各節點發現target,并登入

       各節點要使用target的LUN必須先發現,再登入後才能用,發現操作指定target的IP位址,登入需要指定發現的target名稱和IP/端口;注意,如果登入不成功,可能是因為上面的配置使用者不對,修改正确後需要重新開機iscsi服務,重新發現target,不然還是登入不了,過程如下,
[[email protected] ~]# ssh_node 'iscsiadm -m discovery -t st -p 192.168.18.240'; done

        [[email protected] ~]# ssh_node 'iscsiadm -m node -T iqn.2016-10.com.tjiyu:mystore.disk1 -p 192.168.18.240:3260 -l'; done
           
iSCSI(一) iSCSI詳解 及 iSCSI配置
iSCSI(一) iSCSI詳解 及 iSCSI配置
       發現登入成功後,相關資訊儲存在/var/lib/iscsi/send_targets/目錄下,下次啟動會自動登入的;
iSCSI(一) iSCSI詳解 及 iSCSI配置
       檢視會話相關資訊:
Initiator:[[email protected] ~]# iscsiadm -m session -s

        Target:[[email protected] ~]# tgtadm --lld iscsi --op show --mode target
           

7、測試

    Target的兩個LUN在initiator端識别為兩個磁盤裝置,可以在上面進行分區、格式化檔案系統等操作,就是本地的磁盤裝置一樣。不過它們在各節點上的裝置名稱可能不一樣,這裡因為開始都是一個硬碟,所有都一樣。

7-1、建立分區,并格式化

       上面登入成功後,檢視各節點的存儲空間,發現各節點都多了兩個磁盤裝置,這兩個磁盤裝置就是我們上面建立target分區模拟的LUN,一個50G,另一個20G,如下:
[[email protected] ~]# ssh_node 'fdisk -l'; done
           
iSCSI(一) iSCSI詳解 及 iSCSI配置
       然後在node1上操作,在50G的/dev/sdb上建立一個10G的分區,并格式化為ext3檔案系統,如下:
[[email protected] ~]# fdisk /dev/sdb

        [[email protected] ~]# partprobe /dev/sdb

        [[email protected] ~]# fdisk –l

        [[email protected] ~]# mkfs.ext3 /dev/sdb1
           
iSCSI(一) iSCSI詳解 及 iSCSI配置
iSCSI(一) iSCSI詳解 及 iSCSI配置

7-2、各節點挂載測試

       上面在node1上分區/dev/sdb1後,在另外兩個節點上可以檢視到分區及建立的檔案系統,不過卻挂載不上去,需要partprobe /dev/sdb核心識别後才能挂載,在node3上挂載如下:
[[email protected] ~]# partprobe /dev/sdb

        [[email protected] ~]# mount /dev/sdb1 /mnt

        [[email protected] ~]# ls /mnt 
           
iSCSI(一) iSCSI詳解 及 iSCSI配置
       然後,在node1上複制/etc/fstab進去,然後在node2上也挂載,可以發現複制進去的檔案,但在已經挂載的node3上卻長時間看不到複制進去的檔案,重新挂載後才能看到,如下:
iSCSI(一) iSCSI詳解 及 iSCSI配置
       這說明多個節點同時挂載後,一個節點的操作和另外節點不是實時同步的,是在記憶體中有緩存的,是以這樣用同時操作一個檔案很可能會發生成崩潰,待後面解決。

8、删除操作及target端檔案配置

8-1、删除各節點登入資訊

       先使各節點登出,然後再删除發現的的資訊,最後把殘留的目錄也删除,過程如下:
[[email protected] ~]# ssh_node 'iscsiadm -m node -T iqn.2016-10.com.tjiyu:mystore.disk1 -p 192.168.18.240:3260 -u'; done

        [[email protected] ~]# ssh_node 'iscsiadm -m node -T iqn.2016-10.com.tjiyu:mystore.disk1 -p 192.168.18.240:3260 -o delete'; done

        [[email protected] ~]# ssh_node 'rm -rf /var/lib/iscsi/send_targets/192.168.18.240*'; done
           
iSCSI(一) iSCSI詳解 及 iSCSI配置

8-2、删除target端配置

       先解除綁定,再删除LUN,最後删除target,過程如下:
[[email protected] ~]# tgtadm -L iscsi -o unbind -m target -t 1 -I 192.168.18.0/24

        [[email protected] ~]# tgtadm -L iscsi -o delete -m logicalunit -t 1 -l 2

        [[email protected] ~]# tgtadm -L iscsi -o delete -m logicalunit -t 1 -l 1

        [[email protected] ~]# tgtadm -L iscsi -o delete -m target -t 1

        [[email protected] ~]# tgtadm -L iscsi -o show -m target
           
iSCSI(一) iSCSI詳解 及 iSCSI配置

8-3、檔案配置target資訊

       上面我們說過tgtadm配置的資訊,重新開機後會失效,需要通過/etc/tgt//targets.conf配置檔案來配置才不會;該配置檔案裡有很多樣例,如配置不使用緩存等,配置資訊如下:
<target iqn.2016-10.com.tjiyu:mystore.disk1> #配置target名稱

            <backing-store /dev/sda5> #配置共享磁盤

                vendor_id test #配置發行商(任意)

                lun 6 #配置LUN号

            </backing-store>

            <backing-store /dev/sda6> #配置共享磁盤

                vendor_id test #配置發行商(任意)

                lun 8 #配置LUN号

            </backing-store>

            incominguser tjiyu 123456 #配置認證的使用者名和密碼

            initiator-address 192.168.18.0/24 #配置允許的網段

        </target>
           
iSCSI(一) iSCSI詳解 及 iSCSI配置
       過程如下:
[[email protected] ~]# vim /etc/tgt//targets.conf

        [[email protected] ~]# service tgtd restart

        [[email protected] ~]# tgtadm -L iscsi -o show -m target
           
iSCSI(一) iSCSI詳解 及 iSCSI配置
iSCSI(一) iSCSI詳解 及 iSCSI配置

8-4、各節點重新發現并登入

       和上面6-4一樣,各節點重新發現target,并登入,如下:
[[email protected] ~]# ssh_node 'iscsiadm -m discovery -t st -p 192.168.18.240'; done

        [[email protected] ~]# ssh_node 'iscsiadm -m node -T iqn.2016-10.com.tjiyu:mystore.disk1 -p 192.168.18.240:3260 -l'; done
           
iSCSI(一) iSCSI詳解 及 iSCSI配置
       然後在node1上檢視,可以看到前面測試格式化的分區還在,不過從/dev/sdb1變為了/dev/sdc1,重新挂載,發現複制進去的檔案也還在,如下:
iSCSI(一) iSCSI詳解 及 iSCSI配置
       到這裡,配置iSCSI應用就可以正常運作了,關于測試中發現的共享存儲帶來的問題,待後面解決,後面将在本檔案的基礎上進行叢集檔案系統gfs2及clvm的相關配置……

【參考資料】

1、iSCSI:http://baike.baidu.com/link?url=5OlHGOXZ8Su0TpG1GmAzHrlsJw6GHaAvo4IHjddVZ9RuKtZQANsq1lHe0WFURzBofmNVIVZGeNscvBZw-k6Kwa

2、常見的三種存儲技術以及iSCSI協定:http://xslwahaha.blog.51cto.com/4738972/1617781

3、詳解Linux配置iSCSI方法:http://tech.watchstor.com/storage-module-121394.htm

4、linux系統簡單搭建iSCSI:http://cuchadanfan.blog.51cto.com/9940284/1696408

5、CentOS6.4+cman+rgmanager+iscsi+gfs2+cLVM 實作廉價的可擴充的叢集共享存儲:http://freeloda.blog.51cto.com/2033581/1279063

繼續閱讀