Fórum Root.cz

Hlavní témata => Server => Téma založeno: jhonzatko 30. 04. 2021, 10:55:48

Název: Postgres - upgrade v ramci kontejneru
Přispěvatel: jhonzatko 30. 04. 2021, 10:55:48
Ahoj,
rad bych ze zkusenejsich zeptal, zda nemate zkusenosti s upgradem Postgre instanci (z verze 10 -> 13), ktere bezi v kontejneru. Tedy samotny db engine bezi v kontejneru, data jsou prolinkovana z kontejneru ven.
Existuje moznost vymenit pouze kontejner s verzi 10 za kontejner s verzi 13 a nasledne spustit pg_upgrade nebo to databaze nerozchodi? Z dokumentace jsem to pochopil tak, ze to podle vseho nepujde (musel bych definovat nove cesty pro cluster data, coz nechci), ale treba nejaka cesta existuje?
Dalsi zvazovanou variantou je totiz dump aktualnich db, vymena kontejneru a import do nove verze ... coz mi nicmene prijde pri vetsim mnozstvi instanci a db v nich pracnejsi.
Diky za pripadne info ci zkusenosti!
Název: Re:Postgres - upgrade v ramci kontejneru
Přispěvatel: Pavel Stěhule 30. 04. 2021, 11:10:36
Nikdy jsem nic takového nezkoušel, nicméně pg_upgrade funguje tak, že musíte mít vedle novou instanci Postgresu, a tudíž v jednu chvíli musíte mít nainstalovanou jak starou, tak novou verzi (ve vašem případě 10 a 13). Uděláte initdb vůči nové verzi (nesmíte ji nastartovat), pak vypnete starou verzi a zavoláte pg_upgrade. Když to projde (migrace z 10 na 13) by neměla být problémová, tak pak můžete smazat (předpokládám, že máte backup) starou verzi, a pokud vám nevyhovuje aktuální adresa nové instance, tak přesunout novou instanci, kam chcete. Jen někde musíte změnit PGDATA, aby se odkazoval na novou instanci. Z praktických důvodů (aby šlo jednoduše volat pg_upgrade) se do cesty v PGDATA dává verze pg.
Název: Re:Postgres - upgrade v ramci kontejneru
Přispěvatel: Filip Jirsák 30. 04. 2021, 14:35:56
Pro upgrade ale nepotřebujete mít tu starou verzi PostgreSQL nainstalovanou, ne? Je potřeba mít data ze staré verze a k tomu novou verzi Postgresu. Tj. postup s kontejnery by měl být takový, že zastavíte kontejner se starou verzí, zazálohujete data. Pak z kontejneru s novou verzí spustíte initdb do nového datového adresáře, pak spustíte pg_upgrade z adresáře s původními daty do adresáře s novými daty a na závěr už jen spustíte kontejner s novou verzí, ke kterému bude připojen adresář s daty v nové verzi. Díky kontejneru ani nemusíte PGDATA měnit – prostě jen datový adresář přilinkujete na správné místo.
Název: Re:Postgres - upgrade v ramci kontejneru
Přispěvatel: Pavel Stěhule 30. 04. 2021, 14:51:03
Pro upgrade ale nepotřebujete mít tu starou verzi PostgreSQL nainstalovanou, ne? Je potřeba mít data ze staré verze a k tomu novou verzi Postgresu. Tj. postup s kontejnery by měl být takový, že zastavíte kontejner se starou verzí, zazálohujete data. Pak z kontejneru s novou verzí spustíte initdb do nového datového adresáře, pak spustíte pg_upgrade z adresáře s původními daty do adresáře s novými daty a na závěr už jen spustíte kontejner s novou verzí, ke kterému bude připojen adresář s daty v nové verzi. Díky kontejneru ani nemusíte PGDATA měnit – prostě jen datový adresář přilinkujete na správné místo.

To si jsem jistý, že u pg_upgrade to tak není (možná si to pletete s MySQL). Podívejte se na povinné argumenty pro pg_upgrade. Zadáváte tam cestu ke starým binárkám. U Postgresu nové binárky neumí přečíst starý systémový katalog. Klienti se umí připojit ke staré verzi Postgresu (psql, nebo pg_dump), ale ta stará verze musí běžet.
Název: Re:Postgres - upgrade v ramci kontejneru
Přispěvatel: R.S. 30. 04. 2021, 15:23:00
Já to řešil kdysi, a problém byl, že kontejner neobsahoval ty správné verze binárek (staré i nové zároveň), jak píšete.

