Armazenamento de cluster para pequenos clusters da web baseados em drbd+ocfs2

Sobre o que falaremos:
Como implantar rapidamente armazenamento compartilhado para dois servidores baseados em soluções drbd+ocfs2.

Para quem isso será útil:
O tutorial será útil para administradores de sistema e qualquer pessoa que escolha um método de implementação de armazenamento ou queira experimentar a solução.

Que decisões recusamos e por quê?

Muitas vezes nos deparamos com uma situação em que precisamos implementar armazenamento compartilhado com bom desempenho de leitura e gravação em um pequeno cluster web. Tentamos várias opções para implementar armazenamento compartilhado em nossos projetos, mas poucas conseguiram nos satisfazer em vários indicadores ao mesmo tempo. Agora vamos te contar por quê.

  • Glusterfs não nos satisfez com o desempenho de leitura e gravação, houve problemas com a leitura simultânea de um grande número de arquivos e houve uma alta carga na CPU. O problema de leitura de arquivos poderia ser resolvido acessando-os diretamente do brick, mas isso nem sempre é aplicável e geralmente é incorreto.

  • Ceph não gostou da complexidade excessiva, que pode ser prejudicial em projetos com 2 a 4 servidores, especialmente se o projeto for mantido posteriormente. Novamente, existem sérias limitações de desempenho que nos forçam a construir clusters de armazenamento separados, como acontece com o glusterfs.

  • Usar um servidor NFS para implementar armazenamento compartilhado levanta questões em termos de tolerância a falhas.

  • s3 é uma excelente solução popular para uma determinada gama de tarefas, mas não é um sistema de arquivos, o que restringe seu escopo.

  • lsyncd. Se já começamos a falar sobre “sistemas sem arquivos”, então vale a pena examinar esta solução popular. Não só não é adequado para troca bidirecional (mas se você realmente quiser, você pode), mas também não funciona de forma estável em um grande número de arquivos. Uma boa adição a tudo isso é que ele é de thread único. A razão está na arquitetura do programa: ele usa o inotify para monitorar objetos de trabalho, que atribui na inicialização e durante a nova verificação. rsync é usado como meio de transferência.

Tutorial: como implantar armazenamento compartilhado baseado em drbd+ocfs2

Uma das soluções mais convenientes para nós foi o link ocfs2+drbd. Agora mostraremos como você pode implantar rapidamente o armazenamento compartilhado para dois servidores com base em um banco de dados de solução. Mas primeiro, um pouco sobre os componentes:

DRBD - um sistema de armazenamento da distribuição padrão do Linux que permite replicar dados entre servidores em blocos. A principal aplicação é construir armazenamento tolerante a falhas.

OCFS2 - um sistema de arquivos que fornece uso compartilhado do mesmo armazenamento por vários sistemas. Incluído na distribuição Linux e é um módulo de kernel e ferramentas de espaço de usuário para trabalhar com o FS. OCFS2 pode ser usado não apenas em DRBD, mas também em iSCSI com múltiplas conexões. Em nosso exemplo usamos DRBD.

Todas as ações são executadas no servidor Ubuntu 18.04 em uma configuração mínima.

Etapa 1. Configurar o DRBD:

No arquivo /etc/drbd.d/drbd0.res descrevemos nosso dispositivo de bloco virtual /dev/drbd0:

resource drbd0 {
    syncer { rate 1000M; }
    net {
        allow-two-primaries;
        after-sb-0pri discard-zero-changes;
        after-sb-1pri discard-secondary;
        after-sb-2pri disconnect;
    }
    startup { become-primary-on both; }
    on drbd1 {
        meta-disk internal;
        device /dev/drbd0;
        disk /dev/vdb1;
        address 10.10.10.192:7789;
}
    on drbd2 {
        meta-disk internal;
        device /dev/drbd0;
        disk /dev/vdb1;
        address 10.10.10.193:7789;
}
}

