不久前,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 设置过程,因为...... 所有步骤均详细描述于
林斯托_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
建议指定将用于执行映像克隆操作的所有节点。
有关支持的参数的完整列表,请参阅
这样就完成了设置,现在你可以从官方下载一些设备了
项目链接:
来源: habr.com