套用至 SUSE Linux Enterprise High Availability Extension 12 SP5

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

摘要

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

21.1 概念綜覽

系統透過不同的工具來協調叢集化 LVM2︰

分散式鎖定管理員 (DLM)

透過鎖定機制協調 cLVM 的磁碟存取並調解中繼資料存取。

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

能讓一個檔案系統靈活分散在多個磁碟上。LVM2 提供虛擬的磁碟空間池。

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

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

21.2 cLVM 的組態

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

請確定您已符合以下先決條件︰

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

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

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

  • 檢查是否已停用 lvmetad 精靈,因為它不能與 cLVM 配合使用。在 /etc/lvm/lvm.conf 中,關鍵字 use_lvmetad 必須設定為 0 (預設值為 1)。需要時,將組態複製到所有節點。

21.2.1 建立叢集資源

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

程序 21.1︰ 建立 DLM 資源
  1. 啟動外圍程序並以 root 身分登入。

  2. 檢查叢集資源的目前組態︰

    root # crm configure show
  3. 如果您已設定 DLM 資源 (以及對應的基礎群組和基礎複製品),請繼續程序 21.2 「設定 DLM、CLVM 和 STONITH」

    若非如此,請依照程序 17.1 「設定 DLM 的基礎群組」 所述設定 DLM 資源以及對應的基礎群組和基礎複製品。

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

21.2.2 情境︰設定 Cmirrord

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

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

程序 21.2︰ 設定 DLM、CLVM 和 STONITH
  1. 依《安裝與設定快速入門》所述,建立至少包含兩個節點的叢集。

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

    root # crm configure
    crm(live)configure# primitive clvmd ocf:heartbeat:clvm \
            params with_cmirrord=1 \
            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 timeout="90" \
            op stop timeout="100" \
            op monitor interval="60" timeout="60"
    crm(live)configure# primitive sbd_stonith stonith:external/sbd \
            params pcmk_delay_max=30
    crm(live)configure# group g-storage dlm clvmd
    crm(live)configure# clone cl-storage g-storage \
            meta interleave="true" ordered=true
  3. 使用 exit 離開 crmsh 並確定您的變更。

使用程序 21.3 繼續設定磁碟。

程序 21.3︰ 為 cLVM 設定磁碟
  1. 建立叢集化磁碟區群組 (VG)︰

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

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

  4. 若要測試叢集化磁碟區 /dev/vg1/lv1,請執行下列步驟︰

    1. 讀取或寫入到 /dev/vg1/lv1

    2. 使用 lvchange -an 停用 LV。

    3. 使用 lvchange -ay 啟動 LV。

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

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

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

為支援對 RAID10 使用 cmirrord,請執行下面的程序 (假設 /dev/sda/dev/sdb/dev/sdc/dev/sdd 是共享儲存裝置)︰

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

    root # pvcreate /dev/sda /dev/sdb /dev/sdc /dev/sdd
      Physical volume "/dev/sda" successfully created
      Physical volume "/dev/sdb" successfully created
      Physical volume "/dev/sdc" successfully created
      Physical volume "/dev/sdd" successfully created
    root # vgcreate vgtest /dev/sda /dev/sdb /dev/sdc /dev/sdd
      Clustered volume group "vgtest" successfully created
  2. 開啟檔案 /etc/lvm/lvm.conf,並轉至 allocation 區段。設定下行並儲存該檔案︰

    mirror_logs_require_separate_pvs = 1
  3. 將您的標記新增至 PV︰

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

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

  4. 列出您的標記︰

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

    產生的輸出如下︰

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

如需關於 LVM2 的更多資訊,請參閱《SUSE Linux Enterprise Server 12 SP5 儲存管理指南》:https://documentation.suse.com/sles-12/html/SLES-all/cha-lvm.html

21.2.3 案例:SAN 上 cLVM 與 iSCSI 配合使用

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

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

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

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

程序 21.4︰ 設定 iSCSI 目標 (SAN)
  1. 執行 YaST,然後按一下網路服務 › iSCSI LIO 目標 ,啟動 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/iscsid.conf,並將參數 node.startup 變更為 automatic

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

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

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

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

  4. 新增 iSCSI 目標的 IP 位址和連接埠 (請參閱程序 21.4 「設定 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 -p 192.168.3.100 -T iqn.2010-03.de.jupiter:san1
    Logging in to [iface: default, target: iqn.2010-03.de.jupiter:san1, portal: 192.168.3.100,3260]
    Login to [iface: default, target: iqn.2010-03.de.jupiter:san1, portal: 192.168.3.100,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

程序 21.6︰ 建立 LVM2 磁碟區群組
  1. 在其中一個您於 程序 21.5 「設定 iSCSI 啟動器」 中執行了 iSCSI 啟動器的節點上開啟 root 外圍程序。

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

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

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

    root # lvcreate -m1 --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-* 的新裝置。建議您使用 LVM2 資源上的叢集檔案系統,例如 OCFS。如需詳細資訊,請參閱 第 18 章 「OCFS2

21.2.4 案例︰cLVM 與 DRBD 搭配

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

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

    1. 首先,如程序 20.1 「手動設定 DRBD」 中所述將一部 DRBD 裝置設定成主要或次要裝置。確定兩個節點上的磁碟狀態均為最新。使用 drbdadm status 確認是否如此。

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

      resource r0 {
        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 # drbdadm status r0
  2. 將 clvmd 資源做為複製品包括在 Pacemaker 組態中,並使之依賴於 DLM 複製品資源。如需詳細指示,請參閱程序 21.1 「建立 DLM 資源」。繼續之前,請先確定已在叢集中成功啟動這些資源。您可以使用 crm status 或 Web 介面檢查執行中的服務。

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

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

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

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

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

21.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. 寫入組態檔案並將其複製到所有叢集節點。

21.4 更多資訊

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

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

列印此頁面