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 遵循以下关键理念:

  • Node — 将在其上创建和使用 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

来源: habr.com

添加评论