sql >> Base de Datos >  >> RDS >> PostgreSQL

Cómo implementar PostgreSQL en un contenedor Docker mediante ClusterControl

Docker se ha convertido en la herramienta más común para crear, implementar y ejecutar aplicaciones mediante el uso de contenedores. Nos permite empaquetar una aplicación con todas las partes que necesita, como bibliotecas y otras dependencias, y enviarlo todo como un solo paquete. Docker podría considerarse como una máquina virtual, pero en lugar de crear un sistema operativo virtual completo, Docker permite que las aplicaciones usen el mismo kernel de Linux que el sistema en el que se ejecutan y solo requiere que las aplicaciones se envíen con cosas que aún no se ejecutan. la computadora anfitriona. Esto aumenta significativamente el rendimiento y reduce el tamaño de la aplicación.

En este blog, veremos cómo podemos implementar fácilmente una configuración de PostgreSQL a través de Docker y cómo convertir nuestra configuración en una configuración de replicación principal/en espera mediante ClusterControl.

Cómo implementar PostgreSQL con Docker

Primero, veamos cómo implementar PostgreSQL con Docker manualmente usando una imagen de Docker de PostgreSQL.

La imagen está disponible en Docker Hub y puede encontrarla desde la línea de comando:

$ docker search postgres
NAME                                         DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
postgres                                     The PostgreSQL object-relational database sy…   6519                [OK]

Tomaremos el primer resultado. El Oficial. Entonces, necesitamos extraer la imagen:

$ docker pull postgres

Y ejecute los contenedores de nodos asignando un puerto local al puerto de la base de datos en el contenedor:

$ 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

Después de ejecutar estos comandos, debería tener este entorno Docker creado:

$ 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

Ahora, puede acceder a cada nodo con el siguiente comando:

$ docker exec -ti [db-container] bash
$ su postgres
$ psql
psql (11.2 (Debian 11.2-1.pgdg90+1))
Type "help" for help.
postgres=#

Luego, puede crear un usuario de la base de datos, cambiar la configuración según sus requisitos o configurar la replicación entre los nodos manualmente.

Cómo importar sus contenedores de PostgreSQL a ClusterControl

Recursos relacionados ClusterControl para PostgreSQL Implementación de PostgreSQL en un contenedor Docker Uso de Kubernetes para implementar PostgreSQL

Ahora que configuró su clúster de PostgreSQL, aún necesita monitorearlo, alertar en caso de problemas de rendimiento, administrar copias de seguridad, detectar fallas y conmutar por error automáticamente a un servidor saludable.

Si ya tiene un clúster de PostgreSQL ejecutándose en Docker y quiere que ClusterControl lo administre, simplemente puede ejecutar el contenedor de ClusterControl en la misma red de Docker que los contenedores de la base de datos. El único requisito es asegurarse de que los contenedores de destino tengan paquetes relacionados con SSH instalados (openssh-server, openssh-clients). Luego, permita SSH sin contraseña desde ClusterControl a los contenedores de la base de datos. Una vez hecho esto, use la función "Importar servidor/clúster existente" y el clúster debe importarse a ClusterControl.

Primero, instalemos los paquetes relacionados con OpenSSH en los contenedores de la base de datos, permitamos el inicio de sesión de root, iniciémoslo y configuremos la contraseña de 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 el contenedor ClusterControl (si no se ha iniciado) y reenvíe el puerto 80 del contenedor al puerto 5000 del host:

$ docker run -d --name clustercontrol -p 5000:80 severalnines/clustercontrol

Verifique que el contenedor ClusterControl esté activo:

$ 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 un navegador web, vaya a http://[Docker_Host]:5000/clustercontrol y cree un usuario y una contraseña de administrador predeterminados. Ahora debería ver la página principal de ClusterControl.

El último paso es configurar el SSH sin contraseña para todos los contenedores de la base de datos. Para esto, necesitamos saber la dirección IP de cada nodo de la base de datos. Para saberlo, podemos ejecutar el siguiente comando para cada nodo:

$ docker inspect [db-container] |grep IPAddress
            "IPAddress": "172.17.0.6",

Luego, adjunte a la consola interactiva del contenedor ClusterControl:

$ docker exec -it clustercontrol bash

Copie la clave SSH en todos los contenedores de la base de datos:

$ ssh-copy-id 172.17.0.6
$ ssh-copy-id 172.17.0.7
$ ssh-copy-id 172.17.0.8

Ahora, podemos comenzar a importar el clúster a ClusterControl. Abra un navegador web y vaya a la dirección IP del host físico de Docker con el puerto asignado, por ejemplo, http://192.168.100.150:5000/clustercontrol , haga clic en "Importar servidor/clúster existente" y luego agregue la siguiente información.

