sql >> Databáze >  >> RDS >> PostgreSQL

Jak nasadit PostgreSQL do kontejneru Docker pomocí ClusterControl

Docker se stal 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. Docker by se dal považovat za virtuální stroj, ale místo vytvoř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 tomto blogu uvidíme, jak můžeme snadno nasadit nastavení PostgreSQL přes Docker a jak pomocí ClusterControl převést naše nastavení na primární/záložní replikaci.

Jak nasadit PostgreSQL pomocí Dockeru

Nejprve se podívejme, jak nasadit PostgreSQL s Dockerem ručně pomocí PostgreSQL Docker Image.

Obrázek je k dispozici na Docker Hub a můžete jej najít z příkazového řádku:

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

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

$ docker pull postgres

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

$ 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

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
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

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

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

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 importovat vaše PostgreSQL kontejnery do ClusterControl

Související zdroje ClusterControl for PostgreSQL Nasazení PostgreSQL na kontejneru Docker Použití Kubernetes k nasazení PostgreSQL

Nyní, když jste nastavili svůj PostgreSQL cluster, jej stále musíte monitorovat, upozorňovat na problémy s výkonem, spravovat zálohy, zjišťovat selhání a automaticky přepínat při selhání na zdravý server.

Pokud již máte na Dockeru spuštěný cluster PostgreSQL a chcete, aby jej spravoval ClusterControl, 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.

Nejprve nainstalujme balíčky související s OpenSSH do databázových kontejnerů, povolme přihlášení uživatele root, spusťte jej a nastavte heslo uživatele 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

Spusťte kontejner ClusterControl (pokud není spuštěn) a předejte port 80 na kontejneru na port 5000 na hostiteli:

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

Ověřte, že je kontejner ClusterControl spuštěn:

$ 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

Otevřete webový prohlížeč, přejděte na http://[Docker_Host]:5000/clustercontrol a vytvořte výchozího administrátora a heslo. Nyní byste měli vidět hlavní stránku ClusterControl.

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

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

$ docker exec -it clustercontrol bash

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

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

Nyní můžeme začít importovat cluster do ClusterControl. Otevřete webový prohlížeč a přejděte na IP adresu fyzického hostitele Dockeru s namapovaným portem, např. http://192.168.100.150:5000/clustercontrol , klikněte na „Importovat existující server/klastr“ a poté přidejte následující informace.

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.

Po nastavení přístupových informací SSH musíme definovat uživatele databáze, verzi, základ a IP adresu nebo název hostitele pro každý uzel databáze.

Ujistěte se, že se při zadávání názvu hostitele nebo IP adresy zobrazuje zelené zaškrtnutí, což znamená, že ClusterControl je schopen komunikovat s uzlem. Poté klikněte na tlačítko Importovat a počkejte, dokud ClusterControl nedokončí svou úlohu. Proces můžete sledovat v části ClusterControl Activity Section.

Po importu bude databázový cluster uveden na řídicím panelu ClusterControl.

Všimněte si, že pokud máte pouze hlavní uzel PostgreSQL, můžete jej přidat do ClusterControl. Poté můžete přidat pohotovostní uzly z uživatelského rozhraní ClusterControl, aby je ClusterControl mohl nakonfigurovat za vás.

ClusterControlSingle Console pro celou vaši databázovou infrastrukturu Zjistěte, co je ještě nového v ClusterControl Nainstalujte ClusterControl ZDARMA

Jak nasadit své PostgreSQL kontejnery pomocí ClusterControl

Nyní se podívejme, jak nasadit PostgreSQL s Dockerem pomocí CentOS Docker Image (několik ninek/centos-ssh) a ClusterControl Docker Image (několik ninek/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ůžete otevřít uživatelské rozhraní ClusterControl na http://[Docker_Host]:5000/clustercontrol a vytvořte výchozího administrátora a heslo.

Niekoľkonines/centos-ssh přichází s kromě povolené služby SSH také funkcí automatického nasazení, ale platí pouze pro Galera Cluster. PostgreSQL zatím není podporován. Nastavíme tedy proměnnou AUTO_DEPLOYMENT na 0 v příkazu docker run, abychom vytvořili databázové uzly.

$ 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

Po spuštění těchto příkazů bychom měli mít následující prostředí 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

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

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 PostgreSQL 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.

Při přidávání našich serverů můžeme zadat IP nebo název hostitele. 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.

Závěr

Jak jsme viděli, nasazení PostgreSQL s Dockerem by mohlo být na začátku snadné, ale bude vyžadovat trochu více práce s konfigurací replikace. Nakonec byste měli monitorovat svůj cluster, abyste viděli, co se děje. Pomocí ClusterControl můžete importovat nebo nasadit svůj cluster PostgreSQL pomocí Dockeru 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. Vyzkoušejte to.


  1. převést blob na clob

  2. Django:Skupina dotazů podle měsíce

  3. Převést „datetimeoffset“ na „čas“ v SQL Server (příklady T-SQL)

  4. ORA-00979 není skupina podle výrazu