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í PostgreSQLNyní, 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 ZDARMAJak 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.