Armazenamento LINSTOR e sua integração com OpenNebula

Armazenamento LINSTOR e sua integração com OpenNebula

Não faz muito tempo, o pessoal da LINBIT apresentou sua nova solução SDS - Linstor. Este é um armazenamento totalmente gratuito baseado em tecnologias comprovadas: DRBD, LVM, ZFS. Linstor combina simplicidade e arquitetura bem projetada, o que permite alcançar estabilidade e resultados bastante impressionantes.

Hoje gostaria de falar um pouco mais detalhadamente sobre isso e mostrar como ele pode ser facilmente integrado ao OpenNebula usando linstor_un - um novo driver que desenvolvi especificamente para esse fim.

Linstor em combinação com OpenNebula permite construir uma nuvem rápida e confiável que pode ser facilmente implantada em sua própria infraestrutura.

Arquitetura Linstor

Linstor não é um sistema de arquivos nem armazenamento em bloco em si, Linstor é um orquestrador que fornece uma camada de abstração que permite automatizar a criação de volumes em LVM ou ZFS e replicá-los usando DRBD9.

Nós quebramos estereótipos

Mas espere, DRBD? — Por que automatizá-lo e como pode funcionar?

Vamos relembrar o passado, quando o DRBD8 era muito popular. Seu uso padrão envolvia a criação de um grande dispositivo de bloco e o corte em vários pedaços pequenos, usando o mesmo LVM. Uma espécie de mdadm RAID-1, mas com replicação pela rede.

Essa abordagem tem suas desvantagens e, portanto, com o advento do DRBD9, os princípios do design de armazenamento mudaram; agora um dispositivo DRBD separado é criado para cada máquina virtual.

A abordagem com dispositivos de bloco independentes permite uma melhor utilização do espaço no cluster e também adiciona uma série de recursos adicionais. Por exemplo, para cada dispositivo você pode determinar o número de réplicas, sua localização e configurações individuais. Eles são fáceis de criar/excluir, tirar instantâneos, redimensionar, habilitar criptografia e muito mais. É importante notar que o DRBD9 também suporta quorum, o que permite evitar situações de divisão cerebral.

Recursos e back-ends

Ao criar um novo dispositivo de bloco, o Linstor coloca o número necessário de réplicas em diferentes nós do cluster. Chamaremos cada réplica de recurso DRBD.

Existem dois tipos de recursos:

  • Recurso de dados — são um dispositivo DRBD localizado em um nó em um pool LVM ou ZFS.
    No momento existe suporte para diversos backends e seu número está em constante crescimento. Há suporte para LVM, ThinLVM e ZFS. Os dois últimos permitem criar e usar instantâneos.
  • Recurso sem disco — é um dispositivo DRBD colocado em um nó sem backend, mas permitindo que seja tratado como um dispositivo de bloco normal; todas as operações de leitura/gravação serão redirecionadas para recursos de dados. O análogo mais próximo dos recursos sem disco é o iSCSI LUN.

Cada recurso DRBD pode ter até 8 réplicas, e apenas uma delas pode estar ativa por padrão - Primário, todos os outros estarão Secundário e seu uso será impossível enquanto houver pelo menos um Primário, ou seja, eles simplesmente replicarão os dados entre si.

Ao instalar um dispositivo DRBD no sistema, ele se torna automaticamente Primário, portanto, mesmo um recurso Diskless, na terminologia DRBD, pode ser Primário.

Então, por que você precisa do Linstor?

Ao confiar todas as tarefas que consomem muitos recursos ao kernel, o Linstor é essencialmente um aplicativo Java regular que permite automatizar facilmente a criação de recursos DRBD.
Além disso, cada recurso criado por ele será um cluster DRBD independente que opera de forma independente, independentemente do estado do plano de controle e de outros recursos DRBD.

Linstor consiste em apenas dois componentes:

  • Controlador Linstor - O controlador principal, que fornece uma API para criação e gerenciamento de recursos. Também se comunica com os satélites, verificando o espaço livre neles, e envia tarefas para criar e excluir novos recursos. Funciona em uma única instância e utiliza um banco de dados, que pode ser interno (H2) ou externo (PostgreSQL, MySQL, MariaDB)
  • Satélite Linstor — Instalado em todos os nós de armazenamento e fornece ao controlador informações sobre o espaço livre e também executa tarefas recebidas do controlador para criar e excluir novos volumes e dispositivos DRBD sobre eles.

Linstor opera com os seguintes conceitos-chave:

  • Node — um servidor físico no qual os recursos DRBD serão criados e usados.
  • Pool de armazenamento — Pool LVM ou ZFS criado no nó no qual os recursos DRBD estarão localizados. Um pool sem disco também é possível - este é um pool no qual apenas recursos sem disco estarão localizados.
  • Definição de recursos — A definição de um recurso é essencialmente um protótipo que descreve o nome e todas as suas propriedades.
  • Definição de volume — Definição de volume. Cada recurso pode consistir em vários volumes, cada volume deve ter um tamanho.
  • Recursos — Uma instância criada de um dispositivo de bloco, cada recurso deve ser colocado em um nó específico e em algum pool de armazenamento.

Instalação do Linstor

Eu recomendo usar o Ubuntu como sistema, porque... existe para ela PPA pronto:

add-apt-repository ppa:linbit/linbit-drbd9-stack
apt-get update

Ou Debian, onde o Linstor pode ser instalado a partir do repositório oficial do Proxmox:

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

Responsável pelo Tratamento

Tudo é simples aqui:

