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

Jak monitorovat PostgreSQL běžící uvnitř kontejneru Docker:Část první

Monitorování je akce sledování a kontroly po určitou dobu, abyste viděli, jak se to, co monitorujete, vyvíjí a funguje. Děláte to proto, abyste mohli provést potřebné změny, abyste zajistili, že věci budou fungovat správně. Je nezbytné, aby procesy byly monitorovány, aby poskytovaly dobrý přehled o činnostech, které jsou prováděny, aby bylo možné plánovat, organizovat a provozovat efektivní řešení.

Docker je program vytvořený tak, aby fungoval jako stavitel připravený odpovědět na otázku „Poběží software na mém počítači?“ V podstatě spojuje různé části dohromady a vytváří model, který se snadno skladuje a přepravuje. Model, známý také jako kontejner, lze odeslat na jakýkoli počítač, na kterém je nainstalován Docker.

V tomto článku se seznámíme s Dockerem, popíšeme některé způsoby konfigurace a porovnáme je. Kromě toho přichází ke hře PostgreSQL a my jej chytrým způsobem nasadíme do kontejneru Docker a nakonec uvidíme výhody, které může poskytnout ClusterControl, pro sledování klíčových metrik o PostgreSQL a OS mimo něj.

Přehled dockeru

Když se Docker spustí, vytvoří nové síťové připojení, které umožní přenos dat mezi dvěma koncovými body, tzv. bridge, a zde jsou standardně uloženy nové kontejnery.

V následujícím textu uvidíme podrobnosti o tomto můstku a prodiskutujeme, proč není dobrý nápad jej používat ve výrobě.

$ docker network inspect bridge
Kontrola výchozího bridge dockeru Dockeru0.

Vezměte prosím na vědomí vložené možnosti, protože pokud spustíte kontejner bez určení požadované sítě, budete s tím souhlasit.

Na tomto výchozím síťovém připojení ztrácíme některé dobré výhody sítě, jako je DNS. Představte si, že chcete získat přístup ke Googlu, jakou adresu preferujete, www.google.com nebo 172.217.165.4?

Nevím jak vy, ale já dávám přednost dřívější volbě a abych byl upřímný, nepíšu ‚www.‘.

Síť mostu definovaná uživatelem

Chceme tedy DNS v našem síťovém připojení a výhodu izolace, protože si představte scénář, kdy nasazujete různé kontejnery uvnitř stejné sítě.

Když vytvoříme kontejner Docker, můžeme mu dát jméno, nebo to Docker udělá za nás náhodným výběrem dvou slov spojených podtržením neboli ‚_‘.

Pokud nepoužíváme User-Defined Bridge Network, v budoucnu by mohl být problém uprostřed IP adres, protože zjevně nejsme stroje a pamatujte, že tyto hodnoty mohou být těžké a náchylné k chybám.

Vytvoření vlastního mostu nebo uživatelsky definované mostní sítě je velmi snadné.

Než vytvoříme náš první, abychom procesu lépe porozuměli, otevřeme nový terminál, napíšeme linuxový příkaz balíčku iproute2 a teď na to zapomeneme.

$ ip monitor all
Inicializace terminálu pro sledování síťového provozu v hostiteli Docker.

Tento terminál nyní bude naslouchat aktivitě sítě a bude se tam zobrazovat.

Možná jste již viděli příkazy jako „ifconfig“ nebo „netstat“ a říkám vám, že jsou zastaralé od roku 2001. Balíček net-tools je stále široce používán, ale již není aktualizován.

Nyní je čas vytvořit naši první vlastní síť, takže otevřete další terminál a zadejte:

$ docker network create --driver bridge br-db
Vytvoření uživatelsky definované přemosťovací sítě "br-db".

Tento velmi dlouhý mix písmen a číslic se nazývá UUID nebo Universally Unique IDentifier. V podstatě to říká, že síť byla úspěšně vytvořena.

Křestní název pro naši první ručně vytvořenou síť je „br-db“ a musí být ve finále příkazu, ale předtím máme argument „-driver“ a poté hodnotu „bridge“ , proč?

V komunitní edici nabízí Docker k dispozici tři různé ovladače:bridge, host a none. Při vytváření, jako je tento, je výchozím nastavením bridge a není třeba jej specifikovat, ale učíme se o tom.

Pokud jste se mnou všechno provedli, podívejte se na druhý terminál, protože vám vysvětlím, co se děje.

Docker vytvořil síť nazvanou „br-db“, ale takto ji nazývá pouze on.

Na druhé straně tohoto vytvořeného vlastního mostu je další vrstva, OS. Křestní název pro stejnou síť mostu se změnil a stává se reprezentací nomenklatury mostu „br“, za nímž následuje prvních 12 znaků hodnoty UUID výše, červeně.

Sledování změn IP adresy Dockeru.

S naším novým síťovým připojením máme podsíť, bránu a vysílání.

Brána, jak název napovídá, je místem, kde se veškerý provoz paketů odehrává mezi koncovými body mostu, a jak můžete vidět, pro operační systém se nazývá „inet“.

Broadcast stojí na poslední IP adrese a v případě potřeby odpovídá za odesílání stejného datového provozu pro všechny IP adresy v podsíti.

Jsou vždy přítomny v síťových připojeních, a proto máme na začátku výstupu hodnotu „[ADDR]“. Tato hodnota představuje změny IP adresy a je to jako událost spuštěná pro monitorování síťové aktivity, protože jsme vytvořili nové síťové připojení!

Docker Container

Navštivte prosím Docker Hub a podívejte se, že to, co tam je, se nazývá Docker Image a je to v podstatě kostra kontejneru (modelu).

Docker Images jsou generovány pomocí Dockerfiles a obsahují všechny informace potřebné k vytvoření kontejneru, aby bylo možné jej snadno udržovat a přizpůsobovat.

Pokud se pozorně podíváte na Docker Hub, je snadné vidět, že obraz PostgreSQL, nazývaný postgres, má různé značky a verze, a pokud neurčíte jednu z nich, použije se výchozí, nejnovější, ale možná v Budoucnost, pokud potřebujete různé kontejnery PostgreSQL spolupracovat, možná budete chtít, aby byly ve stejné verzi.

Pojďme nyní vytvořit náš první pravý kontejner, pamatujte na nutnost argumentu ‚--network‘, jinak bude nasazen ve výchozím mostu.

$ docker container run --name postgres-1 --network br-db -e POSTGRES_PASSWORD=5af45Q4ae3Xa3Ff4 -p 6551:5432 -d postgres
Spuštění kontejneru PostgreSQL do sítě "br-db".

Znovu UUID, úspěch a na druhém terminálu, co se děje?

Změny síťového rozhraní je událost, která se děje právě teď, nebo jednoduše „[LINK]“. Cokoli po „veth“ můžete zapomenout, věřte mi, hodnota se vždy změní, když se kontejner restartuje nebo se stane něco podobného.

Sledování změn síťového rozhraní Dockeru.

Druhá možnost „-e POSTGRES_PASSWORD=?“ znamená Environment a je k dispozici pouze při spuštění kontejnerů PostgreSQL, konfiguruje heslo pro účet superuživatele v databázi, nazývaný postgres.

Publish je dlouhý název pro parametr „-p 6551:5432“ a v podstatě umožňuje obousměrně vázat port OS 6551 na port 5432 kontejneru.

Poslední, ale neméně důležitá je volba Detach, „-d“, která umožňuje, aby kontejner běžel nezávisle na tomto terminálu.

Název obrázku Dockeru musí být na konci podle stejného vzoru jako při vytváření sítě, se všemi argumenty a možnostmi vlevo a na konci to nejdůležitější, v tomto případě, název obrázku.

Pamatujte, že kontejnery jsou umístěny v síťové podsíti, stojí na IP adresách povolených pro každý z nich a nikdy nebudou na první ani poslední adrese, protože brána a vysílání tam budou vždy.

Ukázali jsme podrobnosti o vytvořeném mostu a nyní budou zobrazeny u každého z koncových bodů, které si tyto podrobnosti uchovávají.

$ docker network inspect br-db
Kontrola uživatelského síťového rozhraní Docker "br-db".
$ brctl show
Zobrazení informací o User-Defined Bridge Network pomocí hostitele Docker.

Jak vidíte, názvy sítí a kontejnerů se liší, protože druhý je rozpoznán jako rozhraní OS, nazvaný „veth768ff71“ a původní název, který jsme dali „postgres-1“ pro Docker.

V příkazu Docker je možné zaznamenat IP adresu dříve vytvořeného kontejneru, podsíť odpovídající tomu, co se objevilo v jiném terminálu otevřeném před chvílí, a nakonec volby prázdné pro tuto vlastní síť.

Linuxový příkaz „brctl show“ je součástí balíčku bridge-utils a jak název napovídá, jeho účelem je poskytnout sadu nástrojů pro konfiguraci a správu linuxových ethernetových mostů.

Další vlastní síť mostu

Brzy budeme diskutovat o DNS, ale bylo velmi dobré, aby nám to v budoucnu zjednodušilo. Skvělé konfigurace mají tendenci usnadnit život DBA v budoucnu.

Se sítěmi je to stejné, takže můžeme změnit způsob, jakým OS rozpozná adresu podsítě a název sítě přidáním dalších argumentů při vytváření.

$ docker network create --driver bridge --subnet 172.23.0.0/16 -o “com.docker.network.bridge.name”=”bridge-host” bridge-docker
Vytvoření uživatelsky definovaného síťového rozhraní mostu s vlastními možnostmi.
$ ip route show
Zobrazení směrovací tabulky Docker.

S tímto linuxovým příkazem můžeme vidět téměř to samé jako předchozí příkaz, ale nyní namísto výpisu „veth“ rozhraní pro každou síť máme jednoduše toto „linkdown“ zobrazující ty, které jsou prázdné.

Požadovaná adresa podsítě byla zadána jako argument a podobně jako u možnosti Prostředí pro vytvoření kontejneru, pro síť máme „-o“ následované dvojicí klíče a hodnoty. V tomto případě říkáme Dockerovi, aby řekl OS, že by měl volat síť jako „bridge-host“.

Existenci těchto tří sítí lze ověřit také v Dockeru, stačí zadat:

$ docker network ls
Zobrazení síťových rozhraní na Docker Engine.

Nyní jsme již dříve diskutovali o tom, že na hodnotách těchto „veth“ pro kontejnery nezáleží, a já vám to ukážu v praxi.

Cvičení spočívá v ověření aktuální hodnoty, poté restartování kontejneru a následném ověření. K tomu budeme potřebovat kombinaci dříve používaných příkazů Linuxu a příkazů Docker, které jsou zde nové, ale velmi jednoduché:

$ brctl show
$ docker container stop postgres-1
$ docker container start postgres-1
$ brctl show
Kontrola, jak "iptables" činí názvy kontejnerů nestálými pro hostitele Docker.

Když je kontejner zastaven, IP adresa musí být uvolněna, aby mohla v případě potřeby přijmout novou, a to je připomínka toho, jak může být DNS důležitý.

OS dává tato jména rozhraním pokaždé, když kontejner stojí na IP adrese, a jsou generovány pomocí balíčku iptables, který bude brzy nahrazen novým rámcem nazvaným nftables.

Nedoporučuje se tato pravidla měnit, ale existují dostupné nástroje, které v případě potřeby pomohou s jejich vizualizací, jako je dockerveth.

Zásady restartování kontejneru

Když restartujeme program Docker nebo dokonce počítač, jím vytvořené sítě zůstanou v OS, ale prázdné.

Kontejnery mají to, co se nazývá Zásady restartování kontejneru, a to je další velmi důležitý argument určený při vytváření. PostgreSQL, jakožto produkční databáze, je jeho dostupnost klíčová a Docker s tím může pomoci.

$ docker container run --name postgres-2 --network bridge-docker --restart always -e POSTGRES_PASSWORD=5af45Q4ae3Xa3Ff4 -p 6552:5432 -d postgres
Určení zásady restartování kontejneru při vytváření.

Pokud jej nezastavíte ručně, tento kontejner „postgres-2“ bude vždy dostupný.

Abyste tomu lépe porozuměli, zobrazí se spuštěné kontejnery a restartuje se program Docker, pak znovu první krok:

$ docker container ls
$ systemctl restart docker
$ docker container ls
Kontrola zásad restartování kontejneru v "postgres-2".

Běží pouze kontejner „postgres-2“, další kontejner „postgres-1“ se nespouští sám. Další informace o něm naleznete v dokumentaci Docker.

Domain Name System (DNS)

Jednou z výhod User-Defined Bridge Network je organizace, jistě, protože můžeme vytvořit tolik, kolik chceme, spouštět nové kontejnery a dokonce připojit staré, ale další výhodou, kterou nemáme pomocí výchozího mostu Docker, je DNS.

Když kontejnery potřebují komunikovat mezi sebou, může být pro DBA bolestivé zapamatovat si IP adresy, a již jsme o tom diskutovali na příkladu www.google.com a 172.217.165.4. DNS tento problém bezproblémově řeší a umožňuje interakci s kontejnery pomocí jejich názvů, které jsme zadali v době vytvoření, například „postgres-2“, namísto IP adresy „172.23.0.2“.

Podívejme se, jak to funguje. Vytvoříme další kontejner pouze pro demonstrační účely ve stejné síti s názvem „postgres-3“, poté nainstalujeme balíček iputils-ping pro přenos paketů dat do kontejneru „postgres-2“, samozřejmě s jeho názvem .

$ docker container run --name postgres-3 --network bridge-docker --restart always -e POSTGRES_PASSWORD=5af45Q4ae3Xa3Ff4 -p 6553:5432 -d postgres
$ docker container exec -it postgres-3 bash

Pro lepší pochopení to rozdělme na části, v následujících výstupech bude modrá šipka označovat, kdy se příkaz provádí uvnitř kontejneru, a červeně v OS.

Spuštění dočasného kontejneru pro testování DNS poskytovaných uživatelským rozhraním Bridge Network Interface.
$ apt-get update && apt-get install -y iputils-ping
Instalace balíčku "iputils-ping" pro testování DNS.
$ ping postgres-2
Zobrazuje, že DNS funguje úspěšně.

Shrnutí

PostgreSQL běží uvnitř Dockeru a jeho dostupnost je již zaručena. Při použití uvnitř User-Defined Bridge Network lze kontejnery spravovat snadněji díky mnoha výhodám, jako je DNS, vlastní adresy podsítě a názvy OS pro sítě.

Viděli jsme podrobnosti o Dockeru a důležitost informovanosti o aktualizovaných balíčcích a rámcích v OS.


  1. Nelze hromadně načíst. Chybový kód operačního systému 5 (Přístup odepřen.)

  2. Jak převést čas na časové pásmo zařízení iPhone?

  3. Jak mohu použít UUID v SQLAlchemy?

  4. EF a TransactionScope pro SQL Server i Oracle bez eskalace/překlenutí na DTC?