Sep 17, 2008

HBA and lun

1、關於HBA
HBA的全稱為Host Bus Adapter,即主機匯流排適配器。
a、匯流排適配器是個什麼東西呢?
我們首先要瞭解一下主機的結構,一台電腦內部多半由兩條匯流排串在起來(當然實際情況會有不同,這裏只討論常見的,簡單的情況),一條匯流排叫系統匯流排,一條叫I/O匯流排。系統匯流排上接了CPU,MEmory,cache什麼的,I/O匯流排上接的就是週邊設備,現如今最常見的就是PCI匯流排了。這兩條匯流排之間用橋接的晶片或者說電路連接起來。舉個形象的例子,就好比一個城市裏,有兩條主幹道,一條屬於行政區,一條屬於商業區,中間有個環島,將兩條主幹道連接到了一起,系統匯流排就好比行政區裏的主幹道,而I/O匯流排就好比商業區的主幹道。系統匯流排和I/O匯流排的帶寬的單位都是以Gbyte來記,但是顯而易見的是,行政區的主幹道和商業區的主幹道相比的話,前者肯定更“核心”,更寬,更順暢,設計的要求也高。
我們知道,在向公僕部門要求服務的時候,是要有一些介面的部門和程式的,而橋接晶片的作用就是連接和協調兩條匯流排的工作的。
雖然I/O匯流排的速度和系統匯流排的帶寬相比要低很多,但是好歹也是以G來計量的,而我們知道週邊設備的速度,往往只有幾百兆,甚至幾十k而已,怎麼協調工作呢?好比賣煎餅果子攤子不能直接戳到城市主幹道上,怎麼辦?好辦,在主幹道邊上開個2000平米的小吃城,把攤子都收進去好了。那麼主機匯流排適配器的作用也就是這個,我們就是要把外設組織起來,連接到I/O匯流排上去!HBA就是指Host和I/O BUS直接的一個適配器,也好比一個水管工常說的“雙通”。
b、常見的HBA有哪些呢?
比如顯卡,網卡,scsi卡,1394卡等等。我要拿出來說的就是FCHBA和ATA&IDE。我們通常說的什麼Emulex的LP9002,什麼Qlogic的QLA2340都是FCHBA卡,就是將Fibre Channel的設備和IO匯流排連接起來的適配器。ATA也是一種適配器技術,我們PC主板上的ATA介面,就是一個磁片適配器的對外介面,要強調的就是,ATA說的是適配器技術,IDE是說得存儲外設技術,比如我們可以說IDE硬碟,IDE光碟機,說ATA介面,但是說IDE介面,ATA硬碟就不時那麼合適了,雖然很多情況下,大家都習慣把他們混在一起說。
描述HBA的時候,有幾個主要的規範要說一下
> 一個承上,就是說,HBA和IOBUS怎麼連,我們經常說的PCI介面卡,就是指這個HBA卡是要插在PCI BUS上的PCI slot上的,但是現在的電腦上,不僅僅只有PCI匯流排而已,大家碰到的時候留意。
>一個啟下,就是說HBA要和外設怎麼連,這樣的規範就很多了。
>再說HBA本身,比如帶寬,比如運行機制(protocol等),獨立處理能力等等
Tips:有時候我們看到的一塊卡,看到的實際是一個物理的卡,有的時候實際上是多個Adapter,好比一家機構,掛多個牌子,有的時候,一塊卡有兩條通道,好比一家公司,有兩套人馬。

2、關於lun

