Replikace v PostgreSQL CSPUG, Praha Tom´aˇs Vondra (
[email protected]) Czech and Slovak PostgreSQL Users Group
19.4.2011
Agenda
´ cely replikace Uˇ Varianty replikace Historie replikace v PostgreSQL Zabudovan´a replikace Extern´ı n´astroje Srovn´an´ı s dalˇs´ımi DB
T. Vondra (CSPUG)
Replikace v PostgreSQL
´ cely replikace Uˇ high-availability ˇsk´alov´an´ı v´ykonu (read vs. write) load balancing query partitioning
migrace a upgrade bez v´ypadku jin´a verze stejn´e datab´ aze u ´plnˇe jin´a datab´ aze
rychlejˇs´ı pˇr´ıstup pˇres WAN lok´aln´ı kopie na poboˇck´ ach road warriors / kopie pro mobiln´ı zaˇr´ızen´ı
T. Vondra (CSPUG)
Replikace v PostgreSQL
Varianty replikace
master-master vs. master-slave synchronn´ı vs. asynchronn´ı fyzick´a vs. logick´a warm standby vs. hot standby zp˚ usob implementace xlog (log file shipping vs. streaming) trigger statement-based
T. Vondra (CSPUG)
Replikace v PostgreSQL
Master vs. slave master autoritativn´ı zdroj informac´ı zpracov´av´a poˇzadavky na zmˇeny, pˇred´ av´a je d´ale
slave zmˇeny se pˇrej´ımaj´ı z master datab´ aze, jinak read-only v podstatˇe jen “kopie” master datab´ aze
master-slave jednoduˇsˇs´ı “jednosmˇern´ a” replikace read scalability
master-master obousmˇern´a replikace - nutno ˇreˇsit kolize write scalability T. Vondra (CSPUG)
Replikace v PostgreSQL
Synchronn´ı vs. asynchronn´ı replikace synchronn´ı commit ˇcek´a na potvrzen´ı dokonˇcen´ı replikace pomalejˇs´ı, ale vˇzdy konzistentn´ı jako celek
asynchronn´ı na dokonˇcen´ı replikace se neˇcek´ a, zap´ıˇse se jen lok´alnˇe rychlejˇs´ı, ale m˚ uˇze doj´ıt k nekonzistenci mezi origin´alem a replikou (replika je “pozadu”)
semi-synchronn´ı kompromis mezi spolehlivost´ı a v´ykonem v´ıce replik, ˇcek´ a se jen na potvrzen´ı z prvn´ı
T. Vondra (CSPUG)
Replikace v PostgreSQL
Fyzick´a replikace bin´arn´ı kopie datov´ych blok˚ u (xlog) masteru do XLogu zap´ıˇse “bin´arn´ı diff” (zmˇeˇn byte X v bloku Y na Z) slave pˇreˇcte a aplikuje na bloky (v podstatˇe recovery)
T. Vondra (CSPUG)
Replikace v PostgreSQL
Fyzick´a replikace
klady minim´aln´ı overhead (1%) velmi jednoduch´e na nastaven´ı
z´ apory jen kompletn´ı datab´ aze stejn´a verze DB (form´ at) stejn´y HW (zejm´ena CPU architektura) jen master-slave (nemoˇznost ˇreˇsen´ı konflikt˚ u)
T. Vondra (CSPUG)
Replikace v PostgreSQL
Fyzick´a replikace / Log file shipping 1 2 3 4 5
UPDATE znamen´a zmˇenu nˇekolika datov´ych blok˚ u kaˇzd´a zmˇena generuje z´aznam v transakˇcn´ım logu pˇri zaplnˇen´ı segmentu (16MB) se archivuje (NFS, ...) archivovan´y segment se aplikuje na slave datab´azi v´ysledkem je bin´arn´ı kopie
T. Vondra (CSPUG)
Replikace v PostgreSQL
Fyzick´a replikace / Streaming replication 1 2 3 4 5
UPDATE znamen´a zmˇenu nˇekolika datov´ych blok˚ u kaˇzd´a zmˇena generuje z´aznam v transakˇcn´ım logu z´aznamy se (asynchronnˇe) pˇren´aˇs´ı do slave datab´aze zmˇeny se aplikuj´ı v´ysledkem je (opˇet) bin´arn´ı kopie
T. Vondra (CSPUG)
Replikace v PostgreSQL
Warm standby vs. Hot standby
warm standby datab´aze nastartovan´ a v “recovery m´ odu” pˇrij´ım´a z master datab´ aze zmˇeny a aplikuje je slouˇz´ı jen pro HA - nelze se pˇripojit a spouˇstˇet dotazy
hot standby datab´aze nastartovan´ a v “read-only m´ odu” lze spouˇstˇet read-only dotazy (nedostane XID)
T. Vondra (CSPUG)
Replikace v PostgreSQL
Logick´a replikace
ne aplikace bin´arn´ıch zmˇen bez znalosti struktury dat aplikace logick´ych operac´ı (INSERT/UPDATE/DELETE) klady replikace jen ˇc´ asti datab´ aze (napˇr. jedna tabulka) replikace do jin´e verze / jin´e DB (uprage a migrace) umoˇzn ˇuje multi-master replikaci
z´ apory n´aroˇcnˇejˇs´ı na nastaven´ı i na zdroje nutnost ˇreˇsen´ı konflikt˚ u (specifick´e dle aplikace)
T. Vondra (CSPUG)
Replikace v PostgreSQL
Logick´a replikace / zp˚ usoby implementace
log vˇsech SQL / opakovan´a aplikace na repliku zpˇetn´a interpretace xlog z´aznam˚ u triggery proxy zachycuj´ıc´ı SQL
T. Vondra (CSPUG)
Replikace v PostgreSQL
Replikace nenahrazuje z´alohov´an´ı replikuje se vˇsechno (vˇcetnˇe omyl˚ u) hacker, idiot, unit test omylem na produkˇcn´ı DB DROP DATABASE, DELETE, ...
Z´alohujte! Z´alohujte! Z´alohujte! T. Vondra (CSPUG)
Replikace v PostgreSQL
Replikace v PostgreSQL
Historie, souˇcasnost a budoucnost
T. Vondra (CSPUG)
Replikace v PostgreSQL
Historie replikace v PostgreSQL “Unixov´a mentalita” core teamu menˇs´ı flexibiln´ı n´ astroje, moˇznost kombinace mnoho moˇznost´ı implementace - radˇeji externˇe odpor k pˇrid´ av´ an´ı takov´ych vlastnost´ı
do verze 8.4 (vˇcetnˇe) XLog file shipping replikace + “warm standby” (HA) zaj´ımav´e extern´ı n´ astroje (Bucardo, Londiste, slony-I, ...)
verze 9.0 asynchronn´ı XLog streaming replikace moˇznost “hot standby”
verze 9.1 synchronn´ı XLog streaming replikace
T. Vondra (CSPUG)
Replikace v PostgreSQL
Zabudovan´a replikace
fyzick´a (a)synchronn´ı replikace rozpor mezi n´aroky na HA a reporting (zab´ıjen´ı queries) trochu probl´em pˇri ´umrt´ı mastera (s v´ıce slavy) T. Vondra (CSPUG)
Replikace v PostgreSQL
HA vs. reporting / query cancellation high-availability c´ılem je minim´ aln´ı delay oproti masteru (kv˚ uli failoveru)
reporting dlouho bˇeˇz´ıc´ı dotazy nad velk´ymi datov´ymi objemy dotaz potˇrebuje blok kter´y se zmˇenil − → je zabit rychl´a aplikace zmˇen − → vˇetˇs´ı pravdˇepodobnost zabit´ı
zaj´ımav´ a nastaven´ı vacuum defer cleanup age (master) hot standby feedback (standby)
T. Vondra (CSPUG)
Replikace v PostgreSQL
HA vs. reporting / query cancellation ˇreˇsen´ı - dva slaves, jeden pro HA a druh´y pro reporting
T. Vondra (CSPUG)
Replikace v PostgreSQL
Demo
1 2 3 4 5 6 7
vytvoˇr´ıme a nakonfigurujeme mastera vytvoˇr´ıme slave, napoj´ıme na master provedeme nˇeco na masterovi pod´ıv´ame se jak se to zpropagovalo na slave zkus´ıme nˇejak´e dotazy nad slave (read / write) zastav´ıme mastera provedeme failover
T. Vondra (CSPUG)
Replikace v PostgreSQL
Demo / master postgresql.conf listen_addresses = ’127.0.0.1’ port = 5432 # archivn´ ı reˇ zim wal_level = hot_standby max_wal_senders = 10 # archivn´ ı reˇ zim archive_mode = on archive_command = ’cp %p /var/pg9/archive/%f’ pg hba.conf # IPv4 local connections host replication repuser T. Vondra (CSPUG)
127.0.0.1/32 Replikace v PostgreSQL
trust
Demo / slave postgresql.conf listen_addresses = ’127.0.0.1’ port = 5433 hot_standby = on recovery.conf standby_mode = ’on’ primary_conninfo = ’host=127.0.0.1 port=5432 user=repuser’ # ukonˇ cen´ ı recovery (touch) trigger_file = ’/var/pg9/failover’ # naˇ cten´ ı z archivu log˚ u restore_command = ’cp /var/pg9/archive/%f "%p"’ T. Vondra (CSPUG)
Replikace v PostgreSQL
Nev´yhody zabudovan´e replikace
1
slave je jen pro ˇcten´ı nenapln´ıte si TEMP tabulku (probl´em pro reporting) nenaˇctete hodnotu ze sekvence nelze udˇelat standardn´ı z´ alohu
2
ne ´uplnˇe elegantn´ı monitoring lag replikace na slave se d´ a monitorovat pˇres “ps” v´yraznˇe se zlepˇs´ı ve verzi 9.1
3
nelze dˇelat kask´adu (vˇsichni vis´ı na jednom masterovi)
T. Vondra (CSPUG)
Replikace v PostgreSQL
Extern´ı n´astroje
PostgreSQL 9.0 PostgreSQL 9.1 Londiste Bucardo slony-I pgpool-II Postgres-XC
typ fyzick´a fyzick´a logick´a logick´a logick´a logick´a cluster
technika xlog xlog triggers triggers triggers proxy -
M/M ne ne ne ano ne ano* ano
M/S ano ano ano ano ano ne* ne
sync ne ano ne ne ne ano ne
* u proxy kategorie jako master nebo slave nemaj´ı ´ uplnˇe smysl
T. Vondra (CSPUG)
Replikace v PostgreSQL
async ano ano ano ano ano ne ano
Londiste
naps´ano Skype, souˇc´ast SkyTools (i dalˇs´ı n´astroje) implementov´ano v Pythonu (jako skoro vˇse ve Skype) PgQ - vlastn´ı implementace fronty jen master/slave replikace (logick´a) http://wiki.postgresql.org/wiki/Londiste Tutorial http://wiki.postgresql.org/wiki/Skytools
T. Vondra (CSPUG)
Replikace v PostgreSQL
Bucardo
http://bucardo.org/ triggery a d´emon - implementov´ano v Perlu (PL/Perl) zaloˇzeno na LISTEN/NOTIFY transakˇcn´ı notifikace zabudovan´e pˇr´ımo do DB jednoduch´a komunikace sessions pˇres frontu
nedok´aˇze replikovat DDL (nejsou DDL triggery) master to master - aktu´alnˇe jen dva mastery master to many slaves
T. Vondra (CSPUG)
Replikace v PostgreSQL
pgpool-II
http://pgpool.projects.postgresql.org/ pouˇz´ıv´a proxy koncept (statement-based middleware) spojuje nˇekolik pokroˇcil´ych vlastnost´ı connection pooling replikace (vˇcetnˇe online recovery) load balancing (rozhazov´ an´ı queries na repliky) parallel queries (distribuovan´e tabulky)
nˇekolik m´od˚ u, ne vˇzdy je moˇzno vˇse (parallel vs. failover) pokud chcete HA ˇreˇsen´ı, jsou asi jednoduˇsˇs´ı n´astroje
T. Vondra (CSPUG)
Replikace v PostgreSQL
slony-I http://slony.info/ master-slave replikace (max. 20 subscriber˚ u) zaloˇzeno na triggerech a C funkc´ıch plusy 5 let zkuˇsenost´ı z provozu t´emˇeˇr kompletn´ı ˇreˇsen´ı (failover, provisioning, ...)
m´ınusy fronta ud´alost´ı je ˇreˇsena pˇres tabulku (nutno VACUUM) vyˇsˇs´ı overhead neˇz ˇreˇsen´ı s jinak ˇreˇsenou frontou komplexn´ı - sloˇzit´e nastaven´ı, obt´ıˇzn´e ˇreˇsen´ı probl´em˚ u
T. Vondra (CSPUG)
Replikace v PostgreSQL
Jin´e DB
Oracle & MySQL
T. Vondra (CSPUG)
Replikace v PostgreSQL
Jin´e DB / Oracle DataGuard pouˇz´ıv´a XLog, dva m´ ody - “Redo Apply” a “SQL Apply” Redo Apply - fyzick´ a replikace (= streaming replikace) SQL Apply - logick´ a replikace, obohacen´y XLog, r˚ uzn´a omezen´ı (ne vˇsechny objekty, ne vˇsechny datov´e typy) Active Data Guard (dalˇs´ı $) umoˇzn ˇuje “hot standby”
Streams logick´a replikace, postaven´ a nad Advanced Queueing obecnˇe n´astroj pro distribuci informac´ı (ne jen replikace)
GoldenGate log-based logick´ a replikace pro heterogenn´ı prostˇred´ı (Oracle, DB2, MSSQL, MySQL, ...) Oracle doporuˇcuje jako n´ ahradu za Streams T. Vondra (CSPUG)
Replikace v PostgreSQL
Jin´e DB / MySQL asynchronn´ı logick´a master-slave replikace (od 5.5 semi-synchronn´ı) postaveno na tzv. “binlogu” (statement-based log) statement-based (SBR) loguje kompletn´ı SQL pˇr´ıkazy (kter´e zmˇenily data) ne vˇsechny SQL pˇr´ıkazy jsou “bezpeˇcn´e”
row-based (RBR) loguj´ı se fin´aln´ı zmˇeny jednotliv´ych ˇr´ adk˚ u bezpeˇcnˇejˇs´ı ale vˇetˇs´ı objem dat neˇz SBR
mixed-based (MBR) SBR nebo RBR podle typu eventu
MySQL Cluster (NDB engine) - synchronn´ı replikace zaloˇzen´a na 2PC (ne na binlogu) T. Vondra (CSPUG)
Replikace v PostgreSQL
Odkazy / obecn´e Replication @ wikipedia http://en.wikipedia.org/wiki/Replication (computer science)
MySQL 5.5 Replication http://dev.mysql.com/doc/refman/5.5/en/replication.html http://dev.mysql.com/doc/refman/5.5/en/replication-sbr-rbr.html http://dev.mysql.com/doc/refman/5.5/en/replication-rbr-usage.html
Drizzle http://docs.drizzle.org/replication.html http://code.google.com/p/protobuf/
Oracle Data Guard http://en.wikipedia.org/wiki/Oracle Data Guard
Oracle Streams http://www.oracle.com/technetwork/database/features/data-integration/default-159085.html
Oracle GoldenGate http://www.oracle.com/technetwork/middleware/goldengate/overview/index.html T. Vondra (CSPUG)
Replikace v PostgreSQL
Odkazy / PostgreSQL Replication, Clustering, and Connection Pooling http://wiki.postgresql.org/wiki/Replication, Clustering, and Connection Pooling
Replication solutions for PostgreSQL (Peter Eisentraut) http://www.slideshare.net/petereisentraut/replication-solutions-for-postgresql
9.0 Streaming Replication vs Slony (Steve Singer) http://scanningpages.wordpress.com/2010/10/09/9-0-streaming-replication-vs-slony/
PostgreSQL / WAL config http://www.postgresql.org/docs/current/static/runtime-config-wal.html http://developer.postgresql.org/pgdocs/postgres/runtime-config-wal.html
PostgreSQL / Comparison of Different Solutions http://developer.postgresql.org/pgdocs/postgres/different-replication-solutions.html
repmgr https://github.com/greg2ndQuadrant/repmgr
T. Vondra (CSPUG)
Replikace v PostgreSQL