套用至 SUSE Linux Enterprise High Availability Extension 12

16 叢集邏輯磁碟區管理員 (cLVM)

管理叢集上的共享儲存時,儲存子系統發生的變更必須通知到每個節點。廣泛用於管理本地儲存的 Linux Volume Manager 2 (LVM2) 已經過延伸,現可支援對整個叢集中磁碟區群組的透明管理。可使用與本地儲存相同的指令來管理叢集化磁碟區群組。

16.1 概念綜覽

叢集化 LVM 可與其他工具搭配使用︰

分散式鎖定管理員 (DLM)

協調 cLVM 的磁碟存取。

邏輯磁碟區管理員2 (LVM2)

能讓一個檔案系統靈活分散在多個磁碟上。LVM 可提供虛擬磁碟儲存區。

叢集邏輯磁碟區管理員 (cLVM)

協調對 LVM2 中繼資料的存取,讓每個節點瞭解相關的變更。cLVM 不會協調對共享資料本身的存取;若要讓其對此進行協調,必須在受 cLVM 管理的儲存上設定 OCFS2 或其他叢集感知應用程式。

16.2 cLVM 的組態

某些情況下可以使用 cLVM 建立含以下幾層的 RAID 1 裝置︰

雖然 MD 裝置 (Linux 軟體 RAID 或 mdadm) 提供所有 RAID 層級,但它尚不支援叢集。因此,以上清單並未包含此類裝置。

請確定您已滿足以下必要條件︰

  • 有共享儲存裝置可用,該儲存裝置可以透過光纖通道、FCoE、SCSI、iSCSI SAN 或 DRBD* 提供。

  • 如果是 DRBD,兩個節點都必須是主要節點 (如下文程序中所述)。

  • 檢查 LVM2 的鎖定類型是否能感知叢集。/etc/lvm/lvm.conf 中關鍵字 locking_type 的值必須包含 3 (應為預設值)。需要時,將組態複製到所有節點。

注意
注意:先建立叢集資源

請先依照第 16.2.2 節「建立叢集資源」 所述建立叢集資源,然後再建立 LVM 磁碟區。若不依照此順序,以後將無法移除這些磁碟區。

16.2.1 設定 Cmirrord

若要追蹤叢集中的鏡像複製記錄資訊,可使用 cmirrord 精靈。如果此精靈未在執行中,則無法進行叢集鏡像複製。

假設 /dev/sda/dev/sdb 是共享儲存裝置。如有必要,請使用您自己的裝置名稱取代它們。請執行下列步驟:

  1. 建立一個至少包含兩個節點的叢集。

  2. 對叢集進行設定,以執行 dlmclvmd 與 STONITH:

    root # crm configure
    crm(live)configure# primitive clvmd ocf:lvm2:clvmd \
            op stop interval="0" timeout="100" \
            op start interval="0" timeout="90" \
            op monitor interval="20" timeout="20"
    crm(live)configure# primitive dlm ocf:pacemaker:controld \
            op start interval="0" timeout="90" \
            op stop interval="0" timeout="100" \
            op monitor interval="60" timeout="60"
    crm(live)configure# primitive sbd_stonith stonith:external/sbd
    crm(live)configure# group base-group dlm clvmd
    crm(live)configure# clone base-clone base-group \
            meta interleave="true"
  3. 使用 exit 離開 crmsh 並確定您的變更。

  4. 建立叢集化磁碟區群組 (VG):

    root # pvcreate /dev/sda /dev/sdb
    root # vgcreate -cy vg /dev/sda /dev/sdb
  5. 在您的叢集中建立鏡像複製記錄邏輯磁碟區 (LV):

    root # lvcreate -nlv -m1 -l10%VG vg --mirrorlog mirrored
  6. 使用 lvs 顯示進度。如果百分比數字已達到 100%,則表示已成功同步化鏡像複製磁碟。

  7. 若要測試叢集化磁碟區 /dev/vg/lv,可執行下列步驟:

    1. 針對 /dev/vg/lv 執行讀取或寫入操作。

    2. 使用 lvchange -an 停用 LV。

    3. 使用 lvchange -ay 啟動 LV。

    4. 使用 lvconvert 將鏡像複製記錄轉換成磁碟記錄。

  8. 在另一個叢集 VG 中建立鏡像複製記錄 LV。這個磁碟區群組與前面使用的磁碟區群組不同。

