sql >> Database teknologi >  >> RDS >> PostgreSQL

Sådan implementeres PostgreSQL til en Docker-container ved hjælp af ClusterControl

Docker er blevet det mest almindelige værktøj til at oprette, implementere og køre applikationer ved at bruge containere. Det giver os mulighed for at pakke en applikation sammen med alle de dele, den har brug for, såsom biblioteker og andre afhængigheder, og sende det hele ud som én pakke. Docker kunne betragtes som en virtuel maskine, men i stedet for at skabe et helt virtuelt operativsystem tillader Docker applikationer at bruge den samme Linux-kerne som det system, de kører på, og kræver kun, at applikationer sendes med ting, der ikke allerede kører på værtscomputeren. Dette giver et markant ydelsesboost og reducerer applikationens størrelse.

I denne blog vil vi se, hvordan vi nemt kan implementere en PostgreSQL-opsætning via Docker, og hvordan vi konverterer vores opsætning til en primær/standby-replikeringsopsætning ved at bruge ClusterControl.

Sådan implementerer du PostgreSQL med Docker

Lad os først se, hvordan du implementerer PostgreSQL med Docker manuelt ved at bruge et PostgreSQL Docker-billede.

Billedet er tilgængeligt på Docker Hub, og du kan finde det fra kommandolinjen:

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

Vi tager det første resultat. Den officielle. Så vi skal trække billedet:

$ docker pull postgres

Og kør nodecontainerne, der kortlægger en lokal port til databaseporten ind i containeren:

$ 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

Efter at have kørt disse kommandoer, bør du have oprettet dette Docker-miljø:

$ 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

Nu kan du få adgang til hver node med følgende kommando:

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

Derefter kan du oprette en databasebruger, ændre konfigurationen i overensstemmelse med dine krav eller konfigurere replikering mellem noderne manuelt.

Sådan importerer du dine PostgreSQL-containere til ClusterControl

Relaterede ressourcer ClusterControl for PostgreSQL Implementering af PostgreSQL på en Docker Container Ved brug af Kubernetes til at implementere PostgreSQL

Nu hvor du har konfigureret din PostgreSQL-klynge, skal du stadig overvåge den, advare i tilfælde af ydeevneproblemer, administrere sikkerhedskopier, opdage fejl og automatisk failover til en sund server.

Hvis du allerede har en PostgreSQL-klynge, der kører på Docker, og du vil have ClusterControl til at administrere den, kan du blot køre ClusterControl-beholderen i det samme Docker-netværk som databasebeholderne. Det eneste krav er at sikre, at målcontainerne har SSH-relaterede pakker installeret (openssh-server, openssh-clients). Tillad derefter adgangskodefri SSH fra ClusterControl til databasebeholderne. Når du er færdig, skal du bruge funktionen "Importér eksisterende server/klynge", og klyngen skal importeres til ClusterControl.

Lad os først installere OpenSSH-relaterede pakker på databasebeholderne, tillade root-login, start det op og sæt root-adgangskoden:

$ 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

Start ClusterControl-beholderen (hvis den ikke er startet) og videresend port 80 på containeren til port 5000 på værten:

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

Bekræft, at ClusterControl-beholderen er oppe:

$ 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

Åbn en webbrowser, gå til http://[Docker_Host]:5000/clustercontrol og opret en standard admin bruger og adgangskode. Du skulle nu se ClusterControl-hovedsiden.

Det sidste trin er at opsætte den adgangskodeløse SSH til alle databasecontainere. Til dette skal vi kende IP-adressen for hver databasenode. For at vide det, kan vi køre følgende kommando for hver node:

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

Tilslut derefter ClusterControl-beholderens interaktive konsol:

$ docker exec -it clustercontrol bash

Kopier SSH-nøglen til alle databasecontainere:

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

Nu kan vi begynde at importere klyngen til ClusterControl. Åbn en webbrowser, og gå til Dockers fysiske værts-IP-adresse med den tilknyttede port, f.eks. http://192.168.100.150:5000/clustercontrol , klik på "Importér eksisterende server/klynge", og tilføj derefter følgende oplysninger.

Vi skal angive bruger, nøgle eller adgangskode og port for at forbinde med SSH til vores servere. Vi har også brug for et navn til vores nye klynge.

Efter opsætning af SSH-adgangsoplysningerne skal vi definere databasebrugeren, versionen, basedir og IP-adressen eller værtsnavnet for hver databasenode.