a、lun的概念
lun的全稱是logical unit number,也就是邏輯單元號。我們知道scsi匯流排上可掛接的設備數量是有限的,一般為6個或者15個,我們可以用target ID(也有稱為scsi id的)來描述這些設備,設備只要一加入系統,就有一個代號,我們在區別設備的時候,只要說幾號幾號就ok了。
而實際上我們需要用來描述的物件,是遠遠超過該數字的,於是我們引進了lun的概念,也就是說lun id的作用就是擴充了target id。每個target下都可以有多個lun device,我們通常簡稱lun device為lun,這樣就可以說每個設備的描述就有原來的target x變成target x lun y了,那麼顯而易見的,我們描述設備的能力增強了.就好比,以前你給別人郵寄東西,寫位址的時候,可以寫:
xx市人民大街54號 xxx(收)
但是自從高樓大廈越來越多,你不得不這麼寫:
xx市人民大街54號xx大廈518室 xxx (收)
所以我們可以總結一下,lun就是我們為了使用和描述更多設備及物件而引進的一個方法而已,一點也沒什麼特別的地方.
b、lun是什麼東西?
lun id不等於某個設備,只是個號碼而已,不代表任何實體屬性,在我們的實際環境裏,我們碰到的lun可能是磁碟空間,可能是磁帶機,或者是media changer等等.
lun的神秘之處(相對于一些新手來說)在於,它很多時候不是什麼可見的實體,而是一些虛擬的物件。比如一個陣列櫃,主機那邊看作是一個target device,那為了某些特殊需要,我們要將磁碟陣列櫃的磁碟空間劃分成若干個小的單元給主機來用,於是就產生了一些什麼邏輯驅動器的說法,也就是比target device級別更低的邏輯物件,我們習慣於把這些更小的磁片資源稱之為lun0,lun1,lun2....什麼的。而作業系統的機制使然,作業系統識別的最小存儲物件級別就是lun device,這是一個邏輯物件,所以很多時候被稱之為logical device。
有人說,我的windows裏,就認到一個磁片呀,沒看到什麼lun的說法,是不是lun=physical disk呢?回答是否定的,只要你注意,磁片的屬性裏就可以看到有一個lun的值,只是因為你的disk沒有被劃分為多個存儲資源物件,而將整個磁片當作一個lun來用,lun id默認為零,如此而已。
我們曾經碰到過這樣的問題,比如有人問,我們有一個磁碟陣列,連到了兩個主機上,我們劃分了一個lun給兩個主機認到,然後我們想,先在作業系統將磁片分為兩個區,讓兩個主機分別使用兩個分區,然後再出現某一台主機宕機之後,使用集群軟體將該分區切換到另外一個主機上去,這樣可行嗎?答案也是否定的,集群軟體操作的磁片單元是lun,而不是分區,所以該操作是不可行的。當然,在一些環境,一般也是一些要求比較低的環境,可以在多個主機上掛載不同的磁片分區,但是這種情況下,實際上是沒有涉及到磁片的切換的,所以在一些高要求的環境裏,這種情況根本就不允許存在。
還要說明的地方是,在有些廠商和有些產品的概念裏,lun id被綁定到了具體的device上,比如ibm的一些帶庫,整個帶庫只有一個target id,然後changer,tape drive被分別分配為lun0,lun1,lun2.....,但是我們要注意到,這只是產品做了特別設計,也是少數情況。
c、存儲和主機的電氣獨立時代的lun的概念
還有很多新手總是把陣列裏面的磁片和主機的內部磁片的一些概念搞混淆了。
在磁碟陣列和磁帶庫大行其道的時代,存儲越來越智慧化,越來越像一個獨立的機器,實際上存儲和主機的電氣獨立本來就是一個必然趨勢,俗話說得好,兒大要分家嘛。在存儲越來越重要的時代,存儲要自立門戶是必然的事。
如果我們把存儲當作一個獨立的主機來看,理解起來就很簡單了。我們說到lun的概念的時候,我們就要將分為兩個層面。一個層面就是在陣列這個機器的os識別到的範圍,一個層面就是伺服器的os識別到的範圍。這兩個層面是相對獨立的,因為如果我們把存儲當作一個主機來看,那麼它自然有自己的device,target,lun之說,而伺服器也有自己的device,target,lun之說;另外一方面,這兩個層面又是相互關聯的,一個陣列的控制系統,大多都有虛擬化的功能,陣列想讓主機看到什麼樣的東西,主機才能看到相應的東西。當然,伺服器識別到的最小的存儲資源,就是lun級別的。那麼主機的HBA卡看到的存儲上的存儲資源就靠主要兩個東西來定位,一個就是存儲系統的控制器(target),一個就是lun id,這個lun是由存儲的控制系統給定的,是存儲系統的某部分存儲資源。
d、lun masking,lun mapping
我們有了獨立的磁碟陣列用了之後,伺服器只要看到存儲的控制系統,就有可能使用磁碟陣列的磁片資源,但是磁碟陣列不可能只為某一個伺服器來使用,所以他必須管制主機使用某部分磁片資源。這個管制分為兩個部分:一部分就是lun mapping,類似於綠色通道,就是保證伺服器能看到某部分存儲資源,一部分就是lun masking,類似於警戒線,就是保證伺服器只可訪問給它分配的存儲資源,而沒分配給伺服器的資源,就不要染指了。
實現lun masking和lun mapping有三種方法:一個是基於存儲控制系統來設置,一個是基於存儲交換系統來設置,一個是基於伺服器os來設置。
基於存儲控制系統得設置,是比較常見的設置,比如很多磁碟陣列的控制系統,本身就能設置lun被某伺服器看到。比如FastT的partition功能。
基於存儲交換系統的設置,也是一種常用的方法,比如常說的zoning。
基於伺服器os的設置,比較少採用,一般採用安裝某些作業系統上安裝某些軟體來實現,因為這個方法全靠伺服器自覺,所以比較少用,呵呵。
e、lun的multi-path
現在,存儲網路越來越發達了,一個lun有多條通路可以訪問也不是新鮮事了。
伺服器使用多個HBA連接到存儲網路,存儲網路又可能是由多個交換設備組成,而存儲系統又可能有多個控制器和鏈路,lun到伺服器的存儲網路鏈路又可能存在著多條不同的邏輯鏈路。那麼,必然的,同一個physical lun在伺服器上必然被識別為多個設備。因為os區別設備無非用的是匯流排,target id,lun id來,只要號碼不同,就認為是不同的設備。
由於上面的情況,多路徑管理軟體應運而生了,比如emc的powerpath,這個軟體的作用就是讓作業系統知道那些作業系統識別到lun實際上是一個真正的physical lun,具體的做法,就是生成一個特別的設備檔,作業系統操作這個特殊的設備檔。而我們知道,設備檔+driver+firmware的一個作用,就是告訴作業系統該怎麼使用這個設備。那麼就是說,多路徑管理軟體從driver和設備檔著手,告訴了作業系統怎麼來處理這些身份複雜的lun。

