學習iSCSI
談到iSCSI,我能想到的就是存儲分爲NAS和SAN,NAS與SAN都是在DAS的基礎上發展起來的,是新型數據存儲模式中的兩個主要發展方向。
網絡存儲技術(Network Storage Technologies) 網絡存儲技術是基於數據存儲的一種通用網絡術語。網絡存儲結構大致分爲三種:
直連式存儲(DAS:Direct Attached Storage)、
網絡連接式存儲(NAS:Network Attached Storage)
存儲網絡(SAN:Storage Area Network)。
- 直連式存儲(DAS)
是一種直接與主機系統相連接的存儲設備,如作爲服務器的計算機內部硬件驅動。
將存儲設備通過SCSI 接口或光纖通道直接連接到一臺計算機上。其缺點是服務器成爲網絡瓶頸,存儲容量不易擴充; 服務器發生故障時,連接在服務器上的存儲設備中的數據不能被存取。
- 網絡連接式存儲(NAS)
一種採用直接與網絡介質相連的特殊設備實現數據存儲的機制。由於這些設備都分配有 IP 地址,所以客戶機通過充當數據網關的服務器可以對其進行存取訪問,甚至在某些情況下,不需要任何中間介質客戶機也可以直接訪問這些設備。
NAS的優點
第一,NAS適用於那些需要通過網絡將文件數據傳送到多臺客戶機上的用戶。NAS設備在數據必須長距離傳送的環境中可以很好地發揮作用。
第二,NAS設備非常易於部署。可以使NAS主機、客戶機和其他設備廣泛分佈在整個企業的網絡環境中。NAS可以提供可靠的文件級數據整合,因爲文件鎖定是由設備自身來處理的。
第三,NAS應用於高效的文件共享任務中,例如UNIX中的NFS和Windows NT中的CIFS,其中基於網絡的文件級鎖定提供了高級併發訪問保護的功能。
- 存儲網絡(SAN)
SAN 是指存儲設備相互連接且與一臺服務器或一個服務器羣相連的網絡。其中的服務器用作 SAN 的接入點。在有些配置中,SAN 也與網絡相連。SAN 中將特殊交換機當作連接設備。它們看起來很像常規的以太網絡交換機,是 SAN 中的連通點。SAN 使得在各自網絡上實現相互通信成爲可能,同時並帶來了很多有利條件。
SAN的優點
SAN是通過網線連接的磁盤陣列,具備磁盤陣列的所有主要特徵:高容量、高效能、高可靠。
1、SAN 具有安裝容易、快速的特點
2、易於維護
3、非常好的可擴展性
4、具有更快的響應速度和更高的數據帶寬
5、對服務器的要求降低,可大大降低服務器的成本,有利於高性能存儲系統在更廣的範圍內普及及應用。
NAS與SAN的區別
NAS有文件操作和管理系統,而SAN卻沒有
SAN主要是高速信息存儲,NAS偏重文件共享。
SAN和NAS相比不具有資源共享的特徵
SAN是隻能獨享的數據存儲池,NAS是共享與獨享兼顧的數據存儲池。
NAS是網絡外掛式,而SAN是通道外掛式。
SAN高效可擴,NAS簡單靈活
一般用在NAS中的有CIFS(在windows主機之間進行網絡文件共享),NFS(用於unix上的網絡文件系統),在SAN中有iSCSI(Internet 小型計算機系統接口),FCP(光纖信道協議)
ESX storage只支持NFS,iSCSI,FCP協議,不支持cifs協議
說了這麼多有的沒的,下面開始進入正題iSCSI
什麼是 iSCSI:
早期的企業使用的服務器若有大容量磁盤的需求時,通常是透過SCSI來串接SCSI 磁盤,因此服務器上面必須要加裝SCSI卡,而且這個SCSI是專屬於該服務器的。 後來這個外接式的SCSI設備被SAN的架構所取代,在SAN的標準架構下,雖然有很多的服務器可以對同一個SAN 進行存取的動作,不過爲了速度需求,通常使用的是光纖通道。但是光纖通道很貴,不但設備貴,服務器上面也要有光纖卡,很麻煩,所以光纖的SAN在中小企業很難普及。
後來網絡實在太普及,尤其是以IP封包爲基礎的LAN技術已經很成熟,再加上以太網路的速度越來越快,所以就有廠商將SAN的連接方式改爲利用IP技術來處理。 然後再透過一些標準的設定,最後就得到Internet SCSI (iSCSI)這個的產生! 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實驗環境
兩臺主機
主機A:
主機名:Jerry (initiator端)
eth0:192.168.186.130
主機B:
主機名:Tom(target端)
eth0:192.168.186.207
先來配置initiator端
安裝iscsi initiator
可以用rpm –qa |grep iscsi查看是否安裝,iscsi initiator可以從linux系統鏡像中找到.rpm安裝就行。
安裝好以後,我們再來看看initiator的配置文件
/etc/iscsi/initiatorname.iscsi 只有一行iqn,是target端識別initiator的唯一標識,默認就行。
iqn.yyyy-mm.:identifier
iqn.年-月.單位網域名的反轉寫法:這個分享的target名稱
例如我的就是:iqn.2012-04.com.redhat:2cc7d328b934
這個iqn是initiator端 /etc/iscsi/initiatorname.iscsi文件中的,即target端通過initiator端的iqn號把新設備/dev/sdb 註冊給initiator,這樣initiator就可以用了新的磁盤了。
/etc/iscsi/iscsid.conf 主要的配置文件
node.startup = automatic 是表示當iscsi initator啓動時就會自動登陸到target。
“CHAP Settings” 主要是一些安全設置。
“Timeouts” 部分是我們重點關注的地方:
node.session.timeo.replacement_timeout 指網絡出現問題,多長時間通知上層:
node.session.timeo.replacement_timeout = 120
一般我們可以把這個時間改小,防止IO被hang太長時間,如:
node.session.timeo.replacement_timeout = 3
下面兩個時間是sessison登錄和登出Target的超時時間,也可以適當減少。
node.conn[0].timeo.login_timeout = 15
node.conn[0].timeo.logout_timeout = 15
node.conn[0].timeo.noop_out_interval 指發ping包的時間間隔,
node.conn[0].timeo.noop_out_timeout 爲接收心跳包的超時時間
node.conn[0].timeo.noop_out_interval = 5
node.conn[0].timeo.noop_out_timeout = 5
這兩個時間根據需要減少,如:
node.conn[0].timeo.noop_out_interval = 1
node.conn[0].timeo.noop_out_timeout = 1
node.session.initial_login_retry_max 爲登錄的重試次數:
node.session.initial_login_retry_max = 4
可以適當減少到 2:
node.session.initial_login_retry_max = 2
啓動iscsi initiator服務
#service iscsi start或#/etc/init.d/iscsi start
配置target端
iSCSI 就是透過一個網路介質,將現有的磁盤給分享出去就是了。那麼有哪些類型的磁盤可以分享呢?這包括:
使用dd 指令所建立的大型文件可供模擬爲磁碟(無須預先格式化);
使用單一分區(partition) 分享爲磁盤;
使用單一完整的磁盤(無須預先分區);
使用磁碟陣列分享(其實與單一磁盤相同方式);
使用軟磁盤陣列(software raid) 分享成單一磁盤;
使用LVM 的裝置分享爲磁盤。
其實沒有那麼複雜,我們大概知道可以透過(1)大型文件; (2)單一分區; (3)單一設備(包括磁盤、陣列、軟磁盤陣列、LVM裝置文件等等) 來進行分享。要注意,等一下我們要分享出去的資料,最好不要被使用,也最好不要開機就被掛載(/etc/fstab 當中沒有存在記錄的意思)
既然iSCSI要分享的是磁盤,那麼我們要準備一個新的磁盤,在虛擬機中加一塊新的磁盤/dev/sdb
解壓軟件包
#cd /usr/local/src/
#tar zxvf iscsitarget-1.4.20.2.tar.gz
#make
#make install
加入系統服務
#chkconfig --add iscsi-target 就可以通過service iscsi-target start來啓動他了
配置iSCSI target
#vim /etc/iet/ietd.conf
Target iqn.2012-04.com.redhat:2cc7d328b934
Lun 0 Path=/dev/sdb,Type=blockio,ScsiId=xyz,ScsiSN=xyz
其中內容中的Target後面是Target的名稱,一般名稱爲:iqn..com.:,
其中爲年月,爲主機名,<爲存儲的名稱,可以隨便起一個名字。
Lun 1是指這個設備共享出去的Lun Id,同一個Target Lun Id不能重複。Type=blockio是指定使用blockio的方式,
也可以使用fileio,如果使用了fileio,會使用操作系統的文件緩存,如果出現掉電,可能會丟數據。使用blockio則沒有這個問題。
IscsiId是這個Lun的名字,隨便起一個名字就可以了。
啓動iSCSI target
#service iscsi-target start
查看iSCSI-target共享出的硬盤
#cat /proc/net/iet/volume
查看客戶端(initiator端)登陸到target的情況
#cat /proc/net/iet/session
兩端的基本配置設置好後
iscsi initiator主要通過iscsiadm命令管理,我們先查看提供服務的iscsi target機器上有哪些target:
#iscsiadm --mode discovery --type sendtargets --portal 192.168.186.207
然後就可以登陸某個target了,登陸成功某個target後,這個target下的硬盤也就都共享過來了:
#iscsiadm --mode node --targetname iqn.2012-04.com.redhat:2cc7d328b934 –portal 192.168.186.207:3260 --login
登陸之後要對新磁盤進行分區,格式化,然後在掛載即可
完成這些命令後,iscsi initator會把這些信息記錄到/var/lib/iscsi目錄下:
/var/lib/iscsi/send_targets記錄了各個target的情況,/var/lib/iscsi/nodes記錄了各個target下的nodes情況。
下次再啓動iscsi initator時(service iscsi start),就會自動登陸各個target上。如果想讓重新手工登陸各個target,需要把/var/lib/iscsi/send_targets目錄下的內容和/var/lib/iscsi/nodes下的內容全部刪除掉。
要查看各個iscsi的信息:
# iscsiadm -m session -P 3