iscsi网络存储介绍及客户端配置操作
1. iscsi介紹與initiator安裝
1.1 iSCSI介紹
iSCSI簡單來說,就是把SCSI指令通過TCP/IP協議封裝起來,在以太網中傳輸。iSCSI 可以實現在IP網絡上傳遞和運行SCSI協議,使其能夠在諸如高速千兆以太網上進行數據存取,實現了數據的網際傳遞和管理。基于iSCSI建立的存儲區域網(SAN)與基于光纖的FC-SAN相比,具有很好的性價比。
iSCSI屬于端到端的會話層協議,它定義的是SCSI到TCP/IP的映射(如下圖),即Initiator將SCSI指令和數據封裝成iSCSI協議數據單元,向下提交給TCP層,最后封裝成IP數據包在IP網絡上傳輸,到達Target后通過解封裝還原成SCSI指令和數據,再由存儲控制器發送到指定的驅動器,從而實現SCSI命令和數據在IP網絡上的透明傳輸。它整合了現有的存儲協議SCSI和網絡協議TCP/IP,實現了存儲與TCP/IP網絡的無縫融合。在本文中,將把發起器Initiator稱為客戶端,將目標器Target稱為服務端以方便理解。
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?iscsiiscsi-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)這個安裝將iscsid、iscsiadm安裝到 /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會讀取這兩個配置文件。
service iscsid [status|start]
service iscsi status 查看iscisi的信息,只有在連接成功后才輸出
這里可能遇到start始終沒有啟動成功的信息輸出,請繼續往下執行discovery,一般會啟動iscsid。
1.3 open-iscsi initiator說明
open-iscsi包括兩個守護進程iscsid和iscsi,其中iscsid是主進程,iscsi進程則主要負責根據配置在系統啟動時進行發起端(Initiator)到服務端(target)的登錄,建立發起端與服務端的會話,使主機在啟動后即可使用通過iSCSI提供服務的存儲設備。
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.iscsiInitiatorName=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/passwordnode.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認證需要關注外,其它的都保持默認即可,但是你需要知道可以修改如:
設置initiator與target端交互的超時時間
設置iscsid重試登錄節點的次數
是否開機啟動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.62iscsiadm?-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
在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?/iscsi3. 維護操作
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?--logout3.2 異常斷開恢復
如果使用LVM管理磁盤,由于網絡中斷,或主機突然關機,會導致網絡存儲異常斷開,下次啟動后重新連接可能會報如下錯誤:
#?vgscanReading?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_name3.3 進程數超標
iscsi存儲使用正常,但ps -ef|grep iscsi則包含200+以上的類似于[iscsi_q_112]進程,并且無法kill,使用service iscsi status不斷輸出類似:
iscsiadm:?could?not?read?session?targetname:?5iscsiadm:?could?not?find?session?info?for?session30iscsiadm:?could?not?read?session?targetname:?5iscsiadm:?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
參考
-
CentOS客戶端加載ISCSI磁盤
-
linux iscsi initiator 安裝配置
-
http://linux.vbird.org/linux_server/0460iscsi.php
本文轉自yzy121403725 51CTO博客,原文鏈接:http://blog.51cto.com/lookingdream/1825286,如需轉載請自行聯系原作者
總結
以上是生活随笔為你收集整理的iscsi网络存储介绍及客户端配置操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Amdahl’s law (阿姆达尔定律
- 下一篇: Perl变量及用法