分佈式環境中使用基於共享存儲的LVM塊設備時的元數據同步方案對比 原 薦

紅帽HA集羣概述

特性

  • 使用基於使用令牌環的totem協議(待確認,感覺像是paxos協議),多數投票通過纔可以生效。

  • 支持多個節點,理論上是沒有節點限制的。

  • 對於兩個節點,只不過是當其中一個節點失效時,整個集羣由於無法獲得多數票而掛起,也可以使用主備模式。

  • 支持仲裁設備(Quorum Devices),但目前處於技術預覽階段,且需要仲裁設備運行Linux系統。

組成

必備組件

  • 資源(Resources)以及資源代理(Resources Agent),支持LSB、OCF、systemd和Upstart等類型的資源代理。

  • 消息傳遞(CoroSync),基礎的分佈式消息傳遞框架。

  • 集羣配置及管理(PaceMaker),基於CoroSync進行同步,使用XML格式的配置文件。

基礎組件

  • 隔離設備(Fence)以及隔離設備代理(Fence Agent),支持電源或IO隔離(LIO或者stgt搭建的iSCSI Target服務支持SCSI-3的 PRs隔離功能)。

  • 鎖管理器(DLM),必須有隔離設備才能使用,依賴CoroSync和Fence。

可選組件

這些組件都依賴分佈式鎖DLM,間接依賴隔離設備。

  • CLVM
  • GFS2
  • OCFS2

LVM特性

  • LVM操作分兩個部分:元數據讀寫和使用DeviceMapper創建刪除MappedDevice(激活、去激活)。

  • 所有操作都需要鎖操作,共支持6中鎖,常用的是本地鎖(flock)。

  • 集羣環境使用clvmd(flock的替代),或lvmlockd(flock的補充)。

  • 鎖操作的對象主要是:全局、卷組(孤立的物理卷)、邏輯卷激活去激活。

  • 鎖操作類型主要是:鎖定、解鎖、更新。

  • 鎖操作的主要模式是:共享讀、獨佔寫、完全獨佔。

  • lvmetad元數據服務在啓動時或者有設備變更(註冊udev通知)時更改自己內部緩存的狀態,執行LVM命令時首先從lvmetad獲取狀態,然後根據狀態決定是否掃描磁盤,如果掃描,則將新的元數據傳給lvmetad,lvmetad自身並不進行掃描。

  • 當不使用lvmetad時,每次執行LVM命令都需要從磁盤讀取元數據,性能較差。

LVM最佳實踐

  • 一個磁盤創建一個分區、創建一個PV,每個VG只包含一個PV,減少元數據讀寫數量。

  • 將LVM的正常使用分爲:創建刪除、激活去激活、查詢修改三類,進行合理封裝。

  • 禁止開機VG或LV自動激活(可通過修改lvm.conf來實現),虛擬機使用時激活,不使用時取消激活。

  • 如果通過LVM命令查詢命令(lvs等)執行較多,則建議使用元數據服務lvmetad(不能與CLVM共存),有效減少掃面磁盤元數據次數。

  • 當存在多個VG或PV時,使用pvscan命令時,可通過指定PV路徑來減掃描數量。

  • 所有對LVM的增刪查改等操作均通過LVM命令進行,儘量不要通過其他接口進行(比如/dev或/sys目錄),避免可能出現不一致的情況。

  • 如果在共享存儲上,多節點使用LVM,且開啓lvmetad元數據服務,則要麼在底層使用lvmlockd或clvm,要麼使用者要自己處理好不一致問題。

可選同步方案

應用層自己進行多節點LVM同步

只在單一節點進行元數據更改並部署LVM狀態服務,其他節點在進行LVM相關操作先從LVM狀態服務獲取LVM當前狀態,然後根據情況更新本地元數據緩存。或者關閉lvmetad元數據服務,只在單一節點盡心LVM變更操作等實用技巧來規避不一致的問題。

  • 優點:簡單可控,技術風險低,使用時多加註意就可以解決。

  • 缺點:應用層需要進行良好封裝、實現的工作量或者複雜度相對較大(具體跟需求和使用方式相關,也可以做到很簡單)。

lvmetad + lvmlockd + sanlock(wdmd)

  • 優點:一致性由底層負責,對應用層無額外要求,且可以使用元數據服務。

  • 缺點:依賴SanLock,需首先部署好SanLock,需對SanLock有足夠了解。

lvmetad + lvmlockd + dlm + corosync(pacemaker) + fence(scsi prs)

  • 優點:一致性由底層負責,對應用層無額外要求,且可以使用元數據服務。

  • 缺點:依賴PaceMaker,需首先使用PaceMaker進行集羣管理。

lvmetad + external_lock

自己寫一個動態鏈接庫,實現LVM中所需的鎖功能。

  • 優點:一致性由底層負責,對應用層無額外要求,且可以使用元數據服務。靈活、自由,可根據需要實現鎖的功能。

  • 缺點:需熟悉LVM的鎖插件擴展,實現難度和工作量相對較大。

clvmd + dlm + corosync(pacemaker) + fence(scsi prs)

  • 優點:一致性由底層負責,對應用層無額外要求。

  • 缺點:依賴PaceMaker,需首先使用PaceMaker進行集羣管理。不可以使用元數據服務,性能更差,lvmlockd完全可以替代。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章