Fórum Root.cz
Hlavní témata => Server => Téma založeno: 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!
-
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.
-
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.
-
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.
-
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.
-
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).
-
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?
-
A co takhle rozjet docker s novym postgres a pouzit data migration tool?
-
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).
-
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.
-
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.
-
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.
-
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.
-
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...
-
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...
-
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.
-
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.
-
Nekolikrat jsem pouzil https://github.com/tianon/docker-postgres-upgrade . Doporucuji ;)