Sørg for, at du får det grønne flueben, når du indtaster værtsnavnet eller IP-adressen, hvilket indikerer, at ClusterControl er i stand til at kommunikere med noden. Klik derefter på knappen Importer og vent, indtil ClusterControl afslutter sit job. Du kan overvåge processen i ClusterControl Activity Section.

Databaseklyngen vil blive vist under ClusterControl-dashboardet, når den er importeret.

Bemærk, at hvis du kun har en PostgreSQL-masternode, kan du tilføje den til ClusterControl. Derefter kan du tilføje standby-noder fra ClusterControl-brugergrænsefladen for at tillade ClusterControl at konfigurere dem for dig.

ClusterControlSingle Console for hele din databaseinfrastrukturFind ud af, hvad der ellers er nyt i ClusterControlInstaller ClusterControl GRATIS

Sådan implementerer du dine PostgreSQL-containere med ClusterControl

Lad os nu se, hvordan du implementerer PostgreSQL med Docker ved at bruge et CentOS Docker Image (severalnines/centos-ssh) og et ClusterControl Docker Image (severalnines/clustercontrol).

Først vil vi implementere en ClusterControl Docker Container ved hjælp af den nyeste version, så vi skal trække flerenines/clustercontrol Docker Image.

$ docker pull severalnines/clustercontrol

Derefter kører vi ClusterControl-beholderen og udgiver port 5000 for at få adgang til den.

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

Nu kan du åbne ClusterControl UI på http://[Docker_Host]:5000/clustercontrol og opret en standard admin bruger og adgangskode.

Flerenines/centos-ssh leveres med, ud over den aktiverede SSH-tjeneste, en automatisk implementeringsfunktion, men den er kun gyldig for Galera Cluster. PostgreSQL er ikke understøttet endnu. Så vi indstiller AUTO_DEPLOYMENT-variablen til 0 i docker run-kommandoen for at oprette databasens noder.

$ 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

Efter at have kørt disse kommandoer, skulle vi have følgende Docker-miljø:

$ 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

Vi skal kende IP-adressen for hver databasenode. For at vide det, kan vi køre følgende kommando for hver node:

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

Nu har vi servernoderne op at køre, vi skal implementere vores databaseklynge. For at gøre det på en nem måde bruger vi ClusterControl.

For at udføre en implementering fra ClusterControl skal du åbne ClusterControl UI på http://[Docker_Host]:5000/clustercontrol , vælg derefter indstillingen "Deploy" og følg instruktionerne, der vises.

Når vi vælger PostgreSQL, skal vi angive bruger, nøgle eller adgangskode og port for at forbinde med SSH til vores servere. Vi har også brug for et navn til vores nye klynge, og hvis vi ønsker, at ClusterControl skal installere den tilsvarende software og konfigurationer for os.

Efter opsætning af SSH-adgangsoplysningerne skal vi definere databasebruger, version og datadir (valgfrit). Vi kan også angive, hvilket lager der skal bruges.

I det næste trin skal vi tilføje vores servere til den klynge, som vi skal oprette.

Når vi tilføjer vores servere, kan vi indtaste IP eller værtsnavn. Her skal vi bruge den IP-adresse, som vi tidligere fik fra hver container.

I det sidste trin kan vi vælge, om vores replikering skal være Synchronous eller Asynchronous.

Vi kan overvåge status for oprettelsen af ​​vores nye klynge fra ClusterControl-aktivitetsmonitoren.

Når opgaven er færdig, kan vi se vores klynge på hovedskærmen for ClusterControl.

Konklusion

Som vi kunne se, kunne implementeringen af ​​PostgreSQL med Docker være let i begyndelsen, men det vil kræve lidt mere arbejde at konfigurere replikering. Endelig bør du overvåge din klynge for at se, hvad der sker. Med ClusterControl kan du importere eller implementere din PostgreSQL-klynge med Docker, samt automatisere overvågnings- og administrationsopgaver som backup og automatisk failover/gendannelse. Prøv det.


  1. Flere mysql INSERT-sætninger i én forespørgsel php

  2. Brug OBJECTPROPERTY() til at bestemme, om et objekt er en visning i SQL Server

  3. SQL Server Listetabeller:Sådan viser du alle tabeller

  4. Umuligt at installere PG gem på min mac med Mavericks