IP-SAN iSCSI 虛擬化

建置高可用性iSCSI儲存設備(上)

2011-08-02
目前市場上雲端運算喊得震天價響,但是追根究柢提供這樣高可用性並具備高彈性的底層運算基礎便是來自於虛擬化技術。各企業的IT人員了解到虛擬化技術所帶來的高可用性及動態遷移性等好處之後,紛紛想將公司目前運作於實體伺服器中的商業服務轉移至虛擬機器上。
建置一套具備高可用性及可隨時動態遷移的彈性化虛擬架構,其費用並不便宜,很多中小企業在進行虛擬化建置評估後,便放棄導入的念頭。

其放棄的原因在於,建置完整的虛擬化架構至少需要完備的機房、穩定可靠的備援電力、高效能伺服器、高效能共用儲存設備、高頻寬儲存傳輸環境等因素,可想而知,導入虛擬化的預算所費不貲,最終令中小企業IT人員望之卻步。

但如果只是想要單純地將公司多台實體伺服器進行伺服器合併(Server Consolidation)從而方便管理,並且避免伺服器閒置導致資源浪費的話,或許可以考慮看看使用免費版本虛擬化平台Hypervisor,例如VMware vSphere Hypervisor、Citrix XenServer、Microsoft Hyper-V Server 2008。

所謂的Hypervisor,指的就是介於軟體與韌體之間一層極小的程式碼,它可以為運作於其上的虛擬機器提供動態的硬體資源配置及彈性設定,並且管理虛擬資源。

如此一來,便可以使用一台資源豐富的實體伺服器安裝Hypervisor,於其上同時運作多台虛擬機器(VM),並且配合此篇文章來建置高可用性的iSCSI共用儲存設備,以提供共用儲存區域資源給予虛擬化平台使用。

也就是說,屆時都將所有虛擬機器存放於iSCSI儲存設備內,而高效能伺服器僅僅使用其CPU和記憶體等運算資源。

目前企業運作環境中對於共用儲存設備的存取方式,約略可區分為三種,包括「直接連接儲存」(Direct Attached Storage,DAS)、「網路連接儲存」(Network Attached Storage,NAS)、「儲存區域網路」(Storage Area Network,SAN)。

其中,儲存區域網路依照其使用傳輸媒體介質的不同,又可區分為使用光纖作為傳輸媒介的Fiber Channel SAN(FC-SAN)以及使用一般乙太網路的iSCSI SAN(IP-SAN)兩種。本次實作即為建置IP-SAN共用儲存資源,並且提供高可用性的共用儲存環境給予Hypervisor掛載使用。

iSCSI SAN簡稱為IP-SAN,是由Cisco與IBM一同發起,並且交由網際網路工程任務小組(Internet Engineering Task Force,IETF)於2003年2月正式通過網際網路小型計算機系統介面(Internet SCSI,iSCSI)的標準。此項技術簡單來說,是將傳統上僅能用於本機傳輸的SCSI協定,使其可以透過TCP/IP網路承載,以達到資料高速傳輸的需求。

iSCSI傳輸協定為透過TCP/IP的Port 860及3260作為溝通,使得兩台主機(Target、Initiator)之間可利用iSCSI協定來交換資料傳輸的SCSI指令集,讓主機之間可以透過高速的區域乙太網路,將身處於遠端的儲存設備模擬為本地端的儲存設備。

此外,此項技術最大的優點在於其使用的傳輸線材、網路交換器、網路卡,皆可以使用企業既有的網路架構來達成,這也是近幾年來iSCSI技術迅速竄紅的原因之一。

本次實作內容中,將使用CentOS作業系統中的scsi-target-utils套件來建立軟體式的iSCSI Target,並且使用DRBD套件透過高效能Block Level傳輸方式來即時(Realtime)同步兩台叢集主機之間iSCSI Target內儲存的資料。

並且,配合開放原始碼(Open Source)中赫赫有名且高可用性(High Availability,HA)的Heartbeat套件來監控兩台叢集主機之間的連線狀態,以便判斷Active/Standby叢集主機節點之間是否能夠互相存取對方。

當其中一台叢集節點主機因為發生不可預期因素損壞時,待命的叢集主機便會立即(約1~2分鐘以內)接手相關服務,達成企業提供高可用性服務之目標。

最後,則是使用免費版本的虛擬化平台VMware vSphere Hypervisor上內建的軟體式iSCSI Initiator(iSCSI Software Adapter),來掛載iSCSI Target所分享的儲存資源,至本地端資源池Datastore上來存放運作的虛擬主機。

