sql >> Databáze >  >> RDS >> Database

Průvodce nasazením TimescaleDB s Dockerem

V dnešní době je Docker nejběžnějším nástrojem pro vytváření, nasazování a spouštění aplikací pomocí kontejnerů. Umožňuje nám zabalit aplikaci se všemi částmi, které potřebuje, jako jsou knihovny a další závislosti, a odeslat vše jako jeden balíček. Dalo by se to považovat za virtuální stroj, ale místo vytváření celého virtuálního operačního systému umožňuje Docker aplikacím používat stejné jádro Linuxu jako systém, na kterém běží, a vyžaduje pouze dodání aplikací s věcmi, na kterých ještě neběží. hostitelský počítač. To výrazně zvyšuje výkon a snižuje velikost aplikace.

V případě Docker Images se dodávají s předdefinovanou verzí OS a balíčky se instalují způsobem, o kterém rozhodla osoba, která obrázek vytvořila. Je možné, že chcete použít jiný OS nebo možná budete chtít nainstalovat balíčky jiným způsobem. V těchto případech byste měli použít čistý obraz OS Docker a nainstalovat software od začátku.

Replikace je běžnou funkcí v databázovém prostředí, takže po nasazení TimescaleDB Docker Images, pokud chcete nakonfigurovat nastavení replikace, budete to muset udělat ručně z kontejneru pomocí souboru Docker nebo dokonce skriptu. Tento úkol může být složitý, pokud nemáte znalosti Dockeru.

V tomto blogu uvidíme, jak můžeme nasadit TimescaleDB přes Docker pomocí TimescaleDB Docker Image, a poté uvidíme, jak jej nainstalovat od začátku pomocí CentOS Docker Image a ClusterControl.

Jak nasadit TimescaleDB pomocí obrázku Docker

Nejprve se podívejme, jak nasadit TimescaleDB pomocí obrázku Docker dostupného na Docker Hub.

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

Vezmeme první výsledek. Takže musíme vytáhnout tento obrázek:

$ docker pull timescale/timescaledb

A spusťte kontejnery uzlů mapující místní port na port databáze do kontejneru:

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

Po spuštění těchto příkazů byste měli mít vytvořeno toto prostředí Docker:

$ 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

Nyní můžete přistupovat ke každému uzlu pomocí následujících příkazů:

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

Jak můžete vidět, tento obrázek Docker obsahuje ve výchozím nastavení verzi TimescaleDB 9.6 a je nainstalován na Alpine Linux v3.9. Změnou tagu:

můžete použít jinou verzi TimescaleDB
$ docker pull timescale/timescaledb:latest-pg11

Poté můžete vytvořit uživatele databáze, změnit konfiguraci podle svých požadavků nebo ručně nakonfigurovat replikaci mezi uzly.

Jak nasadit TimescaleDB s ClusterControl

Nyní se podívejme, jak nasadit TimescaleDB s Dockerem pomocí CentOS Docker Image (centos) a ClusterControl Docker Image (několik řad/clustercontrol).

Nejprve nasadíme kontejner ClusterControl Docker Container pomocí nejnovější verze, takže potřebujeme stáhnout několik devíti/clustercontrol Docker Image.

$ docker pull severalnines/clustercontrol

Poté spustíme kontejner ClusterControl a publikujeme port 5000, abychom k němu měli přístup.

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

Nyní můžeme otevřít uživatelské rozhraní ClusterControl na http://[Docker_Host]:5000/clustercontrol a vytvořit výchozího administrátora a heslo.

CentOS Official Docker Image je dodáván bez služby SSH, takže jej nainstalujeme a umožníme připojení z uzlu ClusterControl bez hesla pomocí klíče SSH.

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

Stáhneme tedy oficiální obrázek dokovače CentOS.

$ docker pull centos

A poté spustíme dva kontejnery uzlů, timescale1 a timescale2, propojené s ClusterControl a namapujeme místní port pro připojení k databázi (volitelné).

$ 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

Protože potřebujeme nainstalovat a nakonfigurovat službu SSH, musíme spustit kontejner s privilegovanými parametry a parametry /usr/sbin/init, abychom mohli spravovat službu uvnitř kontejneru.

Po spuštění těchto příkazů bychom měli mít vytvořeno toto prostředí Docker:

$ 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

Ke každému uzlu můžeme přistupovat pomocí následujícího příkazu:

$ docker exec -ti [db-container] bash

