linux:docker_postgresql

Nessa arquitetura utilizaremos 3 máquinas em um cluster swarm. A pgPool que irá fazer o balanceamento de carga e monitoramento constante do status das máquinas, bem como o switchover para uma nova máquina master caso a master original venha a cair. Teremos a máquina pgMaster que terá o papel de master e a pgSlave que terá o papel de standby ou slave. A máquina Master ficará em modo Escrita/Leitura e a Slave ficará em modo apenas Leitura. Quando uma consulta de leitura, ex: Select * From users;, poderá ser direcionada pelo pgPool para qualquer uma das duas máquinas, porém, uma consulta de escrita, ex: Insert Into…, só poderá ser direcionada para a máquina Master. Abaixo temos um desenho da infraestrutura de modo geral:

* Configurando o DNS no resolv.conf

$ sudo vim /etc/init.d/resolv.conf

* adicione as linhas:

nameserver 8.8.8.8
nameserver 8.8.4.4

* Configurando o DNS no resolv.conf

$ sudo vim /etc/network/interfaces

* adicione as linhas, logo acima da linha dns-nameservers já existente:

dns-nameservers 8.8.8.8
dns-nameservers 8.8.4.4

* Adicione a chave do repositório Docker

$ sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D

* Adicione o repositório

$ sudo apt-add-repository 'deb https://apt.dockerproject.org/repo ubuntu-xenial main'

* Adicione o repositório

$ sudo apt-get update

* Instale o pacote do docker

$ sudo apt-get install -y docker-engine

* Adicionando o usuário atual do sistema ao grupo que pode usar o docker sem sudo

$ sudo usermod -aG docker $(whoami)

* Obtenha o script

$ wget https://github.com/docker/machine/releases/download/v0.6.0/docker-machine-$(uname -s)-$(uname -m)

* Troque o nome do script

$ mv docker-machine-Linux-x86_64 docker-machine

* Dando permissão de executável

$ chmod +x docker-machine

* Movendo o script para ficar disponível para os usuários

$ sudo mv docker-machine /usr/local/bin

* Inicialize o cluster Swarm na máquina primária, no nosso caso, pgpool.ifce.edu.br

$ sudo docker swarm init --advertise-addr <IP_VALIDO_DA_MAQUINA>

* Obtenha o comando para adicionar novos nós manager

$ sudo docker swarm join-token manager

* Copie o código impresso na tela e execute-o nas outras máquinas. O código será semelhante ao código abaixo:

docker swarm join \
    --token <TOKEN_MANAGER> \
    <IP_VALIDO_DA_MAQUINA_LEADER>:2377

* Verifique se o cluster está ativo e com todas as máquinas adicionadas. Execute o comando abaixo:

$ sudo docker node ls

A resposta será algo parecido com o texto abaixo:

ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS
xxxxxxxxxxxxxxxxxxxxxxxxx     postgres-master     Ready               Active              Reachable
xxxxxxxxxxxxxxxxxxxxxxxxx     postgres-slave      Ready               Active              Reachable
xxxxxxxxxxxxxxxxxxxxxxxxx *   pgpool              Ready               Active              Leader

* Gere a chave ssh de apenas da máquina pgpool.ifce.edu.br para ser adicionada no projeto do gitlab

$ ssh-keygen -t rsa -C "suporte@ifce.edu.br" -b 4096

* Imprima a chave gerada e copie seu conteúdo para as chaves de deploy no gitlab em: Project > Settings > Repository. Use o comando abaixo para imprimir a chave:

$ cat ~/.ssh/id_rsa.pub

* Clone o projeto apenas na máquina pgpool

$ git clone git@gitlab.ifce.edu.br:dgti/postgres-docker-cluster.git

* Liberação de portas no firewall de entrada e saída entre as 3 máquinas do cluster

Porta TCP 2377 para gerenciamento de comunicação entre os nós do cluster

Portas TCP e UDP 7946 para comunicação entre os nós

Porta UDP 4789 para o tráfego de rede

Portas 5440 e 5441 para conexão do postgres entre os nós

Porta 9898 para conexão de gerenciamento PCP do postgres

* Suba os serviços [Apenas na máquina pgpool]

$ cd postgres-docker-cluster
$ docker stack deploy --compose-file=docker-compose.yml postgres

* Fazer desassociação de um nó do cluster de forma manual caso o comando docker swarm leave -f não funcione:

sudo service docker stop
sudo rm -Rf /var/lib/docker/swarm
sudo service docker start
  • linux/docker_postgresql.txt
  • Última modificação: 2021/08/25 10:33
  • (edição externa)