LINSTOR 儲存及其與 OpenNebula 的集成

LINSTOR 儲存及其與 OpenNebula 的集成

不久前,LINBIT 的人展示了他們新的 SDS 解決方案 - Linstor。 這是一個完全免費的存儲,基於成熟的技術:DRBD、LVM、ZFS。 Linstor 結合了簡單和精心設計的架構,讓您能夠實現穩定性和令人印象深刻的結果。

今天,我想更詳細地討論它,並展示如何使用 linstor_un(我專門為此目的開發的新驅動程式)將其與 OpenNebula 整合。

Linstor 與 OpenNebula 結合,讓您能夠建立快速可靠的雲,並且可以輕鬆部署在您自己的基礎架構上。

林斯托架構

Linstor 本身既不是檔案系統也不是區塊存儲,Linstor 是一個提供抽象層的編排器,可讓您在 LVM 或 ZFS 中自動建立磁碟區並使用 DRBD9 複製它們。

打破刻板印象

但是等等,DRBD? — 為什麼要實現自動化以及它如何運作?

讓我們回想一下過去,當時 DRBD8 非常流行。 它的標準用法是創建一個大的塊設備,然後使用相同的 LVM 將其切割成許多小塊。 一種 mdadm RAID-1,但透過網路複製。

這種方法並非沒有缺點,因此,隨著 DRBD9 的出現,儲存設計的原則發生了變化;現在為每個虛擬機器創建一個單獨的 DRBD 設備。

使用獨立區塊設備的方法可以更好地利用叢集中的空間,並且還添加了許多附加功能。 例如,對於每個此類設備,您可以確定副本的數量、它們的位置和單獨的設定。 它們很容易創建/刪除、拍攝快照、調整大小、啟用加密等等。 值得注意的是,DRBD9 還支持仲裁,這可以讓您避免腦裂情況。

資源和後端

建立新的區塊設備時,Linstor 將所需數量的副本放置在叢集中的不同節點上。 我們將每個這樣的副本稱為 DRBD 資源。

有兩種類型的資源:

  • 數據資源 — 是位於 LVM 或 ZFS 池中的節點上的 DRBD 設備。
    目前支援多個後端,數量正在不斷增長。 支援 LVM、ThinLVM 和 ZFS。 最後兩個允許您建立和使用快照。
  • 無磁碟資源 — 是放置在沒有後端的節點上的 DRBD 設備,但允許將其視為常規塊設備;所有讀/寫操作都將重定向到資料資源。 最接近無磁碟資源的類比是 iSCSI LUN。

每個 DRBD 資源最多可以有 8 個副本,並且預設只有其中一個可以處於活動狀態 - ,其他人都會 次要 只要有至少一個主節點,它們的使用就不可能,也就是說,它們只會在它們之間複製資料。

透過將 DRBD 設備安裝到系統中,它會自動變為 ,因此即使是無盤資源(用 DRBD 術語來說)也可以是主要資源。

那為什麼需要林斯託呢?

透過將所有資源密集型任務委託給內核,Linstor 本質上是一個常規 Java 應用程序,可讓您輕鬆自動建立 DRBD 資源。
而且,他創建的每個資源都將是一個獨立的DRBD集群,獨立運行,無論控制平面和其他DRBD資源的狀態如何。

Linstor 僅由兩個組件組成:

  • Linstor控制器 - 主控制器,提供用於建立和管理資源的API。 它還與衛星通信,檢查衛星上的可用空間,並發送任務來建立和刪除新資源。 它在單一實例中運行並使用資料庫,該資料庫可以是內部(H2)或外部(PostgreSQL、MySQL、MariaDB)
  • 林斯托衛星 — 安裝在所有儲存節點上,並向控制器提供有關可用空間的信息,並執行從控制器接收到的任務,以建立和刪除新磁碟區及其之上的 DRBD 設備。

