iscsi網絡存儲介紹及客戶端配置操做

本文不介紹iSCSI服務端的搭建過程,否則就會很累贅。主題就是怎麼去完成iscsi網絡存儲的掛載過程,並順帶介紹一些必要的概念。php

1. iscsi介紹與initiator安裝

1.1 iSCSI介紹

iSCSI簡單來講,就是把SCSI指令經過TCP/IP協議封裝起來,在以太網中傳輸。iSCSI 能夠實如今IP網絡上傳遞和運行SCSI協議,使其可以在諸如高速千兆以太網上進行數據存取,實現了數據的網際傳遞和管理。基於iSCSI創建的存儲區域網(SAN)與基於光纖的FC-SAN相比,具備很好的性價比。node

iSCSI屬於端到端的會話層協議,它定義的是SCSI到TCP/IP的映射(以下圖),即Initiator將SCSI指令和數據封裝成iSCSI協議數據單元,向下提交給TCP層,最後封裝成IP數據包在IP網絡上傳輸,到達Target後經過解封裝還原成SCSI指令和數據,再由存儲控制器發送到指定的驅動器,從而實現SCSI命令和數據在IP網絡上的透明傳輸。它整合了現有的存儲協議SCSI和網絡協議TCP/IP,實現了存儲與TCP/IP網絡的無縫融合。在本文中,將把發起器Initiator稱爲客戶端,將目標器Target稱爲服務端以方便理解。linux

iscsi-protocal-arch.gif

iSCSI 服務端和客戶端的通信就是一個在網絡上封包和解包的過程,在網絡的一端,數據包被封裝成包括TCP/IP頭、iSCSI 識別包和SCSI 數據三部份內容,傳輸到網絡另外一端時,這三部份內容分別被順序地解開。爲了保證安全,iSCSI 有約定操做順序。在首次運行時,客戶端(initiator)設備須要登陸到服務端(target)中。任何一個接收到沒有執行登陸過程的客戶端的iSCSI PDU (iSCSI rotocol Data Units,iSCSI 協議數據單元)服務端都將生成一個協議錯誤,而且關閉鏈接。在關閉會話以前,服務端可能發送回一個被駁回的iSCSI PDU。數據庫

在工做時,iSCSI使SCSI數據塊由原來的SCSI總線鏈接擴展到internet上,這一過程有些產品經過硬件來實現,這種硬件產品被簡稱爲TOE(TCP Offload Engine),隨着近年來服務器芯片技術的不斷髮展,服務器處理能力日益強勁,目前更爲廣泛的是經過軟件來實現SCSI數據塊的封裝過程。這種軟件一般被稱爲iSCSI Initiator軟件/驅動。Initiator軟件能夠將以太網卡虛擬爲iSCSI卡,接受和發送iSCSI數據報文,經過普通以太網卡來進行網絡鏈接,可是須要佔用CPU資源。另外的TOE和HBA鏈接轉換方式都須要專門的硬件設備來完成,雖然相對昂貴但執行效率高,也能夠減輕主機CPU的負載。本文客戶端採用Initiator驅動的鏈接方式。安全

1.2 Initiator安裝

在Linux 2.6內核中提供了iscsi驅動,iSCSI 驅動(driver)使主機擁有了經過IP網絡訪問存儲的能力,但還須要一個具體的客戶端工具(Linux用戶空間組件)初始化iSCSI驅動,即iscsi-initiator-utils,也是你們常說的open-iscsi。服務器

# rpm -qa|grep iscsi
iscsi-initiator-utils-6.2.0.873-10.el6.x86_64
iscsi-initiator-utils-devel-6.2.0.873-10.el6.x86_64
# rpm -qi iscsi-initiator-utils
(yum install iscsi-initiator-utils iscsi-initiator-utils-devel)

這個安裝將iscsidiscsiadm安裝到 /sbin 目錄下,它還將把默認的配置文件安裝到/etc/iscsi/目錄下:網絡

  • /etc/iscsi/iscsid.conf:全部剛發起的iSCSI session默認都將使用這個文件中的參數設定。
  • /etc/iscsi/initiatorname.iscsi:軟件iSCSI initiator的intiator名稱配置文件。

確保iscsid和iscsi兩個服務器開機自啓動,chkconfig --list |grep iscsi,在iscsi啓動的時候,iscsid和iscsiadm會讀取這兩個配置文件。session

service iscsid [status|start]
service iscsi status 查看iscisi的信息,只有在鏈接成功後才輸出
這裏可能遇到start始終沒有啓動成功的信息輸出,請繼續往下執行discovery,通常會啓動iscsid。app

1.3 open-iscsi initiator說明

open-iscsi包括兩個守護進程iscsid和iscsi,其中iscsid是主進程,iscsi進程則主要負責根據配置在系統啓動時進行發起端(Initiator)到服務端(target)的登陸,創建發起端與服務端的會話,使主機在啓動後便可使用經過iSCSI提供服務的存儲設備。dom

iscsid進程實現iSCSI協議的控制路徑以及相關管理功能。例如守護進程(指iscsid)可配置爲在系統啓動時基於持久化的iSCSI數據庫內容,自動從新開始發現(discovery)目標設備。

