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 PostgreSQLAgora 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.