IP 網路 — iSCSI 上的大型存放設備

目錄

12.1. 設定 iSCSI 目標
12.2. 設定 iSCSI 啟動程式

如何為伺服器系統提供硬碟容量,是電腦中心以及操作伺服器時的一項關鍵任務。在主機磁區中為了此目的通常會使用光纖通道。到目前為止,UNIX 電腦及大部分的伺服器尚未連接到中央儲存解決方案。

linux-iSCSI 是將 Linux 電腦與中央儲存系統連接在一起的一個簡單且低廉的解決方案。原則上,iSCSI 代表在 IP 層級上傳輸 SCSI 指令。如果程式開始查詢這類設備,作業系統會產生必要的 SCSI 指令。接著,系統會依照通稱為 iSCSI 啟動程式 (iSCSI Initiator) 的軟體所需,將這些指令嵌入 IP 封包並加密,然後將這些封包傳送到對應的 iSCSI 遠端工作站,也稱為 iSCSI 目標 (iSCSI Target)。

許多儲存解決方案提供透過 iSCSI 的存取方式,但還另一種可能就是執行提供 iSCSI 目標的 Linux 伺服器。在這種情況下,設定針對檔案系統服務最佳化的 Linux 伺服器是很重要的。iSCSI 目標只會存取 Linux 中的區塊設備,因此,您可以使用 RAID 解決方案來增加磁碟空間,並使用大量記憶體來提高資料快取。如需關於 RAID 的詳細資訊,請參閱第 7.2 節「軟體 RAID 組態」

設定 iSCSI 目標

SUSEŽ Linux Enterprise Server 隨附由 Ardis iSCSI 目標演進而來的開放原始碼 iSCSI 目標解決方案。使用 YaST 即可完成基本設定,但如果要充分利用 iSCSI 的優點,就必須用手動設定。

使用 YaST 建立 iSCSI 目標

iSCSI 目標組態會將現有區塊設備或檔案系統影像輸出到 iSCSI 啟動程式。請先使用 YaST 建立需要的區塊設備,或建立檔案系統影像。如需磁碟分割的綜覽,請參閱第 8.5.7 節「使用 YaST 磁碟分割程式」。檔案系統影像必須以手動方式建立。例如,如果要建立容量 4GB 的 /var/lib/xen/images/xen-0 影像,請先確認該目錄已存在,然後建立影像本身:

mkdir -p /var/lib/xen/images
dd if=/dev/zero of=/var/lib/xen/images/xen-0 seek=1M bs=4096 count=1

若要設定 iSCSI 目標,請在 YaST 中執行iSCSI 目標模組。組態分為三個索引標籤:在服務索引標籤中,選取啟動模式和防火牆設定。如果要從遠端機器存取 iSCSI 目標,請選取開啟防火牆中的連接埠。若 iSNS 伺服器應管理探查與存取控制,請啟用iSNS 存取控制,然後輸入 iSNS 伺服器的 IP 位址。注意︰您不能使用有效的主機名稱,但必須使用 IP 位址。如需 iSNS 相關的詳細資訊,請閱讀 第 13 章「iSNS for Linux 綜覽

全域索引標籤提供 iSCSI 伺服器的設定。此處所設定的驗證將用來探查服務,而不是用於存取目標。如果不想將存取僅限於搜索,請使用無驗證

