PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como implantar o PostgreSQL em um contêiner do Docker usando o ClusterControl


O Docker se tornou a ferramenta mais comum para criar, implantar e executar aplicativos usando contêineres. Ele nos permite empacotar um aplicativo com todas as partes necessárias, como bibliotecas e outras dependências, e enviar tudo como um pacote. O Docker pode ser considerado uma máquina virtual, mas em vez de criar um sistema operacional virtual completo, o Docker permite que os aplicativos usem o mesmo kernel Linux do sistema em que estão sendo executados e exige apenas que os aplicativos sejam enviados com coisas que ainda não estão sendo executadas. o computador hospedeiro. Isso dá um aumento significativo de desempenho e reduz o tamanho do aplicativo.

Neste blog, veremos como podemos implantar facilmente uma configuração do PostgreSQL via Docker e como transformar nossa configuração em uma configuração de replicação primária/em espera usando o ClusterControl.

Como implantar o PostgreSQL com o Docker


Primeiro, vamos ver como implantar o PostgreSQL com o Docker manualmente usando uma imagem do PostgreSQL Docker.

A imagem está disponível no Docker Hub e você pode encontrá-la na linha de comando:
$ docker search postgres
NAME                                         DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
postgres                                     The PostgreSQL object-relational database sy…   6519                [OK]

Vamos pegar o primeiro resultado. O Oficial. Então, precisamos puxar a imagem:
$ docker pull postgres

E execute os contêineres do nó mapeando uma porta local para a porta do banco de dados no contêiner:
$ docker run -d --name node1 -p 6551:5432 postgres
$ docker run -d --name node2 -p 6552:5432 postgres
$ docker run -d --name node3 -p 6553:5432 postgres

Depois de executar esses comandos, você deve ter este ambiente do Docker criado:
$ docker ps
CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS                 PORTS                                                                                     NAMES
51038dbe21f8        postgres                      "docker-entrypoint.s…"   About an hour ago   Up About an hour       0.0.0.0:6553->5432/tcp                                                                    node3
b7a4211744e3        postgres                      "docker-entrypoint.s…"   About an hour ago   Up About an hour       0.0.0.0:6552->5432/tcp                                                                    node2
229c6bd23ff4        postgres                      "docker-entrypoint.s…"   About an hour ago   Up About an hour       0.0.0.0:6551->5432/tcp                                                                    node1

Agora, você pode acessar cada nó com o seguinte comando:
$ docker exec -ti [db-container] bash
$ su postgres
$ psql
psql (11.2 (Debian 11.2-1.pgdg90+1))
Type "help" for help.
postgres=#

Em seguida, você pode criar um usuário de banco de dados, alterar a configuração de acordo com seus requisitos ou configurar a replicação entre os nós manualmente.

Como importar seus contêineres PostgreSQL para o ClusterControl

Recursos relacionados ClusterControl for PostgreSQL Implantação do PostgreSQL em um contêiner do Docker Usando o Kubernetes para implantar o PostgreSQL
Agora que você configurou seu cluster PostgreSQL, ainda precisa monitorá-lo, alertar em caso de problemas de desempenho, gerenciar backups, detectar falhas e fazer failover automaticamente para um servidor íntegro.

Se você já tem um cluster PostgreSQL em execução no Docker e deseja que o ClusterControl o gerencie, basta executar o contêiner ClusterControl na mesma rede Docker que os contêineres de banco de dados. O único requisito é garantir que os contêineres de destino tenham pacotes relacionados ao SSH instalados (openssh-server, openssh-clients). Em seguida, permita o SSH sem senha do ClusterControl para os contêineres do banco de dados. Uma vez feito, use o recurso “Import Existing Server/Cluster” e o cluster deve ser importado para o ClusterControl.

Primeiro, vamos instalar os pacotes relacionados ao OpenSSH nos contêineres do banco de dados, permitir o login do root, iniciá-lo e definir a senha do root:
$ docker exec -ti [db-container] apt-get update
$ docker exec -ti [db-container] apt-get install -y openssh-server openssh-client
$ docker exec -it [db-container] sed -i 's|^PermitRootLogin.*|PermitRootLogin yes|g' /etc/ssh/sshd_config
$ docker exec -it [db-container] sed -i 's|^#PermitRootLogin.*|PermitRootLogin yes|g' /etc/ssh/sshd_config
$ docker exec -ti [db-container] service ssh start
$ docker exec -it [db-container] passwd

