http://tech.watchstor.com/storage-module-121394.htm
http://blog.csdn.net/holandstone/article/details/7963822
iSCSI(互聯網小型計算機系統接口)是一種在Internet協議網絡上,特別是以太網上進行數據塊傳輸的標準,是一種集成了IP和SCSI的技術。它最大的特點就是讓標準的SCSI命令能夠在TCP/IP網絡上的主機系統(啓動器)和存儲設備(目標)之間傳送。iSCSI是基於IP協議的技術標準,實現了SCSI和TCP/IP協議的連接,那些以局域網爲網絡環境的用戶只需要少量的投入,就可以方便、快捷地對信息和數據進行交互式傳輸和管理。
SAN與iSCSI兩者同屬運行塊協議的SAN架構,只不過前者透過FIBRECHANNEL,後者由IP傳輸數據罷了,而兩者在管理及應用上也大同小異。
數據傳輸方式:同爲SAN的iSCSI及FIBRECHANNEL都採用塊協議方式。
傳輸速度:就目前的傳輸速度而言是FIBRECHANNEL(2Gb)最快、iSCSI(1Gb)次之。
管理方式:iSCSI採用IP網絡的現有成熟架構。所以可延用既有成熟的網絡管理機制,不論是建置、管理或維護上,都非常方便及容易。而FIBRECHANNEL則完全獨立於一般網絡系統架構,所以需由FIBRECHANNEL供貨商分別提供專屬管理工具軟件。
管理及維護成本:一般來說,FIBRECHANNELSAN多半需要特定的工具軟件來操作管理,所以需要對人員進行一定時間的教育訓練,而且費用不低。但由於iSCSI乃透過IP網絡來傳輸數據及分配存儲資源,所以只要使用網絡現有的管理功能即可,相較起來,的確可以省下大筆管理人力及訓練成本。
傳輸距離:原則上,二者都支持長距離的數據傳輸。FIBRECHANNEL的理論值可達100公里。透過IP網絡的iSCSI理論上都沒有距離上的限制,iSCSI可以進行長距大量資料的傳遞。
噪聲碰撞問題:由於iSCSI走的是IP網絡,其中當然充斥着來自全球各地的龐大數據及噪聲,所以碰撞情形也就在所難免了,如此一來,在數據傳輸的過程中,就很容易導致延遲的情形發生,大大影響了傳輸的效能,甚至數據的正確性。
iSCSI Initiator可分爲三種,即軟件Initiator驅動程序、硬件的TOE(TCPOffloadEngine,TCP卸載引擎)HBA卡及iSCSIHBA卡。就性能而言,軟件Initiator驅動程序最差、TOEHBA卡居中、iSCSIHBA卡最佳。但是iSCSIHBA只能運行iSCSI技術協議,而無法運行NFS(NetworkFileSystem,SUN制定)或CIFS(CommonInternetFileSystem,微軟制定)等檔案系統協議與應用服務器溝通。但Initiator驅動程序及TOEHBA卡則同時支持iSCSI、NFS及CIFS三種協議。
四、Linux下實現iSCSI
Linux網絡環境iSCSI技術的實現主要有三種方式:
1.純軟件方式
服務器採用普通以太網卡來進行網絡連接,通過運行上層軟件來實現iSCSI和TCP/IP協議棧功能層。這種方式由於採用標準網卡,無需額外配置適配器,因此硬件成本最低。但是在這種方式中,服務器在完成自身工作的同時,還要兼顧網絡連接,造成主機運行時間加長,系統性能下降。這種方式比較適合於預算較少,並且服務器負擔不是很大的用戶。目前不論是MicrosoftWindows、IBMAIX、HP-UX、Linux、NovellNetware等各家操作系統,皆已陸續提供這方面的服務,在價格上,比起前兩種方案,遠爲低廉,甚至完全免費。但由於Initiator驅動程序工作時會耗費大量的CPU使用率及系統資源,所以性能最差。在此建議,最好是採用1GHz以上CPU的主機,如此才能獲得較佳的效能表現,如果公司主機CPU在1GHz以下,那麼最好不要採用。至於在各類協議的支持上,Initiator驅動程序可以同時支持iSCSI、NFS及CIFS協議。當然現在大多數服務器CPU都可以滿足這個要求。這裏免費的iSCSIInitiator驅動程序,纔可以將一般Gigabit網卡仿真成iSCSIInitiator。然後再透過iSCSI橋接器將一般SCSI接口的存儲配備仿真成iSCSITarget,如此就形成一個iSCSI-SAN。
問答解惑:
1).怎麼判斷Initiator驅動程序耗費多大的CPU等??對主機性能影響多大??
2).怎麼判斷是否安裝Initiator驅動程序??
3).iSCSI_initiator的安裝和配置步驟
微軟iSCSI_initiator的安裝和配置步驟
http://download.csdn.net/download/nicluohy/5094947
http://bbs.watchstor.com/thread-47781-1-1.html
幾種常用的操作系統下iSCSI Initiator的使用(Window、RedHat Enterpris Linux 5、Open Solaris、Fedora core 6 、Fedora 7、FreeBSD5.4、FreeBSD6.2)
http://storage.chinaunix.net/stor/raid/2009/03/26/1417862.shtml
http://www.open-iscsi.org/
2.iSCSI TOE網卡實現方式
在這種方式中,服務器採用特定的TOE網卡來連接網絡,TCP/IP協議棧功能由智能網卡完成,而iSCSI技術層的功能仍舊由主機來完成。這種方式較前一種方式,部分提高了服務器的性能。在三種iSCSIInitiator中,價格比iSCSIHBA便宜,但比軟件Initiator驅動程序貴,性能也居於兩者之間。目前市面上Intel的TOE(TCPOffloadEngine,TCP卸載引擎)HBA價格在150美金左右。
問答解惑:怎麼判斷是TOE 網卡??
intel E1G42ET 82576GB芯片雙口千兆網卡支持TOE和ISCSI
3.iSCSI HBA卡實現方式
使用iSCSI存儲適配器來完成服務器中的iSCSI層和TCP/IP協議棧功能。這種方式使得服務器CPU無需考慮iSCSI技術以及網絡配置,對服務器而言,iSCSI存儲器適配器是一個HBA(存儲主機主線適配器)設備,與服務器採用何種操作系統無關。該方式性能最好,但是價格也最爲昂貴。在三種iSCSIInitiator中,價格最貴,但性能最佳。目前價格已由一開始的1000美金左右,下降跌至500美元左右。對於有高效能應用需求的企業,最好採用iSCSI HBA卡,如此才能獲得最好的性能。
考慮到筆者使用Linux服務器使用2.4GIntel至強處理器,而且網絡負載不大,本文使用第一種方式,拓樸結構見圖2.
圖2網絡拓樸結構
說明:iSCSI技術儲存設備架構:
型號爲PROMISEVtrak15200,使用iSCSI機型;
使用5顆硬盤,1顆爲sparedisk,其餘4顆做成RAID-5;
IP:iSCSI技術儲存設備的IP地址設置爲192.168.11.201
連接到儲存設備的賬號與密碼分別爲:myaccount/iscsimy1Spw
Linux服務器:
系統:RedHat9Linux核心(2.4.20-8mp)
IP:RedHat9Linux服務器IP地址設置爲192.168.10.3
硬件:DellPowerEdge16000SC(2.4GIntel至強處理器,512MBDDRECC內存)基礎型服務器。用於郵件服務器(商業版本的sendmail:3Rsoft)。
1.準備工作
因爲安裝iSCSI驅動需要配合核心來編譯,所以會使用到內核源代碼,此外,也需要編譯器(compiler)的幫助,因此,先確定您的Linux系統當中已經下列軟件的存在:kernel-source、kernel、gcc、perl、Apache。打開一個終端,使用命令檢查:
#rpm-qa|grepgcc;rpm-qa|grepmake
#rpm-qa|grepkernel;rpm-qa|grepmake
iSCSI驅動程序下載網址是:http://sourceforge.net/project/showfiles.php?group_id=26396
這個網站根據Linux內核(2.4/2.6)提供兩種驅動程序,請根據內核版本下載相應的驅動,首先使用下面的命令查詢目前所使用的Linux的內核版本:
#uname–a
Linuxcao2.4.20-8#1ThuMar1317:54:28EST2003i686i686i386GNU/Linux
2.得到版本信息後,到其官方網站下載系統所需的驅動。下載完成就可以使用下面的命令安裝該組件然後編譯內核:
#cdcd/usr/local/src
#wegt
http://nchc.dl.sourceforge.net/sourceforge/linux-iscsi/linux-iscsi-3.4.3.2.tgz
#tar-zxvflinux-iscsi-3.4.3.2.tgz
#cdlinux-iscsi-3.4.3.2
#makeclean
#make
#makeinstall
3.修改配置文件開始進行修改的工作:
#vi/etc/iscsi.conf
Username=myaccount#用戶名#
Password=iscsimy1Spw#口令#
DiscoveryAddress=192.168.11.201#iSCSI儲存設備的IP地址#
Username=myaccount
Password=iscsimy1Spw
4.啓動iscs
#/etc/init.d/iscsistart
StartingiSCSI:iscsiiscsidfsck/mount
5.使用iscsi-ls命令可以看到更爲詳細的磁盤信息::
#iscsi-ls
*****************************************************************
SFNetiSCSIDriverVersion...3.4.3.2(27-Jun-2005)
****************************************************************
TARGETNAME:iqn.1994-12.com.promise.target.3b.31.4.55.1.0.0.20
TARGETALIAS:Vtrak15200
HOSTNO:0
BUSNO:0
TARGETID:0
TARGETADDRESS:192.168.11.201:3260
SESSIONSTATUS:ESTABLISHEDATThuNov1020:13:432005
NO.OFPORTALS:1
PORTALADDRESS1:192.168.11.201:3260,2
SESSIONID:ISID00023d000001TSIH04
****************************************************************
iSCSI節點名稱有兩種格式,即iqn-type格式和eui-type格式。
Linux常用的是iqn-type的格式爲:
6.使用fdisk命令進行磁盤分區
fdisk命令格式
fdisk[-l][-bSSZ][-u]device
主要選項:
-l:察看指定的設備的分區表狀況。
-bSSZ:將指定的分區大小輸出到標準輸出上,單位爲區塊。
-u:搭配"-l"參數列表,會用分區數目取代柱面數目,來表示每個分區的起始地址。
device:要這些操作的設備名稱。
fdisk是各種Linux發行版本中最常用的分區工具,是被定義爲Expert級別的分區工具。我們可以通過fdisk來分區使用iscsi設備。它還包括一個二級選單,首先輸入命令,然後出現問答式界面,用戶通過在這個界面中輸入命令參數來操作fdisk。見圖3。
圖3 fdisk分區工具
選項介紹:
a:設定硬盤啓動區。
b:編輯一個BSD類型分區。
c:編輯一個DOS兼容分區。
d:刪除一個分區。
l:察看指定的設備的分區表狀況。
m:顯示Fdisk命令各個參數的說明。
o:創建一個DOS分區。
n:設定新的硬盤分區。
p:打印分區信息。
s:創建一個空Sun分區表。
t:改變硬盤分區類型。
q:結束分區,不保存操作內容。
v:校驗硬盤分區表。
w:結束分區,保存操作內容。
x:進入高級操作模式。
#fdisk/dev/hdd
運行後出現fdiak的命令提示符:
Command(mforhelp):
使用n命令創建一個分區,會出現選擇主分區(pprimarypartition)還是擴展分區(llogical)的提示,通常選用主分區。然後按照提示輸入分區號(Partionnumber(1-4):)、新分區起始的磁盤塊數(FirstCylinder)和分區的大小,可以是以MB爲單位的數字(Lastcylindetor+sizaor+sizeMor+sizeK:)。例如:
fdisk/dev/sda
Command(mforhelp):n
Commandaction
eextended
pprimarypartition(1-4)
p
Partitionnumber(1-4):1
Firstcylinder(1-189971,default1):
Usingdefaultvalue1
Lastcylinderor+sizeor+sizeMor+sizeK(1-189971,default189971):
Usingdefaultvalue1899719
Command(mforhelp):w
7.格式化分區:
#mke2fs-text3-c/dev/sda1
8.設定加載點:
#mkdir/cluster/raid
#mount-t
ext3/dev/sda1/cluster/raid
經過以上的操作,我的Linux服務器已經連接到iSCSI儲存設備,並且如同Linux本機上面的一個SCSI硬盤一樣。使用的方式幾乎一模一樣。
9.自動掛載一個iSCSI卷
可以通過向/etc/fstab.iscsi(filesystemtable)中添加指令行來告訴Linux如何自動掛載捲了。使用vi編輯器修改/etc/fstab,依次使用shift+G命令(將光標定位到最後一行)然後使用o命令(插入新行並且進入編輯狀態),輸入以下內容:
/dev/sda1/cluster/raidext3defaults00
存盤後從新啓動計算機Linux即可自動掛載iSCSI卷。
五、保護iSCSI安全
光纖通道環境給人感覺具有比較高的安全性,原因在於它們是受控的專有網絡。iSCSI給人感覺安全性較低,原因在於它是基於以太網的網絡。不過從本質上來說,光纖通道是沒有安全功能的,而iSCSI提供了非常豐富的安全功能。iSCSI規範提供了initiator與目標端兩方面的身份驗證(使用CHAP、SRP、Kerberos和SPKM),能夠阻止未經授權的訪問,只允許那些可信賴的節點進行訪問。另外,IPsecDigests(IPsec摘要)和Anti-Reply(防回覆)功能阻止了插入、修改和刪除操作,而IPsecEncryption(IPsec加密)功能防止被偷聽,確保了私密性。
最簡單的iSCSI實現方式,就是沒有任何加密和認證機制的連接。這種方式僅提供“SCSI指令在TCP/IP協議上傳輸”這樣一個最基本的功能,連接到網絡上的任何一臺主機都可以毫無阻礙地連接到iSCSI存儲設備上。這種方式顯然對任何危險都沒有防範能力。但是,這種方式也有一個明顯的優勢,那就是性能。沒有了認證和加密,自然也就省去了很多額外的開銷。如果您非常需要您的iSCSI磁盤陣列全速工作,這種方式無疑是最好的選擇。當然,選擇這種方式的時候,用來連接iSCSI磁盤陣列的網絡交換機最好是與外界隔離的。
妥善選擇口令
口令應避免與個人資料有關係,不要選用諸如***號碼、出生日期、電話號碼等作爲密碼。建議選用字母、數字混合的方式,以提高密碼破解難度。儘量避免在不同的操作系統使用同一密碼,否則密碼一旦遺失,後果將不堪設想。***們經常用一些常用字來破解密碼。曾經有一位美國***表示,只要用“password”這個字,就可以打開全美多數的計算機。其它常用的單詞還有:account、ald、alpha、beta、computer、dead、demo、dollar、games、bod、hello、help、intro、kill、love、no、ok、superuser、system、test、work、yes等。另外相信設置空白口令這件事就會讓很多網絡管理員頭疼。很多用戶嫌口令難記,乾脆留空,或者隨手設成111111之類。這種口令實在令人着急,稍微耐心一點兒的***,手工都可以試出來,更何況眼下各種字典***程序滿天飛。對iSCSI磁盤陣列來說,情況也是一樣。如果僅靠用戶認證不能解決問題,就需要借鑑傳統IP網絡的辦法,在內網和外網之間架設防火牆,阻擊外面那些有充分精力和耐心的“嘗試者”。如果iSCSI磁盤陣列(Target)和主機(Initiator)需要跨廣域網連接,最好使兩者以***互連。總之就是一個目的,不讓iSCSI磁盤陣列使用公網的IP地址。
總結:至此這裏給予Linux網絡下中小企業一個低成本的iSCSI的解決方案。
iSCSI小貼士:
1.應該使用硬件initiator還是軟件initiator?
iSCSIinitiator是使用硬件還是軟件要取決於多種因素,包括預算、性能要求以及服務器工作負荷。軟件iSCSIinitiator能夠實現成本最低的iSCSI解決方案。純軟件iSCSIinitiator使用標準以太網卡,並依靠主機CPU來處理iSCSI命令和TCP/IP棧。對於具有2GCPU的最新一代服務器來說,大部分客戶工作負荷在iSCSI協議處理方面不會引發明顯的性能開銷。如果您的服務器擁有千兆以太網卡則對軟件initiator的評測過程幾乎不會有任何問題,原因是在絕大多數流行的操作系統中,initiator都是免費提供的。如果CPU較陳舊,服務器的負荷較重,則可能更適合採用硬件iSCSIinitiator。硬件iSCSIinitiator會將iSCSI和TCP/IP處理工作轉移到iSCSIHBA中。其結果就是能夠大幅度降低CPU的性能開銷,這點堪與光纖通道HBA相比。硬件initiator還能提供軟件解決方案所不具備的功能,例如支持高可用性環境的硬件多通道功能,支持密集服務器環境中的遠程引導功能。
2.硬件和軟件initiator如何影響應用程序的性能?
如果應用程序位於負擔較輕的服務器上,在大多數情況下,採用軟件initiator的iSCSI的性能開銷也不會明顯影響應用程序的性能。如果服務器的負荷較重,則必須採用硬件iSCSIinitiator。不過,在大多數環境中,傳輸帶寬以及主機CPU的性能開銷完全不是問題—應用程序性能問題在很大程度上要歸因於存儲的軸數有限(承擔工作負荷的磁盤太少)。這不是協議或傳輸問題。這是直連式存儲系統的一個普遍問題,但是採用基於iSCSI的SAN解決方案可以非常方便地解決這一問題。
3.Linux下哪些服務器適合使用iSCSI構架?
目前Linux的擅長應用領域是:單一應用的基礎服務器應用,譬如DNS和DHCP服務器、Web服務器、目錄服務器、防火牆、文件服務器、打印服務器、互聯網連接代理服務器、數據庫。其中,數據庫服務器及郵件服務器最適合採用iSCSI構架,另外NetApp表示由於ERP數據庫系統採用塊協議,所以非常適合建置在iSCSI構架上。
iSCSI 協議
http://blog.csdn.net/holandstone/article/details/8477157
iSCSI協議結構
如同任何一個協議一樣,iSCSI也有一個清晰的層次結構,根據OSI模型,iSCSI的協議棧自頂向下一共可以分爲五層,如圖所示:
SCSI層:根據應用發出的請求建立SCSI CDB(命令描述塊),並傳給iSCSI層;同時接受來自iSCSI層的CDB,並嚮應用返回數據。
.iSCSI層:對SCSI CDB進行封裝,以便能夠在基於TCP/IP協議的網絡上進行傳輸,完成SCSI到TCP/IP的協議映射。這一層是iSCSI協議的核心層。
.TCP層:提供端到端的透明可靠傳輸。
.IP層:對IP報文進行路由和轉發。
.Link層:提供點到點的無差錯傳輸
3.2 iSCSI 流量控制與超時重發
流量控制是指發送方控制發送數據幀到網絡的速率。發送方發送的速率—般是傳送路徑上的交換機、路由器或接收方可用的緩衝區大小的函數。iSCSI則採用TCP/lP協議的端到端的流量控制機制,以可變發送窗口的方式進行流量控制。發送窗口在連接建立時由雙方面定,但在通信過程中,接收方可根據自己的資源使用情況,隨時動態地調整自已的接收窗口(可增大或減小),然後告訴對方,使發送方的發送窗口和自己的接收窗口一致。
iSCSI採用的是TCP的自適應超時重發算法,可根據網絡的情況動態調整。這種算法記錄每一個報文段發出的時間以及收到相應的確認報文段的時間,這兩個時間之差就是報文段的往返時延RTT,當發送—個數據段時,啓動相應的定時器,如果定時器超時確認報文段還沒有到達,就觸發數據配發機制。如果超時之前得到確認,就記錄新的往返時延,將各個報文段的往返時延樣本進行加權平均得到新的報文段的平均往返時延RTT,顯然定時器設置的重發時間應大於平均的往返時延RTT。在實際應用中,RTT的算法還很複雜,目前一般採用的是Karm算法。
3.3 iSCSI發現機制
iSCSI發起端爲了和iSCSI目標端建立iSCSI會話,iSCSI需要知道ISCSI目標端的IP地址,TCP端口號和名字三個信息。iSCSI發現的目的是爲了讓iSCSI發起端獲取一條到iSCSI目標端的通路。iSCSI有三種發現機制:
⑴ 靜態配置:在iSCSI發起端已經知道iSCSI目標端的IP地址TCP端口號和名字信息時,iSCSI發起端不需要執行發現。iSCSI發起端直接通過IP地址和TCP端口來建立TCP連接,使用iSCSI目標端的名字來建立iSCSI會話。這種發現機制比較適合比較小的iSCSI體系結構
⑵ SendTarget發現:在iSCSI發起端知道iSCSI目標端的IP地址和TCP端口的情況下,iSCSI使用IP地址和TCP端口號建立TCP連接後建立發現對話。iSCSI發起端發送SendTarget命令查詢網絡中的存在的iSCSI信息。這種方法主要用於網關設備,iSCSI發起端被靜態配置連接到指定的iSCSI設備。iSCSI發起端和iSCSI網關設備建立對話併發送SendTarget請求給iSCSI網關設備。iSCSI網關設備返回一系列和它相連的ISCSI目標端的信息。iSCSI發起端選擇一個目標端來建立對話。
⑶ 零配置發現:這種機制用於iSCSI發送設備完全不知道ISCSI目標端的信息的情況下。iSCSI發起端利用現有的IP網絡協議SLP(Service Location Protocol for Discovery,服務定位協議)。iSCSI目標端使用SLP來註冊,iSCSI發起端可以通過查詢SLP代理來獲得註冊的iSCSI目標端的信息。當iSCSI目標端加入到網絡中的時候,拓撲結構也隨之改變。雖然這種方法增加了實現的複雜性,但它不需要重新配置發起端即可找到新的目標端。
流量控制機制對網絡的適應性
iSCSI是基於窗口的發送機制,由於發送方可以根據網絡的擁塞情況動態地調整發送速率,因此iSCSI的流量控制機制對網絡的適應性更好,尤其在網絡傳輸延遲較大的網絡中。
超時重發機制的靈活性
在TCP/IP協議中,TCP使用自適應重傳算法以適應互連網絡時延的變化。它的要點是:TCP監視每一條連接的性能,並計算出報文的往返時間RTT(Round Trip Time)。當連接的性能變化時,TCP隨即修改RTT(也就是說它能自動適應時延的變化)。RTT(Round Trip Time)被髮送方用來決定是否重傳報文。