Replikace v PostgreSQL CSPUG, Praha Tomс Vondra (tv@fuzzy.cz) Czech and Slovak PostgreSQL Users Group 19.4.2011
Agenda кely replikace Varianty replikace Historie replikace v PostgreSQL Zabudovanс replikace Externэ nсstroje Srovnсnэ s dal эmi DB
кely replikace high-availability kсlovсnэ vkonu (read vs. write) load balancing query partitioning migrace a upgrade bez vpadku jinс verze stejnщ databсze њpln jinс databсze rychlej э pэstup pes WAN lokсlnэ kopie na pobokсch road warriors / kopie pro mobilnэ zaэzenэ
Varianty replikace master-master vs. master-slave synchronnэ vs. asynchronnэ fyzickс vs. logickс warm standby vs. hot standby zpsob implementace xlog (log file shipping vs. streaming) trigger statement-based
Master vs. slave master autoritativnэ zdroj informacэ zpracovсvс poadavky na zmny, pedсvс je dсle slave zmny se pejэmajэ z master databсze, jinak read-only v podstat jen kopie master databсze master-slave jednodu э jednosmrnс replikace read scalability master-master obousmrnс replikace - nutno e it kolize write scalability
Synchronnэ vs. asynchronnэ replikace synchronnэ commit ekс na potvrzenэ dokonenэ replikace pomalej э, ale vdy konzistentnэ jako celek asynchronnэ na dokonenэ replikace se neekс, zapэ e se jen lokсln rychlej э, ale me dojэt k nekonzistenci mezi originсlem a replikou (replika je pozadu ) semi-synchronnэ kompromis mezi spolehlivostэ a vkonem vэce replik, ekс se jen na potvrzenэ z prvnэ
Fyzickс replikace binсrnэ kopie datovch blok (xlog) masteru do XLogu zapэ e binсrnэ diff (zm byte X v bloku Y na Z) slave pete a aplikuje na bloky (v podstat recovery)
Fyzickс replikace klady minimсlnэ overhead (1%) velmi jednoduchщ na nastavenэ zсpory jen kompletnэ databсze stejnс verze DB (formсt) stejn HW (zejmщna CPU architektura) jen master-slave (nemonost e enэ konflikt)
Fyzickс replikace / Log file shipping 1 UPDATE znamenс zmnu nkolika datovch blok 2 kadс zmna generuje zсznam v transaknэm logu 3 pi zaplnnэ segmentu (16MB) se archivuje (NFS,...) 4 archivovan segment se aplikuje na slave databсzi 5 vsledkem je binсrnэ kopie
Fyzickс replikace / Streaming replication 1 UPDATE znamenс zmnu nkolika datovch blok 2 kadс zmna generuje zсznam v transaknэm logu 3 zсznamy se (asynchronn) penс э do slave databсze 4 zmny se aplikujэ 5 vsledkem je (opt) binсrnэ kopie
Warm standby vs. Hot standby warm standby databсze nastartovanс v recovery mѓdu pijэmс z master databсze zmny a aplikuje je slouэ jen pro HA - nelze se pipojit a spou tt dotazy hot standby databсze nastartovanс v read-only mѓdu lze spou tt read-only dotazy (nedostane XID)
Logickс replikace ne aplikace binсrnэch zmn bez znalosti struktury dat aplikace logickch operacэ (INSERT/UPDATE/DELETE) klady replikace jen сsti databсze (nap. jedna tabulka) replikace do jinщ verze / jinщ DB (uprage a migrace) umouje multi-master replikaci zсpory nсronj э na nastavenэ i na zdroje nutnost e enэ konflikt (specifickщ dle aplikace)
Logickс replikace / zpsoby implementace log v ech SQL / opakovanс aplikace na repliku zptnс interpretace xlog zсznam triggery proxy zachycujэcэ SQL
Replikace nenahrazuje zсlohovсnэ replikuje se v echno (vetn omyl) hacker, idiot, unit test omylem na produknэ DB DROP DATABASE, DELETE,... Zсlohujte! Zсlohujte! Zсlohujte!
Replikace v PostgreSQL Historie, souasnost a budoucnost
Historie replikace v PostgreSQL Unixovс mentalita core teamu men э flexibilnэ nсstroje, monost kombinace mnoho monostэ implementace - radji extern odpor k pidсvсnэ takovch vlastnostэ do verze 8.4 (vetn) XLog file shipping replikace + warm standby (HA) zajэmavщ externэ nсstroje (Bucardo, Londiste, slony-i,...) verze 9.0 asynchronnэ XLog streaming replikace monost hot standby verze 9.1 synchronnэ XLog streaming replikace
Zabudovanс replikace fyzickс (a)synchronnэ replikace rozpor mezi nсroky na HA a reporting (zabэjenэ queries) trochu problщm pi њmrtэ mastera (s vэce slavy)
HA vs. reporting / query cancellation high-availability cэlem je minimсlnэ delay oproti masteru (kvli failoveru) reporting dlouho bэcэ dotazy nad velkmi datovmi objemy dotaz potebuje blok kter se zmnil je zabit rychlс aplikace zmn vt э pravdpodobnost zabitэ zajэmavс nastavenэ vacuum defer cleanup age (master) hot standby feedback (standby)
HA vs. reporting / query cancellation e enэ - dva slaves, jeden pro HA a druh pro reporting
Demo 1 vytvoэme a nakonfigurujeme mastera 2 vytvoэme slave, napojэme na master 3 provedeme nco na masterovi 4 podэvсme se jak se to zpropagovalo na slave 5 zkusэme njakщ dotazy nad slave (read / write) 6 zastavэme mastera 7 provedeme failover
Demo / master postgresql.conf listen_addresses = 127.0.0.1 port = 5432 # archivnэ reim wal_level = hot_standby max_wal_senders = 10 # archivnэ reim archive_mode = on archive_command = cp %p /var/pg9/archive/%f pg hba.conf # IPv4 local connections host replication repuser 127.0.0.1/32 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 # ukonenэ recovery (touch) trigger_file = /var/pg9/failover # natenэ z archivu log restore_command = cp /var/pg9/archive/%f "%p"
Nevhody zabudovanщ replikace 1 slave je jen pro tenэ nenaplnэte si TEMP tabulku (problщm pro reporting) nenatete hodnotu ze sekvence nelze udlat standardnэ zсlohu 2 ne њpln elegantnэ monitoring lag replikace na slave se dс monitorovat pes ps vrazn se zlep э ve verzi 9.1 3 nelze dlat kaskсdu (v ichni visэ na jednom masterovi)
Externэ nсstroje typ technika M/M M/S sync async PostgreSQL 9.0 fyzickс xlog ne ano ne ano PostgreSQL 9.1 fyzickс xlog ne ano ano ano Londiste logickс triggers ne ano ne ano Bucardo logickс triggers ano ano ne ano slony-i logickс triggers ne ano ne ano pgpool-ii logickс proxy ano* ne* ano ne Postgres-XC cluster - ano ne ne ano * u proxy kategorie jako master nebo slave nemajэ њpln smysl
Londiste napsсno Skype, souсst SkyTools (i dal э nсstroje) implementovсno v Pythonu (jako skoro v e ve Skype) PgQ - vlastnэ implementace fronty jen master/slave replikace (logickс) http://wiki.postgresql.org/wiki/londiste Tutorial http://wiki.postgresql.org/wiki/skytools
Bucardo http://bucardo.org/ triggery a dщmon - implementovсno v Perlu (PL/Perl) zaloeno na LISTEN/NOTIFY transaknэ notifikace zabudovanщ pэmo do DB jednoduchс komunikace sessions pes frontu nedokсe replikovat DDL (nejsou DDL triggery) master to master - aktuсln jen dva mastery master to many slaves
pgpool-ii http://pgpool.projects.postgresql.org/ pouэvс proxy koncept (statement-based middleware) spojuje nkolik pokroilch vlastnostэ connection pooling replikace (vetn online recovery) load balancing (rozhazovсnэ queries na repliky) parallel queries (distribuovanщ tabulky) nkolik mѓd, ne vdy je mono v e (parallel vs. failover) pokud chcete HA e enэ, jsou asi jednodu э nсstroje
slony-i http://slony.info/ master-slave replikace (max. 20 subscriber) zaloeno na triggerech a C funkcэch plusy 5 let zku enostэ z provozu tщm kompletnэ e enэ (failover, provisioning,...) mэnusy fronta udсlostэ je e ena pes tabulku (nutno VACUUM) vy э overhead ne e enэ s jinak e enou frontou komplexnэ - sloitщ nastavenэ, obtэnщ e enэ problщm
Jinщ DB Oracle & MySQL
Jinщ DB / Oracle DataGuard pouэvс XLog, dva mѓdy - Redo Apply a SQL Apply Redo Apply - fyzickс replikace (= streaming replikace) SQL Apply - logickс replikace, obohacen XLog, rznс omezenэ (ne v echny objekty, ne v echny datovщ typy) Active Data Guard (dal э $) umouje hot standby Streams logickс replikace, postavenс nad Advanced Queueing obecn nсstroj pro distribuci informacэ (ne jen replikace) GoldenGate log-based logickс replikace pro heterogennэ prostedэ (Oracle, DB2, MSSQL, MySQL,...) Oracle doporuuje jako nсhradu za Streams
Jinщ DB / MySQL asynchronnэ logickс master-slave replikace (od 5.5 semi-synchronnэ) postaveno na tzv. binlogu (statement-based log) statement-based (SBR) loguje kompletnэ SQL pэkazy (kterщ zmnily data) ne v echny SQL pэkazy jsou bezpenщ row-based (RBR) logujэ se finсlnэ zmny jednotlivch сdk bezpenj э ale vt э objem dat ne SBR mixed-based (MBR) SBR nebo RBR podle typu eventu MySQL Cluster (NDB engine) - synchronnэ replikace zaloenс na 2PC (ne na binlogu)
Odkazy / obecnщ 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
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