Inicie o contêiner ClusterControl (se não for iniciado) e encaminhe a porta 80 no contêiner para a porta 5000 no host:
$ docker run -d --name clustercontrol -p 5000:80 severalnines/clustercontrol

Verifique se o contêiner do ClusterControl está ativo:
$ docker ps | grep clustercontrol
7eadb6bb72fb        severalnines/clustercontrol   "/entrypoint.sh"         4 hours ago         Up 4 hours (healthy)   22/tcp, 443/tcp, 3306/tcp, 9500-9501/tcp, 9510-9511/tcp, 9999/tcp, 0.0.0.0:5000->80/tcp   clustercontrol

Abra um navegador da Web, vá para http://[Docker_Host]:5000/clustercontrol e crie um usuário e senha de administrador padrão. Agora você deve ver a página principal do ClusterControl.

A última etapa é configurar o SSH sem senha para todos os contêineres de banco de dados. Para isso, precisamos saber o endereço IP de cada nó do banco de dados. Para conhecê-lo, podemos executar o seguinte comando para cada nó:
$ docker inspect [db-container] |grep IPAddress
            "IPAddress": "172.17.0.6",

Em seguida, anexe ao console interativo do contêiner ClusterControl:
$ docker exec -it clustercontrol bash

Copie a chave SSH para todos os contêineres de banco de dados:
$ ssh-copy-id 172.17.0.6
$ ssh-copy-id 172.17.0.7
$ ssh-copy-id 172.17.0.8

Agora, podemos começar a importar o cluster para o ClusterControl. Abra um navegador da Web e acesse o endereço IP do host físico do Docker com a porta mapeada, por exemplo, http://192.168.100.150:5000/clustercontrol , clique em “Import Existing Server/Cluster” e adicione as seguintes informações.

Devemos especificar Usuário, Chave ou Senha e porta para conectar por SSH aos nossos servidores. Também precisamos de um nome para nosso novo cluster.

Após configurar as informações de acesso SSH, devemos definir o usuário do banco de dados, versão, basedir e o endereço IP ou nome do host para cada nó do banco de dados.

Certifique-se de obter a marca verde ao inserir o nome do host ou o endereço IP, indicando que o ClusterControl pode se comunicar com o nó. Em seguida, clique no botão Importar e aguarde até que o ClusterControl termine seu trabalho. Você pode monitorar o processo na Seção de Atividade do ClusterControl.

O cluster de banco de dados será listado no painel ClusterControl depois de importado.

Observe que, se você tiver apenas um nó mestre do PostgreSQL, poderá adicioná-lo ao ClusterControl. Em seguida, você pode adicionar os nós de espera da interface do usuário do ClusterControl para permitir que o ClusterControl os configure para você.
ClusterControlSingle Console para toda a sua infraestrutura de banco de dados Descubra o que mais há de novo no ClusterControlInstale o ClusterControl GRATUITAMENTE

Como implantar seus contêineres PostgreSQL com ClusterControl


Agora, vamos ver como implantar o PostgreSQL com o Docker usando uma imagem do CentOS Docker (severalnines/centos-ssh) e uma imagem do Docker ClusterControl (severalnines/clustercontrol).

Primeiro, implantaremos um contêiner do Docker ClusterControl usando a versão mais recente, portanto, precisamos extrair a imagem do Docker de vários noves/clustercontrol.
$ docker pull severalnines/clustercontrol

Em seguida, executaremos o contêiner ClusterControl e publicaremos a porta 5000 para acessá-lo.
$ docker run -d --name clustercontrol -p 5000:80 severalnines/clustercontrol

Agora você pode abrir a interface do usuário do ClusterControl em http://[Docker_Host]:5000/clustercontrol e crie um usuário e senha de administrador padrão.