Open-iSCSI是經過如下iSCSI數據庫文件來實現永久配置的:

  • Discovery (/var/lib/iscsi/send_targets)
    在 /var/lib/iscsi/send_targets 目錄下包含iSCSI portals的配置信息,每一個portal對應一個文件,文件名爲「iSCSI portal IP,端口號」(例如172.29.88.61,3260)。
  • Node (/var/lib/iscsi/nodes)
    在 /var/lib/iscsi/nodes 目錄下,生成一個或多個以iSCSI存儲服務器上的Target名命名的文件夾如iqn.2000-01.com.synology:themain-3rd.ittest,在該文件夾下有一個文件名爲「iSCSI portal IP,編號」 (例如172.29.88.62,3260,0)的配置參數文件default,該文件中是initiator登陸target時要使用的參數,這些參數的設置是從/etc/iscsi/iscsi.conf中的參數設置繼承而來的,能夠經過iscsiadm對某一個參數文件進行更改(須要先註銷到target的登陸)。

iscsiadm是用來管理(更新、刪除、插入、查詢)iSCSI配置數據庫文件的命令行工具,用戶可以用它對iSCSI nodes、sessions、connections和discovery records進行一系列的操做。

iSCSI node是一個在網絡上可用的SCSI設備標識符,在open-iscsi中利用術語node表示目標(target)上的門戶(portal)。一個target能夠有多個portal,portal 由IP地址和端口構成。

2. 初次掛載網絡存儲

2.1 設置InitiatorName

initiator名稱用來惟一標識一個iSCSI Initiator端。保存此名稱的配置文件爲/etc/iscsi/initiatorname.iscsi

# vi /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.2000-01.com.synology:themain-3rd.ittest

注意大小寫,同時,必須頂格寫,xxxx表明要設置的initiator名稱,請遵循iqn命名規範,格式爲iqn.domaindate.reverse.domain.name:optional_name。

2.2 iSCSI Initiator配置

iSCSI Initiator的配置文件爲/etc/iscsi/iscsid.conf,在iSCSI initiator的iscsid進程啓動和執行iscsiadm命令時,將讀取這個配置文件的內容,獲取與SCSI目標進行交互的相關信息。

2.2.1 添加CHAP認證

本組下的各個設置項主要用來指定Initiator與target驗證方式。

vi /etc/iscsi/iscsid.conf
# To enable CHAP authentication set node.session.auth.authmethod
node.session.auth.authmethod = CHAP        去掉註釋
# To set a CHAP username and password for initiator
node.session.auth.username = ittest              修改成網管提供的認證username/password
node.session.auth.password = Storageittest

上面是在個人環境中最爲簡單的一種CHAP(Challenge Handshake Authentication Protocol)認證方式,並且只驗證的節點會話initiator端。其實iSCSI驗證能夠是雙向的,根據服務端的設置,能夠驗證節點會話的target端(username_in),驗證發現會話的CHAP initiator,驗證發現會話的CHAP target。(節點會話node.session即登陸認證,發現會話discovery.sendtargets即查看)

2.2.2 其餘配置項

處理CHAP認證須要關注外,其它的都保持默認便可,可是你須要知道能夠修改如:

  1. 設置initiator與target端交互的超時時間
  2. 設置iscsid重試登陸節點的次數
  3. 是否開機啓動iscsid等待

2.3 掃描並登陸到iqn鏈接

open-iscsi initiator-utils提供的管理命令爲iscsiadm,此命令包括discovery、node、session幾種模式,分別處理不一樣的狀況。在客戶端使用Target提供的存儲空間前,必須在服務器上經過Initiator軟件執行如下步驟:發現目標設備 --> 登陸目標設備 --> 與目標設備創建會話,下面分別說明經過各個命令進行說明。

2.3.1 discovery sendtargets

能夠經過sendtargets方式(根據iscsi服務器端使用的方式不一樣還有slp、isns)發現屬於你的iqn(iSCSI Qualified Name):

iscsiadm -m discovery -t sendtargets -p 172.29.88.62
iscsiadm -m discovery -t sendtargets -p 172.29.88.62:3260 |grep ittest

默認端口3260。discovery以前會自動啓動iscsid服務,有時候service iscsid start啓動沒反應,能夠經過這種方式啓動服務。
此命令查詢目標門戶(Portal)爲172.29.88.62:3260上的目標,查找成功後,返回相應的target ID,同時在/var/lib/iscsi/send_targets/var/lib/iscsi/nodes目錄下記錄相應的門戶和節點信息。使用iscsiadm -m node命令,能夠查看到發現的節點記錄。

2.3.2 node session login

在完成目標發現後,便可以登陸到相應的節點,使用目標設備提供的存儲空間:

# iscsiadm -m node -T iqn.2000-01.com.synology:themain-3rd.ittest -p 172.29.88.62 --login

-T後面跟target名稱,--login等同於-l

登陸目標節點成功後,即創建了initiator與target之間的會話(session),同時target提供的存儲設備也掛載到主機中,在/dev目錄下生成一個新的設備文件相似於sdb、sdc等。使用iscsiadm -m session -P 3(與service iscsi status相同)來查看鏈接會話信息。