如果需要驗證,就必須考慮兩種可能性。一種是啟動程式必須證明它有許可權,可以在 iSCSI 目標上執行探查。這是藉由內送驗證來完成。另一種可能性是 iSCSI 目標必須向啟動程式證明它就是預期的目標。因此,iSCSI 目標也可以提供使用者名稱和密碼。這是藉由外送驗證來完成。RFC 3720 提供更多有關驗證的詳細資訊 (請參閱 http://www.ietf.org/rfc/rfc3720.txt)。

目標是在目標索引標籤中定義。使用新增可建立新的 iSCSI 目標。第一個對話方塊會詢問要輸出的設備相關資訊。

目標

目標行有類似下列固定語法:

iqn.yyyy-mm.<reversed domain name>

開頭一定是 iqn。yyyy-mm 則採用目標啟用時的日期格式。RFC 3722 提供更多有關命名慣例的詳細資訊 (請參閱 http://www.ietf.org/rfc/rfc3722.txt)。

Identifier

識別碼可自由選取。它應該遵循某些機制,使系統結構更為一致。

LUN

數個 LUN 可以指定給一個目標。若要執行此操作,請在目標索引標籤中選取目標,然後按一下編輯。向現有的目標新增新的 LUN。

路徑

新增要輸出的區塊設備或檔案系統影像的路徑。

下一個功能表可設定目標的存取限制。組態非常類似探查驗證的組態。在這裡,您至少必須設定內送驗證。

下一步會完成新目標的組態,讓您回到「目標」索引標籤的綜覽頁面。請按一下完成啟用變更。

手動設定 iSCSI 目標

/etc/ietd.conf 中設定 iSCSI 目標。這個檔案在 Target 宣告之前的所有參數都是供檔案全域使用。這部分的驗證資訊具有特殊意義 — 它不是全域的,而只用於探查 iSCSI 目標。

若您已存取了 iSNS 伺服器,首先需要設定將此伺服器告知該目標。注意︰iSNS 伺服器的位址必須始終以 IP 位址提供。正常的網域名稱不夠。此功能的組態如下︰

iSNSServer 192.168.1.111
iSNSAccessControl no

此組態可確保 iSCSI 目標使用 iSNS 伺服器進行註冊,這樣就可為啟動程式提供探查。如需 iSNS 相關的詳細資訊,請閱讀 第 13 章「iSNS for Linux 綜覽。注意︰iSNS 探查的存取控制不受支援。只需保持「無 iSNS 存取控制」。

所有直接的 iSCSI 驗證可以朝兩個方向來完成。iSCSI 目標可要求 iSCSI 啟動程式使用 IncomingUser 進行驗證,這可以新增許多次。iSCSI 啟動程式也可以要求 iSCSI 目標進行驗證,這時應使用 OutgoingUser。兩者語法相同:

IncomingUser <username> <password>
OutgoingUser <username> <password>

驗證後面接著一或多個目標定義。請為每個目標新增 Target 區段。這個區段的開頭固定是 Target 識別碼,後面接著邏輯單位編號的定義:

Target iqn.yyyy-mm.<reversed domain name>[:identifier]
          Lun 0 Path=/dev/mapper/system-v3
          Lun 1 Path=/dev/hda4
          Lun 2 Path=/var/lib/xen/images/xen-1,Type=fileio

Target 行中,yyyy-mm 是目標啟用時的日期,而且識別碼可以自由選取。RFC 3722 提供更多有關命名慣例的詳細資訊 (請參閱 http://www.ietf.org/rfc/rfc3722.txt)。本例中輸出三個不同的區塊設備。第一個是邏輯磁碟區 (請參閱第 7.1 節「LVM 組態」),第二個是 IDE 分割區,第三個是本地檔案系統中可用的影像。這些對 iSCSI 啟動程式而言都像是區塊設備。

啟用 iSCSI 目標前,請在 Lun 定義後至少新增一個 IncomingUser。它會執行此目標所用的驗證。

若要啟用所有變更,請用 rcopen-iscsi restart 重新啟動 iscsitarget 精靈。檢查 /proc 檔案系統中的組態:

cat /proc/net/iet/volume
tid:1 name:iqn.2006-02.com.example.iserv:systems
        lun:0 state:0 iotype:fileio path:/dev/mapper/system-v3
        lun:1 state:0 iotype:fileio path:/dev/hda4
        lun:2 state:0 iotype:fileio path:/var/lib/xen/images/xen-1

還有許多其他選項可控制 iSCSI 目標的行為。請參閱 ietd.conf 的手冊頁,以瞭解詳細資料。

/proc 檔案系統中也會顯示作用中工作階段。針對每個連接的啟動程式,/proc/net/iet/session 中會新增一個額外的項目:

cat /proc/net/iet/session
tid:1 name:iqn.2006-02.com.example.iserv:system-v3
   sid:562949957419520 initiator:iqn.2005-11.de.suse:cn=rome.example.com,01.9ff842f5645
      cid:0 ip:192.168.178.42 state:active hd:none dd:none
   sid:281474980708864 initiator:iqn.2006-02.de.suse:01.6f7259c88b70
      cid:0 ip:192.168.178.72 state:active hd:none dd:none

使用 ietadm 設定線上目標

如有必要變更 iSCSI 目標組態,您一定要重新啟動目標,才能啟用在組態檔案中所做的變更。可惜的是,在這個過程中,所有作用中工作階段都會被中斷。若要維持不受干擾的操作,除了在主要組態檔案 /etc/ietd.conf 中進行變更之外,您還要使用 ietadm 管理公用程式手動變更目前組態。

若要建立擁有 LUN 的 iSCSI 目標,請先更新您的組態檔案。增加的項目可為:

Target iqn.2006-02.com.example.iserv:system2
          Lun 0 Path=/dev/mapper/system-swap2
          IncomingUser joe secret

若要手動設定這個組態,請執行下列步驟:

  1. 使用 ietadm --op new --tid=2 --params Name=iqn.2006-02.com.example.iserv:system2 指令建立新目標。

  2. 使用 ietadm --op new --tid=2 --lun=0 --params Path=/dev/mapper/system-swap2 建立邏輯單位。

  3. 使用 ietadm --op new --tid=2 --user --params=IncomingUser=joe,Password=secret 設定這個目標上的使用者名稱和密碼組合。

  4. 使用 cat /proc/net/iet/volume 檢查組態。

您也可以刪除作用中連線。首先,使用 cat /proc/net/iet/session 指令檢查所有作用中連線。這會提供類似以下資訊:

cat /proc/net/iet/session
tid:1 name:iqn.2006-03.com.example.iserv:system
        sid:281474980708864 initiator:iqn.1996-04.com.example:01.82725735af5
                cid:0 ip:192.168.178.72 state:active hd:none dd:none

若要刪除工作階段 ID 為 281474980708864 的工作階段,請使用 ietadm --op delete --tid=1 --sid=281474980708864 --cid=0 指令。要知道,這樣會使用戶端系統無法存取設備,而且存取這個設備的程序可能會暫停。

ietadm 也可用來變更各種組態參數。使用 ietadm --op show --tid=1 --sid=0 可取得全域變數清單。輸出會類似以下資訊:

InitialR2T=Yes
ImmediateData=Yes
MaxConnections=1
MaxRecvDataSegmentLength=8192
MaxXmitDataSegmentLength=8192
MaxBurstLength=262144
FirstBurstLength=65536
DefaultTime2Wait=2
DefaultTime2Retain=20
MaxOutstandingR2T=1
DataPDUInOrder=Yes
DataSequenceInOrder=Yes
ErrorRecoveryLevel=0
HeaderDigest=None
DataDigest=None
OFMarker=No
IFMarker=No
OFMarkInt=Reject
IFMarkInt=Reject

這些參數全都可以輕易變更。例如,如果要將最大連線數變更為 2,請使用 ietadm --op update --tid=1 --params=MaxConnections=2。在 /etc/ietd.conf 檔案中,關聯行應該類似 MaxConnections 2

[Warning]使用 ietadm 根據變更更新 ietd.conf

您用 ietadm 指令進行的變更對系統不具有永久效力。如果不加到 /etc/ietd.conf 檔案中,下次重新開機時,這些變更都會消失不見。依您網路的 iSCSI 使用方式而定,這可能導致嚴重的問題。

ietadm 指令還有許多其他選項可供使用。如需綜覽,請使用 ietadm -h。該處的縮寫為目標 ID (tid)、工作階段 ID (sid) 和連線 ID (cid)。您也可以在 /proc/net/iet/session 找到這些資訊。