Linstor 遵循以下關鍵理念:

  • 節點 — 將在其上建立和使用 DRBD 資源的實體伺服器。
  • 存儲池 — 在 DRBD 資源所在的節點上建立的 LVM 或 ZFS 池。 無碟池也是可能的 - 這是一個僅位於無磁碟資源的池。
  • 資源定義 — 資源的定義本質上是描述名稱及其所有屬性的原型。
  • 體積定義 — 體積定義。 每個資源可以由多個磁碟區組成,每個磁碟區必須有一個大小。
  • 資源中心 — 建立的區塊設備實例,每個資源必須放置在特定節點和某個儲存池中。

林斯托安裝

我推薦使用Ubuntu作為系統,因為... 為她而存在 準備好購電協議:

add-apt-repository ppa:linbit/linbit-drbd9-stack
apt-get update

或者 Debian,可以從 Proxmox 的官方儲存庫安裝 Linstor:

wget -O- https://packages.linbit.com/package-signing-pubkey.asc | apt-key add -
PVERS=5 && echo "deb http://packages.linbit.com/proxmox/ proxmox-$PVERS drbd-9.0" > 
    /etc/apt/sources.list.d/linbit.list
apt-get update

調節器

這裡一切都很簡單:

apt-get install linstor-controller linstor-client
systemctl enable linstor-controller
systemctl start linstor-controller

儲存節點

Linux 核心目前附帶一個樹內核心模組 DRBD8,不幸的是它不適合我們,我們需要安裝 DRBD9:

apt-get install drbd-dkms

實踐表明,大多數困難的出現正是因為系統中加載的是 DRBD8 模組,而不是 DRBD9。 幸運的是,透過執行以下命令很容易檢查:

modprobe drbd
cat /proc/drbd

如果你看到 版本:9 - 這意味著一切都很好,如果 版本:8 - 這意味著出現問題,您需要採取額外的措施來找出原因。

現在讓我們安裝 林斯托衛星 и drbd 實用程式:

apt-get install linstor-satellite drbd-utils
systemctl enable linstor-satellite
systemctl start linstor-satellite

創建集群

儲存池和節點

作為後端,我們將採取 薄LVM, 因為它是最簡單的並且支援快照。
LVM2,如果您還沒有這樣做,讓我們在所有儲存節點上建立一個 ThinLVM 池:

sudo vgcreate drbdpool /dev/sdb
sudo lvcreate -L 800G -T drbdpool/thinpool

所有進一步的操作都可以直接在控制器上執行:

讓我們新增節點:

linstor node create node1 127.0.0.11
linstor node create node2 127.0.0.12
linstor node create node3 127.0.0.13

讓我們建立儲存池:

linstor storage-pool create lvmthin node1 data drbdpool/thinpool
linstor storage-pool create lvmthin node2 data drbdpool/thinpool
linstor storage-pool create lvmthin node3 data drbdpool/thinpool

現在讓我們檢查已建立的池:

linstor storage-pool list

如果一切都正確完成,那麼我們應該會看到類似的內容:

+------------------------------------------------ - ------------------------------------------------- - ---+ | 儲存池 | 節點| 司機 | 池名稱 | 可用容量 | 總產能 | 支援快照 | |------------------------------------------------ - ------------------------------------------------- - ---| | 數據| 節點1 | LVM_薄 | drbdpool/thinpool | 64 GiB | 64 GiB | 真實 | | 數據| 節點2 | LVM_薄 | drbdpool/thinpool | 64 GiB | 64 GiB | 真實 | | 數據| 節點3 | LVM_薄 | drbdpool/thinpool | 64 GiB | 64 GiB | 真實 | +------------------------------------------------ - ------------------------------------------------- - ---+

DRBD 資源

現在讓我們嘗試建立新的 DRBD 資源:

linstor resource-definition create myres
linstor volume-definition create myres 1G
linstor resource create myres --auto-place 2

我們來檢查一下創建的資源:

linstor resource list 

