NAS
LUN只是一個卷設備,對主機而言就是一塊硬盤,我們的操作系統集成了文件系統的功能,可以用來管理卷。而 NAS就是把文件系統從主機遷移到磁盤陣列上,自己來管理。使用者只需要通過網絡告訴這個文件系統需要存取什麼文件而不需要向NAS傳遞LBA地址。
那麼NAS與SAN的區別是什麼?
SAN是網絡上的磁盤,NAS是網絡上的文件系統。
- SAN:存儲區域網絡,是網絡上的磁盤,其本質只是一個網絡,包含了主機、適配器等一切後端存儲相關的內容。可以說SAN包含NAS。
- 一般把FC網絡上的磁盤叫做SAN,以太網上的文件系統叫NAS
另外, FTP服務器屬於NAS嗎?不屬於,為什麼?
我們知道網絡文件系統與本地文件系統最大的區別是傳輸方式從主板的導線變成了以太網絡,也就是傳輸的距離可以更快了。但是FTP實際上必須把文件傳輸到本地的某個目錄才能執行,而網絡文件系統不需要將數據複製到本地再進行訪問,可以進行掛載。
NAS與SAN之爭
誰更快
NAS主要實現虛擬目錄層與文件系統層的通信,使用的是“以太網+TCP/IP”,為了處理TCP/IP和以太網邏輯,增加了不少的CPU指令,同時使用的是以太網等低速介質。
而FC SAN中,FC邏輯有很大一部分由HBA卡完成,同時FC協議的速度比以太網更快,所以整體來說FC SAN肯定更快。
但是在大量隨機小塊IO的場景下,因為NAS系統對併發IO進行了優化,而且文件系統邏輯由專門的設備處理,所以性能可能會比SAN更高。
既然這樣,為什麼還需要使用NAS呢?因為
- 最重要的原因是NAS成本更低,不需要昂貴的FC HBA卡和FC交換機。
- 基於以太網、TCP/IP,擴展性強
- 可以提供多種協議訪問。網絡文件系統通過HTTP、FTP等協議進行訪問,而SAN只有SCSI協議。
- 採用專門的設備處理文件系統邏輯, 可以解放主機CPU和內存,適合在CPU密集的應用環境。
- NAS可以在一臺盤陣上實現多臺客戶端同時訪問。SAN的LUN一般只能分配給某個主機,只有通過集群系統對數據一致性進行了保證以後,才能實現LUN共享
所以單純的討論SAN好還是NAS好是沒有意義的,我們更需要的是根據場景、成本等要素來決定到底使用NAS還是SAN。
我們可以把目前的應用分為兩種:IO密集與CPU密集
- CPU密集:程序內部邏輯複雜,但是對磁盤IO訪問量不高。比如高性能運算
- IO密集:內部邏輯不復雜,但是需要隨時存取硬盤的,比如Web應用
- IO和CPU同時密集:不適合單機運行,需要組成集群
對於高併發隨機小塊IO,或者共享訪問文件的環境,因為NAS做了很多的優化,此時應該優選NAS。而對於大塊順序IO密集的環境,NAS比SAN慢,所以優選SAN。
與SAN和與NAS設備通信的過程
對主機而言,如果與SAN通信,必須通過文件系統。當應用程序發出指令後,文件系統 會計算LBA地址,然後通過FC網絡告訴SAN。SAN取出數據,通過FC網絡傳送給主機,然後放入程序的緩衝區。
那與NAS設備通信呢?程序只需要告訴NAS設備路徑+文件即可,也就是說通過操作系統的虛擬目錄與NAS進行對話,通過TCP/IP+以太網進行傳輸,後面的過程就都在NAS設備內部了,它會查找要取的文件的扇區位置,存儲數據。
其實NAS設備還可以進行拆分,它可以把硬盤拆分出去,只是做為一個專門處理文件邏輯的設備而存在,這就是NAS網關
DAS、NAS、SAN
DAS:最原始的存儲:直接存儲。存儲設備只用與獨立的主機。比如PC中的磁盤或者只有一個外部SCSI接口的JBOD
DAS(僅供自己使用)到SAN(出租倉庫給其他的租戶),到NAS(集中式理貨服務外包)
SAN是一種網絡,而不是某種設備。只要是專門向服務器傳輸數據的網絡就可以稱為SAN。
NAS設備通過以太網向主機提供文件級別的數據訪問,以太網絡就是SAN。
習慣性的將FC SAN架構稱為SAN
NetApp的NAS
NetApp的NAS極大的借鑑了數據庫管理系統的設計,本小節主要講解一下NetApp的NAS的基本思想。
利用了數據庫管理系統的設計
我們知道數據庫管理系統是這樣記錄日誌的,在某個時刻,數據庫管理系統接收到應用程序的SQL更新語句,首先將數據修改前的狀態以日誌的形式保留在
內存的日誌緩存區,然後覆寫原來的數據。因為日誌緩存區是內存的一部分,所以如果掉電則數據丟失,所以每隔一段時間或者說程序進行提交事務時,管理系統會把日誌推到磁盤中。同理,也會把緩存中更新過的數據塊寫入磁盤。
只有當日志確實寫入到硬盤上的日誌文件中的時候,才會對上層應用返回執行成功。
具體過程可以參見數據庫(五),事務。
NetApp借鑑了這種設計思想,它會將文件系統中的寫入請求作為操作日誌寫入到NVRAM中保存。
NVRAM不用電池也可以在不供電的情況下保存數據,而NetApp使用的是帶電池保護的RAM,下文姑且稱其為NVRAM.
為什麼要使用NVRAM而不像數據庫一樣使用文件來保存日誌的呢?
對於數據庫系統來說,先將日誌寫入到內存中日誌緩衝區,再在觸發條件下將日誌寫入磁盤上的文件。一旦意外掉電,內存中的日誌沒有來得及保存到硬盤就丟失,數據庫再次啟動的時候,會提取硬盤上的日誌,對於沒有提交的操作進行回滾。這樣就保證了數據的一致性。
不過如果應用程序頻繁提交,日誌緩衝區的日誌會頻繁的寫入到磁盤上,這時日誌緩存就起不了什麼作用了。
對數據庫來說,上層的每個業務一般都算是一個交易,在尚未完成的時候,程序不會發送提交指令給數據庫系統的,所以頻繁提交的頻率不高。
而文件系統則不然,上層應用向文件系統寫入數據而言,每次請求都是完整的交易。也就是說提交會非常頻繁。如果將操作日誌寫入磁盤,開銷大,所以利用了帶電池保護的RAM內存(NVRAM)。只要成功寫入了RAM,就可以立即通知上層寫入成功。
一定要搞清楚日誌和數據緩存的區別。
- 日誌是記錄操作動作和數據內容,而非實際的數據塊。保存在NVRAM中
- 實際的數據塊保存在RAM中而非NVRAM中。
WAFL的做法是用RAM來保存日誌,可以一次接收到上千條寫請求,而且可以直接返回成功。等到RAM半滿,由WAFL一次性批量連續寫入硬盤,保證高效率。
WAFL從不覆寫數據
當日志佔了NVRAM空間的一半或者每10s,WAFL會將內存中已改寫的數據以及元數據批量寫入硬盤。同時清空日誌,騰出空間。這個動作叫CheckPoint
WAFL不會覆蓋掉對應區塊中原來的數據,而是尋找空閒塊來存放被更改的塊。也就是說WAFL寫入的數據都會到空閒塊中,而不是覆蓋舊塊。另外,在Checkpoint沒有發生或者數據沒有Flush完全之前,WAFL從來不會寫入任何元數據到磁盤。
這樣可以保證CheckPoint沒發生之前,磁盤上的元數據對應的實際數據仍為上一個CheckPoint的狀態。如果此時斷電,就算新數據寫入了,但是元數據沒有寫入,所以磁盤上的元數據仍指向舊塊,數據就像沒有變化,所以不用執行文件系統檢查等工作。
當CheckPoint觸發時,先寫入數據,最後再寫元數據,然後新元數據指針指向方才寫入的新數據塊。對應的舊數據塊變為空閒塊。(此時塊中仍然有數據,但是沒有任何指針指向它)
IP SAN
以太網的可尋址容量大,比IP都大,而且地址是定長的,使用專用的電路完成交換,還可以使用光纖進行傳輸。最重要的一點是以太網非常的廉價。
但進入以太網有這麼多優點,現在FC SAN還是應用廣泛,這是因為以太網與FC相比,以太網是不可靠的網絡,不是端到端的協議,必須依靠上層協議。而且開銷也比較大。
IP SAN
TCP/IP在速度和性能上無法與FC相比,但是它最大的優點在於擴展性,SCSI都能嫁接到FC上,當然也可以與TCP/IP結合。這種新的協議系統叫ISCSI(Internet Small Computer System Interace )。
這種協議的優點很明顯,只要IP可達,兩個節點就可以通過ISCSI通信。所以擴展性非常強。
IP SAN : 以ISCSI為代表的TCP/IP作為傳輸方式的網絡存儲系統,也就是基於IP的存儲區域網絡
當然IP SAN不一定用以太網作為鏈路層,可以用任何支持IP 的鏈路層,如 ATM 、PPP 、 HDLC 甚至是FC
同樣用TCP/IP來進行傳輸,NAS與IP SAN有什麼區別呢?
NAS傳輸的是文件系統語言。ISCSI傳輸是SCSI指令語言。所以IP SAN本質是SAN提供的是塊存儲
IP SAN相對於FC SAN最大的優勢在於:
- FC SAN 成本是IP SAN的十倍。
- FC是專用網絡,很難擴展
- 部署FC存儲網絡更復雜
- 兼容性:不同生產廠家的FC設備不一定完全兼容
參考
《大話存儲》
閱讀更多 cpp軟件架構獅 的文章