为Proxmox部署LINSTOR存储

图片


LINBIT最近发布了他们用于编排和管理多个DRBD阵列的新解决方案。


例如,您可以有多个节点,每个节点都有自己的LVM或ZFS池,LINSTOR将在其中自动创建新卷并使用DRBD协议在节点之间复制它们。


LINSTOR支持精简配置,快照和许多其他有趣的东西。
该解决方案非常适合虚拟机和容器。


LINSTOR卫星


我相信您已经有一个Proxmox集群,我有三个节点pve1pve2pve3


因此,第一步是安装drbd-utils并在每个节点上构建一个内核模块


添加linstor存储库并安装kernel-headers以及所有必需的软件包:


 wget -O- https://packages.linbit.com/package-signing-pubkey.asc | apt-key add - echo "deb http://packages.linbit.com/proxmox/ proxmox-5 drbd-9.0" \ > /etc/apt/sources.list.d/linbit.list apt-get update apt-get -y install pve-headers apt-get -y install drbd-dkms drbdtop 

安装后,让我们检查您的内核模块版本:


 modprobe drbd cat /proc/drbd 

如果看到版本8,则出问题了,内核树内模块已加载,请检查dkms status以了解有关直接构建dkms模块的更多信息。
对于LINSTOR,必须使用DRBD版本9。


接下来,在每个节点上,安装linstor-proxmoxlinstor-satellite软件包:


 apt-get -y install linstor-proxmox linstor-satellite systemctl start linstor-satellite.service systemctl enable linstor-satellite.service 

LINSTOR控制器


我们将在LXC容器内部署控制器。


下载debian模板:


 wget http://download.proxmox.com/images/system/debian-9.0-standard_9.3-1_amd64.tar.gz -P /var/lib/vz/template/cache/ 

现在为控制器创建一个容器:


 pct create 100 local:vztmpl/debian-9.0-standard_9.3-1_amd64.tar.gz \ --hostname=linstor-controller \ --net0=name=eth0,bridge=vmbr0,gw=10.1.0.1,ip=10.1.0.123/16 

运行容器并输入:


 pct start 100 pct exec 100 bash 

安装更新:


 apt-get update apt-get -y upgrade 

添加linstor存储库并安装linstor-controllerlinstor-client


 wget -O- https://packages.linbit.com/package-signing-pubkey.asc | apt-key add - echo "deb http://packages.linbit.com/proxmox/ proxmox-5 drbd-9.0" \ > /etc/apt/sources.list.d/linbit.list apt-get update && apt-get install -y linstor-controller linstor-client systemctl start linstor-controller.service systemctl enable linstor-controller.service 

Linstor需要配置的语言环境。 配置语言环境:


 sed -i '/en_US.UTF-8 UTF-8/ s/^# //' /etc/locale.gen locale-gen 

让我们立即设置时区:


 dpkg-reconfigure tzdata 

保管箱配置


创建节点:


 linstor node create pve1 10.1.0.11 linstor node create pve2 10.1.0.12 linstor node create pve3 10.1.0.13 

对于每个节点,我们描述了一个用于DRBD复制的附加接口:


 linstor node interface create pve1 data 10.2.0.11 linstor node interface create pve2 data 10.2.0.12 linstor node interface create pve3 data 10.2.0.13 

linstor node list命令的示例输出:


 ╭──────────────────────────────────────────────────────────────╮ ┊ Node ┊ NodeType ┊ Addresses ┊ State ┊ ╞┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄╡ ┊ pve1 ┊ SATELLITE ┊ 10.0.1.11,10.0.2.11:3366 (PLAIN) ┊ Online ┊ ┊ pve2 ┊ SATELLITE ┊ 10.0.1.12,10.0.2.12:3366 (PLAIN) ┊ Online ┊ ┊ pve3 ┊ SATELLITE ┊ 10.0.1.13,10.0.2.13:3366 (PLAIN) ┊ Online ┊ ╰──────────────────────────────────────────────────────────────╯ 

创建池:


在每个节点上,必须为drbd准备lvm Thin-pool


 lvcreate -L 800G --thinpool drbdpool pve 

现在,您可以将它们添加到linstor中:


 linstor storage-pool create lvmthin pve1 drbdpool pve/drbdpool linstor storage-pool create lvmthin pve2 drbdpool pve/drbdpool linstor storage-pool create lvmthin pve3 drbdpool pve/drbdpool 