實作環境與實作網路架構圖

擔任iSCSI Target叢集主機環境

擔任iSCSI Initiator主機環境

▲此次高可用性iSCSI Target實作網路架構圖。

iSCSI運作原理說明

iSCSI技術可以區分為iSCSI目標端(iSCSI Target)和iSCSI發起端(iSCSI Initiator)。其中,iSCSI Target可區分為硬體式或軟體式兩種技術來建置完成。所謂的硬體式iSCSI Target,通常表示該儲存設備中內部的硬體控制器內含可以同時處理TCP/IP封包進行I/O加速的TCP卸載引擎(TCP Offload Engine,TOE)以及專門用於處理iSCSI PDU封包晶片的磁碟陣列控制器所組合而成。

因此,在不管是一般網路的TCP/IP封包或是傳送資料的iSCSI封包,其處理效能上非常優異,但是相對來說,其設備費用較為昂貴。

若是站在成本因素考量上,或許可以考慮使用一般的伺服器配合作業系統及相關軟體套件來建置一套軟體式iSCSI Target,並用它來接收及處理iSCSI Initiator所傳輸過來的iSCSI指令集,以取代費用高昂的IP-SAN儲存設備。當然,軟體式iSCSI Target在TCP/IP封包及iSCSI封包處理效能上,與專用的儲存設備相比之下,則較為普通。

iSCSI Initiator也可以區分為硬體式或半硬體式及軟體式等三種技術。所謂的硬體式iSCSI Initiator,通常指的是在主機上安裝一片iSCSI主機匯流排介面卡(iSCSI Host Bus Adapter,iSCSI HBA),此iSCSI HBA介面卡上含有一般TCP/IP網路控制晶片,並加上專門處理iSCSI PDU指令集封包晶片。

安裝此片介面卡的主機在運作時,因為在介面卡部分就可以直接處理TCP/IP封包和iSCSI PDU指令集,所以配備此介面卡能夠有效減輕主機端的運算效能,但是在價格上與FC HBA相去不遠,此缺點也是至今無法普及的原因。

而半硬體式iSCSI Initiator與一般的網路卡最主要不同的地方在於,其擁有TCP卸載引擎晶片(TCP Offload Engine,TOE),因此此介面卡可以直接處理TCP/IP封包,而主機端只要專心處理iSCSI PDU指令集封包即可。對於主機端的運算效能,在某些程度上可以有所減輕。其介面卡的價格約為一般網路卡的3~5倍。

最後則是軟體式的iSCSI Initiator。其透過軟體模擬方式,將現有主機及一般網路卡進行模擬。此方式最大的優點在於費用便宜,並且使用既有的介面卡。但是相對地,由於使用軟體模擬的方式,因此所有的TCP/IP封包和iSCSI PDU指令集的運算任務,都將落在主機端上來負責封包的運算及處理,因此在主機端效能表現上是三種技術中最差的。

以下是iSCSI Initiator的連接程序從最底層的實體介面、乙太網路、介面卡驅動程式、TCP/IP協定、iSCSI Layer、SCSI Layer至最上層的作業系統三種技術的比較。透過下列的比較及圖表,相信讀者對於採用何種介面卡以及技術之時對於主機端效能的影響將會更加了解。

● 介面卡費用(高至低)
硬體式iSCSI HBA > 半硬體式TOE > 軟體式
● 消耗主機效能(高至低)
軟體式 > 半硬體式TOE > 硬體式iSCSI HBA

▲不同的iSCSI Initiator所占用主機端運算效能影響比較。

叢集主機設定網路功能

從關閉Iptables防火牆和SELinux安全機制,以及設定網路IP位址資訊兩方面,來加以說明。

關閉Iptables防火牆及SELinux安全機制

安裝CentOS時,只安裝作業系統於sda硬碟即可,sdb硬碟在安裝過程中先不用理它,後續設定步驟中會進行相關處理。

同時,為了讓設定過程能夠順利進行不被干擾,先將兩台叢集節點主機的防火牆(Iptables)及安全稽核機制(SELinux)關閉,以利建置設定過程順利執行。待建置完成後,再依相對應的服務Port號進行允許通過的動作。

