天天看點

iscsi介紹及iscsi target配置

iSCSI 主要是透過 TCP/IP 的技術,将儲存裝置端透過 iSCSI target (iSCSI 目标) 功能,做成可以提供磁盤的伺服器端,再透過 iSCSI initiator (iSCSI 初始化使用者) 功能,做成能夠挂載使用 iSCSI target 的用戶端,如此便能透過 iSCSI 協定來進行磁盤的應用了。

也就是說,iSCSI 這個架構主要将儲存裝置與使用的主機分為兩個部分,分别是:

 iSCSI target:就是儲存裝置端,存放磁盤或 RAID 的裝置,目前也能夠将 Linux 主機仿真成 iSCSI target 了!目的在提供其他主機使用的『磁盤』;

 iSCSI initiator:就是能夠使用 target 的用戶端,通常是伺服器。 也就是說,想要連接配接到 iSCSI target 的伺服器,也必須要安裝 iSCSI initiator 的相關功能後才能夠使用 iSCSI target 提供的磁盤就是了。

如下圖所示,iSCSI 是在 TCP/IP 上面所開發出來的一套應用,是以得要有網絡才行啊!

iscsi介紹及iscsi target配置

iSCSI target 的設定

能夠完成 iSCSI target/initiator 設定的項目非常多,找的到的就有底下這幾個:

 Linux SCSI target framework (tgt):http://stgt.sourceforge.net/

 Linux-iSCSI Project:http://linux-iscsi.sourceforge.net/

 Open-iSCSI:http://www.open-iscsi.org/

由于被我們 CentOS 6.4 官方直接使用的是 tgt 這個軟體,是以底下我們會使用 tgt 來介紹整個 iSCSI target 的設定喔!

所需軟體與軟體結構

CentOS 将 tgt 的軟體名稱定義為 scsi-target-utils ,是以你得要使用 yum 去安裝他才行。至于用來作為 initiator 的軟體則是使用 linux-iscsi 的項目,該項目所提供的軟體名稱則為 iscsi-initiator-utils 。是以,總的來說,你需要的軟體有:

scsi-target-utils:用來将 Linux 系統仿真成為 iSCSI target 的功能;

iscsi-initiator-utils:挂載來自 target 的磁盤到 Linux 本機上。

那麼 scsi-target-utils 主要提供哪些檔案呢?基本上有底下幾個比較重要需要注意的:

/etc/tgt/targets.conf:主要配置檔案,設定要分享的磁盤格式與哪幾顆;

/usr/sbin/tgt-admin:線上查詢、删除 target 等功能的設定工具;

/usr/sbin/tgt-setup-lun:建立 target 以及設定分享的磁盤與可使用的

用戶端等工具軟體。

/usr/sbin/tgtadm:手動直接管理的管理者工具 (可使用配置檔案取代);

/usr/sbin/tgtd:主要提供 iSCSI target 服務的主程式;

/usr/sbin/tgtimg:建置預計分享的映像檔案裝置的工具 (以映像檔案仿真磁盤);

其實 CentOS 已經将很多功能都設定好了,是以我們隻要修訂配置檔案,然後啟動 tgtd 這個服務就可以啰! 接下來,就讓我們實際來玩一玩 iSCSI target 的設定吧!

target 的實際設定

從上面的分析來看,iSCSI 就是透過一個網絡接口,将既有的磁盤給分享出去就是了。那麼有哪些類型的磁盤可以分享呢? 這包括:

 使用 dd 指令所建立的大型檔案可供仿真為磁盤 (無須預先格式化);

 使用單一分割槽 (partition) 分享為磁盤;

 使用單一完整的磁盤 (無須預先分割);

使用磁盤陣列分享 (其實與單一磁盤相同方式);

使用軟體磁盤陣列 (software raid) 分享成單一磁盤;

使用 LVM 的 LV 裝置分享為磁盤。

建立所需要的磁盤裝置

既然 iSCSI 要分享的是磁盤,那麼我們得要準備好啊!目前預計準備的磁盤為:

建立一個名為 /srv/iscsi/disk1.img 的 500MB 檔案;

使用 /dev/sda10 提供 2GB 作為分享 (從第一章到目前為止的分割數);

使用 /dev/server/iscsi01 的 2GB LV 作為分享 (再加入 5GB /dev/sda11 到 server VG 中)。

實際處理的方式如下:

