vSAN常見錯誤故障排錯

2021-09-11 09:09:13 字數 4900 閱讀 2207

suo.im/4z**wm

本次演講主要分享vsan常見故障排除,其中包括:vsan建立vm全過程介紹,vsan排錯方**和vsan常用排錯工具。

vsan是軟體定義的物件儲存,vmware的物件儲存和虛擬化的產品是緊密的結合在一起的,它實際上是將本機磁碟組中的硬碟聚集起來打造的虛擬的軟體定義的共享儲存。這個環境中只有主機、伺服器,沒有第三方的硬體儲存。

傳統儲存如果用的是共享儲存,伺服器連線到lun,然後在lun中建立vmfs檔案系統,檔案系統中有虛擬機器的資料夾,由vmkernel進行虛擬機器檔案i/o。

vsan中不再以檔案的形式進行資料訪問,vsan建立之後有個vsan datastore,這個datastore中存放著5類虛擬機器的物件,分別是namespace、vmdk、快照、記憶體以及交換檔案。

vsan資料保護和效能提公升主要通過軟體層面的策略來實現,由策略定義效能和可用性等。上圖是建立vsan儲存策略的介面,可以在此進行各種策略的配置。

可用性最基本的指標就是資料有多個副本,比如raid 1可以有兩個資料副本。在vsan中通過pftt策略來保證可用性,即容忍錯誤的數量是多少,如果為0 就表示不能容錯,資料只有乙份拷貝,1表示容忍出錯1次,資料有兩份拷貝。pftt預設為1,相當於實現了raid 1的效果,最大可以設定為3。

在raid中效能的提公升需要依靠raid 0,raid 0是將資料切成多個條帶來進行儲存。vsan中也能將資料切分成多個條帶,最多12份進行同時寫。

vsan中有這樣幾個軟體元件。clom(集群級別的物件管理器),dom(分布式物件管理器),lsom(本地日誌結構物件管理器),cmmds(集群成員監視和目錄服務)。

更形象一點的描述,clom可以理解為架構師,dom是承包商,lsom則是worker,最後的cmmds為專案經理。

clom會根據建立的儲存策略決定物件是否能基於策略被建立出來,即策略會不會生效。比如副本數是3,要生成4分拷貝,但是集群中只有3臺主機,很明顯此時的策略無法生效,因為沒有充足的主機提供使用。clom還會檢測整個集群範圍內主機的負載情況,將物件及其元件分散到不同的主機上,並且當元件出現問題要進行修復的時候將決定該元件在哪些主機上重建。

clom元件在後台有著乙個程序,所以一定要保證主機上的這個程序沒有出現問題。由於該程序是執行在每個vsan的節點之上,因此可以通過/etc/init.d/clomd來檢視它的當前狀態。

dom也是執行在集群中的每台主機上。dom會接收來自clom的指令,並著手實施,它會找lsom來真正的幹活。前面提到的5類物件中都有乙個dom owner,用來審核針對該物件的io操作,決定是否能夠執行,如果io操作被允許就由dom client來執行。

實際的i/o操作會被dom分配到lsom上,由於lsom會對裝置直接進行i/o,所以它是執行在某個主機的核心空間中的,而沒有程序。

cmmds能夠告訴我們整個vsan集群拓撲的全貌和物件的狀態,包括集群中的伺服器、網路、硬碟裝置,物件元資料資訊,新增或刪除主機等,它還會定義集群中的三個角色master、backup、agent,master負責管理整個vsan集群的業務,backup是master的備份。

我們簡單的梳理下這幾個元件之間的互動,首先由clom接到請求建立物件開始,如果根據策略能建立它就會將需求發給dom,由dom進行元件的建立,dom決定好要建立哪個元件之後將需求傳送給lsom,lsom跟儲存層(ssd、硬碟)進行互動執行具體的i/o。另外的cmmds會列舉出整個集群中的可用資源,以及這些資源的拓撲和可用情況。

虛擬機器建立的時候,首先vcenter的vpxd程序會和主機進行通訊,選擇某個主機建立虛擬機器儲存。主機上的vpxa程序接收到vpxd發出的請求後,cmmds會建立策略,主機根據策略建立虛擬機器及其關聯的vmdk。由於vmdk是物件,因此要由clom根據策略來決定是否能建立該物件及其元件,當元件的建立的位置被決定好之後cmmds會更新clom發出的元件拓撲資訊。

