如果你的系統(tǒng)需要大量的磁盤容量,但是身邊卻沒有 NAS 或外接的儲存設(shè)備,僅有個人計算機(jī)時,,那該如何是好? 此時,,透過網(wǎng)絡(luò)的 SCSI 磁盤 (iSCSI) 就能夠有大大的幫助啦,!這個 iSCSI 是將來自網(wǎng)絡(luò)的數(shù)據(jù)仿真成本機(jī)的 SCSI 設(shè)備, 因此可以進(jìn)行諸如 LVM 等方面的實(shí)作,,而不是單純使用服務(wù)器端提供的文件系統(tǒng)而已,,相當(dāng)?shù)挠袔椭福?/td>
|
18.1
網(wǎng)絡(luò)文件系統(tǒng)還是網(wǎng)絡(luò)驅(qū)動器
做為服務(wù)器的系統(tǒng)通常是需要儲存設(shè)備的,而儲存設(shè)備除了可以使用系統(tǒng)內(nèi)建的磁盤之外,,如果內(nèi)建的磁盤容量不夠大,, 而且也沒有額外的磁盤插槽 (SATA 或 IDE) 可用時,那么常見解決的方案就是增加 NAS (網(wǎng)絡(luò)附加儲存服務(wù)器) 或外接式儲存設(shè)備,。再高檔一點(diǎn)的系統(tǒng),,可能就會用到 SAN (儲存局域網(wǎng)絡(luò)) 這個高貴的玩意兒 (注1)。
不過,,不論是哪一種架構(gòu),,基本上,它們的內(nèi)部硬盤通常是以磁盤陣列 (RAID) 作為基礎(chǔ)的,。磁盤陣列我們在基礎(chǔ)篇第三版的第十五章談過了,,這里就不再啰唆。這里想要了解的是,,啥是 NAS 又啥是 SAN ,? 這兩者有何不同?與本章主題有關(guān)的 iSCSI 又是啥呢,?底下就讓我們來談一談,。
18.1.1
NAS 與 SAN
由于企業(yè)的數(shù)據(jù)量越來越大,而且重要性與保密性越來越高,,尤其類似數(shù)據(jù)庫的內(nèi)容,,常常容量單位是以 TB (1TB = 1024GB) 在進(jìn)行計算的。哇,!真可怕,!所以啰,磁盤陣列的應(yīng)用就很重要了。那么磁盤陣列通常是在哪里呢,? 磁盤陣列通常是 (1)主機(jī)內(nèi)部有磁盤陣列控制卡,,可以自行管理磁盤陣列。不過想要提供磁盤陣列的容量,, 得要透過額外的網(wǎng)絡(luò)服務(wù)才行,; (2)外接式磁盤陣列設(shè)備,就是單純的磁盤陣列設(shè)備,,必須透過某些接口鏈接到主機(jī)上,, 主機(jī)也要安裝適當(dāng)?shù)尿?qū)動程序后,才能捉到這個設(shè)備所提供的磁盤容量,。
不過,,以目前的信息社會來說,你應(yīng)該很少聽到內(nèi)建或外接的 RAID 了,,常常聽到的應(yīng)該是 NAS 與 SAN ,,那這是啥咚咚? 讓我們簡單的來說說:
-
NAS (Network Attached Storage, 網(wǎng)絡(luò)附加儲存服務(wù)器)
基本上,,NAS 其實(shí)就是一部客制化好的主機(jī)了,,只要將 NAS 連接上網(wǎng)絡(luò),那么在網(wǎng)絡(luò)上面的其他主機(jī)就能夠存取 NAS 上頭的資料了,。簡單的說,,NAS 就是一部 file server 啰~不過,NAS 由于也是接在網(wǎng)絡(luò)上面,,所以,,如果網(wǎng)絡(luò)上有某個用戶大量存取 NAS 上頭的數(shù)據(jù)時,是很容易造成網(wǎng)絡(luò)停頓的問題的,,這個比較麻煩點(diǎn)~低階的 NAS 通常會使用 Linux 系統(tǒng)搭配軟件磁盤陣列來提供大容量文件系統(tǒng),。不過效能嘛就有待加強(qiáng)啦!此外,,NAS 也通常支持 TCP/IP ,,并會提供 NFS, SAMBA,
FTP 等常見的通訊協(xié)議來提供客戶端取得文件系統(tǒng)。
那為什么不要直接使用個人計算機(jī)安裝 Linux 再搭配相關(guān)的服務(wù),,即可提供 NAS 預(yù)計要提供的大容量空間啦,!干嘛需要 NAS 呢? 因?yàn)?,通?NAS 還會包括很多組態(tài)的接口,,通常是利用 Web 接口來控制磁盤陣列的設(shè)定狀況、提供 IP 或其他相關(guān)網(wǎng)絡(luò)設(shè)定,, 以及是否提供某些特定的服務(wù)等等,。因?yàn)榫哂休^為親和的操作與控制接口,對于非 IT 的人員來說,,控管較為容易啦,。 這也是 NAS 存在的目的。
不過,,目前倒是有類似 FreeNAS 的軟件開發(fā)項(xiàng)目 (http:///projects/freenas/, 注2),,可以讓你的
Linux PC 變成一部可透過 Web 控管的 NAS 哩!不過不是本章的重點(diǎn),,有興趣的朋友可以自行前往下載與安裝該軟件來玩玩~
-
SAN (Storage Area Networks, 儲存局域網(wǎng)絡(luò))
從上面的說明來看,,其實(shí)那個 NAS 就是一部可以提供大容量文件系統(tǒng)的主機(jī)嘛! 那我們知道單部主機(jī)能夠提供的插槽再怎么說也是有限的,! 所以并不能無限制的安插磁盤在同一部實(shí)體主機(jī)上面,。但是如果偏偏你就是有大量磁盤使用的需求,那時該如何是好,? 這時就得要使用到 SAN 這玩意兒啦,!
最簡單的看法,就是將 SAN 視為一個外接式的儲存設(shè)備,。只是單純的外接式儲存設(shè)備僅能透過某些接口 (如 SCSI 或 eSATA) 提供單一部主機(jī)使用,,而 SAN 卻可以透過某些特殊的接口或信道來提供局域網(wǎng)絡(luò)內(nèi)的所有機(jī)器進(jìn)行磁盤存取。要注意喔,,SAN 是提供『磁盤 (block device)』給主機(jī)用,,而不是像 NAS
提供的是『網(wǎng)絡(luò)協(xié)議的文件系統(tǒng) (NFS, SMB...)』!這兩者的差異挺大的喔,!因此,,掛載使用 SAN 的主機(jī)會多出一個大磁盤,并可針對 SAN 提供的磁盤進(jìn)行分割與格式化等動作,。想想看,,你能對 NAS 提供的文件系統(tǒng)格式化嗎?不行吧,!這樣了解差異否,?
另外,既然 SAN 可以提供磁盤,,而 NAS 則是提供相關(guān)的網(wǎng)絡(luò)文件系統(tǒng),,那么 NAS 能不能透過網(wǎng)絡(luò)去使用 SAN 所提供的磁盤呢?答案當(dāng)然是可以??!因?yàn)?SAN 最大的目的就是在提供磁盤給服務(wù)器主機(jī)使用,NAS 也是一部完整的服務(wù)器,, 所以 NAS 當(dāng)然可以使用 SAN 啦,!同時其他的網(wǎng)絡(luò)服務(wù)器也能夠使用這個 SAN 來進(jìn)行數(shù)據(jù)存取,。
此外,既然 SAN 開發(fā)的目的是要提供大量的磁盤給用戶,,那么傳輸?shù)乃俣犬?dāng)然是非常重要的,。因此,早期的 SAN 大多配合光纖信道 (Fibre Channel) 來提供高速的數(shù)據(jù)傳輸,。目前標(biāo)準(zhǔn)的光纖信道是速度是 2GB ,,未來還可能到達(dá) 10GB 以上呢~不過,使用光纖等技術(shù)較高的設(shè)備,,當(dāng)然就比較貴一些,。
拜以太網(wǎng)絡(luò)盛行,加上技術(shù)成熟之賜,,現(xiàn)今的以太網(wǎng)絡(luò)媒體 (網(wǎng)絡(luò)卡,、交換器、路由器等等設(shè)備) 已經(jīng)可以達(dá)到 GB 的速度了,,離 SAN 的光纖信道速度其實(shí)差異已經(jīng)縮小很多啦~那么是否我們可以透過這個 GB 的以太網(wǎng)絡(luò)接口來連接到 SAN 的設(shè)備呢,?這就是我們接下來要提到的 iSCSI 架構(gòu)啦! ^_^
18.1.2
iSCSI 界面
早期的企業(yè)使用的服務(wù)器若有大容量磁盤的需求時,,通常是透過 SCSI 來串接 SCSI 磁盤,,因此服務(wù)器上面必須要加裝 SCSI 適配卡,而且這個 SCSI 是專屬于該服務(wù)器的,。后來這個外接式的 SCSI 設(shè)備被上述提到的 SAN 的架構(gòu)所取代,, 在 SAN 的標(biāo)準(zhǔn)架構(gòu)下,雖然有很多的服務(wù)器可以對同一個 SAN 進(jìn)行存取的動作,,不過為了速度需求,,通常使用的是光纖信道。 但是光纖信道就是貴嘛,!不但設(shè)備貴,,服務(wù)器上面也要有光纖接口,很麻煩~所以光纖的 SAN 在中小企業(yè)很難普及啊~
后來網(wǎng)絡(luò)實(shí)在太普及,,尤其是以 IP 封包為基礎(chǔ)的 LAN 技術(shù)已經(jīng)很成熟,,再加上以太網(wǎng)絡(luò)的速度越來越快, 所以就有廠商將 SAN 的連接方式改為利用 IP 技術(shù)來處理,。然后再透過一些標(biāo)準(zhǔn)的訂定,,最后就得到 Internet SCSI (iSCSI) 這玩意的產(chǎn)生啦!iSCSI 主要是透過 TCP/IP 的技術(shù),,將儲存設(shè)備端透過 iSCSI target (iSCSI 目標(biāo)) 功能,,做成可以提供磁盤的服務(wù)器端,再透過 iSCSI initiator (iSCSI 初始化用戶) 功能,,做成能夠掛載使用 iSCSI
target 的客戶端,,如此便能透過 iSCSI 協(xié)議來進(jìn)行磁盤的應(yīng)用了 (注3),。
也就是說,iSCSI 這個架構(gòu)主要將儲存裝置與使用的主機(jī)分為兩個部分,,分別是:
- iSCSI target:就是儲存設(shè)備端,,存放磁盤或 RAID 的設(shè)備,目前也能夠?qū)?Linux 主機(jī)仿真成 iSCSI target 了,!目的在提供其他主機(jī)使用的『磁盤』,;
- iSCSI initiator:就是能夠使用 target 的客戶端,,通常是服務(wù)器,。 也就是說,想要連接到 iSCSI target 的服務(wù)器,,也必須要安裝 iSCSI initiator 的相關(guān)功能后才能夠使用 iSCSI target 提供的磁盤就是了,。
如下圖所示,iSCSI 是在 TCP/IP 上面所開發(fā)出來的一套應(yīng)用,,所以得要有網(wǎng)絡(luò)才行?。?/p>
圖 18.1-1,、iSCSI 與 TCP/IP 相關(guān)性
18.1.3
各組件相關(guān)性
由上面的說明中,,我們可以知道一部服務(wù)器如何取得磁盤或者是文件系統(tǒng)來利用呢?基本上就是:
- 直接存取 (direct-attached storage):例如本機(jī)上面的磁盤,,就是直接存取設(shè)備,;
- 透過儲存局域網(wǎng)絡(luò) (SAN):來自區(qū)網(wǎng)內(nèi)的其他儲存設(shè)備提供的磁盤;
- 網(wǎng)絡(luò)文件系統(tǒng) (NAS):來自 NAS 提供的文件系統(tǒng),,只能立即使用,,不可進(jìn)行格式化。
這三個東西與服務(wù)器主機(jī)能用的文件系統(tǒng)之間可以用維基百科的圖示來展示:
圖 18.1-2,、服務(wù)器取得文件系統(tǒng)的三個來源 (數(shù)據(jù)源為注1)
從上圖中,,我們可以發(fā)現(xiàn)在一般的主機(jī)環(huán)境下,磁盤裝置 (SATA, SAS, FC) 可以透過主機(jī)的接口 (DAS) 來直接進(jìn)行文件系統(tǒng)的建立 (mkfs 進(jìn)行格式化),,如果想要使用外部的磁盤,,那可以透過 SAN (內(nèi)含多個磁盤的設(shè)備),然后透過 iSCSI 等接口來聯(lián)機(jī),, 當(dāng)然,,還是得要進(jìn)行格式化等動作 (假設(shè)這個 SAN 尚未被使用時)。最后,,如果是 NAS 的條件下,,那么 NAS 必須要先透過自己的操作系統(tǒng)將磁盤裝置進(jìn)行文件系統(tǒng)的建立后,再以 NFS/CIFS 等方式來提供其他主機(jī)掛載使用,。
接下來,,網(wǎng)絡(luò)服務(wù)器,、客戶端系統(tǒng)、NAS 與 SAN 的角色在區(qū)網(wǎng)里面又是如何呢,?我們依舊使用維基百科的圖示來說明一下 (DAS 是每部主機(jī)內(nèi)部的磁盤,,即底下圖標(biāo)中的圓柱體):
圖 18.1-3、各組件之間的相關(guān)性 (數(shù)據(jù)源為注1)
NAS 可以使用自己的磁盤,,也能夠透過光纖或以太網(wǎng)絡(luò)取得 SAN 所提供的磁盤來制作成為網(wǎng)絡(luò)文件系統(tǒng),,提供其他人的使用。 Server 可以透過 NFS/CIFS 等方式取得 NAS 的文件系統(tǒng),,當(dāng)然也能夠直接存取 SAN 的磁盤,。客戶端主要則是透過網(wǎng)絡(luò)文件系統(tǒng),, 并且直接使用 Server 提供的網(wǎng)絡(luò)資源 (如 FTP, WWW, mail 等等),。
18.2
iSCSI target 的設(shè)定
能夠完成 iSCSI target/initiator 設(shè)定的項(xiàng)目非常多 (注4),鳥哥找的到的就有底下這幾個:
由于被我們 CentOS 6.x 官方直接使用的是 tgt 這個軟件,,因此底下我們會使用 tgt 來介紹整個 iSCSI target 的設(shè)定喔,!
18.2.1
所需軟件與軟件結(jié)構(gòu)
CentOS 將 tgt 的軟件名稱定義為 scsi-target-utils ,因此你得要使用 yum 去安裝他才行,。至于用來作為 initiator 的軟件則是使用 linux-iscsi 的項(xiàng)目,,該項(xiàng)目所提供的軟件名稱則為 iscsi-initiator-utils 。所以,,總的來說,,你需要的軟件有:
- scsi-target-utils:用來將 Linux 系統(tǒng)仿真成為 iSCSI target 的功能;
- iscsi-initiator-utils:掛載來自 target 的磁盤到 Linux 本機(jī)上,。
那么 scsi-target-utils 主要提供哪些檔案呢,?基本上有底下幾個比較重要需要注意的:
- /etc/tgt/targets.conf:主要配置文件,設(shè)定要分享的磁盤格式與哪幾顆,;
- /usr/sbin/tgt-admin:在線查詢,、刪除 target 等功能的設(shè)定工具;
- /usr/sbin/tgt-setup-lun:建立 target 以及設(shè)定分享的磁盤與可使用的客戶端等工具軟件,。
- /usr/sbin/tgtadm:手動直接管理的管理員工具 (可使用配置文件取代),;
- /usr/sbin/tgtd:主要提供 iSCSI target 服務(wù)的主程序;
- /usr/sbin/tgtimg:建置預(yù)計分享的映像文件裝置的工具 (以映像文件仿真磁盤),;
其實(shí) CentOS 已經(jīng)將很多功能都設(shè)定好了,,因此我們只要修訂配置文件,然后啟動 tgtd 這個服務(wù)就可以啰,! 接下來,,就讓我們實(shí)際來玩一玩 iSCSI target 的設(shè)定吧!
18.2.2
target 的實(shí)際設(shè)定
從上面的分析來看,,iSCSI 就是透過一個網(wǎng)絡(luò)接口,,將既有的磁盤給分享出去就是了,。那么有哪些類型的磁盤可以分享呢? 這包括:
- 使用 dd 指令所建立的大型檔案可供仿真為磁盤 (無須預(yù)先格式化),;
- 使用單一分割槽 (partition) 分享為磁盤,;
- 使用單一完整的磁盤 (無須預(yù)先分割);
- 使用磁盤陣列分享 (其實(shí)與單一磁盤相同方式),;
- 使用軟件磁盤陣列 (software raid) 分享成單一磁盤,;
- 使用 LVM 的 LV 裝置分享為磁盤。
其實(shí)沒有那么復(fù)雜,,我們大概知道可以透過 (1)大型檔案,; (2)單一分割槽; (3)單一裝置 (包括磁盤,、數(shù)組,、軟件磁盤陣列,、LVM 的 LV 裝置文件名等等) 來進(jìn)行分享,。在本小節(jié)當(dāng)中,我們將透過新的分割產(chǎn)生新的沒有用到的分割槽,、LVM 邏輯滾動條,、大型檔案等三個咚咚來進(jìn)行分享。既然如此,,那就得要先來搞定這些咚咚啰,! 要注意喔,等一下我們要分享出去的數(shù)據(jù),,最好不要被使用,,也最好不要開機(jī)就被掛載 (/etc/fstab 當(dāng)中沒有存在記錄的意思)。 那么就來玩玩看啰,!
既然 iSCSI 要分享的是磁盤,,那么我們得要準(zhǔn)備好啊,!目前預(yù)計準(zhǔn)備的磁盤為:
- 建立一個名為 /srv/iscsi/disk1.img 的 500MB 檔案,;
- 使用 /dev/sda10 提供 2GB 作為分享 (從第一章到目前為止的分割數(shù));
- 使用 /dev/server/iscsi01 的 2GB LV 作為分享 (再加入 5GB /dev/sda11 到 server VG 中),。
實(shí)際處理的方式如下:
# 1. 建立大型檔案:
[root@www ~]# mkdir /srv/iscsi
[root@www ~]# dd if=/dev/zero of=/srv/iscsi/disk1.img bs=1M count=500
[root@www ~]# chcon -Rv -t tgtd_var_lib_t /srv/iscsi/
[root@www ~]# ls -lh /srv/iscsi/disk1.img
-rw-r--r--. 1 root root 500M Aug 2 16:22 /srv/iscsi/disk1.img <==容量對的,!
# 2. 建立實(shí)際的 partition 分割:
[root@www ~]# fdisk /dev/sda <==實(shí)際的分割方式自己處理吧!
[root@www ~]# partprobe <==某些情況下得 reboot 喔,!
[root@www ~]# fdisk -l
Device Boot Start End Blocks Id System
/dev/sda10 2202 2463 2104483+ 83 Linux
/dev/sda11 2464 3117 5253223+ 8e Linux LVM
# 只有輸出 /dev/sda{10,11} 信息,,其他的都省略了。注意看容量,,上述容量單位 KB
[root@www ~]# swapon -s; mount | grep 'sda1'
# 自己測試一下 /dev/sda{10,11} 不能夠被使用喔,!若有被使用,,請 umount 或 swapoff
# 3. 建立 LV 裝置 :
[root@www ~]# pvcreate /dev/sda11
[root@www ~]# vgextend server /dev/sda11
[root@www ~]# lvcreate -L 2G -n iscsi01 server
[root@www ~]# lvscan
ACTIVE '/dev/server/myhome' [6.88 GiB] inherit
ACTIVE '/dev/server/iscsi01' [2.00 GB] inherit
|
-
規(guī)劃分享的 iSCSI target 檔名
iSCSI 有一套自己分享 target 檔名的定義,基本上,,藉由 iSCSI 分享出來的 target 檔名都是以 iqn 為開頭,,意思是:『iSCSI Qualified Name (iSCSI 合格名稱)』的意思(注5)。那么在 iqn
后面要接啥檔名呢,?通常是這樣的:
iqn.yyyy-mm.<reversed domain name>:identifier
iqn.年年-月.單位網(wǎng)域名的反轉(zhuǎn)寫法 :這個分享的target名稱
|
鳥哥做這個測試的時間是 2011 年 8 月份,,然后鳥哥的機(jī)器是 www.centos.vbird ,反轉(zhuǎn)網(wǎng)域?qū)懛?vbird.centos,, 然后,,鳥哥想要的 iSCSI target 名稱是 vbirddisk ,那么就可以這樣寫:
- iqn.2011-08.vbird.centos:vbirddisk
另外,,就如同一般外接式儲存裝置 (target 名稱) 可以具有多個磁盤一樣,,我們的 target 也能夠擁有數(shù)個磁盤裝置的。 每個在同一個 target 上頭的磁盤我們可以將它定義為邏輯單位編號 (Logical Unit Number, LUN),。我們的 iSCSI initiator 就是跟 target
協(xié)調(diào)后才取得 LUN 的存取權(quán)就是了 (注5),。在鳥哥的這個簡單案例中,最終的結(jié)果,,我們會有一個 target ,,在這個 target 當(dāng)中可以使用三個 LUN 的磁盤。
-
設(shè)定 tgt 的配置文件 /etc/tgt/targets.conf
接下來我們要開始來修改配置文件了,?;旧希渲梦募褪切薷?/etc/tgt/targets.conf 啦,。這個檔案的內(nèi)容可以改得很簡單,, 最重要的就是設(shè)定前一點(diǎn)規(guī)定的 iqn 名稱,以及該名稱所對應(yīng)的裝置,,然后再給予一些可能會用到的參數(shù)而已,。 多說無益,讓我們實(shí)際來實(shí)作看看:
[root@www ~]# vim /etc/tgt/targets.conf
# 此檔案的語法如下:
<target iqn.相關(guān)裝置的target名稱>
backing-store /你的/虛擬設(shè)備/完整檔名-1
backing-store /你的/虛擬設(shè)備/完整檔名-2
</target>
<target iqn.2011-08.vbird.centos:vbirddisk>
backing-store /srv/iscsi/disk1.img <==LUN 1 (LUN 的編號通常照順序)
backing-store /dev/sda10 <==LUN 2
backing-store /dev/server/iscsi01 <==LUN 3
</target>
|
事實(shí)上,,除了 backing-store 之外,,在這個配置文件當(dāng)中還有一些比較特別的參數(shù)可以討論看看 (man tgt-admin):
- backing-store (虛擬的裝置), direct-store (實(shí)際的裝置): 設(shè)定裝置時,如果你的整顆磁盤是全部被拿來當(dāng) iSCSI 分享之用,,那么才能夠使用 direct-store ,。不過,根據(jù)網(wǎng)絡(luò)上的其他文件,, 似乎說明這個設(shè)定值有點(diǎn)危險的樣子,。所以,基本上還是建議單純使用模擬的 backing-store
較佳。例如鳥哥的簡單案例中,,就通通使用 backing-store 而已,。
- initiator-address (用戶端地址): 如果你想要限制能夠使用這個 target 的客戶端來源,才需要填寫這個設(shè)定值,?;旧希挥迷O(shè)定它 (代表所有人都能使用的意思),, 因?yàn)槲覀兒髞頃褂?iptables 來規(guī)范可以聯(lián)機(jī)的客戶端嘛,!
- incominguser (用戶賬號密碼設(shè)定): 如果除了來源 IP 的限制之外,你還想要讓使用者輸入賬密才能使用你的 iSCSI target 的話,,那么就加用這個設(shè)定項(xiàng)目,。 此設(shè)定后面接兩個參數(shù),分別是賬號與密碼啰,。
- write-cache [off|on] (是否使用快取): 在預(yù)設(shè)的情況下,,tgtd 會使用快取來增快速度。不過,,這樣可能會有遺失數(shù)據(jù)的風(fēng)險,。所以,如果你的數(shù)據(jù)比較重要的話,, 或許不要使用快取,,直接存取裝置會比較妥當(dāng)一些,。
上面的設(shè)定值要怎么用呢,?現(xiàn)在,假設(shè)你的環(huán)境中,,僅允許 192.168.100.0/24 這個網(wǎng)段可以存取 iSCSI target,,而且存取時需要帳密分別為 vbirduser, vbirdpasswd ,此外,,不要使用快取,,那么原本的配置文件之外,還得要加上這樣的參數(shù)才行 (基本上,,使用上述的設(shè)定即可,,底下的設(shè)定是多加測試用的,不需要填入你的設(shè)定中),。
[root@www ~]# vim /etc/tgt/targets.conf
<target iqn.2011-04.vbird.centos:vbirddisk>
backing-store /home/iscsi/disk1.img
backing-store /dev/sda7
backing-store /dev/server/iscsi01
initiator-address 192.168.100.0/24
incominguser vbirduser vbirdpasswd
write-cache off
</target>
|
-
啟動 iSCSI target 以及觀察相關(guān)端口與磁盤信息
再來則是啟動,、開機(jī)啟動,以及觀察 iSCSI target 所啟動的埠口啰:
[root@www ~]# /etc/init.d/tgtd start
[root@www ~]# chkconfig tgtd on
[root@www ~]# netstat -tlunp | grep tgt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:3260 0.0.0.0:* LISTEN 26944/tgtd
tcp 0 0 :::3260 :::* LISTEN 26944/tgtd
# 重點(diǎn)就是那個 3260 TCP 封包啦,!等一下的防火墻務(wù)必要開放這個埠口,。
# 觀察一下我們 target 相關(guān)信息,以及提供的 LUN 數(shù)據(jù)內(nèi)容:
[root@www ~]# tgt-admin --show
Target 1: iqn.2011-08.vbird.centos:vbirddisk <==就是我們的 target
System information:
Driver: iscsi
State: ready
I_T nexus information:
LUN information:
LUN: 0
Type: controller <==這是個控制器,,并非可以用的 LUN 喔,!
....(中間省略)....
LUN: 1
Type: disk <==第一個 LUN,,是磁盤 (disk) 喔!
SCSI ID: IET 00010001
SCSI SN: beaf11
Size: 2155 MB <==容量有這么大,!
Online: Yes
Removable media: No
Backing store type: rdwr
Backing store path: /dev/sda10 <==磁盤所在的實(shí)際文件名
LUN: 2
Type: disk
SCSI ID: IET 00010002
SCSI SN: beaf12
Size: 2147 MB
Online: Yes
Removable media: No
Backing store type: rdwr
Backing store path: /dev/server/iscsi01
LUN: 3
Type: disk
SCSI ID: IET 00010003
SCSI SN: beaf13
Size: 524 MB
Online: Yes
Removable media: No
Backing store type: rdwr
Backing store path: /srv/iscsi/disk1.img
Account information:
vbirduser <==額外的帳戶信息
ACL information:
192.168.100.0/24 <==額外的來源 IP 限制
|
請將上面的信息對照一下我們的配置文件呦,!看看有沒有錯誤就是了!尤其注意每個 LUN 的容量,、實(shí)際磁盤路徑,! 那個項(xiàng)目不能錯誤就是了。(照理說 LUN 的數(shù)字應(yīng)該與 backing-store 設(shè)定的順序有關(guān),,不過,,在鳥哥的測試中, 出現(xiàn)的順序并不相同,!因此,,還是需要使用 tgt-admin --show 去查閱查閱才好!)
不論你有沒有使用 initiator-address 在 targets.conf 配置文件中,,iSCSI target 就是使用 TCP/IP 傳輸數(shù)據(jù)的,, 所以你還是得要在防火墻內(nèi)設(shè)定可以聯(lián)機(jī)的客戶端才行!既然 iSCSI 僅開啟 3260 埠口,,那么我們就這么進(jìn)行即可:
[root@www ~]# vim /usr/local/virus/iptables/iptables.allow
iptables -A INPUT -p tcp -s 192.168.100.0/24 --dport 3260 -j ACCEPT
[root@www ~]# /usr/local/virus/iptables/iptables.rule
[root@www ~]# iptables-save | grep 3260
-A INPUT -s 192.168.100.0/24 -p tcp -m tcp --dport 3260 -j ACCEPT
# 最終要看到上述的輸出字樣才是 OK 的呦,!若有其他用戶需要聯(lián)機(jī),
# 自行復(fù)制 iptables.allow 內(nèi)的語法,,修改來源端即可,。
|
18.3
iSCSI initiator 的設(shè)定
談完了 target 的設(shè)定,并且觀察到相關(guān) target 的 LUN 數(shù)據(jù)后,,接下來就是要來掛載使用啰,。使用的方法很簡單, 只不過我們得要安裝額外的軟件來取得 target 的 LUN 使用權(quán)就是了,。
18.3.1
所需軟件與軟件結(jié)構(gòu)
在前一小節(jié)就談過了,,要設(shè)定 iSCSI initiator 必須要安裝 iscsi-initiator-utils 才行。安裝的方法請使用 yum 去處理,,這里不再多講話,。那么這個軟件的結(jié)構(gòu)是如何呢?
- /etc/iscsi/iscsid.conf:主要的配置文件,,用來連結(jié)到 iSCSI target 的設(shè)定,;
- /sbin/iscsid:啟動 iSCSI initiator 的主要服務(wù)程序;
- /sbin/iscsiadm:用來管理 iSCSI initiator 的主要設(shè)定程序,;
- /etc/init.d/iscsid:讓本機(jī)模擬成為 iSCSI initiater 的主要服務(wù),;
- /etc/init.d/iscsi:在本機(jī)成為 iSCSI initiator 之后,啟動此腳本,讓我們可以登入 iSCSI target,。所以 iscsid 先啟動后,,才能啟動這個服務(wù)。為了防呆,,所以 /etc/init.d/iscsi 已經(jīng)寫了一個啟動指令,, 啟動 iscsi 前尚未啟動 iscsid
,則會先呼叫 iscsid 才繼續(xù)處理 iscsi 喔,!
老實(shí)說,,因?yàn)?/etc/init.d/iscsi 腳本已經(jīng)包含了啟動 /etc/init.d/iscsid 的步驟在里面,所以,,理論上,, 你只要啟動 iscsi 就好啦!此外,,那個 iscsid.conf 里面大概只要設(shè)定好登入 target 時的帳密即可,, 其他的 target 搜尋、設(shè)定,、取得的方法都直接使用 iscsiadm 這個指令來完成,。由于 iscsiadm 偵測到的結(jié)果會直接寫入 /var/lib/iscsi/nodes/ 當(dāng)中,因此只要啟動 /etc/init.d/iscsi 就能夠在下次開機(jī)時,,自動的連結(jié)到正確的
target 啰,。 那么就讓我們來處理處理整個過程吧 (注6)!
18.3.2
initiator 的實(shí)際設(shè)定
首先,,我們得要知道 target 提供了啥咚咚啊,,因此,理論上,,不論是 target 還是 initiator 都應(yīng)該是要我們管理的機(jī)器才對,。 而現(xiàn)在我們知道 target 其實(shí)有設(shè)定賬號與密碼的,所以底下我們就得要修改一下 iscsid.conf 的內(nèi)容才行,。
-
修改 /etc/iscsi/iscsid.conf 內(nèi)容,并啟動 iscsi
這個檔案的修改很簡單,,因?yàn)槔锩娴膮?shù)大多已經(jīng)預(yù)設(shè)做的不錯了,,所以只要填寫 target 登入時所需要的帳密即可。 修改的地方有兩個,,一個是偵測時 (discovery) 可能會用到的帳密,,一個是聯(lián)機(jī)時 (node) 會用到的帳密:
[root@clientlinux ~]# vim /etc/iscsi/iscsid.conf
node.session.auth.username = vbirduser <==在 target 時設(shè)定的
node.session.auth.password = vbirdpasswd <==約在 53, 54 行
discovery.sendtargets.auth.username = vbirduser <==約在 67, 68 行
discovery.sendtargets.auth.password = vbirdpasswd
[root@clientlinux ~]# chkconfig iscsid on
[root@clientlinux ~]# chkconfig iscsi on
|
由于我們尚未與 target 聯(lián)機(jī),所以 iscsi 并無法讓我們順利啟動的,!因此上面只要 chkconfig 即可,,不需要啟動他。 要開始來偵測 target 與寫入系統(tǒng)信息啰。全部使用 iscsiadm 這個指令就可以完成所有動作了,。
-
偵測 192.168.100.254 這部 target 的相關(guān)數(shù)據(jù)
雖然我們已經(jīng)知道 target 的名字,,不過,這里假設(shè)還不知道啦,!因?yàn)橛锌赡苣囊惶炷愕墓居绣X了,, 會去買實(shí)體的 iSCSI 數(shù)組嘛!所以這里還是講完整的偵測過程好了,!你可以這樣使用:
[root@clientlinux ~]# iscsiadm -m discovery -t sendtargets -p IP:port
選項(xiàng)與參數(shù):
-m discovery :使用偵測的方式進(jìn)行 iscsiadmin 指令功能,;
-t sendtargets :透過 iscsi 的協(xié)議,偵測后面的設(shè)備所擁有的 target 數(shù)據(jù)
-p IP:port :就是那部 iscsi 設(shè)備的 IP 與埠口,,不寫埠口預(yù)設(shè)是 3260 啰,!
范例:偵測 192.168.100.254 這部 iSCSI 設(shè)備的相關(guān)數(shù)據(jù)
[root@clientlinux ~]# iscsiadm -m discovery -t sendtargets -p 192.168.100.254
192.168.100.254:3260,1 iqn.2011-08.vbird.centos:vbirddisk
# 192.168.100.254:3260,1 :在此 IP, 端口上面的 target 號碼,本例中為 target1
# iqn.2011-08.vbird.centos:vbirddisk :就是我們的 target 名稱??!
[root@clientlinux ~]# ll -R /var/lib/iscsi/nodes/
/var/lib/iscsi/nodes/iqn.2011-08.vbird.centos:vbirddisk
/var/lib/iscsi/nodes/iqn.2011-08.vbird.centos:vbirddisk/192.168.100.254,3260,1
# 上面的特殊字體部分,就是我們利用 iscsiadm 偵測到的 target 結(jié)果,!
|
現(xiàn)在我們知道了 target 的名稱,,同時將所有偵測到的信息通通寫入到上述 /var/lib/iscsi/nodes/iqn.2011-08.vbird.centos:vbirddisk/192.168.100.254,3260,1 目錄內(nèi)的 default 檔案中, 若信息有修訂過的話,,那你可以到這個檔案內(nèi)修改,,也可以透過 iscsiadm 的 update 功能處理相關(guān)參數(shù)的。
-
開始進(jìn)行聯(lián)機(jī) iSCSI target
因?yàn)槲覀兊?initiator 可能會連接多部的 target 設(shè)備,,因此,,我們得先要瞧瞧目前系統(tǒng)上面?zhèn)蓽y到的 target 有幾部, 然后再找到我們要的那部 target 來進(jìn)行登入的作業(yè),。不過,,如果你想要將所有偵測到的 target 全部都登入的話, 那么整個步驟可以再簡化:
范例:根據(jù)前一個步驟偵測到的資料,,啟動全部的 target
[root@clientlinux ~]# /etc/init.d/iscsi restart
正在停止 iscsi: [ 確定 ]
正在激活 iscsi: [ 確定 ]
# 將系統(tǒng)里面全部的 target 通通以 /var/lib/iscs/nodes/ 內(nèi)的設(shè)定登入
# 上面的特殊字體比較需要注意啦,!你只要做到這里即可,底下的瞧瞧就好,。
范例:顯示出目前系統(tǒng)上面所有的 target 數(shù)據(jù):
[root@clientlinux ~]# iscsiadm -m node
192.168.100.254:3260,1 iqn.2011-08.vbird.centos:vbirddisk
選項(xiàng)與參數(shù):
-m node:找出目前本機(jī)上面所有偵測到的 target 信息,,可能并未登入喔
范例:僅登入某部 target ,不要重新啟動 iscsi 服務(wù)
[root@clientlinux ~]# iscsiadm -m node -T target名稱 --login
選項(xiàng)與參數(shù):
-T target名稱:僅使用后面接的那部 target ,,target 名稱可用上個指令查到,!
--login :就是登入啊,!
[root@clientlinux ~]# iscsiadm -m node -T iqn.2011-08.vbird.centos:vbirddisk \
> --login
# 這次進(jìn)行會出現(xiàn)錯誤,,是因?yàn)槲覀円呀?jīng)登入了,,不可重復(fù)登入喔!
|
接下來呢,?呵呵,!很棒的是,我們要來開始處理這個 iSCSI 的磁盤了喔,!怎么處理,?瞧一瞧!
[root@clientlinux ~]# fdisk -l
Disk /dev/sda: 8589 MB, 8589934592 bytes <==這是原有的那顆磁盤,,略過不看
....(中間省略)....
Disk /dev/sdc: 2147 MB, 2147483648 bytes
67 heads, 62 sectors/track, 1009 cylinders
Units = cylinders of 4154 * 512 = 2126848 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
Disk /dev/sdb: 2154 MB, 2154991104 bytes
67 heads, 62 sectors/track, 1013 cylinders
Units = cylinders of 4154 * 512 = 2126848 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
Disk /dev/sdd: 524 MB, 524288000 bytes
17 heads, 59 sectors/track, 1020 cylinders
Units = cylinders of 1003 * 512 = 513536 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
|
你會發(fā)現(xiàn)主機(jī)上面多出了三個新的磁盤,,容量與剛剛在 192.168.100.254 那部 iSCSI target 上面分享的 LUN 一樣大。 那這三顆磁盤可以怎么用,?你想怎么用就怎么用?。≈皇?,唯一要注意的,,就是 iSCSI target 每次都要比 iSCSI initiator 這部主機(jī)還要早開機(jī),否則我們的 initiator 恐怕就會出問題,。
-
更新/刪除/新增 target 數(shù)據(jù)的方法
如果你的 iSCSI target 可能因?yàn)槟承┰虮荒米吡?,或者是已?jīng)不存在于你的區(qū)網(wǎng)中,或者是要送修了~ 這個時候你的 iSCSI initiator 總是得要關(guān)閉吧,!但是,,又不能全部關(guān)掉 (/etc/init.d/iscsi stop), 因?yàn)檫€有其他的 iSCSI target 在使用,。這個時候該如何取消不要的 target 呢,?很簡單!流程如下:
[root@clientlinux ~]# iscsiadm -m node -T targetname --logout
[root@clientlinux ~]# iscsiadm -m node -o [delete|new|update] -T targetname
選項(xiàng)與參數(shù):
--logout :就是注銷 target,,但是并沒有刪除 /var/lib/iscsi/nodes/ 內(nèi)的數(shù)據(jù)
-o delete:刪除后面接的那部 target 鏈接信息 (/var/lib/iscsi/nodes/*)
-o update:更新相關(guān)的信息
-o new :增加一個新的 target 信息,。
范例:關(guān)閉來自鳥哥的 iSCSI target 的數(shù)據(jù),并且移除鏈接
[root@clientlinux ~]# iscsiadm -m node <==還是先秀出相關(guān)的 target iqn 名稱
192.168.100.254:3260,1 iqn.2011-08.vbird.centos:vbirddisk
[root@clientlinux ~]# iscsiadm -m node -T iqn.2011-08.vbird.centos:vbirddisk \
> --logout
Logging out of session [sid: 1, target: iqn.2011-08.vbird.centos:vbirddisk,
portal: 192.168.100.254,3260]
Logout of [sid: 1, target: iqn.2011-08.vbird.centos:vbirddisk, portal:
192.168.100.254,3260] successful.
# 這個時候的 target 連結(jié)還是存在的,,雖然注銷你還是看的到,!
[root@clientlinux ~]# iscsiadm -m node -o delete \
> -T iqn.2011-08.vbird.centos:vbirddisk
[root@clientlinux ~]# iscsiadm -m node
iscsiadm: no records found! <==嘿嘿!不存在這個 target 了~
[root@clientlinux ~]# /etc/init.d/iscsi restart
# 你會發(fā)現(xiàn)唔,!怎么 target 的信息不見了,!這樣瞭了乎!
|
如果一切都沒有問題,,現(xiàn)在,請回到 discovery 的過程,,重新再將 iSCSI target 偵測一次,,再重新啟動 initiator 來取得那三個磁盤吧,!我們要來測試與利用該磁盤啰!
18.3.3
一個測試范例
到底 iSCSI 可以怎么用,?我們就來玩一玩,。假設(shè):
- 你剛剛?cè)缤B哥的整個運(yùn)作流程,已經(jīng)在 initiator 上面將 target 數(shù)據(jù)清除了,;
- 現(xiàn)在我們只知道 iSCSI target 的 IP 是 192.168.100.254 ,,而需要的帳密是 vbirduser, vbirdpasswd;
- 帳密信息你已經(jīng)寫入 /etc/iscsi/iscsid.conf 里面了,;
- 假設(shè)我們預(yù)計要將 target 的磁盤拿來當(dāng)作 LVM 內(nèi)的 PV 使用,;
- 并且將所有的磁盤容量都給一個名為 /dev/iscsi/disk 的 LV 使用;
- 這個 LV 會被格式化為 ext4 ,,且掛載在 /data/iscsi 內(nèi),。
那么,整體的流程是:
# 1. 啟動 iscsi ,,并且開始偵測及登入 192.168.100.254 上面的 target 名稱
[root@clientlinux ~]# /etc/init.d/iscsi restart
[root@clientlinux ~]# chkconfig iscsi on
[root@clientlinux ~]# iscsiadm -m discovery -t sendtargets -p 192.168.100.254
[root@clientlinux ~]# /etc/init.d/iscsi restart
[root@clientlinux ~]# iscsiadm -m node
192.168.100.254:3260,1 iqn.2011-08.vbird.centos:vbirddisk
# 2. 開始處理 LVM 的流程,,由 PV, VG, LV 依序處理喔!
[root@clientlinux ~]# fdisk -l <==出現(xiàn)的資料中你會發(fā)現(xiàn) /dev/sd[b-d]
[root@clientlinux ~]# pvcreate /dev/sd{b,c,d} <==建立 PV 去,!
Wiping swap signature on /dev/sdb
Physical volume "/dev/sdb" successfully created
Physical volume "/dev/sdc" successfully created
Physical volume "/dev/sdd" successfully created
[root@clientlinux ~]# vgcreate iscsi /dev/sd{b,c,d} <==建立 VG 去,!
Volume group "iscsi" successfully created
[root@clientlinux ~]# vgdisplay <==要找到可用的容量啰!
--- Volume group ---
VG Name iscsi
....(中間省略)....
Act PV 3
VG Size 4.48 GiB
PE Size 4.00 MiB
Total PE 1148 <==就是這玩意兒,!共 1148 個,!
Alloc PE / Size 0 / 0
Free PE / Size 1148 / 4.48 GiB
....(底下省略)....
[root@clientlinux ~]# lvcreate -l 1148 -n disk iscsi
Logical volume "disk" created
[root@clientlinux ~]# lvdisplay
--- Logical volume ---
LV Name /dev/iscsi/disk
VG Name iscsi
LV UUID opR64B-Zeoe-C58n-ipN2-em3O-nUYs-wjEZDP
LV Write Access read/write
LV Status available
# open 0
LV Size 4.48 GiB <==注意一下容量對不對啊,!
Current LE 1148
Segments 3
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:2
# 3. 開始格式化,,并且進(jìn)行開機(jī)自動掛載的動作!
[root@clientlinux ~]# mkfs -t ext4 /dev/iscsi/disk
[root@clientlinux ~]# mkdir -p /data/iscsi
[root@clientlinux ~]# vim /etc/fstab
/dev/iscsi/disk /data/iscsi ext4 defaults,_netdev 1 2
[root@clientlinux ~]# mount -a
[root@clientlinux ~]# df -Th
文件系統(tǒng) 類型 Size Used Avail Use% 掛載點(diǎn)
/dev/mapper/iscsi-disk
ext4 4.5G 137M 4.1G 4% /data/iscsi
|
比較特殊的是 /etc/fstab 里面的第四個字段,,加上 _netdev (最前面是底線) 指的是,,因?yàn)檫@個 partition 位于網(wǎng)絡(luò)上, 所以得要網(wǎng)絡(luò)開機(jī)啟動完成后才會掛載的意思?,F(xiàn)在,,請讓你的 iSCSI initiator 重新啟動看看, 試看看重新啟動系統(tǒng)后,,你的 /data/iscsi 是否還存在呢,? ^_^
然后,讓我們切回 iSCSI target 那部主機(jī),,研究看看到底誰有使用我們的 target 呢,?
[root@www ~]# tgt-admin --show
Target 1: iqn.2011-08.vbird.centos:vbirddisk
System information:
Driver: iscsi
State: ready
I_T nexus information:
I_T nexus: 2
Initiator: iqn.1994-05.com.redhat:71cf137f58f2 <==不是很喜歡的名字!
Connection: 0
IP Address: 192.168.100.10 <==就是這里聯(lián)機(jī)進(jìn)來啰,!
LUN information:
....(后面省略)....
|
明明是 initiator 怎么會是那個 redhat 的名字呢,?如果你不介意那就算了,,如果挺介意的話,那么修改 initiator 那部主機(jī)的 /etc/iscsi/initiatorname.iscsi 這個檔案的內(nèi)容,,將它變成類似如下的模樣即可:
Tips:
不過,,這個動作最好在使用 target 的 LUN 之前就進(jìn)行,否則,,當(dāng)你使用了 LUN 的磁盤后,,再修改這個檔案后, 你的磁盤文件名可能會改變,。例如鳥哥的案例中,,改過 initiatorname 之后,原本的磁盤文件名竟變成 /dev/sd[efg] 了,!害鳥哥的 LV 就不能再度使用了... |
|
# 1. 先在 iSCSI initiator 上面進(jìn)行如下動作:
[root@clientlinux ~]# vim /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.2011-08.vbird.centos:initiator
[root@clientlinux ~]# /etc/init.d/iscsi restart
# 2. 在 iSCSI target 上面就可以發(fā)現(xiàn)如下的數(shù)據(jù)修訂了:
[root@www ~]# tgt-admin --show
Target 1: iqn.2011-08.vbird.centos:vbirddisk
System information:
Driver: iscsi
State: ready
I_T nexus information:
I_T nexus: 5
Initiator: iqn.2011-08.vbird.centos:initiator
Connection: 0
IP Address: 192.168.100.10
....(后面省略)....
|
18.4
重點(diǎn)回顧
- 如果需要大容量的磁盤,,通常會使用 RAID 磁盤陣列的架構(gòu);
- 取得外部磁盤容量的作法,,主要有 NAT 及 SAN 兩大類的方式,;
- NAT 可以想成是一部已經(jīng)客制化的服務(wù)器,主要提供 NFS, SMB 等網(wǎng)絡(luò)文件系統(tǒng),;
- SAN 則是一種外接是儲存設(shè)備,,可以透過 SAN 取得外部的磁盤裝置 (非文件系統(tǒng));
- SAN 早期使用光纖信道,,由于以太網(wǎng)絡(luò)的發(fā)展,,近來使用 iSCSI 協(xié)議在 TCP/IP 架構(gòu)上面實(shí)作;
- iSCSI 協(xié)議主要分為 iSCSI target (提供磁盤裝置者) 及 iSCSI initiator (存取 target 磁盤),;
- iSCSI target 主要使用 scsi-target-utils 軟件達(dá)成主要利用 tgt-admin 及 tgtadm 指令完成:
- 一般定義 target 名稱為:iqn.yyyy-mm.<reversed domain name>:identifier
- 一部 target 里面可分享多個磁盤,,每個磁盤都是一個 LUN;
- iSCSI initiator 主要透過 iscsi-initiator-utils 軟件達(dá)成鏈接到 target 的任務(wù),;
- iscsi-initiator-utils 主要提供 iscsiadm 來完成所有的動作,。
18.5
本章習(xí)題
- 由于網(wǎng)絡(luò)驅(qū)動器機(jī)的運(yùn)作是需要很好的網(wǎng)絡(luò)質(zhì)量才行,我們這里僅在測試,,因此,,請將 client 端的 initiator 關(guān)閉, 否則,,未來開機(jī)都會怪怪的,!(chkconfig iscsi off; vim /etc/fstab 等等的動作!)
18.6
參考數(shù)據(jù)與延伸閱讀
|