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个副本,并且默认情况下只能激活其中一个副本-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-satellitedrbd-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节点上进行,不需要在计算节点上执行其他操作。


首先,我们需要确保拥有jqlinstor-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下载一些设备,并从中创建虚拟机。


链接到项目

Source: https://habr.com/ru/post/zh-CN451186/


All Articles