Docker + Cluster DRBD + SQL Server - Database as a Service Utilizando Volumes Replicados

Este artigo abordará como configurar dois nós em um cluster ativo/passivo através da ferramenta DRBD Manage. Entretanto, teremos um volume DRBD em modo primário/primário em ambos os hosts.

[ Hits: 8.210 ]

Por: Waldemar Dibiazi Junior em 21/03/2018


Mão na massa



Atualmente o Docker tem suporte a plugins, o que permite estender suas funcionalidades, e no caso deste artigo, iremos utilizar um plugin para volume de dados, o que permitirá especificamente armazenar o conteúdo de volumes Docker sob um backend storage DRBD.

A vantagem é que todas as operações que um ou mais containers realizar sob seus volumes de dados, não serão simplesmente gravadas em um filesystem local, mas gravados em um dispositivo virtual de blocos replicados gerenciado pelo módulo de kernel do DRBD, replicando os dados para um ou mais hosts (nós) do nosso Cluster.

A abordagem deste artigo será simplesmente permitir que quando um container for ser executado em dos nós do Cluster, ele terá acesso aos dados mais recentes existentes no volume, pois este volume é proveniente de uma estrutura de replicação estabelecida pelo DRBD.

Em outros artigos estaremos explorando ambientes mais complexos com o DRBD atuando em um modo Ativo/Ativo.

Para criação de nosso container que proverá o serviço de banco de dados baseado no Microsoft SQL Server, estaremos utilizando uma imagem de container Docker disponibilizada pela Microsoft denominada microsoft/mssql-server-linux.

Para este artigo utilizaremos o Docker Hub para realizar o pull da imagem acima mencionada.

A seguir temos os requisitos mínimos para poder utilizar a imagem de container Docker disponibilizada pela Microsoft:
  • Docker Engine 1.8 ou superior
  • Mínimo de 4 GB de espaço em disco
  • Mínimo de 4 GB de RAM (apesar que para a finalidade de testes, uma máquina virtual 2.5 GB atenderá o mínimo de 2 GB exigido pelo SQL Server sobre container).
  • Configurar uma senha forte para a conta de administrador do serviço do SQL Server, senha essa contendo pelo menos 8 caracteres utilizando letras maiúsculas e minúsculas, números e/ou símbolos não alfanuméricos.
  • Para este artigo utilizamos a distribuição CentOS Linux 7 (7.4.1708), e a instalação do Docker pode ser realizada de maneira simples através da etapas abaixo descritas.

Todas as etapas abaixo serão realizadas em ambos os nós do nosso Cluster, que para este artigo os nós serão referenciados como:
  • containernode01 - Endereço IP: 192.168.0.161
  • containernode02 - Endereço IP: 192.168.0.162

Para atividades de configuração especificas em um determinado nó do Cluster, estaremos informando previamente.

Portanto, em ambos os nós:

Instale os pacotes que serão dependências no restante do processo de instalação do Docker Engine:

sudo yum install yum-utils

Neste caso, o pacote yum-utils permitirá utilizarmos a ferramenta yum-config-manager para adicionar o repositório Docker Comunity Edition.

Adicione o repositório ao sistema:

sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

Instale o pacote do Docker Engine:

sudo yum install -y docker-ce

Execute os daemons do Docker e ative o serviço na inicialização do sistema:

sudo systemctl start docker
$ sudo systemctl enable docker


Adicione o atual usuário logado no grupo de usuário Docker. Essa ação fará com que não seja necessária a utilização do comando sudo para utilização docker.

sudo gpasswd -a "${USER}" docker

Reinicie o sistema para testar a inicialização do serviço do Docker:

sudo reboot

Para testar o serviço Docker Engine, execute uma consulta simples através do docker cliente, por exemplo, se existe algum container em execução:

docker ps

Certamente a listagem estará vazia, o que indica que o docker client conseguiu estabelecer a conexão com o serviço Docker Engine.

Instale o pacote para adicionar e configurar o repositório EPEL, pois a versão 9 do DRBD que será utilizada neste artigo, encontra-se neste repositório:

rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

Instale os pacotes do DRBD:

yum install drbd90-utils kmod-drbd90

Ative o carregamento do módulo do kernel durante o boot:

echo drbd > /etc/modules-load.d/drbd.conf

Instale os pacotes a seguir pois serão necessários para podermos realizar o download e compilar a ferramenta drbdmanage. Em seguida, descompacte o arquivo e proceda com as etapas de build e instalação:

yum install wget pygobject2 -y
$ wget http://www.linbit.com/downloads/drbdmanage/drbdmanage-0.99.14.tar.gz
$ tar -xvzf drbdmanage-0.99.14.tar.gz -C /opt/
$ cd /opt/drbdmanage-0.99.14/
$ ./setup.py build
$ ./setup.py install


