Linux

在兩個 Linux 伺服器之間鏡像 VG

  • November 23, 2015

我有兩個節點,每個節點有 20 個 HDD(相同大小)。兩個節點都配置了 2 個 VG,每個 VG 使用 10 個磁碟創建。1 個 VG 稱為 SAN,第 2 個稱為 NAS。

Node1- 將提供 nfs 服務,並且 nfs 數據將保存在 NAS vg 上的一個名為 nfs 的 LV 上(在 node2 上看起來相同)。VG SAN 將是節點 2 上 SAN VG 的備份。

Node2- 將提供 SAN 服務,數據將保存在 LV 上。每個 lv 代表一個 lun 並使用 targetcli ,我正在從每個 lv 創建塊設備。因此,根據對 lun 的請求,我創建了一個具有所需大小的 LV,並使用這個新創建的 LV 在 targetcli 中創建了一個後台儲存(塊設備)。

VG NAS 也存在於節點 2 上,用於備份節點 1 的 NAS VG 中的數據。備份的數據不應該被質疑:我考慮過使用 drbd 將數據從每個節點備份到另一個節點,因此最終每個節點 1 將備份節點 2,反之亦然。使用 NAS VG 我沒問題,因為它只有一個 lv 並且是靜態的。問題是,我不斷創建 LV 的 SAN VG 會發生什麼?drbd 會在另一邊創建它們以及備份的結果嗎?如果不是,我如何才能始終保持這些 VG 相同,這意味著當我在節點 2 上創建 LV 時,它將自動在節點 1 上創建?

順便說一句 - 兩個節點上的作業系統都是 centos7.1

非常感謝您的幫助!

DRBD 可以使用任何塊設備作為它的備份磁碟;LVM 或物理磁碟本身將與 DRBD 一起使用。此外,DRBD 創建了一個新的虛擬塊設備,如果您願意,您可以將其用作 LVM 的物理卷。任何在 DRBD 上創建的 LV 或 VG 都可以在 DRBD 被提升為主節點後在對等節點上啟動。

您需要調整 LVM 過濾器以獲取 DRBD 設備上的 LVM 簽名,並在/etc/lvm/lvm.conf.

過濾器 = ["a|/dev/sd.*|", "a|/dev/drbd.*|", "r|.*|"]
write_cache_state = 0

完成此操作後,您應該能夠使用“上下”DRBD 的 LVM。創建 LVM 用作 DRBD 的備份磁碟(範例假設 sdb1 是物理驅動器);在兩個節點上執行以下步驟:

# pvcreate /dev/sdb1
物理卷“/dev/sdb1”成功創建
# vgcreate vg_drbd_back /dev/sdb1
卷組“vg_drbd_back”成功創建
# lvcreate --name r0 --size 100G vg_drbd_back
已創建邏輯卷“r0”

r0在兩個節點上創建您的 DRBD 配置:

資源 r0 {
設備/dev/drbd0;
磁碟 /dev/vg_drbd_back/r0;
元磁碟內部;
在主機上-a {地址xxxx:7789;}
在 host-b {地址 xxxx:7789; }
}

通過創建元數據並在兩個節點上啟動設備來初始化 DRBD,然後選擇一個節點提升為主節點(–force 僅用於初始同步)。

然後,在主節點上,在 DRBD 設備上創建 PV、VG 和 LVM 簽名:

# pvcreate /dev/drbd0
物理卷“/dev/drbd0”成功創建
# vgcreate vg_drbd_front /dev/drbd0
卷組“vg_drbd_front”成功創建
# lvcreate --name drbd_lvm0 --size 30G vg_drbd_front
已創建邏輯卷“drbd_lvm0”
# lvcreate --name drbd_lvm1 --size 40G vg_drbd_front
已創建邏輯卷“drbd_lvm1”

要手動對 LVM 進行故障轉移,您需要先停用主卷組上的捲組,然後才能將其降級為輔助卷組:

# vgchange -an vg_drbd_front
卷組“vg_drbd_front”中的 0 個邏輯卷現在處於活動狀態
# drbdadm 二級 r0

然後在對等體上,提升 DRBD 並啟動卷組:

# drbdadm 主 r0
# vgchange -ay vg_drbd_front
卷組“vg_drbd_front”中的 2 個邏輯卷現在處於活動狀態

當然,如果您想使用 Pacemaker 自動執行此操作,您將需要使用 LVM 資源代理來處理指定 VG 的啟動/停用:

# pcs 資源描述 ocf:heartbeat:LVM

此外,LINBIT 網站上有很多好的(免費)技術指南和其他資源,它們可能對您的集群有所幫助:http ://www.linbit.com

編輯:添加了下面關於禁用“lvmmetad”的部分。

CentOS 7 預設啟用 ’lvmetad’。您需要在兩個節點上禁用它,過濾器才能按上面的配置工作。

/etc/lvm/lvm.confsetuse_lvmetad = 0中,然後lvm2-lvmmetad通過 systemd 停止服務和套接字:

# systemctl stop lvm2-lvmetad.service
# systemctl stop lvm2-lvmetad.socket

引用自:https://serverfault.com/questions/735163