目前的 cLVM 針對每個鏡像端只能處理一個實體磁碟區 (PV)。如果一個鏡像實際上由若干個需要串連或等量分割的 PV 組成,lvcreate 不會知曉這種情況。因此,lvcreatecmirrord 中繼資料需要知曉如何將 PV分組到一端,以高效支援 RAID10。

為了讓 cmirrord 支援 RAID10,請使用以下程序 (假設 /dev/sda/dev/sdb 是共享儲存裝置):

  1. 建立磁碟區群組 (VG):

    root # pvcreate /dev/sda /dev/sdb
    root # vgcreate vg /dev/sda /dev/sdb
  2. 開啟檔案 /etc/lvm/lvm.conf,並轉至 allocation 區段。設定下行並儲存該檔案:

    mirror_legs_require_separate_pvs = 1
  3. 將您的標記新增至 PV:

    root # pvchange --addtag @a /dev/sda
    root # pvchange --addtag @b /dev/sdb

    標記是指定給儲存物件中繼資料的無序關鍵字或詞彙。透過使用標記,您可以為 LVM 儲存物件的中繼資料附加無序的標記清單,用實用的方式對物件集合進行分類。

  4. 列出您的標記:

    root # pvs -o pv_name,vg_name,pv_tags /dev/sd{a,b}

    產生的輸出如下:

      PV         VG     PV Tags
      /dev/sda vgtest a
      /dev/sdb vgtest b

如需關於 LVM 的更多資訊,請參閱《SUSE Linux Enterprise Server 12 儲存管理指南》中的「LVM 組態」一章,此文件位於 http://www.suse.com/documentation/

16.2.2 建立叢集資源

準備要使用 cLVM 的叢集的工作包括下列基本步驟:

過程 16.1 建立 DLM 資源
注意
注意:用於 cLVM 與 OCFS2 的 DLM 資源

cLVM 與 OCFS2 都需要在叢集的所有節點上執行的 DLM 資源,因此該資源通常會設定為複製品。如果您的環境中包含 OCFS2 與 cLVM,只需為 OCFS2 與 cLVM 設定一個 DLM 資源就足夠了。

  1. 啟動外圍程序並以 root 身分登入。

  2. 執行 crm configure

  3. 使用 show 檢查叢集資源的目前組態。

  4. 如果您已設定 DLM 資源 (以及對應的基礎群組和基礎複製品),請繼續過程 16.2, “建立 LVM 及 cLVM 資源”

    若非如此,請依照過程 13.2, “設定 DLM 資源” 所述設定 DLM 資源以及對應的基礎群組和基礎複製品。

  5. 使用 exit 離開 crm 即時組態。