3、關於備份(Backup)和高可用性(High availability)
備份,從字面的意思來理解,其實就是現時存在和應用的一個實體的後備實體;
高可用性,即是指我們硬體的環境、設施、資料、應用系統等,在複雜環境下可用的能力和可能性達到一個較高的值;
在現實世界裏,我們都講究有一個穩定,可靠,所以我們經常在電腦環境設計裏,涉及到高可用性和備份等等元素。
我首先把這兩個詞拿出來說,就是不想讓新手們在什麼雙機熱備,資料備份亞,集群等等概念裏暈的不也樂乎。

對於備份我主要說說以下幾個方面:
a、設備的備份
設備的備份,也就是我們在現時使用的設備之外,採取相同或者類似的設備做後備。
比如我們在伺服器上採用冗餘電源,也叫後備電源,我們使用單獨的硬碟來做RAID的備用盤,也叫熱備盤。
如果我們採取單獨的一台伺服器來做後備,這就成了主機的備份,主機的備份有很多種方式,比較著名的就是所謂的cluster,所謂的雙機熱備和雙機容錯,我很不喜歡鼓搗這些概念,我一概稱他們為主機熱備,因為他們有一個共同的特點,就是都是為了實現主機的備份,即某一個主機失效了,有另外一個主機頂替它來運行。實現主機熱備的軟體有很多,比如IBM的HACMP,HP的MCSG,SUN的sun cluster,Compaq的Ture Cluster,Veritas的VCS,EMC的autostart,ROSE HA等等