在本文相關操作中,若沒有特別強調,則表示兩台叢集主機都要進行相關設定。另外,在設定過程中,兩台叢集主機內的設定檔內容,可能大部分內容都相同,僅有部分不同,因此設定上要很小心,因為設定檔內容設定錯誤,可能造成屆時叢集無法運作。而筆者也會適時提醒其不同之處。

下列有關關閉防火牆及安全機制服務的操作步驟,在叢集主機Node1、Node2上都必須執行:

設定網路IP位址資訊

在叢集主機實體網路卡方面,為了盡量避免單點故障(Single Point Of Failure,SPOF)的風險發生,例如網路卡損壞、網路線被扯開或脫落、網路卡所連接的網路交換器損壞等等因素造成網路傳輸中斷。

因此,在CentOS作業系統上將兩張實體網路卡透過內建的Bonding模組,綁定為在邏輯觀念上視為一張網路卡的虛擬網路卡,並且將該虛擬網路卡設定為Active-Backup模式的網卡容錯(Fault Tolerance)機制。

也就是,平時只有一張實體網路卡會進行資料傳輸,而另外一片網路卡為待命狀態。待Active網路卡傳輸發生異常中斷時,Backup網路卡才接手並繼續剛才的傳輸工作。由於切換網路卡的時間差非常短(100毫秒),因此並不會感覺到有斷線的狀況發生。

當網路卡綁定的設定動作完成後,將連接於實體網路卡的網路線,分別連接至不同的網路交換器上,並且將兩台網路交換器的電源也分接於不同的UPS迴路之上,如此一來,便可以有效防止單點故障的情況發生在實體網路卡、網路線、網路交換器等網路節點。

此次,實作中每台叢集主機共配備四片實體網路卡,將其中兩張實體網路卡eth0、eth1綁定為一片虛擬網路卡bond0,作為屆時提供iSCSI Target儲存資源服務之用。另外兩張實體網路卡eth2、eth3則綁定為另一片虛擬網路卡bond1,作為兩台叢集主機之間互相偵測對方是否運作的心跳線。

在設定網路IP位址到網路卡設定檔的過程中必須要注意的地方為,將eth0、eth1網卡設定檔加上MASTER=bond0及SLAVE=yes內容,而eth2、eth3則加上MASTER=bond1及SLAVE=yes。請注意,不要設定IP位址相關資訊於實體網路卡上,必須將IP位址及網路遮罩等相關設定至虛擬網路卡bond0和bond1上。

● 叢集主機Node1虛擬網路卡
bond0的IP位址:10.10.25.137(由網路卡eth0、eth1組成)
bond1的IP位址:192.168.1.1(由網路卡eth2、eth3組成)
● 叢集主機Node2虛擬網路卡
bond0的IP位址:10.10.25.138(由網路卡eth0、eth1組成)
bond1的IP位址:192.168.1.2(由網路卡eth2、eth3組成)

叢集主機Node1實體網路卡(eth0、eth1、eth2、eth3)及虛擬網路卡(bond0、bond1)設定檔內容如下:

而叢集主機Node2實體網路卡(eth0、eth1、eth2、eth3)及虛擬網路卡(bond0、bond1)設定檔內容如下:

完成將兩張實體網路卡綁定為一片虛擬網路卡設定內容後,接著修改CentOS系統模組設定檔(/etc/modprobe.conf)內容為作業系統載入虛擬網路卡Bonding模組,並指定網路卡容錯機制(mode=1),而且將兩片網路卡之間互相偵測存活時間設定為100毫秒(miimon=100)。

也就是說,當系統Bonding模組運作時,若Active實體網路卡發生網路中斷的情況超過100毫秒後仍無回應,Backup實體網路卡將會馬上接手網路連線作業,因此用戶不會感覺到有任何網路中斷的情況發生。

當模組設定檔設定完成後,重新啟動網路卡服務,即可查看Bonding模組資訊,來確定剛才的設定是否生效。下列修改模組設定檔的內容叢集主機Node1、Node2都相同。 緊接著,設定兩台叢集主機的主機名稱(Host Name)、預設閘道位址(Default Gateway)、名稱解析資訊(DNS)。在此設定過程中,叢集主機Node1、Node2除了主機名稱設定不同外,其餘都相同。

● 主機名稱
Node1主機:node1.weithenn.org
Node2主機:node2.weithenn.org
● 預設閘道IP位址:
10.10.25.254
● 名稱解析IP位址:
8.8.8.8、168.95.192.1

因為Heartbeat高可用性套件對於叢集主機的完整網域名稱(Fully Qualified Doamin Name,FQDN)設定正確與否非常要求。

因此將叢集主機名稱都加入主機設定檔(/etc/hosts)內,以便名稱解析服務(DNS)運作出現問題時,也能保持主機名稱與IP位址的正確對應關係,確保叢集服務運作無誤。

此一主機設定檔的修改內容,在叢集主機Node1、Node2上都是相同的,設定主機名稱完畢後,立刻進行名稱解析測試。

分別於Node1、Node2主機上交互測試能否使用FQDN去ping到對方主機,以確保後續叢集運作機制正常。不正確的FQDN設定,將會影響叢集服務運作。

叢集主機為sdb硬碟建立分割區

先前安裝CentOS時僅將作業系統安裝於sda硬碟,現在則開始處理sdb硬碟為其建立分割區。

此顆硬碟空間也就是屆時兩台叢集主機要存放iSCSI Target資源分享空間和同步資料的硬碟(在企業正式運作環境上,應該為RAID磁碟陣列而非單一硬碟)。

在進行sdb硬碟建立分割區動作以前,先使用「fdisk -l」指令確定系統是否有抓到sda、sdb這兩顆硬碟,然後才進行後續動作。

確定作業系統已抓到兩顆硬碟後,便可以進行sdb硬碟建立分割區的動作。先執行指令「fdisk /dev/sdb」,然後鍵入「n」,表示要建立分割區,之後鍵入「p」,代表示要建立主要分割區。

接著,鍵入數字「1」,表示主要分割區代號。然後,在開始及結束磁柱值時直接按下〔Enter〕按鍵,採用預設值即可。最後,則鍵入「w」,表示確定套用剛才的設定值。

當系統完成建立分割區後,記得執行指令「partprobe」來更新作業系統分割表(Partition Table)的內容(/proc/partitions)。

請注意,當分割區建立完成後,先不要格式化,後續步驟中會在適當時機進行,而這個建立分割區的動作,在叢集主機Node1、Node2上都必須執行。

叢集主機安裝相關套件

接下來,使用CentOS的套件管理工具(Yellow dog Updater Modified,YUM)來輕鬆安裝此次實作中使用到的iSCSI Target、DRBD、Heartbeat等相關套件及其相依性套件,不必自行在茫茫網海中尋找RPM來安裝。

在安裝套件之前,建議先將系統抓取套件的來源鏡像站台設定為台灣本地端的鏡像站台(Taiwan Mirror Sites)。

此次,透過「sed -i」指令將套件管理工具YUM設定檔(/etc/yum.repos.d/CentOS-Base.repo)內的來源站台網址,從預設的國外網站取代為台灣鏡像站台之一的元智大學,如此一來,抓取相關套件時將有效縮短套件下載時間。此一更改抓取套件的來源鏡像網站動作,在叢集主機Node1、Node2上都必須執行。

在上述安裝套件動作中,libiberbs、librdmacm為iSCSI Target(scsi-target-utils)的相依性套件,但在套件管理工具YUM中並未整合到這兩個套件,所以必須手動再次執行安裝。

倘若未安裝這兩個相依性套件,則屆時欲啟動iSCSI Target服務(tgtd),將會在系統紀錄檔(/var/log/messages)中發現如下錯誤訊息,表示作業系統找不到相對應的模組檔案,並造成iSCSI Target服務運作中斷。

待續

本文已將整個iSCSI高可用性的基礎,也就是叢集節點主機,分別完成相關項目,例如安裝CentOS 5.5作業系統、安裝四張單埠實體網路卡至叢集主機、設定叢集主機的網路通訊組態(網卡容錯設定)及叢集主機與網路交換器的實體連接線路,以避免單點故障SPOF的情況發生。且為屆時的iSCSI Target儲存空間建立分割區及後續的高可用性叢集,設定安裝所需的相關軟體套件。

在下篇文章中,便會接著設定網路鏡像同步技術(Network RAID-1),也就是資料保全解決方案DRBD,並且透過Heartbeat套件來達成iSCSI高可用性服務的目標,以便實體伺服器進行硬體故障排除檢修或歲修時。還會介紹將實體伺服器轉移機房時,應該如何正確將叢集服務進行轉移,好讓實體伺服器在檢休完成或轉移機房後,能夠在最短時間內恢復其高可用性。(本文原載於網管人第65期)


追蹤我們Featrue us

本站使用cookie及相關技術分析來改善使用者體驗。瞭解更多

我知道了!