過程 16.2 建立 LVM 及 cLVM 資源
  1. 啟動外圍程序並以 root 身分登入。

  2. 執行 crm configure

  3. 按如下方式設定 cLVM 資源:

    crm(live)configure# primitive clvm ocf:lvm2:clvmd \
          params daemon_timeout="30"
  4. 按如下方式為磁碟區群組設定 LVM 資源:

    crm(live)configure# primitive vg1 ocf:heartbeat:LVM \
          params volgrpname="cluster-vg" \
          op monitor interval="60" timeout="60"
  5. 如果您希望磁碟區群組在一個節點上以獨佔模式啟用,請依照如下方式設定 LVM 資源並省略步驟 6

    crm(live)configure# primitive vg1 ocf:heartbeat:LVM \
          params volgrpname="cluster-vg" exclusive="yes" \
          op monitor interval="60" timeout="60"

    如此,cLVM 將保護 VG 內的所有邏輯磁碟區,避免它們在多個節點上啟用,這是保護非叢集化應用程式的另一種方法。

  6. 為了確保在整個叢集內啟用 cLVM 與 LVM 資源,請將這兩種基本資源新增至您在過程 13.2, “設定 DLM 資源” 中建立的基礎群組︰

    1. 輸入

      crm(live)configure# edit base-group
    2. 在開啟的 vi 編輯器中,對群組做如下修改並儲存所做的變更:

      crm(live)configure# group base-group dlm clvm vg1 ocfs2-1
      重要
      重要:不包含 OCFS2 的環境

      如果您的環境不包含 OCFS2,請在基礎群組中省略 ocfs2-1 基本資源。

  7. 使用 show 檢閱所做的變更。

  8. 如果所有設定都正確,請使用 commit 提交變更,然後使用 exit 離開 crm 即時組態。

16.2.3 案例︰SAN 上 cLVM 與 iSCSI 搭配使用

以下案例將使用兩個 SAN Box,它們會將 iSCSI 目標輸出至多個用戶端。圖形 16.1 「cLVM 搭配 iSCSI 的設定」 中說明了一般的情況。

cLVM 搭配 iSCSI 的設定
圖形 16.1 cLVM 搭配 iSCSI 的設定
警告
警告:資料損失

以下程序將損毀您磁碟上的資料!

開始請只設定一個 SAN Box。每個 SAN Box 需要輸出自己的 iSCSI 目標。請執行下列步驟:

過程 16.3 設定 iSCSI 目標 (SAN)
  1. 執行 YaST,然後按一下網路服務 › iSCSI 目標,啟動 iSCSI 伺服器模組。

  2. 如果您希望電腦每次開機時啟動 iSCSI 目標,請選擇開機時,否則請選擇手動

  3. 如果有防火牆在執行,則啟用在防火牆中開啟埠

  4. 切換至全域索引標籤。如果需要驗證,請啟用內送驗證、外送驗證或兩者均啟用。在本例中,我們選取的是無驗證

  5. 新增新的 iSCSI 目標︰

    1. 切換至目標索引標籤。

    2. 按一下新增

    3. 輸入目標名稱。名稱需要採用以下格式︰

      iqn.DATE.DOMAIN

      如需該格式的詳細資訊,請參閱第 3.2.6.3.1 節「Type "iqn." (iSCSI Qualified Name)」(「iqn.」(iSCSI 合格名稱) 類型),網址為︰http://www.ietf.org/rfc/rfc3720.txt

    4. 如果您想使用更具描述性的名稱,可以變更名稱,只要確保每個目標的識別碼都是唯一的即可。

    5. 按一下新增

    6. 路徑中輸入裝置名稱,並使用Scsiid

    7. 按兩次下一步

  6. 出現警告對話方塊時,按一下加以確認。

  7. 開啟組態檔案 /etc/iscsi/iscsi.conf,並將參數 node.startup 變更為 automatic

接著,按如下所示設定 iSCSI 啟動器︰

過程 16.4 設定 iSCSI 啟動器
  1. 執行 YaST,然後按一下網路服務 › iSCSI 啟動器

  2. 如果您要在電腦開機時啟動 iSCSI 啟動器,請選擇開機時,否則請設定手動

  3. 切換至探查索引標籤,然後按一下探查按鈕。

  4. 新增 iSCSI 目標的 IP 位址和連接埠 (請參閱過程 16.3, “設定 iSCSI 目標 (SAN)”)。一般不用變更連接埠,使用其預設值即可。

  5. 如果使用驗證,請插入內送及外送的使用者名稱和密碼,否則請啟用無驗證

  6. 選取下一步。清單中會顯示找到的連線。

  7. 按一下完成繼續。

  8. 開啟外圍程序,以 root 身分登入。

  9. 測試 iSCSI 啟動器是否已正常啟動︰

    root # iscsiadm -m discovery -t st -p 192.168.3.100
    192.168.3.100:3260,1 iqn.2010-03.de.jupiter:san1
  10. 建立工作階段︰

    root # iscsiadm -m node -l
    Logging in to [iface: default, target: iqn.2010-03.de.jupiter:san2, portal: 192.168.3.100,3260]
    Logging in to [iface: default, target: iqn.2010-03.de.venus:san1, portal: 192.168.3.101,3260]
    Login to [iface: default, target: iqn.2010-03.de.jupiter:san2, portal: 192.168.3.100,3260]: successful
    Login to [iface: default, target: iqn.2010-03.de.venus:san1, portal: 192.168.3.101,3260]: successful

    使用 lsscsi 查看裝置名稱︰

    ...
    [4:0:0:2]    disk    IET      ...     0     /dev/sdd
    [5:0:0:1]    disk    IET      ...     0     /dev/sde

    尋找第三欄中含有 IET 的項目。在本例中,裝置分別是 /dev/sdd/dev/sde

過程 16.5 建立 LVM 磁碟區群組
  1. 在其中一個您於 過程 16.4, “設定 iSCSI 啟動器” 中執行了 iSCSI 啟動器的節點上開啟 root 外圍程序。

  2. 對磁碟 /dev/sdd/dev/sde 使用指令 pvcreate,為 LVM 準備好實體磁碟區︰

    root # pvcreate /dev/sdd
    root # pvcreate /dev/sde
  3. 在兩個磁碟上建立叢集感知磁碟區群組︰

    root # vgcreate --clustered y clustervg /dev/sdd /dev/sde
  4. 根據需要建立邏輯磁碟區︰

    root # lvcreate --name clusterlv --size 500M clustervg
  5. 使用 pvdisplay 檢查實體磁碟區:

      --- Physical volume ---
          PV Name               /dev/sdd
          VG Name               clustervg
          PV Size               509,88 MB / not usable 1,88 MB
          Allocatable           yes
          PE Size (KByte)       4096
          Total PE              127
          Free PE               127
          Allocated PE          0
          PV UUID               52okH4-nv3z-2AUL-GhAN-8DAZ-GMtU-Xrn9Kh
          
          --- Physical volume ---
          PV Name               /dev/sde
          VG Name               clustervg
          PV Size               509,84 MB / not usable 1,84 MB
          Allocatable           yes
          PE Size (KByte)       4096
          Total PE              127
          Free PE               127
          Allocated PE          0
          PV UUID               Ouj3Xm-AI58-lxB1-mWm2-xn51-agM2-0UuHFC
  6. 使用 vgdisplay 檢查磁碟區群組:

      --- Volume group ---
          VG Name               clustervg
          System ID
          Format                lvm2
          Metadata Areas        2
          Metadata Sequence No  1
          VG Access             read/write
          VG Status             resizable
          Clustered             yes
          Shared                no
          MAX LV                0
          Cur LV                0
          Open LV               0
          Max PV                0
          Cur PV                2
          Act PV                2
          VG Size               1016,00 MB
          PE Size               4,00 MB
          Total PE              254
          Alloc PE / Size       0 / 0
          Free  PE / Size       254 / 1016,00 MB
          VG UUID               UCyWw8-2jqV-enuT-KH4d-NXQI-JhH3-J24anD

建立磁碟區並啟動資源之後,會出現名為 /dev/dm-0 的新裝置。建議您使用 LVM 資源上的叢集檔案系統,例如 OCFS。如需詳細資訊,請參閱第 13 章「OCFS2

16.2.4 案例︰cLVM 與 DRBD 搭配

如果您的資料中心分佈在城市、國家甚至大陸的不同位置,可以參照以下案例。