b、資料的備份
資料的備份,就是我們在現時使用的資料之外,實現或設置另外一份不同物理體現的、內容相同的的有效資料拷貝
比如我們將生產資料拷貝到磁帶上,就是一種資料備份方式。
比如我們將生產資料複製到磁片的另一個分區,另一個檔系統,或者拷貝到別的主機的磁片上,等等,都是一種資料備份的方式。
實現資料備份的軟體有很多,比如一些磁帶操作的小工具,tar,cpio等,大的工具軟體有什麼EMC Networker, Symantec Netbackup,CommVault,tapeware等等,資料複製的工具就更多了,作業系統的複製命令呀,emc replicator呀,srdf等等

c、應用系統的備份
應該說應用系統的備份,包含了以上兩種備份,因為一個完善的應用系統,其設備和資料都是要求有備份的,那麼初次之外,做為一個應用系統,除了設備和資料,他還包含了業務程式,人員,業務邏輯,外部環境等等一系列讓應用跑起來的東西。
在這個層面,就有一個比較熱火的東西,那就是常說的遠端容災。遠端容災,就是在生產系統環境之外,在相隔較遠的物理空間,構建相同或類似的一個應用系統,以達到在必要的時候頂替原生產系統工作的目標。
要實現遠端容災的目的,除了我們說的外部環境,比如機房,電力,後勤保障,人員配備,業務程式之外,我們比較著重的一個環節,就是資料的問題,也就是我們在兩個系統之間要保證資料的相對一致,實現這個目標的方法有很多,比如磁碟陣列之間的卷複製,比如兩個主機之間檔系統上的複製,等等。當然,在一個系統裏,把資料用磁帶導出來,快遞到另外一個系統地點,在用磁帶把資料導進取,也不能說不是一個辦法,但是這樣操作,經常會和業務的邏輯相違背(呵呵,這麼麻煩又耽誤時間,估計一般很難接受)。

對於高可用性,我要說的是:
可用性,即是指在各種複雜環境下,我們的資料,應用等計算資源都可以保持使用的能力和可能性。比如伺服器配備冗餘電源,就提高了伺服器的可用性,好理解,一個電源工作不正常或者能力不夠的是候,伺服器不受影響嘛。再比如,我們的磁碟陣列採用雙控制器,當某個控制器和鏈路工作不正常的時候,資料的訪問能平滑的過渡到另外一個控制器上和鏈路上,這也是提高了資料和存儲設備的可用性。
那麼什麼是高可用性呢,我們就是一切為了提高系統可用性的實現方法和結果。
要拿出來說的就是cluster,或者雙機什麼的。我們為了實現生產的應用系統的高可用性,其中一個環節就是實現伺服器的高可用性,就是某伺服器失效或者能力不足時,應用能平滑的過渡到另外的主機上,也就是說對於應用系統來說,伺服器保證了相對的可用

那備份和高可用性有什麼區別呢?
那我要說,這根本沒有可比性!因為這是兩個不同的概念,他們的著眼點是不同的。備份只是保證了有後備,而高可用性則是為了保證應用的儘快恢復。
打個比方,我們說備份就好比買保險,買保險不能保證你平安無事,但是肯定能減輕損失。我們說搞可用性,就是安全氣囊,ABS,能讓你快速的重新開始或者說將危險消弭于萌芽時刻。
所以說我們做備份和提高可用性,兩手都不可放鬆,也不互相矛盾。就好比買了好車,你就不買保險,或者你買了保險,就可以飆車,都是愚蠢的。

0 意見: