定位: Fusion Storage有兩個管理系統組件:一個是FSM、一個是FSA; FSA包含:MDC、OSD、VBS三個進程(存儲系統)
FSM(FusionStorage Manager): FusionStorage管理模塊,提供告警、監控、日志、配置等功能,一般情況下主備節點部署。
FSA(FusionStorage Agent): 代理模塊,部署在各節點上,實現各節點與FSM通信。
FSA上的三個進程根據系統不同配置要求,分別在不同的節點上啟用不同的進程組合來完成特定的功能。
MDC(MetaData Controller):FusionStorage的元數據控制組件,是業務控制進程,實現對分布式集群的狀態控制,以及控制數據分布式規則,數據重建規則,默認最少部署在3個節點上。一般部署在3個、5個或者7個節點上,形成MDC集群。
OSD(Object Storage Device):是FusionStorage的對象存儲設備,是業務IO進程,執行具體的IO操作。在每個服務器上部署多個OSD進程,默認一塊磁盤部署一個OSD進程。
VBS(Virtual Block System):是FusionStorage的虛擬塊存儲管理(將底層的對象存儲偽裝成塊存儲對外提供服務),是業務IO進程,負責卷、元數據的管理,提供分布式集群接入點服務,使計算資源能夠通過VBS訪問分布式存儲資源。每個服務器上部署一個VBS進程,形成VBS集群。
交互:
1. MDC
1)MDC會與OSD、VBS進行消息之間的交互,通過心跳監測機制對OSD、VBS進行狀態的監控。
2)MDC一般是主備管理。
3)MDC模塊啟動后,MDC向ZK注冊選主,先注冊的為主MDC,ZK記錄MDC的主備信息並與MDC進行交互,ZK通過心跳監控MDC的健康狀態,如果主MDC掛了,那么進行MDC的重新選主。
4)主 MDC 和其他 MDC 維持心跳關系,由主 MDC 指定其他 MDC 是否為歸屬 MDC,並告知歸屬 MDC 管理哪些存儲池,主 MDC 決定歸屬 MDC 故障后的接替者。
2. OSD:
OSD 啟動時,向 主MDC 查詢歸屬 MDC,向歸屬 MDC 匯報自己的狀態 歸屬 MDC 把狀態發送給 VBS,OSD 與歸屬 MDC 維持心跳關系,默認每秒向MDC匯報OSD的狀態,若是5秒內沒有收到OSD的心跳,MDC會認為OSD故障,MDC將該OSD踢出存儲池,更新 OSD View 到每個 OSD,更新 IO View 給 VBS, 在 5min 未收到心跳則進行數據重建。
3. VBS:
VBS啟動時會查詢主MDC,向主 MDC 注冊(主 MDC 維持了一個活動的 VBS 列表,並同步給其他 MDC, 以便其他 MDC 能將 OSD 的狀態變化發送給 VBS),向主 MDC 確定自己是否為 Leader VBS ,主VBS從主 MDC 獲取 IO view,主VBS向OSD要元數據,其他 VBS 找主 VBS 獲取元數據。一套FS只有一個主VBS,如果主VBS故障,其他VBS會重新向主MDC確認一個主VBS出來。
*FusionStorage組件、各組件間消息交互流程:
組件:
1) FusionStorage Manager:管理組件,提供 FusionStorage 告警,監控,日志,配置等操作的
2) FusionStorage Agent:FusionStorage agent 代理進程程序,部署在各個節點,實現與 FusionStorage Manager 通信。
3) MDC(MetaData Controller):元數據控制,分布式集群的狀態控制,數據分布規則創建,數據重建規則創建。
4) VBS(Virtual Block System):虛擬塊存儲管理組件,卷和快照元數據的管理,IO 的接入和處理。
5) OSD(Object Storage Device):對象存儲設備服務,磁盤管理,IO 復制,IO 數據的cache 處理。
6) zookeeper:作為一個開源的分布式應用協調系統,用來完成統一命名服務、狀態同步服務、集群管理、分布式應用配置項的管理等工作。
組件交互流程:
系統啟動時,MDC 與 ZK 進行互動,選舉出主 MDC,其他 MDC 掛掉,主 MDC 指定 MDC 接替此MDC 工作,主 MDC 掛掉,其他 MDC 與 ZK 互動,再次選舉出主 MDC。
ZK 數量: 3/5/7,奇數原因: 因為 zookeeper 選舉 leader 機制,n+1>n 總節點數: 2n+1控制集群創建完成后,數量不可更改。
MDC 數量(3~96 個): 默認 MDC 數量為 3 個(創建 MDC 集群時與 ZK 數量一致),MDC 數量會隨着存儲池的數量上升而自動擴展。MDC 數量=ZK 數量+存儲池數量。MDC 會管理存儲池,一個 MDC 最多管理 2 個。
OSD 啟動時,向主 MDC 查詢歸屬 MDC,並且向歸屬 MDC 反饋狀態,歸屬 MDC 將 OSD 狀態同步給 VBS,當歸屬 MDC down掉,主 MDC 指定一 MDC 接管,一個MDC 最多管理 2 個存儲池,同時最多處理 2000 個 OSD 請求。
VBS 啟動時,向主 MDC 注冊(主 MDC 維護活動的多 VBS 列表信息,主 MDC 將 VBS 列表信息同步給歸屬 MDC,歸屬 MDC 將 OSD 狀態信息同步給 VBS),VBS 向主 MDC 確定是否為主 VBS, VBS 向 MDC 查詢 IO 視圖,主 VBS 向 OSD 查詢元數據信息,其他 VBS 向主 VBS 獲取元數據。
<提示: 歸屬MDC運行在存儲系統的存儲節點上,注意,存儲節點同時也可以是控制節點,所以當無獨立的存儲節點時,控制MDC同時擔任歸屬MDC。
VBS運行在存儲系統的計算節點上 >
*FusionStorage有哪些網絡平面?並說明作用
1) 管理平面(External_OM): 用於FusionStorageManager與FusionStorageAgent之間的通信
2) 存儲平面(Storage_Data): 用於MDC、VBS、OSD之間通信
3) 業務平面(External_OM): 用於OS與VBS之間通信
<補充: 嚴謹來說,上述更應該稱為通信平面。因OS與VBS之間通信的業務平面,有可能承載 SCSI、可有可能承載 iSCSI。顯示,當承載 SCSI 時,其並非網絡,而是本地調用。>
*什么是無狀態機頭?
VBS就是無狀態機頭。元數據就是它的狀態。不保存連接關系和位置信息,機頭不保存 LUN 的元數據(通過 DHT 算法計算),LUN 不歸屬於某個機頭,不易出現性能瓶頸;
*FusionStorage 整體 IO 流程
OS ---SCSI/iSCSI--->VBS---"key-value"--->OSD---SCSI--->disk
VBS-->OSD:(判斷是讀 IO 還是寫 IO,如果是讀 IO,直接到本地讀,如果本地受損,會到備的 OSD 中讀。如果是寫 IO,觸發同步寫機制,OSD 拿到 key-value,通過 DHT 找到備 OSD,完成寫動作。)
1. 根據偏移量分片。(VBS 中的 VBP 模塊對IO進行分片)
2. 形成 Key-value
3. 對 Key 值進行 hash,得到 32bit 值
4. Hash值進行 mod 運算,得到 partitionID
5. 查詢 IOview,找到主 OSD,寫數據
OSD-->disk:
1. 寫請求:進行一次 DHT 算法找到備 OSD,同步寫
2. 讀請求:也需要進行 DHT 運算(通過 key 找到 partition,根據OSD的元數據表,找到 partition,定位到 partition 之后再小范圍找到 key),讀失敗,還需要進行 DHT 算法,找出備 OSD,從備 OSD 中讀出數據,返回結果給 VBS,進行修復。
DHT是 把IO以1m大小分片,把SCSI四元組中信息(讀寫的數據內容)+偏移量(LBA ID)和長度(LUN ID)轉成key,對key 進行hash,然后對hash后的結果取模,分成3600份,得到partition id。
**FusionStorage 有哪些視圖?存放在哪里?分別有什么作用?(考到)
主要有 OSD view、IO view、Partition view。
這些視圖作為元數據被 MDC 所管理,存放在兩個位置:
1,由ZK管理的ZK空間中
2. MDC管理的內存中
<發散思維:VBS及OSD也保存它們需要的部分元數據。例如VBS需要的IO View,OSD需要的Partition view >
OSD view是描述OSD的狀態
IO view是Partition和OSD節點上的映射
Partition view是Partition和主備OSD對應關系,IO view是Partition view的子集。
*FusionStorage 讀IO流程
1. APP下發讀IO請求到OS,OS轉發該IO請求到本服務器的VBS模塊;VBS根據讀IO信息中的LUN和LBA信息,通過數據路由機制確定數據所在的Primary OSD;如果此時Primary OSD故障,VBS會選擇secondary OSD讀取所需數據
2. Primary OSD接收到讀IO請求后,按照Cache機制中的“Read cache機制”獲取到讀IO所需數據,並返回讀IO成功給VBS
*FusionStorage 寫IO流程(考到)
1. APP下發寫IO請求到OS,OS轉發該IO請求到本服務器的VBS模塊;VBS根據寫IO信息中的LUN和LBA信息,通過數據路由機制確定數據所在的Primary OSD
2. Primary OSD接收到寫IO請求后,同時以同步方式寫入到本服務器SSD cache以及數據副本所在其他服務器的secondary OSD,secondary OSD也會同步寫入本服務器SSD cache。Primary OSD接收到兩個都寫成功后,返回寫IO成功給VBS;同時,SSD cache中的數據會異步刷入到硬盤
3. VBS返回寫IO成功,如果是3副本場景,primary OSD會同時同步寫IO操作到secondary OSD和third OSD
存儲池映射成2^32的哈希環,上層的OS/APP下發IO后,IO由VBS里的SCSI模塊引入SCSI流量操作,然后再由VBS里的VBP模塊對IO流量進行分片,分片后轉換成key-value格式交給client模塊,client將key-value進行hash取模(取模原因:因為hash后是2^32的值,每次IO后都要算這個值,時間就太長了),取模成3600份,算出了partition id,通過查看IO View(記錄的有partition id和主OSD狀態),就可以讓這個數據找到自己該去讀寫在哪個OSD上,找到這個主OSD后,(寫IO流程)將這個數據發送給主OSD后,再由這個主OSD通過它的RSM模塊進行同步寫備OSD操作,主OSD會將IO寫入至它的SSD cache,若這個IO流大小大於256kb會直接落盤(因為SSD緩存空間有限;SSD在寫大塊IO的性能提升不明顯),寫cache后,cache落盤(水位值:cache中數據達到一定大小后會落盤。刷盤周期:數據在cache中存放時間達到設定周期后會自動進行落盤)。
*歸屬MDC的作用?
控制存儲池 一個mdc最多可以控制兩個存儲池 默認1個
*壞塊修復
某個節點故障,FusionStorage 會做什么事情?
數據重建,FusionStorage Manager 不參與數據重建過程;
系統會自動檢測故障,當檢測到故障發生時(如OSD與MDC心跳中斷,MDC會主動發現)則認為 OSD 異常,將其踢出,並修改 OSD View、IO View、Partition View 進行引流,5 分鍾內未收到心跳,則自動進行數據重構;
壞塊:當VBS把讀IO發給OSD的時候,如果需要讀的數據正好在壞塊中,那么讀IO的動作是會失敗的,那么這個時候OSD會根據DHT算法找到備OSD並讀取相關數據,備用OSD會將數據返回給主OSD,主OSD將數據返回給VBS,接着主OSD會將數據寫入一個新的空間對數據進行修復,最后修改磁盤頭部的元數據指針指向新的空間。
出現故障時,通常壞一塊盤(OSD),一個 OSD 對應多個 partition,針對硬盤(OSD)做副本,修復過程是 1:1 的,不會進行並發修復。針對 partition 做副本,基於 OSD:partition=1:n 的,所以一個 OSD 包含多個 partition,partition 分散在不同的 OSD,所以修復時可以實現並發修復。
修復機制:1.按照安全級別進行修復。(安全級別:服務器級,機櫃級,機房級)
自動修復
並發的修復
**MDC 發現 OSD 故障后 IO 流程(考到)
系統會自動檢測故障,當檢測到故障發生時(如 osd 與 mdc 心跳中斷,mdc 會主動發現)則認為 OSD 異常,將踢出,並修改 OSD View、IO View、Partition View 進行引流,5 分鍾內未收到心跳,則自動進行數據重構;
出現故障時,通常壞一塊盤(OSD),一個 OSD 對應多個 partition,針對硬盤(OSD)做副本,修復過程是 1:1 的,不會進行並發修復。針對 partition 做副本,基於 OSD:partition=1:n 的,所以一個 OSD 包含多個 partition,partition 分散在不同的 OSD,所以修復時可以實現並發修復。
修復機制:1.按照安全級別進行修復。(安全級別:服務器級,機櫃級,機房級)
自動修復
並發的修復
*歸屬MDC部署在哪里?
歸屬MDC部署在存儲節點上的系統盤
*VBS間是否需要形成集群?為什么?
VBS間需要形成集群,它們要統一工作,分配任務,同步元數據。
需要,VBS在提供塊存儲服務時,需要模擬出塊設備(volume)。而具體模擬出怎么樣的塊設備,例如容量、WWN 號等,及在接收到SCSI請求時,將IO切片形成key-value,key組成所需要的treeid、branchid、snapid信息都保存在卷的元數據卷中。每當一個新卷的創建、快照、刪除動作都需要對卷的元數據卷進行寫動作,對卷的IO是由VBS完成的。如果所有的VBS都可以對此卷進行寫動作的話,那么就有可能引起元數據卷受損問題,故需要選擇出單獨的VBS,即主VBS來避免該問題。一套FusionStorage系統中只存在一個主VBS; VBS的主備角色由MDC進程確定,所有VBS通過和MDC間的心跳機制保證系統中不會出現雙主的情況。
只有主VBS能夠操作元數據,所以備VBS收到的卷和快照管理類命令需要轉發到主VBS 處理,對於掛載、卸載等流程,主VBS完成元數據的操作后,還需要將命令轉到目標VBS實現卷的掛載、卸載等操作。
FusionStorage 由 MDC、OSD 形成存儲引擎層,它們組成存儲池為 VBS 提供對象服務,VBS 使用存儲池空間進行提供塊服務。所以塊服務是只需由 VBS 獨立維持的。VBS 將塊服務重要的信息存放在卷元數據卷中,該卷事實上與用戶創建的卷無異。
*Zookeeper的作用
Zookeeper作為一個開源的分布式應用協調系統,用來完成統一命名服務、狀態同步服務、集群管理、分布式應用配置項的管理等工作。
是集群協調軟件,統一命名服務、集群狀態控制、選主MDC
*為什么要多個ZK,MDC?
提高可靠性(穩定性)
*FusionStorage 組件間心跳問題
1) ZK 與 MDC 的心跳間隔為 1 秒,ZK 在 10 秒內未收到心跳則認為 MDC 異常
2) MDC 與 VBS 的心跳間隔為 1 秒
3) MDC 與 OSD 的心跳間隔為 1 秒,MDC 在 5 秒內未收到心跳,則認為 OSD 異常,將 踢出,並修改 OSD View、IO View、Partition View 進行引流,5 分鍾內收到心跳,則自動進行數據重構。
*MDC 可以壞多少個?
MDC 可以壞的數量=MDC 總數據-1,即最終系統只有一個 MDC 仍可保持正常。可以壞到只剩一個。
*DHT 全稱是什么?
DHT:Distributed Hash Table,分布式哈希表(環),FusionStorage 中指數據路由算法。
*DHT的原理是什么?
1. 系統初始化時,FusionStorage將哈希空間(0~2^32)划分為N等份,每1等份是1個分區(Partition),這N等份按照硬盤數量進行均分。例如:二副本場景下,系統N默認為3600,假設當前系統有36塊硬盤,則每塊硬盤承載100個分區。上述“分區-硬盤”的映射關系在系統初始化時會分配好,后續會隨着系統中硬盤數量的變化會進行調整。該映射表所需要的空間很小,FusionStorage系統中的節點會在內存中保存該映射關系,用於進行快速路由。
2. FusionStorage會對每個LUN在邏輯上按照1MB大小進行切片,例如1GB的LUN則會被切成1024*1MB分片。當應用側訪問FusionStorage時候,在SCSI命令中會帶上LUN ID和LBA ID以及讀寫的數據內容,OS轉發該消息到本節點VBS模塊,VBS根據LUN ID和LBA ID組成一個key,該key會包含LBA ID對1MB的取整計算信息。通過DHT Hash計算出一個整數(范圍在 0~2^32 內),並落在指定Partition中;根據內存中記錄的“分區-硬盤”映射關系確定具體硬盤,VBS將IO操作轉發到該硬盤所屬的OSD模塊。
3. 每個OSD會管理一個硬盤,系統初始化時,OSD會按照1MB為單位對硬盤進行分片管理,並在硬盤的元數據管理區域記錄每個1MB分片的分配信息。OSD接收到VBS發送的IO操作后,根據key查找該數據在硬盤上的具體分片信息,獲取數據后返回給VBS。從而完成整個數據路由過程。
*FusionStorage中,DHT路由算法流程(VBS如何找到OSD)
VBS 收到 SCSI 指令流--->VBS 會轉換成為 key-value 形式--->VBS 對 LUN ID+LBA ID 進行 hash,得到 hash 值--->VBS 對 hash 值進行取模運算得到 partition 號--->VBS 將 partition 號檢索 IO view,得到 OSD。
*FusionStorage的讀寫緩存機制
讀緩存機制:
Step 1:從內存的“讀cache”中查找是否存在所需 IO 數據,存在則直接返回,並調整該 IO 數據到“讀cache”LRU(熱點因子機制)隊首,否則執行 Step 2
Step 2:從SSD的“讀cache”中查找是否存在所需 IO 數據,存在則直接返回,並增加該 IO 數據的熱點訪問因子,否則執行 Step 3
Step 3:從SSD的“寫cache”中查找是否存在所需 IO 數據,存在則直接返回,並增加該 IO 數據的熱點訪問因子;如果熱點訪問因子達到閾值,則會被緩存在 SSD 的“讀 cache”中。如果不存在,執行 Step 4
Step 4:從硬盤中查找到所需 IO 數據並返回,同時增加該 IO 數據的熱點訪問因子,如果熱點訪問因子達到閾值,則會被緩存在 SSD 的“讀 cache”中。
寫緩存機制:
1. OSD在收到VBS發送的寫 IO 操作時,會將寫 IO 緩存在 SSD cache 后完成本節點寫操作
2. OSD 會周期將緩存在 SSD cache 中的寫 IO 數據批量寫入到硬盤,寫 Cache 有一個水位值,未到刷盤周期超過設定水位值也會將 Cache 中數據寫入到硬盤中
3. FusionStorage 支持大塊直通,按缺省配置大於256KB的塊直接落盤不寫 Cache,這個配置可以修改
*FusionStorage最多允許壞幾塊硬盤?
需要考慮安全級別+副本數。理論上可以最多壞(副本數-1)*安全級別內硬盤的數量。如果安全級別為服務器級,有3台服務器,每台服務器有4塊硬盤,副本數為2,則可以壞(2-1)*4=4。但這個值是短時間內壞的數量(數據未自動修復完成)。
如果考慮到數據能及時修復,可以允許已用空間所對應的最小硬盤數。以上面例子為例,假設每塊硬盤大小為1TB,已用空間為1.8TB,則極端情況下,可以壞3*4-2=10塊硬盤。
*FusionStorage 數據重建規則。壞一塊硬盤時如何處理?擴容會如何處理?
當 FusionStorage 檢測到硬盤或者節點硬件發生故障時,自動在后台啟動數據修復。由於分區的副本被分散到多個不同的存儲節點上,數據修復時,將會在不同的節點上同時啟動數據重建,每個節點上只需重建一小部分數據,多個節點並行工作,有效避免單個節點重建大量數據所產生的性能瓶頸,對上層業務的影響做到最小化。
壞一塊硬盤,並更換新硬盤時:
1、假如硬盤掛掉之后,沒有超過 5 分鍾,換盤,在新盤上恢復數據。多點到單點的修復
2、假如硬盤掛掉之后,超過 5 分鍾,先進行數據修復,再換的盤。如果數據修復完成,相當於擴容
3、假如硬盤掛掉之后,超過 5 分鍾,先進行數據修復,再換的盤。如果數據修復沒完成,待修復完成后,又變成了擴容。
某個扇區出現問題,此種情況只會影響某個、某幾個partition。當讀到該partition時,無法返回數據,就會到另外的副本所在的磁盤讀取數據。然后利用讀到的數據,修復原副本數據。
修復機制:自動並發修復,遵循安全級別(服務器、機櫃、機房)。
擴容機制:在遵從安全級別的情況下,平均使用率最小的 partition 給新增的硬盤。(較小數據的並發遷移)所有的硬盤大小都是一致的,如果不一致已空間最小的為准。
*FusionStorage能提供 FC-SAN嗎?
不能,FusionStorage Manager 到 FusionStorage Agent 走的 IP,點對點,業務主機到 VBS也是通過 IP 來做標記的,SERVER-SAN 的設計初衷也是考慮使用普通的物理硬件來替代專門的存儲設備,FC 交換機全球也就那么幾家在做,如果還是使用 FC-SAN,那在傳輸介質上還是被廠商鎖定了,不符合 server-san 的設計理念,而且,現在以太網的發展越來越快,從開始的百兆,千兆,到現在的萬兆,在傳輸速率上,以太網不見得比 FC 要差。
*FusionStorage 怎么擴容,相比傳統存儲擴容性能有提升嗎?
增加硬盤,或者增加物理主機。相比傳統存儲擴容性能有提升,因為相比較於傳統存儲擴容整個節點的時候,是擴容機頭,可以增大 IOPS,而傳統存儲擴容硬盤框只是增大了容量,並不會增加 IOPS。
*現在 FusionStorage 支持提供什么樣的存儲類型?
新版本的 FusionStorage(V1R6)支持塊存儲,文件存儲,對象存儲,但是目前商用交付最多的還是塊存儲
*塊存儲、文件存儲、對象存儲的區別?
塊存儲是以塊為基本存儲單位提供存儲空間,因其是最原始的存儲使用方式,過去以硬件的形態設計(如硬盤),設計簡單,未考慮鎖機制,在多個客戶端(進程、應用)使用同一塊設備的情況下,存在數據受損風險,因此不適合(不代表不能)給多個客戶端(進程、應用)使用。 特點:不易共享、性能好
文件存儲是以文件為基本單位提供存儲空間,其通常是在塊存儲上,以軟件的形態工作。因此其可輕易的設計出一些機制,例如塊存儲沒有的鎖機制,從而保障了多個客戶端(進程、應用)可以使用同一文件存儲。(易共享、性能較差)
對象存儲是以對象為基本單位提供存儲空間,其核心思想在於元數據與數據分離。利用分布式技術,以軟件為形態,通常在塊存儲或文件存儲之上以對象的方式提供存儲空間。相對塊存儲、文件存儲,最主要的特點是線性擴展能力、基於網絡的使用方式(體現在多主機可以共享對象存儲空間),某些運行在 x86 上的對象存儲系統甚至具體兼價的特點。對象存儲的缺點是需要考慮時延問題,或設計機制降低時延,或要求應用自身對時延不敏感。(易共享、性能優)
*一台物理主機可不可以把FusionStorage當做存儲?為什么?
可以,兩種方式:
1. 通過在物理主機操作系統部署VBS,使用 scsi 調用FusionStorage
2. 通過 iscsi 走 IP SAN,調用 FusionStorage
*FusionCompute怎樣通過IPSAN的方式使用FusionStorage?
1. 在 FusionStorage 中,需要開啟 iSCSI 功能的服務器,開啟 iSCSI 開關,並進行 iSCSI 端口配置(存儲平面 IP)
2. 在 FusionCompute 中以 IPSAN 的方式,將 FusionStorage 添加為存儲資源,並關聯 CNA 主機,獲取 WWN (iqn)號
3. 在 FusionStorage 中,創建啟動器添加 CNA 主機的 iqn 號
4. 創建主機並關聯啟動器
5. 創建卷,選擇 iSCSI 協議,並映射給創建的主機
6. 在 FusionCompute 上,掃描存儲設備並添加為數據存儲
*FusionStorage Manager與VBS如何通信?
FusionStorage Manager 通過管理平面與 VBS 所在節點的 FusionStorage Agent 通信,FusionStorage Agent 與 VBS 中的 VBM 模塊通信完成具體動作。
*MDC 與 VBS 功能是否可以合在一起?
理論上是可以的,但這不並符合模塊化設計。事實上,當前 FusionStorage 由 MDC、OSD 形成底層引擎層,通過增添 VBS 對外提供塊服務,增添 MDS、CA 對外提供文件服務、增添對象存儲模塊對外提供對象服務。故將 MDC、VBS 在功能上分開,更能增加架構的靈活性。
*FusionStorage 限制
1. 每個服務器上有 3 個~36 個硬盤可供 FusionStorage 使用(包含獨立部署的元數據盤)。
2. 兩副本時,每個服務器上提供給每個存儲池使用的硬盤數量為 2 個~12 個。
3. 三副本時,每個服務器上提供給每個存儲池使用的硬盤數量為 2 個~36 個。
4. 每個存儲池中的硬盤數量不能少於 12 個。
5. 不支持FC網絡,因為FS通過IP通信。(FC是存儲設備才能用的,而FS是用服務器組成的)
6. 同一個資源池中的存儲節點上硬盤數量之差不能大於 2 塊。(此處所指的硬盤為加入該存儲池的硬盤,而不是服務器上所能提供的硬盤總數。)
7. 同一個資源池中的存儲節點上硬盤數量之差,不能大於硬盤數量最多的服務器上的硬盤數的 30%。 例如一個服務器上有 3 個硬盤,硬盤最多的服務器上有 5 個硬盤,這種場景就不符合 FusionStorage 的硬盤要求。(此處所指的硬盤為加入該存儲池的硬盤,而不是服務器上所能提供的硬盤總數。)
8. 同一個資源池中的硬盤類型必須一致。
9. 建議硬盤大小一致,如果硬盤大小不一致,系統會按照最小盤的容量作為各盤的裸容量使用。
10. 每個服務器上有 0 個~12 個緩存供FusionStorage使用
11. 每個服務器上提供給每個存儲池使用的緩存數量為 0 個~4 個
12. 同一個資源池中的存儲節點上緩存的數量必須一致
13. 同一個資源池中的存儲節點上緩存的類型必須一致
*FusionStorage 支持的主存類型有哪些?
SATA、SAS、SSD 卡(華為 ES3000 V1/V2)、SSD 盤
*FusionStorage 支持的緩存有哪些?
NVDIMM(Agiga 4G)、SSD 盤、SSD 卡(華為 ES3000 V1/V2)、Memory(僅支持讀)
*FusionStorage 的數據重構會影響主機性能嗎?
不會。不影響的,因為只是數據的占用,而且資源占用也不大,重建發生在OSD之間(追問就回答一下數據重建 io 流程)
*EC 和多副本有什么區別?
相同容錯能力下,EC 比多副本模式的空間利用率高,多副本比 EC 的系統性能好,用戶可根據實際情況選擇存儲池的數據保護方式
*FusisonStorage 的多副本的利用率是怎樣的?
*FusionStorage是否一定要布署在CNA上?
不是,FusionStorage 是一套存儲軟件,可以布署在任何兼容的Linux操作系統上。目前官方提供的兼容性列表中,包括:
CentOS 6.4-7.3
RedHat 6.4-7.3
Oracle Linux 6.2-7.0
SUSE 11.1-11.4
*FusionStorage的部署方式有哪些?
融合部署:
1. 指的是將 VBS和OSD 部署在同一台服務器中
2. 虛擬化應用推薦采用融合部署的方式部署
分離部署:
1. 指的是將 VBS和OSD 分別部署在不同的服務器中
2. 高性能數據庫應用則推薦采用分離部署的方式
關鍵點:
融合及分離部署重點看 VBS和OSD是否部署在一起。因部署OSD的節點會成為存儲節點,需要消耗所在節點的計算資源用於對外提供存儲業務,所以像高性能數據庫這種對計算敏感的節點不宜部署OSD,即融合部署。
融合布署與分離部署是 VBS和OSD之間的事情,不要和SCSI、iSCSI混為一談,后者取決於OS 與VBS是否在一起。
*FusionSphere 支持哪種部署方式?
支持融合部署、分離部署
*VBS的內部架構
IO在VBS進程中需要經過三個模塊的處理,分別為SCSI,VBP,CLIENT:
1. SCSI模塊負責從內核(VSC.KO)中將IO引入VBS進程,SCSI模塊接收到的IO是標准SCSI協議格式的IO請求,通過SCSI四元組(host_id/channel_id/target_id/lun_id)和該IO在塊設備上的offset,讀寫的數據長度len唯一標識一個IO,SCSI模塊將收到的IO信息交給VBP(Virtual Block Process)模塊
2. VBP內部將通過塊格式的IO轉換為FusionStorage內部Key-Value格式的IO下發給client,其中KEY的組成為:tree_id(4Byte)+ block_no(4Byte)+ branch_id(2Byte)+ snap_id(2Byte),tree_id/ branch_id /snap_id是FusionStorage內部對卷、快照的唯一標識;block_no是將卷按照1M的塊划分,本次IO落在那一個1M塊上的編號
3. IO請求到達client模塊后,client根據KEY中的tree_id/ branch_id進行hash計算,確定本次IO發給哪一個OSD進程處理確定后將IO發送給對應的OSD處理
另外,VBM模塊負責完成卷和快照的管理功能:創建卷、掛載卷、卸載卷、查詢卷、刪除卷、創建快照、刪除快照、基於快照創建卷等。
Heart-beat模塊負責維持與MDC的心跳。
*什么時候創建的歸屬MDC?(考到)
通常創建一個存儲池會創建對應的歸屬MDC
什么叫 FusionStorage?
FusionStorage Block 是一種分布式塊存儲軟件,將通用 X86 服務器的本地 HDD、SSD 等介質通過分布式技術組織成一個大規模存儲資源池,對上層的應用和虛機提供工業界標准的 SCSI 和 iSCSI 接口。 開放的API
FusionStorage 主存最大支持多大空間?
iSCSI 卷最大擴容容量 256TB,具體的存儲池需要手動計算
最新版本的FusionStorage已支持分布式塊存儲服務、分布式文件存儲服務、分布式對象存儲服務
為什么還要有多個歸屬 MDC?
有大量的磁盤,對應大量的 OSD,每個 OSD 都要與 MDC 進行交互,如果都交給主 MDC 去做,主 MDC 會成為性能瓶頸點。總結:多個歸屬 MDC 產生,避免主 MDC 產生瓶頸,避免存儲性能瓶頸。
Fusionstorage強一制性是什么?如何實現?
強一制性:任何時候進行讀都能訪問到最新的數據。
實現:OSD 接收到寫請求后,會通過自己的RSM 模塊完成多副本同步寫。
<引伸:OSD收到寫請求后,也會通過DHT算法,將 key進行hash 運算,得到hash 值,再將 hash 值進行取模運算,得到partition號,查看PartitionView 找到相應的備OSD進行同步寫。>
FusionStorage為什么要配置大塊直通,大於256K直接下盤,不寫cache?
FusionStorage 針對高 IOPS 的場景,IO 數量密集,很快就會把 cache 空間占完。所以大 IO 使用 cache 提升速度不明顯,cache 對於隨機小 IO 不用尋道,比 HDD 要尋道處理速度快。
FusionStorage 的數據重建過程
FusionStorage中的每個硬盤都保存了多個DHT分區(Partition),這些分區的副本按照策略分散在系統中的其他節點。當FusionStorage檢測到硬盤或者節點硬件發生故障時,自動在后台啟動數據修復。
由於分區的副本被分散到多個不同的存儲節點上,數據修復時,將會在不同的節點上同時啟動數據重建,每個節點上只需重建一小部分數據,多個節點並行工作,有效避免單個節點重建大量數據所產生的性能瓶頸,對上層業務的影響做到最小化。
<關鍵點:故障自動檢測 、數據自動重建、多節點並行恢復 >
scsi 是什么組件提供服務?
VBS
為什么我在 FusionStorage Manager 界面把 Agent 的包安裝了之后就能看到磁盤的信息了?
因為 FusionStorage Agent 內存常見服務器的 raid 卡驅動識別的程序,raid 卡可以管理硬盤信息,所以安裝 agent 后就能看到磁盤信息。
FusionStorage 如何實現數據高可靠性?
FusionStorage 支持多副本和 Erasure Code(中文叫糾刪碼,簡稱 EC)兩種數據保護方式,即當物理設備出現故障時,數據仍可被正常訪問,並自動恢復故障設備上的數據。用戶可根據需求靈活選擇數據保護方式,實現數據可靠性和存儲空間利用率的最佳配比。傳統的硬盤級 RAID 模式將數據存放於單節點內的不同硬盤,當整節點發生故障時,無法有效恢復數據。FusionStorage 將數據在節點間進行冗余保護或副本構建,有效避免數據丟失。
Erasure Code 的保護等級有哪些?
保護級別以 N+M 模式或 N+M:B 表達。其中,N 表示 ODC(Original Data Count);M表示 RDC(Redundant Data Count)
目前支持配置的范圍是:3+1、2+2、3+2、4+2、8+2、12+3、3+2:1、4+2:1、8+2:1和 12+3:1 九種配置
利用率等於 N/(N+M)
如 4 個節點。3+1 則計算為 3/(3+1)=75%
備注:
OSD如何找到歸屬MDC?
OSD啟動時向MDC查詢歸屬MDC,向歸屬 MDC報告狀態,歸屬MDC把狀態變化發送給 VBS。當歸屬MDC故障,主MDC指定一個MDC接管,最多兩個池歸屬同一個 MDC
補充:OSD進程在啟動時會加載相應配置文件,文件中,包含所有 MDC的IP及端口號,所以OSD可以向這些 MDC確定歸屬MDC
VBS與MDC的交互
VBS啟動時查詢主 MDC,向主MDC注冊(主 MDC 維護了一個活動 VBS的列表,主MDC同 步VBS列表到其它 MDC,以便MDC能將OSD的狀態變化通知到VBS),向 MDC確認自己是 否為leader;VBS 從主MDC獲取IO View,主VBS 向OSD獲取元數據,其它 VBS向主VBS獲取元數據
補充:
VBS進程在啟動時會加載相應配置文件,文件中,包含所有 MDC的 IP及端口號,所以VBS可以向這些MDC查詢主 MDC。
VBS形成集群並選擇主VBS,原因在於解決多VBS對同一卷元數據的一致性操作上,主 VBS從 OSD中讀取元數據卷獲得卷的元數據。
只有主VBS能夠操作元數據,所以備VBS收到的卷和快照管理類命令需要轉發到主VBS處理,對於掛載、卸載等流程,主VBS完成元數據的操作后,還需要將命令轉到目標 VBS實現卷的掛載、卸載等操作。
考官追問:
拔掉一個硬盤后,會發生什么?
進行數據重建。
有幾種view?分別是什么?作用是什么?
三種。
IO View、OSD View、Partition View。
IO View記錄着partition和DISK的關系。
OSD View記錄着OSD ID和OSD Status。
Partition View記錄着Partition ID、主OSD ID和OSD Status。
MDC數量多少個?可以故障多少個?
MDC數量3~96個
可以故障N-1個
DHT是什么?
Distributed Hash Table分布式哈希表(環),數據路由機制
*VMware如何使用FusionStorage?
Vmware主機使用FusionStorage資源,把VBS以虛擬機的方式部署在Vmware主機上,以ISCSI方式進行掛載,此時Vmware虛擬化層可以通過VBS虛擬機使用到FusionStorage資源,Vmware虛擬化層再以SCSI的方式掛載給Vmware虛擬機即可。
Vmware特殊場景,VBS使用FS是走的ISCSI。
1. 通過在物理主機操作系統部署VBS,使用 scsi 調用FusionStorage
2. 通過 iscsi 走 IP SAN,調用 FusionStorage
什么情況下是SCSI什么情況下是ISCSI?
scsi是主機內部通信的協議
iscsi是主機外部通過IP網絡進行通信
答到OSD的時候考官突然說SSD盤只是需要考慮硬盤大小?
需要考慮SSD盤的硬盤大小、性能、成本
SATA盤3副本需要使用SSD?
需要使用,SSD在這時候用來做緩存用。
FS最少需要多少塊硬盤?
FS最少需要12塊硬盤。
最小3節點部署,每個節點4塊盤。3塊做主存,1塊做緩存。
歸屬MDC什么時候創建的,怎么創建?
創建一個存儲池的時候
剛開始沒答fsm fsa 忘了,后面說我這答漏了兩個重要的組件,我后面補充了,然后問我,有什么部署方式?
我答融合部署和分離部署,這不是他想要的,然后我繼續答,說按客戶需求進行部署,如管理節點 計算節點 存儲節點部署,考官聽到后沒表示,下一題。
根據客戶需求來部署符合用戶要求的,如管理節點 計算節點 存儲節點部署
數據重建和數據恢復的原理,工作過程?
自動數據重建
並發修復
安全級別修復:服務器級、機櫃級、機房級
多節點並行修復,一個節點只需要修復一小部分數據
系統自動發現磁盤故障
若故障5分鍾內,管理員換了新盤,進行數據重建。
故障超過5分鍾,已修復完成,再換了新盤相當於擴容
故障超過5分鍾,未修復完成,再換了新盤,隨后再修復完成,相當於擴容
這塊硬盤故障之后再重新插入一塊新硬盤會做什么操作, 之前那塊故障的硬盤的數據會到新硬盤上面去嗎?
若故障5分鍾內,管理員換了新盤,進行數據重建。
故障超過5分鍾,已修復完成,再換了新盤相當於擴容
故障超過5分鍾,未修復完成,再換了新盤,隨后再修復完成,相當於擴容
分情況,若在修復完成后再插入的新硬盤,之前那塊故障的硬盤的數據不會到新硬盤上面去。
5分鍾內硬盤恢復了或者重新插了一塊硬盤就會恢復之前的樣子。
若5分鍾后硬盤還未恢復,那么就會將硬盤踢出存儲池,然后進行數據重建。
MDC狀態是怎么保存的?
保存在ZK盤里。
元數據有哪些?保存在哪里?
Io view partition view osd view 組件的狀態
ZK的ZK空間中
MDC的內存空間中
可靠性怎么實現?怎么實現多副本機制?
1. 數據可靠性是多副本機制或EC機制實現
2. 組件的可靠性是組件都是主備或多活部署
3. 掉電保護機制
多副本機制靠Partition View中的OSD的主備狀態來決定是幾副本。
寫IO流程
OS下發寫IO到VBS,VBS對寫IO做成key-value形式再進行DHT運算,先對key-value進行hash計算,再將HASH值進行取模得到partition id,找到對應的主OSD,將寫IO下發給主OSD,主OSD進行同步雙寫,將寫IO發給本服務器的ssd cache和該io數據所屬副本服務器的備OSD,備OSD同步寫入本服務器ssd cache,當主備都寫完成后主OSD返回寫成功給VBS,而后它們的cache再異步寫入服務器的硬盤。