Implantando o armazenamento LINSTOR para Proxmox

imagem


A LINBIT lançou recentemente sua nova solução para orquestrar e gerenciar várias matrizes DRBD.


Por exemplo, você pode ter vários nós e cada um terá seu próprio pool LVM ou ZFS, no qual o LINSTOR criará automaticamente novos volumes e os replicará entre os nós usando o protocolo DRBD.


O LINSTOR suporta thin-provisioning, snapshots e muitas outras coisas interessantes.
Esta solução é adequada para máquinas virtuais e contêineres.


Satélites LINSTOR


Acredito que você já tenha um cluster Proxmox, tenho três nós pve1 , pve2 e pve3 .


Portanto, o primeiro passo é instalar o drbd-utils e criar um módulo do kernel em cada nó.


Adicione o repositório linstor e instale os cabeçalhos do kernel , bem como todos os pacotes necessários:


 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 

Após a instalação, vamos verificar sua versão do módulo do kernel:


 modprobe drbd cat /proc/drbd 

Se você dkms status a versão 8, algo deu errado e o módulo in-tree do kernel foi carregado, verifique o dkms status para saber mais sobre como construir o módulo dkms diretamente.
Para o LINSTOR, você deve usar o DRBD versão 9.


Em seguida, em cada nó, instale os pacotes linstor-proxmox e linstor-satellite :


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

Controlador LINSTOR


Vamos implantar o controlador dentro do contêiner LXC.


Faça o download do modelo debian:


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

Agora crie um contêiner para o controlador:


 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 

Execute o contêiner e insira-o:


 pct start 100 pct exec 100 bash 

Instale atualizações:


 apt-get update apt-get -y upgrade 

Inclua o repositório linstor e instale linstor-controller e linstor-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 

O Linstor requer um código de idioma configurado. Configure a localidade:


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

Vamos configurar o fuso horário imediatamente:


 dpkg-reconfigure tzdata 

Configuração do Vault


Crie nós:


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

Para cada nó, descrevemos uma interface adicional que será usada para replicação 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 

Exemplo de saída do comando 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 ┊ ╰──────────────────────────────────────────────────────────────╯ 

Crie pools:


Em cada nó, você deve preparar o thin-pool lvm para drbd:


 lvcreate -L 800G --thinpool drbdpool pve 

Agora você pode adicioná-los ao 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 

Vamos configurar os conjuntos para usar a interface de 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 

Exemplo de saída do 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 ╰─────────────────────────────────────────────────────────────────────────────────────────── 

Agora podemos adicionar nosso novo armazenamento à configuração do Proxmox:


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

Configuração de alta disponibilidade para o controlador


Agora vamos transferir nosso contêiner do linstor para o armazenamento do linstor.


Primeiro, precisamos criar um disco virtual para ele:


 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 

Exemplo de saída do comando 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 ┊ ╰──────────────────────────────────────────╯ 

Por padrão, o linstor-satellite exclui as configurações de todos os recursos no momento em que o serviço é iniciado, e espera uma nova configuração do linstor-controller , mas se mantivermos o linstor-controller no mesmo local que os dados, devemos abrir uma exceção para o recurso adicionando uma opção --keep-res=vm-100 para linstor-satellite em todos os nós:


 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 

Esta ação deve impedir que o recurso vm-100-disk-0 seja excluído toda vez que for iniciado.


Agora paramos o contêiner linstor-controller e transferimos todos os dados do disco local para o disco 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 

Atualize a configuração do contêiner:


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

Execute o contêiner e, se estiver tudo bem, exclua o disco antigo:


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

Agora só precisamos adicionar nosso contêiner ao proxmox ha-manager :


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

LUCRO


Desempenho e ajuste


No momento, para alterar as configurações globais do controlador, você precisará desativar a autenticação no controlador:



Para resolver automaticamente situações de cérebro dividido, adicione as seguintes opções ao controlador:


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

Para minha rede 10G, achei as seguintes configurações ideais para sincronização rápida:


 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/pt423101/


All Articles