+------------------------------------------------ - ------------------------------------------------- - --+ | 節點| 資源 | 儲存池 | 音量編號 | 次要編號 | 設備名稱 | 已分配| 使用中 | 狀態| |------------------------------------------------ - ------------------------------------------------- - --| | 節點1 | 邁爾斯 | 數據| 0 | 1084 | 1084 /dev/drbd52 | 2 KiB | 未使用 | 最新 | | 節點0 | 邁爾斯 | 數據| 1084 | 1084 | 52 /dev/drbdXNUMX | XNUMX KiB | 未使用 | 最新 | +------------------------------------------------ - ------------------------------------------------- - --+

偉大的! — 我們看到資源是在前兩個節點上建立的,我們也可以嘗試在第三個節點上建立無磁碟資源:

linstor resource create --diskless node3 myres

在節點上,您總是會發現該設備為 /dev/drbd1084/dev/drbd/by-res/myres/0

這就是 Linstor 的工作原理,您可以從以下位置獲取更多信息 官方文檔.

現在我將告訴你如何將其與OpenNebula集成

設定 OpenNebula

我不會太深入地了解 OpenNebula 設定過程,因為... 所有步驟均詳細描述於 官方文檔,我建議您聯繫,我只會告訴您 OpenNebula 與 Linstor 的整合。

林斯托_un

為了解決這個問題,我編寫了自己的驅動程式 - 林斯托_un,它目前作為插件提供,必須單獨安裝。

整個安裝在前端OpenNebula節點上進行,不需要在計算節點上進行額外的操作。

首先,我們需要確保我們有 jq и 林斯托客戶端:

apt-get install jq linstor-client

團隊 linstor node list 應該會顯示節點列表。 所有 OpenNebula 運算節點都必須加入到 Linstor 叢集中。

下載並安裝外掛:

curl -L https://github.com/OpenNebula/addon-linstor_un/archive/master.tar.gz | tar -xzvf - -C /tmp

mv /tmp/addon-linstor_un-master/vmm/kvm/* /var/lib/one/remotes/vmm/kvm/

mkdir -p /var/lib/one/remotes/etc/datastore/linstor_un
mv /tmp/addon-linstor_un-master/datastore/linstor_un/linstor_un.conf /var/lib/one/remotes/etc/datastore/linstor_un/linstor_un.conf

mv /tmp/addon-linstor_un-master/datastore/linstor_un /var/lib/one/remotes/datastore/linstor_un
mv /tmp/addon-linstor_un-master/tm/linstor_un /var/lib/one/remotes/tm/linstor_un

rm -rf /tmp/addon-linstor_un-master

現在我們需要將其添加到 OpenNebula 配置中,為此,我們遵循描述的簡單步驟 這裡.

然後重啟OpenNebula:

systemctl restart opennebula

並添加我們的資料儲存、系統:

cat > system-ds.conf <<EOT
NAME="linstor-system"
TYPE="SYSTEM_DS"
STORAGE_POOL="data"
AUTO_PLACE="2"
CLONE_MODE="snapshot"
CHECKPOINT_AUTO_PLACE="1"
BRIDGE_LIST="node1 node2 node3"
TM_MAD="linstor_un"
EOT

onedatastore create system-ds.conf

和影像儲存:

cat > images-ds.conf <<EOT
NAME="linstor-images"
TYPE="IMAGE_DS"
STORAGE_POOL="data"
AUTO_PLACE="2"
BRIDGE_LIST="node1 node2 node3"
DISK_TYPE="BLOCK"
DS_MAD="linstor_un"
TM_MAD="linstor_un"
EOT

onedatastore create images-ds.conf

  • 參數 AUTO_PLACE 顯示將為 OpenNebula 中的每個新映像建立的資料副本的數量。
  • 參數 CLONE_MODE 準確指示建立新虛擬機器時如何複製映像, snapshot — 將建立映像的快照並從快照部署虛擬機, copy — 將為每個虛擬機器製作完整的映像副本。
  • В BRIDGE_LIST 建議指定將用於執行映像複製操作的所有節點。

有關支援的參數的完整列表,請參閱 自述 專案.

這樣就完成了設置,現在你可以從官方下載一些設備了 開放星雲市場 並從中建立虛擬機器。

項目連結:
https://github.com/OpenNebula/addon-linstor_un

來源: www.habr.com

添加評論