跳至內容跳至頁面導覽:上一頁 [access key p]/下一頁 [access key n]
documentation.suse.com / SUSE Linux Enterprise High Availability Extension 文件 / 管理指南 / 儲存和資料複製 / 叢集邏輯磁碟區管理員 (叢集 LVM)
適用範圍 SUSE Linux Enterprise High Availability Extension 15 SP3

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

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

22.1 概念綜覽

系統透過不同的工具來協調叢集 LVM:

分散式鎖定管理員 (DLM)

透過全叢集鎖定來協調對多個主機間共用資源的存取。

邏輯磁碟區管理員 (LVM2)

LVM2 提供磁碟空間的虛擬池,允許將一個邏輯磁碟區靈活分佈到多個磁碟。

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

叢集 LVM 一詞表示叢集環境中使用 LVM2。這需要進行一些組態調整,以保護共用儲存上的 LVM2 中繼資料。自 SUSE Linux Enterprise 15 起,叢集延伸使用 lvmlockd 取代了眾所周知的 clvmd。如需 lvmlockd 的詳細資訊,請參閱 lvmlockd 指令 的 man 頁面 (man 8 lvmlockd)。

磁碟區群組和邏輯磁碟區

磁碟區群組 (VG) 和邏輯磁碟區 (LV) 都屬於 LVM2 的基本概念。磁碟區群組是多個實體磁碟的儲存池。邏輯磁碟區屬於磁碟區群組,可視為一種彈性磁碟區,您可以在其上建立檔案系統。在叢集環境中,存在共用 VG 的概念,共用 VG 由共用儲存組成,可被多個主機同時使用。

22.2 叢集 LVM 的組態

確定符合以下要求:

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

  • 確定已安裝以下套件:lvm2lvm2-lockd

  • 自 SUSE Linux Enterprise 15 起,我們使用 lvmlockd 做為 LVM2 叢集延伸,而不再使用 clvmd。請確定 clvmd 精靈未執行,否則 lvmlockd 將無法啟動。

22.2.1 建立叢集資源

在一個節點上執行以下基本步驟,以在叢集中設定共用 VG:

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

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

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

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

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

  2. 執行以下指令以查看此資源的使用情況:

    root # crm configure ra info lvmlockd
  3. 依如下所示設定 lvmlockd 資源:

    root # crm configure primitive lvmlockd ocf:heartbeat:lvmlockd \
      op start timeout="90" \
      op stop timeout="100" \
      op monitor interval="30" timeout="90"
  4. 為了確定在每個節點上都啟動 lvmlockd 資源,請將基本資源新增至您在程序 22.1 「建立 DLM 資源」中為儲存建立的基礎群組:

    root # crm configure modgroup g-storage add lvmlockd
  5. 複查所做的變更:

    root # crm configure show
  6. 檢查資源是否正常執行:

    root # crm status full
程序 22.3︰ 建立共用 VG 和 LV
  1. 啟動外圍程序並以 root 身分登入。

  2. 假設您已有兩個共用磁碟,並使用它們建立共用 VG:

    root # vgcreate --shared vg1 /dev/sda /dev/sdb
  3. 建立 LV 但一開始不啟用它:

    root # lvcreate -an -L10G -n lv1 vg1
程序 22.4︰ 建立 LVM-activate 資源
  1. 啟動外圍程序並以 root 身分登入。

  2. 執行以下指令以查看此資源的使用情況:

    root # crm configure ra info LVM-activate

    此資源負責管理 VG 的啟用。在共用 VG 中,有兩種不同的 LV 啟用模式:獨佔模式和共用模式。獨佔模式是預設模式,通常應在 ext4 等本地檔案系統使用 LV 時使用。共用模式僅應用於 OCFS2 等叢集檔案系統。

  3. 設定資源以管理您 VG 的啟用。根據您的案例,選擇下列其中一個選項:

    • 對於本地檔案系統使用,請使用獨佔啟用模式:

      root # crm configure primitive vg1 ocf:heartbeat:LVM-activate \
        params vgname=vg1 vg_access_mode=lvmlockd \
        op start timeout=90s interval=0 \
        op stop timeout=90s interval=0 \
        op monitor interval=30s timeout=90s
    • 對於 OCFS2,請使用共用啟用模式,並將其新增至複製的 g-storage 群組:

      root # crm configure primitive vg1 ocf:heartbeat:LVM-activate \
        params vgname=vg1 vg_access_mode=lvmlockd activation_mode=shared \
        op start timeout=90s interval=0 \
        op stop timeout=90s interval=0 \
        op monitor interval=30s timeout=90s
      root # crm configure modgroup g-storage add vg1
  4. 檢查資源是否正常執行:

    root # crm status full

