常見集群 Cluster 軟體和技術解析

2021-12-29 21:16:14 字數 2868 閱讀 7365

集群就是通過軟體將一組伺服器作為乙個整體向客戶提供資源。這些單個的伺服器就是集群的節點。當對外提供資源的節點故障後,集群中其餘的節點能夠將資源接管起來,繼續對客戶提供資源。

集群技術的核心就是資源訪問控制。由於集群中所有節點都可以訪問集群對外共享的資源,當多個節點同時操作同乙個資源的時候,就可能引發問題。例如節點a要對共享的儲存進行寫資料操作,如果節點b也要對相同位置的儲存進行寫操作,則會引發資料不一致的後果。

一般情況,根據集群資源訪問控制技術的發展,我們可以將集群分為無預留模式、scsi-2預留模式和scsi-3預留模式集群。不同模式的集群對儲存系統的要求是不同的。

最開始的時候,集群的模式為無預留。該模式下,最常見的控制方式是控制捲組狀態。此時集群節點訪問lun的過程如下。

1. 集群節點上對lun建立捲組、邏輯卷。

2. 集群節點啟動集群業務。

3. 集群判斷哪個節點是主節點、哪個節點是備節點。

4. 集群在主節點啟用捲組、掛載邏輯卷。

5. 集群在備節點去啟用捲組,確保無法訪問邏輯卷。

這種工作模式下,對儲存系統並沒有額外的要求,只需要對映的lun能夠在作業系統上建立捲組、邏輯卷並正常讀寫即可。集群控制每個節點對lun的訪問是通過控制節點上捲組的狀態來實現的。

這種方式實現起來是最簡單的,但是有乙個非常嚴重的缺陷就是心跳不能出現問題。一旦出現腦裂(集群節點間心跳通訊斷開),集群節點間相互失去了聯絡,則每個節點都會誤認為對方出現故障,從而引發節點搶占資源的情況。

另外,在乙個共享儲存的環境下,多台前端主機可能會同時訪問同一臺儲存裝置,如果此時多台主機在同一時點上對乙個lun進行寫操作,那麼可想而知這個lun將不知道哪個資料先寫,哪個資料後寫。為了防止這種情況發生而導致的資料損壞,所以就有了scsi預留概念。通過scsi reservation機制來進行資料讀寫的操作,目前絕大多數的磁碟和陣列都支援scsi reservvation命令。如果一台主機給磁碟陣列傳輸了一條scsi reservation命令,則這個磁碟陣列對於其他的主機就處於鎖定狀態。

如果有其他的主機給已經被鎖定的磁碟傳送讀寫請求,則會收到reservation conflict報錯資訊。如果保留scsi預留的主機崩潰,或者其他主機給磁碟陣列傳送break reservation或者reset target命令用來解除scsi鎖。然後,第二個主機傳送i/o請求之前需要重新傳送scsi reservation命令給磁碟陣列,才可以進行後續的io操作。scsi預留有scsi-2 reservation和scsi-3 reservation兩種型別,然而乙個lun上只能存在一種型別的scsi預留。

為解決腦裂後集群節點搶占資源的問題,引入了scsi-2預留模式的集群。在這種情況下,集群節點訪問lun的過程如下。

1. 集群節點向需要訪問的lun發起預留操作。

2. 預留操作成功後,則節點獲得lun操作許可權;如果預留失敗,提示預留衝突,會繼續嘗試,直到預留成功。

3. 節點對lun操作完畢後,執行釋放操作,其他節點可以預留。

通過使用這種預留方式,可以保證任意時刻均只有乙個節點能訪問共享資源,但是它要求儲存系統支援scsi-2預留命令集,同時也有下面的一些缺陷。

1)預留基於路徑。集群節點存在多路徑的情況下,當前路徑故障後,預留無法取消,無法對lun繼續訪問,多路徑相當於沒有生效。