meta-disco interno — use os mesmos dispositivos de bloco para armazenar metadados
dispositivo /dev/drbd0 — use /dev/drbd0 como caminho para o volume drbd.
disco /dev/vdb1 - use /dev/vdb1
sincronizador {taxa 1000M; } — use largura de banda de canal gigabit
permitir duas primárias - uma opção importante que permite aceitar alterações em dois servidores primários
depois-sb-0pri, depois-sb-1pri, depois-sb-2pri — opções responsáveis ​​pelas ações do nó quando splitbrain é detectado. Mais detalhes podem ser encontrados na documentação.
tornar-se-primário-em ambos — define ambos os nós como primários.

No nosso caso, temos duas VMs absolutamente idênticas, com uma rede virtual dedicada com largura de banda de 10 gigabits.

Em nosso exemplo, os nomes de rede de dois nós do cluster são drbd1 e drbd2. Para uma operação adequada, você precisa combinar os nomes e endereços IP dos hosts em /etc/hosts.

10.10.10.192 drbd1
10.10.10.193 drbd2

Etapa 2. Configurar nós:

Em ambos os servidores rodamos:

drbdadm create-md drbd0

Armazenamento de cluster para pequenos clusters da web baseados em drbd+ocfs2

modprobe drbd
drbdadm up drbd0
cat /proc/drbd

Obtemos o seguinte:

Armazenamento de cluster para pequenos clusters da web baseados em drbd+ocfs2

Você pode iniciar a sincronização. No primeiro nó você precisa executar:

drbdadm primary --force drbd0

Vejamos o status:

cat /proc/drbd

Armazenamento de cluster para pequenos clusters da web baseados em drbd+ocfs2

Ótimo, a sincronização começou. Esperamos até o final e vemos a foto:

Armazenamento de cluster para pequenos clusters da web baseados em drbd+ocfs2

Etapa 3. Inicie a sincronização no segundo nó:

drbdadm primary --force drbd0

Obtemos o seguinte:

Armazenamento de cluster para pequenos clusters da web baseados em drbd+ocfs2

Agora podemos escrever no drbd a partir de dois servidores.

Etapa 4. Instale e configure o ocfs2.

Usaremos uma configuração bastante trivial:

cluster:
     node_count = 2
     name = ocfs2cluster

node:
     number = 1
     cluster = ocfs2cluster
     ip_port = 7777
     ip_address = 10.10.10.192
     name = drbd1

node:
     number = 2
     cluster = ocfs2cluster
     ip_port = 7777
     ip_address = 10.10.10.193
     name = drbd2

Precisa ser escrito em /etc/ocfs2/cluster.conf em ambos os nós.

Criamos um FS em drbd0 em qualquer nó:

mkfs.ocfs2 -L "testVol" /dev/drbd0

Aqui criamos um sistema de arquivos com o rótulo testVol em drbd0, usando os parâmetros padrão.

Armazenamento de cluster para pequenos clusters da web baseados em drbd+ocfs2

Em /etc/default/o2cb você precisa definir (como em nosso arquivo de configuração)

O2CB_ENABLED=true 
O2CB_BOOTCLUSTER=ocfs2cluster 

e execute em cada nó:

o2cb register-cluster ocfs2cluster

Em seguida, ligamos e adicionamos todas as unidades necessárias para execução automática:

systemctl enable drbd o2cb ocfs2
systemctl start drbd o2cb ocfs2

Parte disso já estará em execução durante o processo de configuração.

Etapa 5. Adicione pontos de montagem ao fstab em ambos os nós:

/dev/drbd0 /media/shared ocfs2 defaults,noauto,heartbeat=local 0 0

Diretório /mídia/compartilhado deve ser criado com antecedência.

Aqui usamos as opções noauto, que significa que o arquivo não será montado na inicialização (prefiro montar arquivos de rede via systemd) e heartbeat=local, que significa usar o serviço heartbeat em cada nó. Há também pulsação global, que é mais adequada para grandes clusters.

Em seguida você pode montar /mídia/compartilhado e verifique a sincronização de conteúdo.

Feito! Como resultado, obtemos armazenamento mais ou menos tolerante a falhas, com escalabilidade e desempenho decente.

Fonte: habr.com

Adicionar um comentário