2.4 使用磁盤 — lvm

LVM是很是流行的可修改磁盤分區大小的管理方式,能夠根據你的須要使用使用lvm管理磁盤。
假設新存儲的設備路徑爲/dev/sdb

pvcreate /dev/sdb                    ## 在新存儲上創建物理卷
pvdisplay                                   ## 查看物理卷狀態
vgcreate vg_ittest /dev/sdb      ## 在該物理捲上創建名爲vg_test的卷組
vgdisplay                                   ## 查看已創建的卷組狀態
lvcreate -l 100%FREE -n lv_static vg_ittest

在vg_ittest卷組上創建名爲lv_static的邏輯卷,-L可指定分區大小,此處-l表示使用所有空間

vgscan或lvdisplay                     ## 查看邏輯卷的狀態
vgchange -ay                            ## 使卷組處於激活狀態
mkfs.ext4 /dev/mapper/vg_ittest-lv_static            ## 格式化已建立的邏輯卷,文件系統格式爲ext4

格式化完畢後,使用mount命令掛載便可:

mount -o acl,rw /dev/mapper/vg_ittest-lv_static  /iscsi    ## /iscsi爲事先創建的掛載點

也能夠根據需求劃分紅多個分區掛載。

開機自動掛載

vi /etc/rc.d/rc.local
iscsiadm -m node -T iqn.2000-01.com.synology:themain-3rd.ittest -p 172.29.88.62 --login
vgchange -ay && mount -o acl,rw /dev/mapper/vg_ittest-lv_static /iscsi

3. 維護操做

3.1 正常斷開重連網絡存儲

由於磁盤上就是數據(通常網絡存儲用於備份),所以儘可能減小異常斷開存儲的可能性,因此保險起見先卸載,再斷開鏈接(-u)。

# umount /iscsi
# vgchange -an && vgscan
# iscsiadm -m session
# iscsiadm -m node -T iqn.2000-01.com.synology:themain-3rd.ittest -p 172.29.88.62 --logout

3.2 異常斷開恢復

若是使用LVM管理磁盤,因爲網絡中斷,或主機忽然關機,會致使網絡存儲異常斷開,下次啓動後從新鏈接可能會報以下錯誤:

# vgscan
 Reading all physical volumes.  This may take a while...
 /dev/backupdrive1/backup: read failed after 0 of 4096 at 319836585984: Input/output error
 /dev/backupdrive1/backup: read failed after 0 of 4096 at 319836643328: Input/output error
 /dev/backupdrive1/backup: read failed after 0 of 4096 at 0: Input/output error
 /dev/backupdrive1/backup: read failed after 0 of 4096 at 4096: Input/output error
 Found volume group "backupdrive1" using metadata type lvm2
 Found volume group "networkdrive" using metadata type lvm2

產生緣由就是,在卷組(VG)失活(deactivate)以前就移除了外部的LVM設備。在你斷開鏈接以前,須要保證如下命令被執行:

# vgchange -an volume_group_name

解決方案就是,(假設你已經用vgchange -ay vg命令來激活卷組,但仍有 Input/output error 的錯誤信息。)執行命令vgchange -an volume group name,移除外部設備,稍候幾分鐘後再執行如下命令:

# vgscan
# vgchange -ay volume_group_name

3.3 進程數超標

iscsi存儲使用正常,但ps -ef|grep iscsi則包含200+以上的相似於[iscsi_q_112]進程,而且沒法kill,使用service iscsi status不斷輸出相似:

iscsiadm: could not read session targetname: 5
iscsiadm: could not find session info for session30
iscsiadm: could not read session targetname: 5
iscsiadm: could not find session info for session31
...

這個問題很糾結,但重啓服務器是能夠解決的。網上資料不多,我猜測是iscsid服務端設置認證方面的問題。

4. iscsi的其它經常使用操做

  • 列出全部target
    iscsiadm -m node

  • 鏈接全部target
    iscsiadm -m node -L all

  • 鏈接指定target
    iscsiadm -m node -T iqn.... -p 172.29.88.62 --login

  • 使用以下命令能夠查看配置信息
    iscsiadm -m node -o show -T iqn.2000-01.com.synology:rackstation.exservice-bak

  • 查看目前 iSCSI target 鏈接狀態
    iscsiadm -m session
    iscsiadm: No active sessions.
    (目前沒有已鏈接的 iSCSI target)

  • 斷開全部target
    iscsiadm -m node -U all

  • 斷開指定target
    iscsiadm -m node -T iqn... -p 172.29.88.62 --logout

  • 刪除全部node信息
    iscsiadm -m node --op delete

  • 刪除指定節點(/var/lib/iscsi/nodes目錄下,先斷開session)
    iscsiadm -m node -o delete -name iqn.2012-01.cn.nayun:test-01

  • 刪除一個目標(/var/lib/iscsi/send_targets目錄下)
    iscsiadm --mode discovery -o delete -p 172.29.88.62:3260

參考


原文連接地址:http://seanlook.com/2015/04/28/iscsi-san-initiator/

相關文章
相關標籤/搜索