Realize um teste com a ferramenta drbdmanage. O retorno deverá ser a palavra "pong", indicando que a ferramenta está funcional:

drbdmanange ping

A grande vantagem da ferramenta drbdmanage é que ela facilita o gerenciamento de Clusters utilizando a tecnologia DRBD. Através dela podemos gerenciar dispositivos de bloco baseados em LVM ou ZFS, onde o mesmo estejam sob um dispositivos de replicação DRBD.

Para este artigo teremos em cada nó do Cluster dois discos, sendo um para uso exclusivo do sistema operacional e demais serviços e um dele para criação do volume de dados replicados pelo DRBD, e que será utilizado para o armazenamento de dados de forma persistente em nossos containers.

Por padrão o drbdmanage possui uma referência a um volume group chamado drbdpool, referência essa existente no arquivo /etc/drbdmanaged.cfg.

Podemos manter esse nome padrão ou altera-lo no arquivo de configuração anteriormente citado. Para este artigo iremos utilizar o nome, containersData, portanto, execute o comando abaixo para realizar a alteração:

sed -r 's/^#(.*drbdctrl-vg.*)$/\1/' -i /etc/drbdmanaged.cfg
$ sed 's/drbdpool/containersData\n/g' -i /etc/drbdmanaged.cfg


Para este artigo, vamos supor que a segunda unidade de disco seja /dev/sdb, portanto, criaremos um volume group chamado containersData nesta unidade de disco.

Crie uma partição primária na segunda unidade de disco e em seguida crie um volume físico e depois o volume lógico chamado containersData.

pvcreate /dev/sdb1
$ vgcreate containersData /dev/sdb1


No host containernode01 (192.168.0.161) e containernode02 (192.168.0.162) criaremos pares de chaves, para permitir que a partir de um host possamos acessar o outro via SSH, sem a necessidade de informarmos senha e vice-versa. Esta etapa é importante, pois iremos utilizar a ferramenta drbdmanage para provisionar nossa infraestrutura de Cluster, etapa essa que pode ser simplificada devido a autenticação entre hosts poderem ser realizadas por meio de chaves RSA.

No host containernode01 (192.168.0.161) execute:

ssh-keygen -t rsa
$ scp .ssh/id_rsa.pub root@192.168.0.162:/root/.


No host containernode02 (192.168.0.162) execute:

ssh-keygen -t rsa
$ scp .ssh/id_rsa.pub root@192.168.0.161:/root/.
$ cat id_rsa.pub >> .ssh/authorized_keys


No host containernode01 (192.168.0.161) execute:

cat id_rsa.pub >> .ssh/authorized_keys

No hosts containernode01 e containernode02 edite o arquivo /etc/hosts, deixando o final dele da seguinte forma para não dependermos de uma infraestrutura DNS para a resolução.
  • 192.168.0.161 containernode01 containernode01.lab.local
  • 192.168.0.162 containernode02 containernode02.lab.local

No host containernode01 (192.168.0.161) execute:

ssh 192.168.0.162 hostname
$ ssh containernode02 hostname


Em ambos os comandos deverá ser exibido o hostname do host 192.168.0.162. Esta etapa é importante, para testarmos a comunicação entre ambos hosts via SSH sem uso autenticação baseada em senha, pois conforme exposto, isto permitirá que a ferramenta drbdmanage estabeleça a conexão via SSH entre os hosts e procedimentos, como por exemplo, criação de volumes lógicos sob o dispositivo de bloco replicado DRBD seja realizado durante a criação de volumes docker.

No host containernode02 (192.168.0.162) execute:

ssh 192.168.0.161 hostname
$ ssh containernode01 hostname


Os testes de conexão via SSH sem senha em um primeiro momento, permitirá que os hosts que estão sofrendo conexão sejam inseridos na lista de hosts conhecidos em (/root/.ssh/know_hosts).

Os volumes de dados que criaremos a partir do docker utilizará um plugin chamado drbdmanage, onde todas as chamadas realizadas a esse plugin serão direcionadas ao serviço docker-drbdmanage-plugin, e o mesmo utilizará a atual estrutura de cluster provisionada, permitindo transparência durante a criação de volumes no docker, criação essa que utilizará do mecanismo de replicação do DRBD.

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Mão na massa
   3. Provisionando o Cluster
   4. Instalando o serviço DRBD Manage Docker Volume Plugin
   5. Criando um container para execução do Microsoft SQL Server
   6. Verificando a replicação de dados para o segundo nó do Cluster
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Minha experiência com Linux

Fish - Um shell fácil de usar

Saiba como ativar dois ou mais fbpagers no Fluxbox

Linux e o ensino da sociedade

Recuperando o seu sistema Salix

  
Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts