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 PostgreSQLNu 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 GRATISSå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.