規劃分享的 iSCSI target 檔名

iSCSI 有一套自己分享 target 檔名的定義,基本上,藉由 iSCSI 分享出來的 target 檔名都是以 iqn 為開頭,意思是:『iSCSI Qualified Name (iSCSI 合格名稱)』的意思。那麼在 iqn 後面要接啥檔名呢?通常是這樣的:

我做這個測試的時間是 2014 年 10 月份,然後鳥哥的機器是 www.vlnb.net ,反轉網域寫法為 net.vlnb, 然後,想要的 iSCSI target 名稱是 vdisk ,那麼就可以這樣寫:

另外,就如同一般外接式儲存裝置 (target 名稱) 可以具有多個磁盤一樣,我們的 target 也能夠擁有數個磁盤裝置的。 每個在同一個 target 上頭的磁盤我們可以将它定義為邏輯機關編号 (Logical Unit Number, LUN)。我們的 iSCSI initiator 就是跟 target 協調後才取得 LUN 的存取權就是了。在這個簡單案例中,最終的結果,我們會有一個 target ,在這個 target 當中可以使用三個 LUN 的磁盤。

設定 tgt 的配置檔案 /etc/tgt/targets.conf

接下來我們要開始來修改配置檔案了。基本上,配置檔案就是修改 /etc/tgt/targets.conf 啦。這個檔案的内容可以改得很簡單, 最重要的就是設定前一點規定的 iqn 名稱,以及該名稱所對應的裝置,然後再給予一些可能會用到的參數而已。 多說無益,讓我們實際來實作看看:

事實上,除了 backing-store 之外,在這個配置檔案當中還有一些比較特别的參數可以讨論看看 (man tgt-admin):

backing-store (虛拟的裝置), direct-store (實際的裝置): 設定裝置時,如果你的整顆磁盤是全部被拿來當 iSCSI 分享之用,那麼才能夠使用 direct-store 。不過,根據網絡上的其他檔案, 似乎說明這個設定值有點危險的樣子。是以,基本上還是建議單純使用模拟的 backing-store 較佳。例如鳥哥的簡單案例中,就通通使用 backing-store 而已

initiator-address (使用者端位址): 如果你想要限制能夠使用這個 target 的用戶端來源,才需要填寫這個設定值。基本上,不用設定它 (代表所有人都能使用的意思), 因為我們後來會使用 iptables 來規範可以聯機的用戶端嘛!

incominguser (使用者賬号密碼設定): 如果除了來源 IP 的限制之外,你還想要讓使用者輸入賬密才能使用你的 iSCSI target 的話,那麼就加用這個設定項目。 此設定後面接兩個參數,分别是賬号與密碼啰。

write-cache [off|on] (是否使用快取): 在預設的情況下,tgtd 會使用快取來增快速度。不過,這樣可能會有遺失資料的風險。是以,如果你的資料比較重要的話, 或許不要使用快取,直接存取裝置會比較妥當一些。

上面的設定值要怎麼用呢?現在,假設你的環境中,僅允許 192.168.100.0/24 這個網段可以存取 iSCSI target,而且存取時需要帳密分别為 vuser, vpasswd ,此外,不要使用快取,那麼原本的配置檔案之外,還得要加上這樣的參數才行 (基本上,使用上述的設定即可,底下的設定是多加測試用的,不需要填入你的設定中)。

啟動 iSCSI target 以及觀察相關端口口與磁盤資訊

再來則是啟動、開機啟動,以及觀察 iSCSI target 所啟動的埠口啰:

請将上面的資訊對照一下我們的配置檔案呦!看看有沒有錯誤就是了!尤其注意每個 LUN 的容量、實際磁盤路徑! 那個項目不能錯誤就是了。(照理說 LUN 的數字應該與 backing-store 設定的順序有關,不過,在鳥哥的測試中, 出現的順序并不相同!是以,還是需要使用 tgt-admin --show 去查閱查閱才好!)

設定防火牆

iSCSI initiator 的設定

談完了 target 的設定,并且觀察到相關 target 的 LUN 資料後,接下來就是要來挂載使用啰。使用的方法很簡單, 隻不過我們得要安裝額外的軟體來取得 target 的 LUN 使用權就是了。

在前一小節就談過了,要設定 iSCSI initiator 必須要安裝 iscsi-initiator-utils 才行。安裝的方法請使用 yum 去處理,這裡不再多講話。那麼這個軟體的結構是如何呢?