過程 16.6 使用 DRBD 建立叢集感知磁碟區群組
  1. 建立主要/次要 DRBD 資源︰

    1. 首先,如過程 15.1, “手動設定 DRBD” 中所述將一部 DRBD 裝置設定成主要或次要裝置。確定兩個節點上的磁碟狀態均為最新。可以使用 cat /proc/drbdsystemctl status drbd.service 來檢查。

    2. 在組態檔案 (通常類似於 /etc/drbd.d/r0.res) 中新增以下選項︰

      resource r0 {
        startup {
          become-primary-on both;
        }
      
        net {
           allow-two-primaries;
        }
        ...
      }
    3. 將變更後的組態檔案複製到另一個節點,例如︰

      root # scp /etc/drbd.d/r0.res venus:/etc/drbd.d/
    4. 兩個節點上執行以下指令︰

      root # drbdadm disconnect r0
      root # drbdadm connect r0
      root # drbdadm primary r0
    5. 檢查節點的狀態︰

      root # cat /proc/drbd
      ...
       0: cs:Connected ro:Primary/Primary ds:UpToDate/UpToDate C r----
  2. 將 clvmd 資源做為複製品包括在 Pacemaker 組態中,並使之依賴於 DLM 複製品資源。如需詳細指示,請參閱過程 16.1, “建立 DLM 資源”。繼續之前,請先確定已在叢集中成功啟動這些資源。您可以使用 crm_mon 或 Web 介面檢查執行中的服務。

  3. 使用 pvcreate 指令為 LVM 備妥實體磁碟區。例如,在 /dev/drbd_r0 裝置上使用如下指令︰

    root # pvcreate /dev/drbd_r0
  4. 建立叢集感知磁碟區群組︰

    root # vgcreate --clustered y myclusterfs /dev/drbd_r0
  5. 根據需要建立邏輯磁碟區。您有時可能需要變更邏輯磁碟區的大小。例如,使用以下指令建立一個 4 GB 的邏輯磁碟區:

    root # lvcreate --name testlv -L 4G myclusterfs
  6. 現在,VG 中的邏輯磁碟區便可做為掛接的檔案系統或原始用途使用。請確保使用它們的服務具有正確的相依性,這樣才能在啟動 VG 後對它們進行並存和排序處理。

完成這些組態設定步驟後,便能像在任何獨立工作站上一般進行 LVM2 組態設定。

16.3 明確設定適合的 LVM2 裝置

如果看似有多部裝置共享同一個實體磁碟區簽名 (多重路徑裝置或 DRBD 就有可能發生這種情況),建議明確設定 LVM2 掃描 PV 的裝置。

例如,如果 vgcreate 指令使用實體裝置而非使用鏡像複製區塊裝置,將使 DRBD 感到困惑,從而導致 DRBD 處於電腦分裂狀態。

若要停用 LVM2 的單一裝置,請執行以下操作:

  1. 編輯 /etc/lvm/lvm.conf 檔案並搜尋以 filter 開頭的行。

  2. 該處的模式將被視為正規表示式進行處理。前置 a 表示接受要掃描的裝置模式,前置 r 表示拒絕依照該裝置模式的裝置。

  3. 若要移除名為 /dev/sdb1 的裝置,請將下列表示式新增至過濾器規則:

    "r|^/dev/sdb1$|"

    完整的過濾器行如下所示:

    filter = [ "r|^/dev/sdb1$|", "r|/dev/.*/by-path/.*|", "r|/dev/.*/by-id/.*|", "a/.*/" ]

    接受 DRBD 和 MPIO 裝置但拒絕所有其他裝置的過濾器行如下所示:

    filter = [ "a|/dev/drbd.*|", "a|/dev/.*/by-id/dm-uuid-mpath-.*|", "r/.*/" ]
  4. 寫入組態檔案並將其複製到所有叢集節點。

16.4 更多資訊

完整資訊可參閱 Pacemaker 郵寄清單 (網址為 http://www.clusterlabs.org/wiki/Help:Contents)。

官方 cLVM FAQ 可在 http://sources.redhat.com/cluster/wiki/FAQ/CLVM 中找到。

列印此頁面