22.2.2 案例:在 SAN 上將叢集 LVM 與 iSCSI 搭配使用

以下案例將使用兩個 SAN Box,它們會將 iSCSI 目標輸出至多個用戶端。圖形 22.1 「使用叢集 LVM 的共用磁碟設定」 中說明了一般的情況。

使用叢集 LVM 的共用磁碟設定
圖 22.1︰ 使用叢集 LVM 的共用磁碟設定
警告
警告:資料遺失

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

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

程序 22.5︰ 設定 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 啟動器:

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

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

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

  4. 新增 iSCSI 目標的 IP 位址和連接埠 (請參閱程序 22.5 「設定 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

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

  2. 在磁碟 /dev/sdd/dev/sde 上建立共用磁碟區群組:

    root # vgcreate --shared testvg /dev/sdd /dev/sde
  3. 根據需要建立邏輯磁碟區:

    root # lvcreate --name lv1 --size 500M testvg
  4. 使用 vgdisplay 檢查磁碟區群組:

      --- Volume group ---
          VG Name               testvg
          System ID
          Format                lvm2
          Metadata Areas        2
          Metadata Sequence No  1
          VG Access             read/write
          VG Status             resizable
          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
  5. 使用 vgs 指令檢查磁碟區群組的共用狀態:

    root # vgs
      VG       #PV #LV #SN Attr   VSize     VFree  
      vgshared   1   1   0 wz--ns 1016.00m  1016.00m

    Attr 欄顯示磁碟區屬性:在此範例中,磁碟區群組可寫入 (w)、可調整大小 (z),配置規則為一般 (n),並且其為共用資源 (s)。如需詳細資料,請參閱 vgs 的 man 頁面。

建立磁碟區並啟動資源後,/dev/testvg 下會顯示新的裝置名稱,例如 /dev/testvg/lv1。這表示 LV 已啟用,可供使用。

22.2.3 案例:將叢集 LVM 與 DRBD 搭配使用

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

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

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

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

    root # pvcreate /dev/drbd_r0
  4. 建立共用磁碟區群組:

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

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

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

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

22.4 從鏡像 LV 線上移轉至叢集 MD

SUSE Linux Enterprise High Availability Extension 15 開始,叢集 LVM 中的 cmirrord 已被取代。我們強烈建議將叢集中的鏡像邏輯磁碟區移轉至叢集 MD。叢集 MD 表示「叢集多裝置」,是適用於叢集的軟體式 RAID 儲存解決方案。

22.4.1 移轉之前的範例設定

假設您採用以下範例設定:

  • 您有一個雙節點叢集,它由節點 alicebob 組成。

  • 名為 test-lv 的鏡像邏輯磁碟區是從名為 cluster-vg2 的磁碟區群組建立的。

  • 磁碟區群組 cluster-vg2 由磁碟 /dev/vdb/dev/vdc 組成。

root # lsblk
NAME                                  MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
vda                                   253:0    0   40G  0 disk
├─vda1                                253:1    0    4G  0 part [SWAP]
└─vda2                                253:2    0   36G  0 part /
vdb                                   253:16   0   20G  0 disk
├─cluster--vg2-test--lv_mlog_mimage_0 254:0    0    4M  0 lvm
│ └─cluster--vg2-test--lv_mlog        254:2    0    4M  0 lvm
│   └─cluster--vg2-test--lv           254:5    0   12G  0 lvm
└─cluster--vg2-test--lv_mimage_0      254:3    0   12G  0 lvm
  └─cluster--vg2-test--lv             254:5    0   12G  0 lvm
vdc                                   253:32   0   20G  0 disk
├─cluster--vg2-test--lv_mlog_mimage_1 254:1    0    4M  0 lvm
│ └─cluster--vg2-test--lv_mlog        254:2    0    4M  0 lvm
│   └─cluster--vg2-test--lv           254:5    0   12G  0 lvm
└─cluster--vg2-test--lv_mimage_1      254:4    0   12G  0 lvm
  └─cluster--vg2-test--lv             254:5    0   12G  0 lvm
重要
重要:避免移轉失敗

在啟動移轉程序之前,請檢查邏輯磁碟區和實體磁碟區的容量與使用率。如果邏輯磁碟區使用了 100% 的實體磁碟區容量,則移轉可能會失敗,並在目標磁碟區上顯示可用空間不足錯誤。如何防止這種移轉失敗取決於鏡像記錄所用的選項:

  • 鏡像記錄本身是否已鏡像 (mirrored 選項),並且已在鏡像根所在的同一個裝置上進行配置?: (例如,如果您依照 這些版本的《管理指南》 所述,為 SUSE Linux Enterprise High Availability Extension 11 或 12 上的 cmirrord 設定建立了邏輯磁碟區,則可能符合這種情況)。

    依預設,mdadm 會在裝置開頭與陣列資料開頭之間保留一定的空間容量。在移轉期間,您可以檢查未使用的填補空間,並使用 data-offset 選項減小此空間,如步驟 1.d 和下文所述。

    data-offset 必須在裝置上保留足夠的空間,使叢集 MD 能夠將其中繼資料寫入裝置。另一方面,偏移量必須足夠小,使裝置的剩餘容量可以容納所移轉磁碟區的所有實體磁碟區範圍。由於磁碟區可能已跨越整個裝置但不包括鏡像記錄,因此,偏移量必須小於鏡像記錄的大小。

    我們建議將 data-offset 設定為 128 KB。如果未指定偏移量的值,其預設值為 1 KB (1024 位元組)。

  • 鏡像記錄是已寫入不同的裝置 (disk 選項),還是保留在記憶體中 (core 選項)?: 在開始移轉之前,請增大實體磁碟區的大小,或減小邏輯磁碟區的大小 (以便為實體磁碟區釋放更多的空間)。

22.4.2 將鏡像 LV 移轉至叢集 MD

以下程序以第 22.4.1 節 「移轉之前的範例設定」為基礎。請根據設定調整指令,並相應地取代 LV、VG、磁碟和叢集 MD 裝置的名稱。

移轉程序完全不會造成停機。在移轉期間仍可掛接檔案系統。

  1. 在節點 alice 上執行以下步驟:

    1. 將鏡像邏輯磁碟區 test-lv 轉換為線性邏輯磁碟區:

      root # lvconvert -m0 cluster-vg2/test-lv /dev/vdc
    2. 從磁碟區群組 cluster-vg2 中移除實體磁碟區 /dev/vdc

      root # vgreduce cluster-vg2 /dev/vdc
    3. 從 LVM 中移除以下實體磁碟區:

      root # pvremove /dev/vdc

      如果現在就執行 lsblk,您將會看到:

      NAME                                  MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
      vda                     253:0    0   40G  0 disk
      ├─vda1                  253:1    0    4G  0 part [SWAP]
      └─vda2                  253:2    0   36G  0 part /
      vdb                     253:16   0   20G  0 disk
      └─cluster--vg2-test--lv 254:5    0   12G  0 lvm
      vdc                     253:32   0   20G  0 disk
    4. 使用磁碟 /dev/vdc 建立叢集 MD 裝置 /dev/md0

      root # mdadm --create /dev/md0 --bitmap=clustered \
      --metadata=1.2 --raid-devices=1 --force --level=mirror \
      /dev/vdc --data-offset=128

      如需為何要使用 data-offset 選項的詳細資料,請參閱重要:避免移轉失敗

  2. 在節點 bob 上組合以下 MD 裝置:

    root # mdadm --assemble md0 /dev/vdc

    如果您的叢集由兩個以上的節點組成,請在該叢集中的所有剩餘節點上執行此步驟。

  3. 回到節點 alice

    1. 將 MD 裝置 /dev/md0 啟始化為可與 LVM 搭配使用的實體磁碟區:

      root # pvcreate /dev/md0
    2. 將 MD 裝置 /dev/md0 新增至磁碟區群組 cluster-vg2

      root # vgextend cluster-vg2 /dev/md0
    3. 將磁碟 /dev/vdb 中的資料移至 /dev/md0 裝置:

      root # pvmove /dev/vdb /dev/md0
    4. 從磁碟區群組 group cluster-vg2 中移除實體磁碟區 /dev/vdb

      root # vgreduce cluster-vg2 /dev/vdb
    5. 從裝置中移除標籤,使 LVM 不再將該裝置識別為實體磁碟區:

      root # pvremove /dev/vdb
    6. /dev/vdb 新增至 MD 裝置 /dev/md0

      root # mdadm --grow /dev/md0 --raid-devices=2 --add /dev/vdb

22.4.3 移轉之後的範例設定

如果現在就執行 lsblk,您將會看到:

NAME                      MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
vda                       253:0    0   40G  0 disk
├─vda1                    253:1    0    4G  0 part  [SWAP]
└─vda2                    253:2    0   36G  0 part  /
vdb                       253:16   0   20G  0 disk
└─md0                       9:0    0   20G  0 raid1
  └─cluster--vg2-test--lv 254:5    0   12G  0 lvm
vdc                       253:32   0   20G  0 disk
└─md0                       9:0    0   20G  0 raid1
  └─cluster--vg2-test--lv 254:5    0   12G  0 lvm

22.5 更多資訊

如需 lvmlockd 的詳細資訊,請參閱 lvmlockd 指令 的 man 頁面 (man 8 lvmlockd)。

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