21 叢集邏輯磁碟區管理員 (叢集 LVM) #
管理叢集上的共享儲存時,儲存子系統發生的變更必須通知到每個節點。廣泛用於管理本地儲存的 Logical Volume Manager 2 (LVM2) 已進行延伸,現可支援對整個叢集中的磁碟區群組進行透明管理。在多個主機之間共享的磁碟區群組可使用與本地儲存相同的指令進行管理。
21.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 由共享儲存組成,可被多個主機同時使用。
21.2 叢集 LVM 的組態 #
確定符合以下要求:
有共享儲存裝置可用,例如,該共享儲存裝置可透過光纖通道、FCoE、SCSI、iSCSI SAN 或 DRBD* 提供。
確定已安裝以下套件:
lvm2
和lvm2-lockd
。自 SUSE Linux Enterprise 15 起,我們使用 lvmlockd 做為 LVM2 叢集延伸,而不再使用 clvmd。請確定 clvmd 精靈未執行,否則 lvmlockd 將無法啟動。
21.2.1 建立叢集資源 #
在一個節點上執行以下基本步驟,以在叢集中設定共享 VG:
啟動外圍程序並以
root
身分登入。檢查叢集資源的目前組態:
root #
crm configure show如果您已設定 DLM 資源 (以及對應的基礎群組和基礎複製品),請繼續程序 21.2 「建立 lvmlockd 資源」。
若非如此,請依照程序 17.1 「設定 DLM 的基礎群組」 所述設定 DLM 資源以及對應的基礎群組和基礎複製品。
啟動外圍程序並以
root
身分登入。執行以下指令以查看此資源的使用情況:
root #
crm configure ra info lvmlockd依如下所示設定
lvmlockd
資源:root #
crm configure primitive lvmlockd ocf:heartbeat:lvmlockd \ op start timeout="90" \ op stop timeout="100" \ op monitor interval="30" timeout="90"為了確定在每個節點上都啟動
lvmlockd
資源,請將基本資源新增至您在程序 21.1 「建立 DLM 資源」中為儲存建立的基礎群組:root #
crm configure modgroup g-storage add lvmlockd複查所做的變更:
root #
crm configure show檢查資源是否正常執行:
root #
crm status full
啟動外圍程序並以
root
身分登入。假設您已有兩個共享磁碟,並使用它們建立共享 VG:
root #
vgcreate --shared vg1 /dev/sda /dev/sdb建立 LV 但一開始不啟用它:
root #
lvcreate -an -L10G -n lv1 vg1
啟動外圍程序並以
root
身分登入。執行以下指令以查看此資源的使用情況:
root #
crm configure ra info LVM-activate此資源負責管理 VG 的啟用。在共享 VG 中,有兩種不同的 LV 啟用模式:獨佔模式和共享模式。獨佔模式是預設模式,通常應在
ext4
等本地檔案系統使用 LV 時使用。共享模式僅應用於 OCFS2 等叢集檔案系統。設定資源以管理您 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=90sroot #
crm configure modgroup g-storage add vg1
檢查資源是否正常執行:
root #
crm status full
21.2.2 案例:在 SAN 上將叢集 LVM 與 iSCSI 搭配使用 #
以下案例將使用兩個 SAN Box,它們會將 iSCSI 目標輸出至多個用戶端。圖形 21.1 「使用叢集 LVM 設定共享磁碟」 中說明了一般的情況。
以下程序將損毀您磁碟上的資料!
開始請只設定一個 SAN Box。每個 SAN Box 需要輸出自己的 iSCSI 目標。請執行下列步驟:
執行 YaST,然後按一下
› ,啟動 iSCSI 伺服器模組。如果您希望電腦每次開機時啟動 iSCSI 目標,請選擇
,否則請選擇 。如果有防火牆在執行,則啟用
。切換至
索引標籤。如果需要驗證,請啟用內送及/或外送驗證。在本例中,我們選取的是 。新增新的 iSCSI 目標:
切換至
索引標籤。按一下
。輸入目標名稱。名稱需要採用以下格式:
iqn.DATE.DOMAIN
如需該格式的詳細資訊,請參閱第 3.2.6.3.1 節「Type "iqn." (iSCSI Qualified Name)」(「iqn.」(iSCSI 合格名稱) 類型),網址為:http://www.ietf.org/rfc/rfc3720.txt。
如果您想使用更具描述性的名稱,可以變更名稱,只要確保每個目標的識別碼都是唯一的即可。
按一下
。在
中輸入裝置名稱,並使用 。按兩次
。
出現警告對話方塊時,按一下
加以確認。開啟組態檔案
/etc/iscsi/iscsid.conf
,並將參數node.startup
變更為automatic
。
接著,按如下所示設定 iSCSI 啟動器:
執行 YaST,然後按一下
› 。如果您要在電腦開機時啟動 iSCSI 啟動器,請選擇
,否則請設定 。切換至
索引標籤,然後按一下 按鈕。新增 iSCSI 目標的 IP 位址和連接埠 (請參閱程序 21.5 「設定 iSCSI 目標 (SAN)」)。一般不用變更連接埠,使用其預設值即可。
如果使用驗證,請插入內送及外送的使用者名稱和密碼,否則請啟用
。選取
。清單中會顯示找到的連線。按一下
繼續。開啟外圍程序,以
root
身分登入。測試 iSCSI 啟動器是否已正常啟動:
root #
iscsiadm
-m discovery -t st -p 192.168.3.100 192.168.3.100:3260,1 iqn.2010-03.de.jupiter:san1建立工作階段:
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 「設定 iSCSI 啟動器」 中執行了 iSCSI 啟動器的節點上開啟
root
外圍程序。在磁碟
/dev/sdd
和/dev/sde
上建立共享磁碟區群組:root #
vgcreate --shared testvg /dev/sdd /dev/sde根據需要建立邏輯磁碟區:
root #
lvcreate
--name lv1 --size 500M testvg使用
vgdisplay
檢查磁碟區群組:--- Volume group --- VG Name testvg 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/testvg
下會顯示新的裝置名稱,例如 /dev/testvg/lv1
。這表示 LV 已啟用,可供使用。
21.2.3 案例:將叢集 LVM 與 DRBD 搭配使用 #
如果您的資料中心分佈在城市、國家甚至大陸的不同位置,可以參照以下案例。
建立主要/次要 DRBD 資源:
首先,如程序 20.1 「手動設定 DRBD」 中所述將一部 DRBD 裝置設定成主要或次要裝置。確定兩個節點上的磁碟狀態均為
最新
。使用drbdadm status
確認是否如此。在組態檔案 (通常類似於
/etc/drbd.d/r0.res
) 中新增以下選項:resource r0 { net { allow-two-primaries; } ... }
將變更後的組態檔案複製到另一個節點,例如:
root #
scp
/etc/drbd.d/r0.res venus:/etc/drbd.d/在兩個節點上執行以下指令:
root #
drbdadm
disconnect r0root #
drbdadm
connect r0root #
drbdadm
primary r0檢查節點的狀態:
root #
drbdadm
status r0
將 lvmlockd 資源做為複製品包含在 Pacemaker 組態中,並使它依賴於 DLM 複製品。如需詳細指示,請參閱程序 21.1 「建立 DLM 資源」。繼續之前,請先確定已在叢集中成功啟動這些資源。您可以使用
crm status
或 Web 介面檢查執行中的服務。使用
pvcreate
指令為 LVM 備妥實體磁碟區。例如,在/dev/drbd_r0
裝置上使用如下指令:root #
pvcreate
/dev/drbd_r0建立共享磁碟區群組:
root #
vgcreate
--shared testvg /dev/drbd_r0根據需要建立邏輯磁碟區。您有時可能想要變更邏輯磁碟區的大小。例如,使用以下指令建立一個 4 GB 的邏輯磁碟區:
root #
lvcreate
--name lv1 -L 4G testvg現在,VG 中的邏輯磁碟區便可做為掛接的檔案系統或原始用途使用。請確保使用它們的服務具有正確的相依性,這樣才能在啟動 VG 後對它們進行並存和排序處理。
完成這些組態設定步驟後,便能像在任何獨立工作站上一般進行 LVM2 組態設定。
21.3 明確設定適合的 LVM2 裝置 #
如果看似有多部裝置共享同一個實體磁碟區簽名 (多路徑裝置或 DRBD 就有可能發生這種情況),建議明確設定 LVM2 掃描 PV 的裝置。
例如,如果指令 vgcreate
使用實體裝置而非鏡像區塊裝置,則 DRBD 會產生混亂。進而導致 DRBD 出現電腦分裂情況。
若要停用 LVM2 的單一裝置,請執行以下操作:
編輯
/etc/lvm/lvm.conf
檔案並搜尋以filter
開頭的行。該處的模式將被視為正規表示式進行處理。前置 「a」 表示接受要掃描的裝置模式,前置 「r」 表示拒絕依照該裝置模式的裝置。
若要移除名為
/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/.*/" ]
寫入組態檔案並將其複製到所有叢集節點。
21.4 從鏡像 LV 線上移轉至叢集 MD #
從 SUSE Linux Enterprise High Availability Extension 15 開始,叢集 LVM 中的 cmirrord
已被取代。我們強烈建議將叢集中的鏡像邏輯磁碟區移轉至叢集 MD。叢集 MD 表示「叢集多裝置」,是適用於叢集的軟體式 RAID 儲存解決方案。
21.4.1 移轉之前的範例設定 #
假設您採用以下範例設定:
您有一個雙節點叢集,它由節點
alice
和bob
組成。名為
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
選項)?: 在開始移轉之前,請增大實體磁碟區的大小,或減小邏輯磁碟區的大小 (以便為實體磁碟區釋放更多的空間)。
21.4.2 將鏡像 LV 移轉至叢集 MD #
以下程序以第 21.4.1 節 「移轉之前的範例設定」為基礎。請根據設定調整指令,並相應地取代 LV、VG、磁碟和叢集 MD 裝置的名稱。
移轉程序完全不會造成停機。在移轉期間仍可掛接檔案系統。
在節點
alice
上執行以下步驟:將鏡像邏輯磁碟區
test-lv
轉換為線性邏輯磁碟區:root #
lvconvert -m0 cluster-vg2/test-lv /dev/vdc從磁碟區群組
cluster-vg2
中移除實體磁碟區/dev/vdc
:root #
vgreduce cluster-vg2 /dev/vdc從 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
使用磁碟
/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
選項的詳細資料,請參閱重要:避免移轉失敗。
在節點
bob
上組合以下 MD 裝置:root #
mdadm --assemble md0 /dev/vdc如果您的叢集由兩個以上的節點組成,請在該叢集中的所有剩餘節點上執行此步驟。
回到節點
alice
:將 MD 裝置
/dev/md0
啟始化為可與 LVM 搭配使用的實體磁碟區:root #
pvcreate /dev/md0將 MD 裝置
/dev/md0
新增至磁碟區群組cluster-vg2
:root #
vgextend cluster-vg2 /dev/md0將磁碟
/dev/vdb
中的資料移至/dev/md0
裝置:root #
pvmove /dev/vdb /dev/md0從磁碟區群組
group cluster-vg2
中移除實體磁碟區/dev/vdb
:root #
vgreduce cluster-vg2 /dev/vdb從裝置中移除標籤,使 LVM 不再將該裝置識別為實體磁碟區:
root #
pvremove /dev/vdb將
/dev/vdb
新增至 MD 裝置/dev/md0
:root #
mdadm --grow /dev/md0 --raid-devices=2 --add /dev/vdb
21.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
21.5 更多資訊 #
如需 lvmlockd 的詳細資訊,請參閱 lvmlockd
指令 的 man 頁面 (man 8 lvmlockd
)。
完整資訊可參閱 Pacemaker 郵寄清單 (網址為 http://www.clusterlabs.org/wiki/Help:Contents)。