Existuje https://github.com/tianon/docker-postgres-upgrade který by to měl řešit, ale já jsem to tenkrát vzdal, a vrátil se k MySQL pro kontejnerové nasazení, takže zkušenosti s tím nemám.
Název: Re:Postgres - upgrade v ramci kontejneru
Přispěvatel: Filip Jirsák 30. 04. 2021, 15:47:03
Pro upgrade ale nepotřebujete mít tu starou verzi PostgreSQL nainstalovanou, ne?

To si jsem jistý, že u pg_upgrade to tak není (možná si to pletete s MySQL). Podívejte se na povinné argumenty pro pg_upgrade. Zadáváte tam cestu ke starým binárkám. U Postgresu nové binárky neumí přečíst starý systémový katalog. Klienti se umí připojit ke staré verzi Postgresu (psql, nebo pg_dump), ale ta stará verze musí běžet.
Myslel jsem, že jsem dělal upgrade bez přítomnosti staré verze databáze – ale nejspíš jsem tenkrát obnovil data ze zálohy a nepoužil jsem pg_upgrade.

V tom případě je potřeba použít speciální upgradovací kontejner, ve kterém budou obě verze PostgreSQL. Jak píše R.S., takový kontejner už někdo vytvořil (https://github.com/tianon/docker-postgres-upgrade).
Název: Re:Postgres - upgrade v ramci kontejneru
Přispěvatel: Pavel Stěhule 30. 04. 2021, 17:40:50
Já to řešil kdysi, a problém byl, že kontejner neobsahoval ty správné verze binárek (staré i nové zároveň), jak píšete.

Existuje https://github.com/tianon/docker-postgres-upgrade který by to měl řešit, ale já jsem to tenkrát vzdal, a vrátil se k MySQL pro kontejnerové nasazení, takže zkušenosti s tím nemám.

já myslel, že kontejnery zjednodušují práci. Je něco obtížného na yum install postgresql-server-x?
Název: Re:Postgres - upgrade v ramci kontejneru
Přispěvatel: registrovany123 30. 04. 2021, 18:08:47
A co takhle rozjet docker s novym postgres a pouzit data migration tool?
Název: Re:Postgres - upgrade v ramci kontejneru
Přispěvatel: Filip Jirsák 30. 04. 2021, 20:48:48
já myslel, že kontejnery zjednodušují práci. Je něco obtížného na yum install postgresql-server-x?
Je to jako s každým jiným nástrojem – nějakou práci to zjednoduší, jiná se tím zkomplikuje. Nainstalovat jeden PostgreSQL na jeden server je samozřejmě jednodušší pomocí balíčkovacího manažeru, ale když na tom serveru budu chtít mít třeba pět verzí PostgreSQL kvůli testování, záleží už na konkrétní distribuci, zda má PostgreSQL zabalený tak, že více verzí umožňuje (zrovna kvůli těm upgradům to asi bude u PostgreSQL běžné, ale u jiného softwaru ne).
Název: Re:Postgres - upgrade v ramci kontejneru
Přispěvatel: Pavel Stěhule 01. 05. 2021, 06:16:00
já myslel, že kontejnery zjednodušují práci. Je něco obtížného na yum install postgresql-server-x?
Je to jako s každým jiným nástrojem – nějakou práci to zjednoduší, jiná se tím zkomplikuje. Nainstalovat jeden PostgreSQL na jeden server je samozřejmě jednodušší pomocí balíčkovacího manažeru, ale když na tom serveru budu chtít mít třeba pět verzí PostgreSQL kvůli testování, záleží už na konkrétní distribuci, zda má PostgreSQL zabalený tak, že více verzí umožňuje (zrovna kvůli těm upgradům to asi bude u PostgreSQL běžné, ale u jiného softwaru ne).

To právě u pg není vůbec žádný problém.
Název: Re:Postgres - upgrade v ramci kontejneru
Přispěvatel: Filip Jirsák 01. 05. 2021, 08:29:38
To právě u pg není vůbec žádný problém.
On to není vůbec žádný problém u spousty programů. Ale málokterý z nich pro to má v distribucích speciální podporu.
Název: Re:Postgres - upgrade v ramci kontejneru
Přispěvatel: registrovany123 01. 05. 2021, 09:03:12
já myslel, že kontejnery zjednodušují práci. Je něco obtížného na yum install postgresql-server-x?
Je to jako s každým jiným nástrojem – nějakou práci to zjednoduší, jiná se tím zkomplikuje. Nainstalovat jeden PostgreSQL na jeden server je samozřejmě jednodušší pomocí balíčkovacího manažeru, ale když na tom serveru budu chtít mít třeba pět verzí PostgreSQL kvůli testování, záleží už na konkrétní distribuci, zda má PostgreSQL zabalený tak, že více verzí umožňuje (zrovna kvůli těm upgradům to asi bude u PostgreSQL běžné, ale u jiného softwaru ne).

V jedne firme delaly takove all in one baliky s webovkou, a to v sobe melo svoje vlastni postgres v dockeru. Jednotlive vzajemne nezavisle webovky ktere bezi na serveru muzou mit takto vzajemne izolovane databaze.
Název: Re:Postgres - upgrade v ramci kontejneru
Přispěvatel: Death Walker 02. 05. 2021, 19:45:39
Preco si to komplikovat a na starej verzii nepustit  pg_dump a na novej psql dump.sql? Az tak casto to zase robit nebudes aby to bolo nutne automatizovat, interval bude cca rovnaky ako vychadzaju nove verzie postgresu. V postgres ten dump funguje v pohode, neni to taky porod ako importovat komplet cely server na mysql. I ked je nie len koli takymto problemom je lepsie mat stavovu aplikaciu (ako je db) mimo kontajnery.
Název: Re:Postgres - upgrade v ramci kontejneru
Přispěvatel: Death Walker 02. 05. 2021, 19:50:02
To právě u pg není vůbec žádný problém.
On to není vůbec žádný problém u spousty programů. Ale málokterý z nich pro to má v distribucích speciální podporu.

U  pg to nie je realne ziadny problem, staci pouzit repozitare z postgresql.org. V jednotlivych linuxovych distrach sa zvedsa rozne verzie pg nevedu...
Název: Re:Postgres - upgrade v ramci kontejneru
Přispěvatel: user398 02. 05. 2021, 23:04:10
BTW nemala by byť DB správne mimo kontainerov (ak nepočítam vývoj)?! Čím bližšie je DB k HW tým lepší výkon nie? Do kontainerov iba bezstavovú aplikáciu ako píše Death Walker...
Název: Re:Postgres - upgrade v ramci kontejneru
Přispěvatel: Filip Jirsák 03. 05. 2021, 08:04:29
BTW nemala by byť DB správne mimo kontainerov (ak nepočítam vývoj)?! Čím bližšie je DB k HW tým lepší výkon nie? Do kontainerov iba bezstavovú aplikáciu ako píše Death Walker...
Obvykle se to doporučuje, ale záleží na konkrétním způsobu použití. Výše jsem psal nějaké příklady, kdy se hodí mít databázi v kontejneru.

Co se týče výkonu, záleží na tom, jak je připojeno souborové úložiště. Pokud by tam byl nějaký vrstvený souborový systém, výkon to degradovat bude. Pokud je tam přímo souborový systém, který by byl i mimo kontejner, není tam nic, co by zmenšovalo výkon.
Název: Re:Postgres - upgrade v ramci kontejneru
Přispěvatel: jhonzatko 04. 05. 2021, 09:05:37
Diky vsem za postrehy! Pochopil jsem z toho, ze puvodne zvazovana cesta neni mozna, dump a nasledny import bude zrejme nejjednodussi reseni. Ten by snad navic mohlo jit relativne snadno automatizovat.
Název: Re:Postgres - upgrade v ramci kontejneru
Přispěvatel: James_Scott 04. 05. 2021, 11:28:36
Nekolikrat jsem pouzil https://github.com/tianon/docker-postgres-upgrade . Doporucuji  ;)