不久前,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 設定過程,因為... 所有步驟均詳細描述於
林斯托_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
建議指定將用於執行映像複製操作的所有節點。
有關支援的參數的完整列表,請參閱
這樣就完成了設置,現在你可以從官方下載一些設備了
項目連結:
來源: www.habr.com