
不久前,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个副本,并且默认情况下只能激活其中一个副本-Primary,其余所有副本都将是Secondary ,除非有至少一个Primary,否则它们的使用将是不可能的,也就是说,它们只会复制你们之间的数据。
当将DRBD设备安装到系统中时,它会自动变为Primary ,因此,即使在DRBD术语中,无盘资源也可以是Primary。
那么为什么我们需要Linstor?
通过将所有资源密集型任务信任内核,Linstor本质上是一个常规Java应用程序,可轻松实现DRBD资源的自动创建。
此外,由他创建的每个资源将是一个独立的DRBD群集,该群集将独立工作,而不管控制平面和其他DRBD资源的状态如何。
Linstor仅包含两个组件:
- Linstor-controller-主控制器,提供用于创建和管理资源的API。 他还与卫星通信,检查卫星上的可用空间,并发送任务以创建和删除新资源。 它在单个实例中启动,并使用一个数据库,该数据库可以是内部(H2)或外部(PostgreSQL,MySQL,MariaDB)
- 卫星Linstor-安装在所有存储节点上,为控制器提供有关可用空间的信息,还执行从控制器接收的任务,以在其上创建和删除新卷和DRBD设备。
Linstor具有以下关键概念:
- 节点是将在其上创建和使用DRBD资源的物理服务器。
- 存储池 -在将放置DRBD资源的节点上创建的LVM或ZFS池。 也可以使用无盘池-这是一个仅可容纳无盘资源的池。
- 资源定义 -资源定义本质上是一个描述名称及其所有属性的原型。
- 音量定义 - 音量定义 。 每个资源可以包含多个卷,每个卷必须有一个大小。
- 资源 -创建的块设备实例,每个资源必须位于特定节点上和某个存储池中。
安装Linstor
我建议使用Ubuntu作为系统,因为 有一个现成的PPA :
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
储存节点
当前,树内DRBD8内核模块是Linux内核中提供的,不幸的是它不适合我们,我们需要安装DRBD9 :
apt-get install drbd-dkms
如实践所示,大多数困难的产生恰恰是因为将DRBD8模块而不是DRBD9加载到了系统中。 幸运的是,通过执行以下操作很容易验证:
modprobe drbd cat /proc/drbd
如果看到版本:9-则一切正常,如果看到版本: 8-则出问题了,您需要采取其他步骤以找出原因。
现在安装linstor-satellite和drbd-utils :
apt-get install linstor-satellite drbd-utils systemctl enable linstor-satellite systemctl start linstor-satellite
集群创建
存储池和节点
我们将把ThinLVM作为后端 ,因为 它是最简单的,并且支持快照。
如果尚未安装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_THIN | drbdpool / Thinpool | 64 GiB | 64 GiB | 真实|
| 数据 node2 | LVM_THIN | drbdpool / Thinpool | 64 GiB | 64 GiB | 真实|
| 数据 节点3 | LVM_THIN | 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 volume list
+ ------------------------------------------------- -------------------------------------------------- -+
| 节点| 资源| 储存池| VolumeNr | MinorNr | 设备名| 已分配 使用中| 州|
| ------------------------------------------------- -------------------------------------------------- --- |
| 节点1 | 迈尔斯| 数据 0 | 1084 | / dev / drbd1084 | 52 KiB | 未使用 更新日期|
| node2 | 迈尔斯| 数据 0 | 1084 | / dev / drbd1084 | 52 KiB | 未使用 更新日期|
+ ------------------------------------------------- -------------------------------------------------- -+
太好了! -我们看到资源是在前两个节点上创建的,我们也可以尝试在第三个节点上创建无盘资源:
linstor resource create --diskless node3 myres
在节点上,您总是会发现此设备为/dev/drbd1084
或/dev/drbd/by-res/myres/0
这是Linstor的工作方式,您可以从官方文档中获取更多信息。
现在我将讨论如何将其与OpenNebula集成
配置OpenNebula
我将不深入设置OpenNebula的过程,因为 所有步骤均在官方文档中进行了详细说明 ,我建议您参考该文档 。我仅向您介绍OpenNebula与Linstor的集成。
linstor_un
为了解决这个问题,我编写了自己的驱动程序linstor_un ,目前该驱动程序可以作为插件使用,必须单独安装。
所有安装均在前端OpenNebula节点上进行,不需要在计算节点上执行其他操作。
首先,我们需要确保拥有jq和linstor-client :
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
建议指定所有将用于执行图像克隆操作的节点。
README项目中提供了受支持参数的完整列表。
设置完成后,现在您可以从官方的OpenNebula Marketplace下载一些设备,并从中创建虚拟机。
链接到项目