让我们将池配置为使用data接口:


 linstor storage-pool set-property pve1 drbdpool PrefNic data linstor storage-pool set-property pve2 drbdpool PrefNic data linstor storage-pool set-property pve3 drbdpool PrefNic data 

linstor storage-pool list命令的示例输出:


 ╭─────────────────────────────────────────────────────────────────────────────────────────── ┊ StoragePool ┊ Node ┊ Driver ┊ PoolName ┊ FreeCapacity ┊ TotalCapacity ┊ Support ╞┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ ┊ drbdpool ┊ pve1 ┊ LvmThinDriver ┊ hv1/drbdpool ┊ 800 GiB ┊ 800 GiB ┊ true ┊ drbdpool ┊ pve1 ┊ LvmThinDriver ┊ hv1/drbdpool ┊ 800 GiB ┊ 800 GiB ┊ true ┊ drbdpool ┊ pve3 ┊ LvmThinDriver ┊ hv3/drbdpool ┊ 800 GiB ┊ 800 GiB ┊ true ╰─────────────────────────────────────────────────────────────────────────────────────────── 

现在,我们可以将新存储添加到Proxmox配置中:


 cat >> /etc/pve/storage.cfg <<EOF drbd: drbdpool content rootdir,images controller 10.1.0.123 controllervm 100 redundancy 3 EOF 

控制器的HA设置


现在,我们将把linstor容器转移到linstor存储中。


首先,我们需要为其创建一个虚拟磁盘:


 pct exec 100 bash linstor resource-definition create vm-100-disk-0 linstor volume-definition create vm-100-disk-0 4G linstor resource create vm-100-disk-0 --auto-place 3 -s drbdpool 

linstor resource list命令的示例输出:


 ╭──────────────────────────────────────────╮ ┊ ResourceName ┊ Node ┊ Port ┊ State ┊ ╞┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄╡ ┊ vm-100-disk-0 ┊ pve1 ┊ 7000 ┊ UpToDate ┊ ┊ vm-100-disk-0 ┊ pve2 ┊ 7000 ┊ UpToDate ┊ ┊ vm-100-disk-0 ┊ pve3 ┊ 7000 ┊ UpToDate ┊ ╰──────────────────────────────────────────╯ 

默认情况下, linstor-satellite会在服务启动时删除所有资源的配置,然后期望linstor-controller进行新配置,但是如果我们将linstor-controller与数据保留在同一位置,则必须通过添加选项对其资源进行例外处理--keep-res=vm-100用于所有节点上的linstor-satellite:


 echo -e "[Service]\nExecStart=\nExecStart=/usr/share/linstor-server/bin/Satellite --logs=/var/log/linstor-satellite --config-directory=/etc/linstor --keep-res=vm-100" | SYSTEMD_EDITOR=tee systemctl edit linstor-satellite.service 

此操作应防止vm-100-disk-0资源在每次启动时被删除。


现在,我们停止linstor-controller容器,并将所有数据从本地磁盘传输到drbd磁盘。


 pct shutdown 100 dd if=/var/lib/vz/images/100/vm-100-disk-0.raw of=/dev/drbd/by-res/vm-100-disk-0/0 bs=8M status=progress e2fsck -f /dev/drbd/by-res/vm-100-disk-0/0 resize2fs /dev/drbd/by-res/vm-100-disk-0/0 

更新容器配置:


 sed -i '/^rootfs:/d' /etc/pve/lxc/100.conf echo 'rootfs: drbdpool:vm-100-disk-0,size=4G' >> /etc/pve/lxc/100.conf 

运行容器,如果一切正常,请删除旧磁盘:


 pct start 100 rm -f /var/lib/vz/images/100/vm-100-disk-0.raw 

现在我们只需要将我们的容器添加到proxmox ha-manager中


 ha-manager add ct:100 --max_relocate=3 --max_restart=3 

获利


性能和调优


目前,要更改控制器的全局设置,您将需要在控制器上禁用身份验证:



要自动解决脑裂情况,请为控制器添加以下选项:


 linstor controller drbd-options \ --after-sb-0pri=discard-zero-changes \ --after-sb-1pri=discard-secondary \ --after-sb-2pri=disconnect 

对于我的10G网络,我发现以下最适合快速同步的设置:


 linstor controller drbd-options \ --max-buffers=36864 \ --rcvbuf-size=2097152 \ --sndbuf-size=1048576 linstor controller drbd-options \ --c-fill-target=10240 \ --c-max-rate=737280 \ --c-min-rate=20480 \ --c-plan-ahead=10 

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


All Articles