Debemos especificar Usuario, Clave o Contraseña y puerto para conectarnos por SSH a nuestros servidores. También necesitamos un nombre para nuestro nuevo clúster.

Después de configurar la información de acceso SSH, debemos definir el usuario de la base de datos, la versión, el directorio base y la dirección IP o el nombre de host para cada nodo de la base de datos.

Asegúrese de obtener la marca verde al ingresar el nombre de host o la dirección IP, lo que indica que ClusterControl puede comunicarse con el nodo. Luego, haga clic en el botón Importar y espere hasta que ClusterControl termine su trabajo. Puede monitorear el proceso en la Sección de Actividad de ClusterControl.

El clúster de la base de datos aparecerá en el panel de control de ClusterControl una vez importado.

Tenga en cuenta que, si solo tiene un nodo maestro de PostgreSQL, puede agregarlo a ClusterControl. Luego puede agregar los nodos en espera desde la interfaz de usuario de ClusterControl para permitir que ClusterControl los configure por usted.

ClusterControlConsola única para toda su infraestructura de base de datosDescubra qué más hay de nuevo en ClusterControlInstale ClusterControl GRATIS

Cómo implementar sus contenedores de PostgreSQL con ClusterControl

Ahora, veamos cómo implementar PostgreSQL con Docker usando una imagen de Docker de CentOS (severalnines/centos-ssh) y una imagen de Docker de ClusterControl (severalnines/clustercontrol).

Primero, implementaremos un contenedor Docker de ClusterControl con la última versión, por lo que debemos extraer la imagen de Docker de varios nueves/clustercontrol.

$ docker pull severalnines/clustercontrol

Luego, ejecutaremos el contenedor ClusterControl y publicaremos el puerto 5000 para acceder a él.

$ docker run -d --name clustercontrol -p 5000:80 severalnines/clustercontrol

Ahora puede abrir la interfaz de usuario de ClusterControl en http://[Docker_Host]:5000/clustercontrol y cree un usuario y una contraseña de administrador predeterminados.

El variosnines/centos-ssh viene con, además del servicio SSH habilitado, una función de implementación automática, pero solo es válida para Galera Cluster. PostgreSQL aún no es compatible. Por lo tanto, estableceremos la variable AUTO_DEPLOYMENT en 0 en el comando de ejecución de la ventana acoplable para crear los nodos de bases de datos.

$ 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

Después de ejecutar estos comandos, deberíamos tener el siguiente entorno de 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

Necesitamos saber la dirección IP de cada nodo de la base de datos. Para saberlo, podemos ejecutar el siguiente comando para cada nodo:

$ docker inspect [db-container] |grep IPAddress
            "IPAddress": "172.17.0.3",

Ahora que tenemos los nodos del servidor en funcionamiento, necesitamos implementar nuestro clúster de base de datos. Para hacerlo de forma sencilla utilizaremos ClusterControl.

Para realizar una implementación desde ClusterControl, abra la interfaz de usuario de ClusterControl en http://[Docker_Host]:5000/clustercontrol , luego seleccione la opción "Implementar" y siga las instrucciones que aparecen.

Al seleccionar PostgreSQL, debemos especificar Usuario, Clave o Contraseña y puerto para conectarnos por SSH a nuestros servidores. También necesitamos un nombre para nuestro nuevo clúster y si queremos que ClusterControl instale el software y las configuraciones correspondientes por nosotros.

Después de configurar la información de acceso SSH, debemos definir el usuario de la base de datos, la versión y datadir (opcional). También podemos especificar qué repositorio usar.

En el siguiente paso, debemos agregar nuestros servidores al clúster que vamos a crear.

Al agregar nuestros servidores, podemos ingresar IP o nombre de host. Aquí debemos usar la dirección IP que obtuvimos de cada contenedor previamente.

En el último paso, podemos elegir si nuestra replicación será Síncrona o Asíncrona.

Podemos monitorear el estado de la creación de nuestro nuevo clúster desde el monitor de actividad de ClusterControl.

Una vez finalizada la tarea, podemos ver nuestro clúster en la pantalla principal de ClusterControl.

Conclusión

Como pudimos ver, la implementación de PostgreSQL con Docker podría ser fácil al principio, pero requerirá un poco más de trabajo para configurar la replicación. Finalmente, debe monitorear su clúster para ver qué está sucediendo. Con ClusterControl, puede importar o implementar su clúster de PostgreSQL con Docker, así como también automatizar las tareas de monitoreo y administración, como la copia de seguridad y la conmutación por error/recuperación automática. Pruébalo.