O manynines/centos-ssh vem com, além do serviço SSH habilitado, um recurso de Auto Deployment, mas é válido apenas para Galera Cluster. PostgreSQL ainda não é suportado. Portanto, definiremos a variável AUTO_DEPLOYMENT em 0 no comando docker run para criar os nós de bancos de dados.
$ docker run -d --name postgres1 -p 5551:5432 --link clustercontrol:clustercontrol -e AUTO_DEPLOYMENT=0 severalnines/centos-ssh
$ docker run -d --name postgres2 -p 5552:5432 --link clustercontrol:clustercontrol -e AUTO_DEPLOYMENT=0 severalnines/centos-ssh
$ docker run -d --name postgres3 -p 5553:5432 --link clustercontrol:clustercontrol -e AUTO_DEPLOYMENT=0 severalnines/centos-ssh

Após executar esses comandos, devemos ter o seguinte ambiente Docker:
$ docker ps
CONTAINER ID        IMAGE                         COMMAND             CREATED             STATUS                    PORTS                                                                                     NAMES
0df916b918a9        severalnines/centos-ssh       "/entrypoint.sh"    4 seconds ago       Up 3 seconds              22/tcp, 3306/tcp, 9999/tcp, 27107/tcp, 0.0.0.0:5553->5432/tcp                             postgres3
4c1829371b5e        severalnines/centos-ssh       "/entrypoint.sh"    11 seconds ago      Up 10 seconds             22/tcp, 3306/tcp, 9999/tcp, 27107/tcp, 0.0.0.0:5552->5432/tcp                             postgres2
79d4263dd7a1        severalnines/centos-ssh       "/entrypoint.sh"    32 seconds ago      Up 31 seconds             22/tcp, 3306/tcp, 9999/tcp, 27107/tcp, 0.0.0.0:5551->5432/tcp                             postgres1
7eadb6bb72fb        severalnines/clustercontrol   "/entrypoint.sh"    38 minutes ago      Up 38 minutes (healthy)   22/tcp, 443/tcp, 3306/tcp, 9500-9501/tcp, 9510-9511/tcp, 9999/tcp, 0.0.0.0:5000->80/tcp   clustercontrol

Precisamos saber o endereço IP de cada nó do banco de dados. Para conhecê-lo, podemos executar o seguinte comando para cada nó:
$ docker inspect [db-container] |grep IPAddress
            "IPAddress": "172.17.0.3",

Agora que temos os nós do servidor funcionando, precisamos implantar nosso cluster de banco de dados. Para fazer isso de maneira fácil, usaremos o ClusterControl.

Para executar uma implantação do ClusterControl, abra a interface do usuário do ClusterControl em http://[Docker_Host]:5000/clustercontrol , selecione a opção “Implantar” e siga as instruções que aparecem.

Ao selecionar PostgreSQL, devemos especificar Usuário, Chave ou Senha e porta para conectar por SSH aos nossos servidores. Também precisamos de um nome para nosso novo cluster e se queremos que o ClusterControl instale o software e as configurações correspondentes para nós.

Após configurar as informações de acesso SSH, devemos definir o usuário do banco de dados, versão e datadir (opcional). Também podemos especificar qual repositório usar.

Na próxima etapa, precisamos adicionar nossos servidores ao cluster que vamos criar.

Ao adicionar nossos servidores, podemos inserir o IP ou o nome do host. Aqui devemos usar o endereço IP que obtivemos de cada contêiner anteriormente.

Na última etapa, podemos escolher se nossa replicação será síncrona ou assíncrona.

Podemos monitorar o status da criação do nosso novo cluster a partir do monitor de atividades do ClusterControl.

Quando a tarefa estiver concluída, podemos ver nosso cluster na tela principal do ClusterControl.

Conclusão


Como pudemos ver, a implantação do PostgreSQL com Docker pode ser fácil no início, mas exigirá um pouco mais de trabalho para configurar a replicação. Por fim, você deve monitorar seu cluster para ver o que está acontecendo. Com o ClusterControl, você pode importar ou implantar seu cluster PostgreSQL com o Docker, bem como automatizar as tarefas de monitoramento e gerenciamento, como backup e failover/recuperação automática. Experimente.