另外主機上的dom接收到clom發出的資訊後,將建立物件元件的要求下發到本地lsom上,最後lsom通過本地儲存來建立虛擬機器的儲存物件。

home namesace物件其實是乙個小的虛擬機器資料夾vmfs檔案系統,vmdk、swap、snapshot deltas、vm memory這4個物件對應的是原來系統中的4個大檔案。

這些物件不是直接放在硬碟上,而是分成若干個元件的形式寫入儲存,這是為了實現raid、效能以及可用性。具體的切分方式和儲存策略相關,比如要實現raid 1就將資料複製成兩個元件來寫(未計入witness元件),既實現raid 0又實現raid 1則要4個元件。

上圖是raid 1的組織結構,很明顯的看到有兩個component元件,細心的朋友可能發現了這裡還多了個witness(仲裁元件)。raid 1的兩個副本中如果其中之一損壞了,就無法進行讀,因為此時不能確定哪個副本是完好的。witness的存在正是為了解決這一問題,它的投票直接決定了哪個元件可用。

下面我們結合具體的例子來看下不同策略下物件和元件到底是如何建立的。(以下元件的計算都不包含witness)

首先是pftt等於0(容錯為0),ftm為raid 1,條帶為1的情況,此時的硬碟會寫1個元件,因為只有1份拷貝。

pftt等於1(容錯為1),ftm為raid 1,條帶為1的情況下,硬碟會寫2個元件(拷貝為2)。

pftt等於2(容錯為2),ftm為raid 1,條帶為1的情況下,硬碟會寫3個元件。需要注意的是這裡的witness會有兩個。

pftt等於1(容錯為1),ftm為raid 1,條帶為2的情況下。因為這裡的資料有2份拷貝,所以有2個mirror,同時條帶又為2,因此mirror將會被拆成兩份。總結起來一共有4個元件。

pftt等於2(容錯為2),ftm為raid 1,條帶為3的情況下。根據上面的計算規律可以很輕鬆的計算出,此時的元件數量應該為9。

需要提到的是預設情況下元件最大為255g,如果某個vmdk物件大小超過255g,就會被平均拆成多份。

同樣是pftt等於1(容錯為1),ftm為raid 1,條帶為1的情況。此時由於硬碟大小為400g,超過了預設的255g,所以每個盤會被拆分成兩份,每份200g。一共是4個元件。

這裡是pftt等於0(容錯為0),ftm為raid 1,條帶為1的情況,因為是600g的硬碟,所以要被平均拆分成3份(注:是每個不超過255g)。

定義問題不能僅限於表層的描述,要能夠具體的找出引發問題的關鍵點。比如有關資源競爭的問題,在vsan集群中esxi主機上不僅會執行虛擬機器還會進行硬碟的i/o,由於主機是分布式儲存集群的一員,因此除了給虛擬機器提供cpu和記憶體資源之外,還會額外的消耗資源在硬碟i/o上。如果i/o特別密集且虛擬機器負載又高的話,兩者之間就會產生競爭衝突。所以在出現資源競爭問題的時候,需要先看下cpu和記憶體的使用率是否過高。

要想解決問題,首先應盡可能的收集額外的詳細資訊。在遇到任何問題時候,第一舉措就是保護好現場,比如拍照或截圖,因為有些提示可能會一閃而過不會再重現。有了這些資訊後,再根據自身掌握的知識體系結構列出可能原因,然後依次排除。

這裡我們對定義問題做更詳細的描述。首先是問題能否重現,如果能重現解決起來就相對容易。其次是逐漸縮小問題範圍,從集群到主機再到元件依次排查。另外在問題出現之前是否對系統做過改動,通過日誌檢視有哪些變動。由於vmware的使用者基數很大,因此我們可以在相關論壇和官方**中搜尋是否有遇到同樣問題的線索。通過每次新版本發布的release notes,也能判斷問題是否由bug引起。