Jak jsme zmínili dříve, potřebujeme nainstalovat službu SSH, takže ji nainstalujme, povolme root přístup a nastavíme root heslo pro každý databázový kontejner:

$ 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

Posledním krokem je nastavení SSH bez hesla pro všechny databázové kontejnery. K tomu potřebujeme znát IP adresu každého databázového uzlu. Abychom to poznali, můžeme pro každý uzel spustit následující příkaz:

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

Poté připojte k interaktivní konzoli kontejneru ClusterControl:

$ docker exec -it clustercontrol bash

A zkopírujte klíč SSH do všech databázových kontejnerů:

$ ssh-copy-id 172.17.0.5

Nyní máme serverové uzly v provozu a musíme nasadit náš databázový cluster. Aby to bylo co nejjednodušší, použijeme ClusterControl.

Chcete-li provést nasazení z ClusterControl, otevřete uživatelské rozhraní ClusterControl na adrese http://[Docker_Host]:5000/clustercontrol, poté vyberte možnost „Deploy“ a postupujte podle zobrazených pokynů.

Při výběru TimescaleDB musíme zadat uživatele, klíč nebo heslo a port pro připojení pomocí SSH k našim serverům. Potřebujeme také název pro náš nový cluster a pokud chceme, aby ClusterControl nainstaloval odpovídající software a konfigurace za nás.

Po nastavení přístupových informací SSH musíme definovat uživatele databáze, verzi a datový adresář (volitelné). Můžeme také určit, které úložiště použít.

V dalším kroku musíme přidat naše servery do clusteru, který se chystáme vytvořit.

Zde musíme použít IP adresu, kterou jsme získali z každého kontejneru dříve.

V posledním kroku si můžeme vybrat, zda bude naše replikace synchronní nebo asynchronní.

Stav vytváření našeho nového clusteru můžeme sledovat z monitoru aktivity ClusterControl.

Po dokončení úlohy můžeme vidět náš cluster na hlavní obrazovce ClusterControl.

Všimněte si, že pokud chcete přidat další pohotovostní uzly, můžete to udělat z uživatelského rozhraní ClusterControl v nabídce Cluster Actions.

Stejným způsobem, pokud máte svůj cluster TimescaleDB spuštěný na Dockeru a chcete, aby jej spravoval ClusterControl, abyste mohli používat všechny funkce tohoto systému, jako je monitorování, zálohování, automatické převzetí služeb při selhání a ještě více, můžete jednoduše spustit Kontejner ClusterControl ve stejné síti Docker jako databázové kontejnery. Jediným požadavkem je zajistit, aby cílové kontejnery měly nainstalované balíčky související s SSH (openssh-server, openssh-clients). Poté povolte SSH bez hesla z ClusterControl do databázových kontejnerů. Po dokončení použijte funkci „Importovat existující server/klastr“ a cluster by měl být importován do ClusterControl.

Jedním z možných problémů při spouštění kontejnerů je přiřazení IP adresy nebo názvu hostitele. Bez nástroje pro orchestraci, jako je Kubernetes, by se IP adresa nebo název hostitele mohly lišit, pokud zastavíte uzly a vytvoříte nové kontejnery, než to znovu spustíte. Pro staré uzly budete mít jinou IP adresu a ClusterControl předpokládá, že všechny uzly běží v prostředí s vyhrazenou IP adresou nebo názvem hostitele, takže po změně IP adresy byste měli cluster znovu importovat do ClusterControl. Existuje mnoho řešení tohoto problému, můžete zkontrolovat tento odkaz a použít Kubernetes se StatefulSet nebo tento pro spouštění kontejnerů bez nástroje pro orchestraci.

Závěr

Jak jsme viděli, nasazení TimescaleDB s Dockerem by mělo být snadné, pokud nechcete konfigurovat prostředí replikace nebo převzetí služeb při selhání a pokud nechcete provádět žádné změny na verzi OS nebo instalaci databázových balíčků.

Pomocí ClusterControl můžete importovat nebo nasadit svůj cluster TimescaleDB pomocí Dockeru pomocí obrazu operačního systému, který preferujete, a také automatizovat úkoly monitorování a správy, jako je zálohování a automatické převzetí služeb při selhání/obnova.


  1. PDO více dotazů

  2. Matematické funkce serveru SQL (úplný seznam)

  3. Třídění v MySQL pomocí pořadí podle klauzule

  4. Nahrazení textu ve sloupci BLOB