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

En guide til implementering af TimescaleDB med Docker

I dag er Docker 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. Det 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 tilfælde af Docker Images kommer de med en foruddefineret OS-version, og pakkerne installeres på en måde, som blev besluttet af den person, der oprettede billedet. Det er muligt, at du vil bruge et andet OS, eller måske vil du installere pakkerne på en anden måde. I disse tilfælde skal du bruge et rent OS Docker Image og installere softwaren fra bunden.

Replikering er en almindelig funktion i et databasemiljø, så efter at have installeret TimescaleDB Docker Images, hvis du vil konfigurere en replikeringsopsætning, skal du gøre det manuelt fra containeren ved at bruge en Docker-fil eller endda et script. Denne opgave kan være kompleks, hvis du ikke har Docker-viden.

I denne blog vil vi se, hvordan vi kan implementere TimescaleDB via Docker ved at bruge et TimescaleDB Docker Image, og derefter vil vi se, hvordan vi installerer det fra bunden ved at bruge et CentOS Docker Image og ClusterControl.

Sådan implementeres TimescaleDB med et Docker-billede

Lad os først se, hvordan du implementerer TimescaleDB ved at bruge et Docker-billede, der er tilgængeligt på Docker Hub.

$ docker search timescaledb
NAME                                       DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
timescale/timescaledb                      An open-source time-series database optimize…   52

Vi tager det første resultat. Så vi skal trække dette billede:

$ docker pull timescale/timescaledb

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

$ docker run -d --name timescaledb1 -p 7551:5432 timescale/timescaledb
$ docker run -d --name timescaledb2 -p 7552:5432 timescale/timescaledb

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
6d3bfc75fe39        timescale/timescaledb   "docker-entrypoint.s…"   15 minutes ago      Up 15 minutes       0.0.0.0:7552->5432/tcp   timescaledb2
748d5167041f        timescale/timescaledb   "docker-entrypoint.s…"   16 minutes ago      Up 16 minutes       0.0.0.0:7551->5432/tcp   timescaledb1

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

$ docker exec -ti [db-container] bash
$ su postgres
$ psql
psql (9.6.13)
Type "help" for help.
postgres=#

Som du kan se, indeholder dette Docker-billede en TimescaleDB 9.6-version som standard, og det er installeret på Alpine Linux v3.9. Du kan bruge en anden TimescaleDB-version ved at ændre tagget:

$ docker pull timescale/timescaledb:latest-pg11

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

Sådan implementerer du TimescaleDB med ClusterControl

Lad os nu se, hvordan du implementerer TimescaleDB med Docker ved at bruge et CentOS Docker Image (centos) 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 vi åbne ClusterControl UI på http://[Docker_Host]:5000/clustercontrol og oprette en standard administratorbruger og adgangskode.

CentOS Official Docker Image kommer uden SSH-tjeneste, så vi installerer det og tillader forbindelsen fra ClusterControl-noden uden adgangskode ved at bruge en SSH-nøgle.

$ docker search centos
NAME                               DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
centos                             The official build of CentOS.                   5378                [OK]

Så vi trækker CentOS Official Docker Image.

$ docker pull centos

Og så kører vi to nodecontainere, timescale1 og timescale2, forbundet med ClusterControl, og vi kortlægger en lokal port for at oprette forbindelse til databasen (valgfrit).

$ docker run -dt --privileged --name timescale1 -p 8551:5432 --link clustercontrol:clustercontrol centos /usr/sbin/init
$ docker run -dt --privileged --name timescale2 -p 8552:5432 --link clustercontrol:clustercontrol centos /usr/sbin/init

Da vi skal installere og konfigurere SSH-tjenesten, skal vi køre containeren med privilegerede og /usr/sbin/init-parametre for at kunne administrere tjenesten inde i containeren.

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

$ docker ps
CONTAINER ID        IMAGE                         COMMAND             CREATED             STATUS                       PORTS                                                                                     NAMES
230686d8126e        centos                        "/usr/sbin/init"    4 seconds ago       Up 3 seconds                 0.0.0.0:8552->5432/tcp                                                                    timescale2
c0e7b245f7fe        centos                        "/usr/sbin/init"    23 seconds ago      Up 22 seconds                0.0.0.0:8551->5432/tcp                                                                    timescale1
7eadb6bb72fb        severalnines/clustercontrol   "/entrypoint.sh"    2 weeks ago         Up About an hour (healthy)   22/tcp, 443/tcp, 3306/tcp, 9500-9501/tcp, 9510-9511/tcp, 9999/tcp, 0.0.0.0:5000->80/tcp   clustercontrol

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

$ docker exec -ti [db-container] bash

Som vi nævnte tidligere, skal vi installere SSH-tjenesten, så lad os installere den, tillade root-adgang og indstille root-adgangskoden for hver databasebeholder:

$ docker exec -ti [db-container] yum update -y
$ docker exec -ti [db-container] yum install -y openssh-server openssh-clients
$ docker exec -it [db-container] sed -i 's|^#PermitRootLogin.*|PermitRootLogin yes|g' /etc/ssh/sshd_config
$ docker exec -it [db-container] systemctl start sshd
$ docker exec -it [db-container] passwd

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.5",

Tilslut derefter ClusterControl-beholderens interaktive konsol:

$ docker exec -it clustercontrol bash

Og kopier SSH-nøglen til alle databasecontainere:

$ ssh-copy-id 172.17.0.5

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-brugergrænsefladen på http://[Docker_Host]:5000/clustercontrol og derefter vælge indstillingen "Deploy" og følge instruktionerne, der vises.

Når vi vælger TimescaleDB, 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.

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.

Bemærk, at hvis du vil tilføje flere standby-noder, kan du gøre det fra ClusterControl UI i menuen Cluster Actions.

På samme måde, hvis du har din TimescaleDB-klynge kørende på Docker, og du vil have ClusterControl til at administrere den for at kunne bruge alle funktionerne i dette system som overvågning, sikkerhedskopiering, automatisk failover og endnu mere, kan du blot køre ClusterControl-container i samme Docker-netværk som databasecontainerne. 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.

Et muligt problem med at køre containere er tildelingen af ​​IP-adressen eller værtsnavnet. Uden et orkestreringsværktøj som Kubernetes kunne IP-adressen eller værtsnavnet være anderledes, hvis du stopper noderne og opretter nye containere, før du starter det igen. Du har en anden IP-adresse for de gamle noder, og ClusterControl antager, at alle noder kører i et miljø med en dedikeret IP-adresse eller værtsnavn, så efter at IP-adressen er ændret, bør du genimportere klyngen til ClusterControl. Der er mange løsninger på dette problem. Du kan tjekke dette link for at bruge Kubernetes med StatefulSet, eller dette til at køre containere uden orkestreringsværktøj.

Konklusion

Som vi kunne se, burde implementeringen af ​​TimescaleDB med Docker være let, hvis du ikke ønsker at konfigurere et replikerings- eller failover-miljø, og hvis du ikke ønsker at foretage ændringer i OS-versionen eller installationen af ​​databasepakker.

Med ClusterControl kan du importere eller implementere din TimescaleDB-klynge med Docker ved at bruge det OS-image, du foretrækker, samt automatisere overvågnings- og administrationsopgaver som backup og automatisk failover/gendannelse.


  1. ClusterControl - Advanced Backup Management - mariabackup del I

  2. Sådan listes alle brugere i PostgreSQL

  3. TRANSACTION_MUTEX og multi-session transaktionsadgang

  4. Hvordan køres .sql-fil i Oracle SQL-udviklerværktøj for at importere database?