apt-get install linstor-controller linstor-client
systemctl enable linstor-controller
systemctl start linstor-controller

Nós de armazenamento

O kernel Linux atualmente vem com um módulo de kernel em árvore DRBD8, infelizmente não nos convém e precisamos instalar DRBD9:

apt-get install drbd-dkms

Como mostra a prática, a maioria das dificuldades surge precisamente porque o módulo DRBD8 é carregado no sistema, e não o DRBD9. Felizmente, isso é fácil de verificar executando:

modprobe drbd
cat /proc/drbd

Se você ver version: 9 - significa que está tudo bem se version: 8 - significa que algo deu errado e você precisa tomar medidas adicionais para descobrir os motivos.

Agora vamos instalar linstor-satélite и drbd-utils:

apt-get install linstor-satellite drbd-utils
systemctl enable linstor-satellite
systemctl start linstor-satellite

Crie um cluster

Conjuntos de armazenamento e nós

Como back-end, usaremos FinoLVM, porque é o mais simples e suporta instantâneos.
Conjunto lvm2, se ainda não tiver feito isso, vamos criar um pool ThinLVM em todos os nossos nós de armazenamento:

sudo vgcreate drbdpool /dev/sdb
sudo lvcreate -L 800G -T drbdpool/thinpool

Todas as outras ações podem ser executadas diretamente no controlador:

Vamos adicionar nossos nós:

linstor node create node1 127.0.0.11
linstor node create node2 127.0.0.12
linstor node create node3 127.0.0.13

Vamos criar pools de armazenamento:

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

Agora vamos verificar os pools criados:

linstor storage-pool list

Se tudo for feito corretamente, deveremos ver algo como:

+---------------------------------------------------------------- -------------------------------------------------- ----+ | Pool de armazenamento | Nó | Motorista | NomedoPool | Capacidade Livre | Capacidade total | SuportaInstantâneos | |------------------------------------------------ - ------------------------------------------------- - ---| | dados | nó1 | LVM_THIN | drbdpool/thinpool | 64 GB | 64 GB | verdade | | dados | nó2 | LVM_THIN | drbdpool/thinpool | 64 GB | 64 GB | verdade | | dados | nó3 | LVM_THIN | drbdpool/thinpool | 64 GB | 64 GB | verdade | +---------------------------------------------------------------- -------------------------------------------------- ----+

Recursos DRBD

Agora vamos tentar criar nosso novo recurso DRBD:

linstor resource-definition create myres
linstor volume-definition create myres 1G
linstor resource create myres --auto-place 2

Vamos verificar os recursos criados:

linstor resource list 

+---------------------------------------------------------------- -------------------------------------------------- ---+ | Nó | Recurso | Pool de armazenamento | VolumeNr | MenorNr | Nome do dispositivo | Alocado | Em uso | Estado | |------------------------------------------------ - ------------------------------------------------- - --| | nó1 | mires | dados | 0 | 1084 | /dev/drbd1084 | 52 KiB | Não utilizado | Atualizar | | nó2 | mires | dados | 0 | 1084 | /dev/drbd1084 | 52 KiB | Não utilizado | Atualizar | +---------------------------------------------------------------- -------------------------------------------------- ---+

Ótimo! — vemos que o recurso foi criado nos dois primeiros nós, também podemos tentar criar um recurso sem disco no terceiro:

linstor resource create --diskless node3 myres

Nos nós você sempre encontrará este dispositivo como /dev/drbd1084 ou /dev/drbd/by-res/myres/0

É assim que o Linstor funciona, você pode obter mais informações em documentação oficial.

Agora vou te contar como integrá-lo com OpenNebula

Configurando o OpenNebula

Não vou me aprofundar muito no processo de configuração do OpenNebula, porque... todas as etapas são descritas em detalhes em documentação oficial, que recomendo que você entre em contato, falarei apenas sobre a integração do OpenNebula com o Linstor.

linstor_un

Para resolver este problema, escrevi meu próprio driver - linstor_un, ele está atualmente disponível como um plugin e deve ser instalado separadamente.

Toda a instalação é realizada nos nós frontend do OpenNebula e não requer ações adicionais nos nós de computação.

Em primeiro lugar, precisamos de ter a certeza de que temos jq и cliente linstor:

apt-get install jq linstor-client

Equipe linstor node list deve exibir uma lista de nós. Todos os nós de computação OpenNebula devem ser adicionados ao cluster Linstor.

Baixe e instale o plugin:

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

Agora precisamos adicioná-lo à configuração do OpenNebula, para isso seguimos os passos simples descritos aqui.

Em seguida, reinicie o OpenNebula:

systemctl restart opennebula

E adicione nossos datastores, sistema:

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

E a loja de imagens:

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

  • Parâmetro AUTO_PLACE exibe o número de réplicas de dados que serão criadas para cada nova imagem no OpenNebula.
  • Parâmetro CLONE_MODE indica exatamente como as imagens serão clonadas ao criar novas máquinas virtuais, snapshot — criará um instantâneo da imagem e implantará uma máquina virtual a partir do instantâneo, copy — fará uma cópia completa da imagem para cada máquina virtual.
  • В BRIDGE_LIST Recomenda-se especificar todos os nós que serão utilizados para realizar operações de clonagem de imagens.

Para obter uma lista completa de parâmetros suportados, consulte README projeto.

Isso conclui a configuração, agora você pode baixar algum aparelho do site oficial Mercado OpenNebula e criar máquinas virtuais a partir dele.

Link do projeto:
https://github.com/OpenNebula/addon-linstor_un

Fonte: habr.com

Adicionar um comentário