/etc/iscsi/iscsid.conf:主要的配置檔案,用來連結到 iSCSI target 的設定;

 /sbin/iscsid:啟動 iSCSI initiator 的主要服務程式;

 /sbin/iscsiadm:用來管理 iSCSI initiator 的主要設定程式;

 /etc/init.d/iscsid:讓本機模拟成為 iSCSI initiater 的主要服務;

 /etc/init.d/iscsi:在本機成為 iSCSI initiator 之後,啟動此腳本,讓我們可以登入 iSCSI target。是以 iscsid 先啟動後,才能啟動這個服務。為了防呆,是以 /etc/init.d/iscsi 已經寫了一個啟動指令, 啟動 iscsi 前尚未啟動 iscsid ,則會先呼叫 iscsid 才繼續處理 iscsi 喔!

老實說,因為 /etc/init.d/iscsi 腳本已經包含了啟動 /etc/init.d/iscsid 的步驟在裡面,是以,理論上, 你隻要啟動 iscsi 就好啦!此外,那個 iscsid.conf 裡面大概隻要設定好登入 target 時的帳密即可, 其他的 target 搜尋、設定、取得的方法都直接使用 iscsiadm 這個指令來完成。由于 iscsiadm 偵測到的結果會直接寫入 /var/lib/iscsi/nodes/ 當中,是以隻要啟動 /etc/init.d/iscsi 就能夠在下次開機時,自動的連結到正确的 target 啰。 那麼就讓我們來處理處理整個過程吧

initiator 的實際設定

首先,我們得要知道 target 提供了啥咚咚啊,是以,理論上,不論是 target 還是 initiator 都應該是要我們管理的機器才對。 而現在我們知道 target 其實有設定賬号與密碼的,是以底下我們就得要修改一下 iscsid.conf 的内容才行。

修改 /etc/iscsi/iscsid.conf 内容,并啟動 iscsi

這個檔案的修改很簡單,因為裡面的參數大多已經預設做的不錯了,是以隻要填寫 target 登入時所需要的帳密即可。 修改的地方有兩個,一個是偵測時 (discovery) 可能會用到的帳密,一個是聯機時 (node) 會用到的帳密:

由于我們尚未與 target 聯機,是以 iscsi 并無法讓我們順利啟動的!是以上面隻要 chkconfig 即可,不需要啟動他。 要開始來偵測 target 與寫入系統資訊啰。全部使用 iscsiadm 這個指令就可以完成所有動作了。

偵測 192.168.100.254 這部 target 的相關資料

雖然我們已經知道 target 的名字,不過,這裡假設還不知道啦!因為有可能哪一天你的公司有錢了, 會去買實體的 iSCSI 數組嘛!是以這裡還是講完整的偵測過程好了!你可以這樣使用:

現在我們知道了 target 的名稱,同時将所有偵測到的資訊通通寫入到上述 /var/lib/iscsi/nodes/iqn.2014-10.net.vbnl:vbirddisk/192.168.100.254,3260,1 目錄内的 default 檔案中, 若資訊有修訂過的話,那你可以到這個檔案内修改,也可以透過 iscsiadm 的 update 功能處理相關參數的。

開始進行聯機 iSCSI target

因為我們的 initiator 可能會連接配接多部的 target 裝置,是以,我們得先要瞧瞧目前系統上面偵測到的 target 有幾部, 然後再找到我們要的那部 target 來進行登入的作業。不過,如果你想要将所有偵測到的 target 全部都登入的話, 那麼整個步驟可以再簡化:

接下來呢?呵呵!很棒的是,我們要來開始處理這個 iSCSI 的磁盤了喔!怎麼處理?瞧一瞧!

你會發現主機上面多出了三個新的磁盤,容量與剛剛在 192.168.100.254 那部 iSCSI target 上面分享的 LUN 一樣大。 那這三顆磁盤可以怎麼用?你想怎麼用就怎麼用啊!隻是,唯一要注意的,就是 iSCSI target 每次都要比 iSCSI initiator 這部主機還要早開機,否則我們的 initiator 恐怕就會出問題。

更新/删除/新增 target 資料的方法

如果一切都沒有問題,現在,請回到 discovery 的過程,重新再将 iSCSI target 偵測一次,再重新啟動 initiator 來取得那三個磁盤吧!我們要來測試與利用該磁盤啰!

繼續閱讀