問題定義完之後接下來就要找尋問題的原因,根據現有產品中環境的狀態進行判斷,比如檢查當前集群、物件和元件的健康狀態,硬碟以及虛擬機器關聯物件是否存在問題等。上圖就是vsan集群的健康狀態監控,直觀的展示了當前集群的各種情況。

除了圖形介面外,還可以通過一些vsan的命令或指令碼在控制台中檢視當前狀態。

最後要做的是構造解決方案,下面通過一些具體的例子來描述。比如主機進入維護模式造成虛擬機器不可用,一般在有多份拷貝的情況下進入維護模式並無太大影響,但只有兩份拷貝的時候,如果其中乙個副本已損壞,另乙個正常的副本卻進入了維護模式,那麼在退出維護模式的時候這兩份資料副本就都不是最新狀態。所以在進維護模式之前一定要執行vsan.check_state指令碼檢查物件的所有元件是否健康正常。

虛擬機器i/o出錯很有可能是由於其相關的元件有問題,可以通過vsan.vm_object_info指令碼來檢查物件資訊,它會顯示出物件具體存在的問題並進行修復。也有可能是主機進入維護模式引起的,這時可以退出維護模式以進行修復。

效能問題同樣值得關注,比如磁碟組離線導致虛擬機器出錯。一般效能出問題,有可能是cpu和記憶體效能不夠也有可能與驅動器有關,硬碟是否相容也要考慮到。

為防止datastore空間耗盡,在它達到70%臨界值的時候,就該計畫擴容分配加主機、磁碟組或硬碟。

上圖列出是與esxcli相關的一些命令,可以在主機本地shell或者通過ssh遠端連線到主機使用。這些命令並不需要強記,只要輸入esxcli就會列出後續的子命令列表,如下圖是使用esxcli storage後的幫助列表。

日誌檔案是最常用的輔助手段之一,推薦大家關注vobd.log、vmkernerl.log、vmkwarning.log、clomd.log這個四個日誌檔案。這些日誌檔案可以配合python指令碼來使用。

上圖的vsandiskfaultinjection.pyc指令碼是用來模擬vsan集群出現問題後的情況,通過 —help列出相關的幫助資訊,比如 -u是模擬硬碟的熱拔出。

這是具體的執行命令,-d指明了要拔出的裝置。

命令執行完之後在日誌中就展示出了錯誤資訊。

裝置重新上線後,日誌中的資訊會進行更新,可以看到下方已經顯示online了。

最後我們通過乙個具體的例子來演示下如何使用esxcli相關的命令。假如集群中的某台伺服器的系統損壞,但是硬碟沒有問題還儲存著vsan的資料,這時我們要做的是對系統進行重灌,重新加入到vsan集群中。那麼如何加入呢,其實可以通過esxcli vsan命令來完成。

在vsan集群的其他正常主機上執行 esxcli vsan cluster get命令得到當前集群的資訊,這裡有乙個關鍵的條目——集群的uuid(圖中紅色標識的)。

獲取到uuid之後,就可以在新裝主機上執行esxcli vsan cluster join -u 「uuid」命令加入到集群中,然後在當前主機上使用esxcli vsan cluster get就會看到它已經正常加入到集群中了。

dns故障排錯

dns故障排錯 1.故障現象 部分客戶反應 通過 計算機名的方式訪問伺服器失敗,但是可以通過 ip的方式訪問 ie中通過 主機名 的方式訪問網頁失敗,但是可以通過 ip 的方式客戶反應dns故障,要求排除 2.網路環境 域環境,已經建立內部的dns伺服器,客戶端通過dhcp獲取ip位址 3.故障排查...

故障排錯實戰案例

實戰案例1 centos 7 8 破壞mbr後進行恢復 dd if dev zero of dev sda bs 1 count 446 光碟進入救援模式 grub2 install root directory mnt sysimage dev sda 實戰案例2 entos 7 8刪除 boot...

網路故障排錯工具

ping命令ping的物件一般都會給予回應,如果沒有回應則表示不通。當網路不通時,依次ping本地回環,本地ip,閘道器ip,外網ip。root localhost 桌面 ping 127.0.0.1 ping本地回環,測試本地網路協議是否正常 root localhost 桌面 ping 192....