2)誰預留誰釋放。如果lun已經被預留,其他節點將無法預留,除非對lun進行重置操作。但是重置容易引發資料不一致。因為重置操作是不會通知原先預留主機的。

由於scsi-2 reservation只允許裝置被發出scsi鎖的initiator訪問,也就是主機的hba。比如主機1上的hba1對訪問的lun加上scsi-2鎖,此時即使主機1的hba2也無法訪問這個lun。所以scsi-2 reservation也被稱為single path reservation。

為解決scsi-2預留的問題,最終引入了scsi-3持續預留的集群技術。在該模式下,集群節點在訪問lun之前,首先向lun註冊(registration)乙個預留金鑰(persistent reservation key),註冊成功後集群節點可以嘗試進行持續預留(persistent reserve),持續預留成功後就可以獲得lun操作許可權。

不同的主機對應的pr key也不同,所以一般scsi-3 reservation通常被應用在多路徑的共享環境下面。這裡scsi-3 reservation也稱之為persistent reservation。與scsi-2不同,scsi-3釋放操作根據預留金鑰,不同集群節點可以使用相同金鑰或是不同金鑰進行預留,具體可以結合持續預留型別決定。集群節點可以通過搶占來獲取已被持續預留的lun訪問許可權。scsi-3搶占和scsi-2重置不一樣,搶占不會造成資料丟失。

scsi-3預留能夠解決之前集群模式預留的問題,但是它對儲存系統要求更高,要求其支援更多更複雜的scsi-3預留命令集。

scsi預留是多台主機用來操作lun的基本機制。在windows儲存環境中,當多台windows主機需要訪問乙個lun的情況下,例如windows cluster環境,就會用到scsi預留命令。接下來就windows cluster 2003/ 2008中使用到的scsi預留命令進行介紹。

windows 2003集群中使用scsi-2 reserverelease命令。作為非持久的reservation,集群中的一台節點會持有scsi-2 reservation的鎖,然後每過3秒會重新重新整理一次。如果故障轉移發生,則切換節點主機會在相應的磁碟上放置scsi-2 reservation然後維護scsi鎖。如果所有節點主機上的集群服務都會關閉,reservation也不會保留。

windows 2008集群中使用scsi-3 persistent reservation機制。如果磁碟從主機上沒有正確移除,集群使用的磁碟(cluster disk)會保留著這些reservation。鎖對應的scsi預留會一直存在於相應的磁碟之上,即使集群服務被關閉或者磁碟對於主機取消對映(unmasked)。所以,有些時候需要強行移除磁碟上的reservation。

常見集群 Cluster 軟體和技術解析

集群就是通過軟體將一組伺服器作為乙個整體向客戶提供資源。這些單個的伺服器就是集群的節點。當 對外提供資源的節點故障後 集群中其餘的節點能夠 將資源接管起來,繼續對客戶提供資源 集群技術的核心就是資源訪問控制。由於集群中所有節點都可以訪問集群對外共享的資源,當多個節點同時操作同乙個資源的時候,就可能引...

常見的軟體開發模型和UML

該模型特點,必須前一階段的工作完成後,才能開始後一階段的工作 該模型的特點,先學乙個軟體出來,給客戶用,使用者判斷滿意,終結產品,不滿意修改軟體業務 增量模型融合了瀑布模型的基本成分,和原型實現的迭代特徵,顯著特點,先做基本的功能模組,以後在做其他的功能模組 該模型,的各個階段沒有明顯的界限,開發人...

常見的軟體測試問答題和參考回答

如何保證產品質量?1 解決測試環境和線上環境不一致問題 由測試人員搭建和維護qa環境,只有在qa環境下測試ok,才能上線 2 提高開發人員 質量 1 測試提供冒煙測試,只有開發自測通過後才能提測 2 開發切分功能點進行提測,減輕開發工作量 3 測試時間周期長 1 測試工作前置,在開發階段完成介面的功...