SlideShare ist ein Scribd-Unternehmen logo
1 von 33
Downloaden Sie, um offline zu lesen
Replikace v PostgreSQL
          CSPUG, Praha


 Tom´ˇ Vondra (tv@fuzzy.cz)
    as

Czech and Slovak PostgreSQL Users Group




             19.4.2011
Agenda



     ´c
     Uˇely replikace
     Varianty replikace
     Historie replikace v PostgreSQL
     Zabudovan´ replikace
                 a
     Extern´ n´stroje
            ı a
     Srovn´n´ s dalˇ´ DB
           a ı      sımi




                  T. Vondra (CSPUG)   Replikace v PostgreSQL
´c
Uˇely replikace


      high-availability
      ˇk´lov´n´ v´konu (read vs. write)
      s a a ı y
          load balancing
          query partitioning
      migrace a upgrade bez v´padku
                             y
          jin´ verze stejn´ datab´ze
             a            e      a
          uplnˇ jin´ datab´ze
          ´ e a             a
      rychlejˇ´ pˇıstup pˇes WAN
             sı r´       r
          lok´ln´ kopie na poboˇk´ch
             a ı                c a
          road warriors / kopie pro mobiln´ zaˇızen´
                                          ı r´ ı




                   T. Vondra (CSPUG)   Replikace v PostgreSQL
Varianty replikace


      master-master vs. master-slave
      synchronn´ vs. asynchronn´
                 ı             ı
      fyzick´ vs. logick´
            a           a
      warm standby vs. hot standby
      zp˚sob implementace
        u
          xlog (log file shipping vs. streaming)
          trigger
          statement-based




                   T. Vondra (CSPUG)   Replikace v PostgreSQL
Master vs. slave

      master
          autoritativn´ zdroj informac´
                      ı               ı
          zpracov´v´ poˇadavky na zmˇny, pˇed´v´ je d´le
                  a a z                 e r a a      a
      slave
          zmˇny se pˇej´ ı z master datab´ze, jinak read-only
             e       r ımaj´               a
          v podstatˇ jen “kopie” master datab´ze
                   e                         a

      master-slave
          jednoduˇˇ´ “jednosmˇrn´” replikace
                  ssı        e a
          read scalability
      master-master
          obousmˇrn´ replikace - nutno ˇeˇit kolize
                  e a                  r s
          write scalability

                   T. Vondra (CSPUG)   Replikace v PostgreSQL
Synchronn´ vs. asynchronn´ replikace
         ı               ı


      synchronn´
               ı
         commit ˇek´ na potvrzen´ dokonˇen´ replikace
                 c a              ı      c ı
         pomalejˇ´ ale vˇdy konzistentn´ jako celek
                sı,     z              ı
      asynchronn´
                ı
         na dokonˇen´ replikace se neˇek´, zap´se se jen lok´lnˇ
                    c ı               c a     ıˇ            a e
         rychlejˇ´ ale m˚ˇe doj´ k nekonzistenci mezi origin´lem
                sı,      uz      ıt                          a
         a replikou (replika je “pozadu”)
      semi-synchronn´
                    ı
         kompromis mezi spolehlivost´ a v´konem
                                     ı   y
         v´ replik, ˇek´ se jen na potvrzen´ z prvn´
          ıce       c a                    ı       ı




                    T. Vondra (CSPUG)   Replikace v PostgreSQL
Fyzick´ replikace
      a
      bin´rn´ kopie datov´ch blok˚ (xlog)
         a ı              y       u
      masteru do XLogu zap´se “bin´rn´ diff” (zmˇˇ byte X v
                              ıˇ     a ı           en
      bloku Y na Z)
      slave pˇeˇte a aplikuje na bloky (v podstatˇ recovery)
             r c                                 e




                   T. Vondra (CSPUG)   Replikace v PostgreSQL
Fyzick´ replikace
      a


      klady
          minim´ln´ overhead (1%)
                a ı
          velmi jednoduch´ na nastaven´
                         e            ı

      z´pory
       a
          jen kompletn´ datab´ze
                       ı      a
          stejn´ verze DB (form´t)
               a                a
          stejn´ HW (zejm´na CPU architektura)
               y           e
          jen master-slave (nemoˇnost ˇeˇen´ konflikt˚)
                                 z    r s ı         u




                   T. Vondra (CSPUG)   Replikace v PostgreSQL
Fyzick´ replikace / Log file shipping
      a
    1   UPDATE znamen´ zmˇnu nˇkolika datov´ch blok˚
                         a    e    e             y       u
    2   kaˇd´ zmˇna generuje z´znam v transakˇn´ logu
           z a    e             a               c ım
    3   pˇi zaplnˇn´ segmentu (16MB) se archivuje (NFS, ...)
         r       e ı
    4   archivovan´ segment se aplikuje na slave datab´zi
                    y                                 a
    5   v´sledkem je bin´rn´ kopie
         y              a ı




                     T. Vondra (CSPUG)   Replikace v PostgreSQL
Fyzick´ replikace / Streaming replication
      a
    1   UPDATE znamen´ zmˇnu nˇkolika datov´ch blok˚
                          a   e     e           y      u
    2   kaˇd´ zmˇna generuje z´znam v transakˇn´ logu
           z a   e              a              c ım
    3   z´znamy se (asynchronnˇ) pˇen´ˇ´ do slave datab´ze
         a                      e r ası                a
    4   zmˇny se aplikuj´
            e           ı
    5   v´sledkem je (opˇt) bin´rn´ kopie
         y              e      a ı




                    T. Vondra (CSPUG)   Replikace v PostgreSQL
Warm standby vs. Hot standby



     warm standby
        datab´ze nastartovan´ v “recovery m´du”
                a            a                 o
        pˇij´ a z master datab´ze zmˇny a aplikuje je
          r ım´                a      e
        slouˇ´ jen pro HA - nelze se pˇipojit a spouˇtˇt dotazy
             zı                       r             se

     hot standby
        datab´ze nastartovan´ v “read-only m´du”
              a               a               o
        lze spouˇtˇt read-only dotazy (nedostane XID)
                se




                   T. Vondra (CSPUG)   Replikace v PostgreSQL
Logick´ replikace
      a


      ne aplikace bin´rn´ zmˇn bez znalosti struktury dat
                     a ıch     e
      aplikace logick´ch operac´ (INSERT/UPDATE/DELETE)
                     y          ı

      klady
          replikace jen ˇ´sti datab´ze (napˇ. jedna tabulka)
                        ca         a       r
          replikace do jin´ verze / jin´ DB (uprage a migrace)
                          e            e
          umoˇnuje multi-master replikaci
               zˇ
      z´pory
       a
          n´roˇnˇjˇ´ na nastaven´ i na zdroje
           a c e sı             ı
          nutnost ˇeˇen´ konflikt˚ (specifick´ dle aplikace)
                  r s ı         u           e




                   T. Vondra (CSPUG)   Replikace v PostgreSQL
Logick´ replikace / zp˚soby implementace
      a               u




      log vˇech SQL / opakovan´ aplikace na repliku
           s                     a
      zpˇtn´ interpretace xlog z´znam˚
         e a                    a    u
      triggery
      proxy zachycuj´ ı SQL
                     ıc´




                   T. Vondra (CSPUG)   Replikace v PostgreSQL
Replikace nenahrazuje z´lohov´n´
                       a     a ı
     replikuje se vˇechno (vˇetnˇ omyl˚)
                   s         c e       u
     hacker, idiot, unit test omylem na produkˇn´ DB
                                              c ı
     DROP DATABASE, DELETE, ...




     Z´lohujte! Z´lohujte! Z´lohujte!
      a          a          a
                  T. Vondra (CSPUG)   Replikace v PostgreSQL
Replikace v PostgreSQL




    Historie, souˇasnost a budoucnost
                 c




              T. Vondra (CSPUG)   Replikace v PostgreSQL
Historie replikace v PostgreSQL

      “Unixov´ mentalita” core teamu
             a
          menˇ´ flexibiln´ n´stroje, moˇnost kombinace
             sı         ı a           z
          mnoho moˇnost´ implementace - radˇji externˇ
                    z     ı                   e       e
          odpor k pˇid´v´n´ takov´ch vlastnost´
                   r a a ı         y          ı
      do verze 8.4 (vˇetnˇ)
                     c e
          XLog file shipping replikace + “warm standby” (HA)
          zaj´
             ımav´ extern´ n´stroje (Bucardo, Londiste, slony-I, ...)
                 e       ı a
      verze 9.0
          asynchronn´ XLog streaming replikace
                    ı
          moˇnost “hot standby”
             z
      verze 9.1
          synchronn´ XLog streaming replikace
                   ı


                   T. Vondra (CSPUG)   Replikace v PostgreSQL
Zabudovan´ replikace
         a




     fyzick´ (a)synchronn´ replikace
           a             ı
     rozpor mezi n´roky na HA a reporting (zab´ ı queries)
                    a                         ıjen´
     trochu probl´m pˇi ´mrt´ mastera (s v´ slavy)
                  e   r u ı               ıce

                 T. Vondra (CSPUG)   Replikace v PostgreSQL
HA vs. reporting / query cancellation


      high-availability
          c´
           ılem je minim´ln´ delay oproti masteru (kv˚li failoveru)
                        a ı                          u

      reporting
          dlouho bˇˇ´ ı dotazy nad velk´mi datov´mi objemy
                   ezıc´               y        y
          dotaz potˇebuje blok kter´ se zmˇnil − je zabit
                    r              y      e →
          rychl´ aplikace zmˇn − vˇtˇ´ pravdˇpodobnost zabit´
               a            e → e sı        e               ı

      zaj´
         ımav´ nastaven´
             a         ı
          vacuum defer cleanup age (master)
          hot standby feedback (standby)



                   T. Vondra (CSPUG)   Replikace v PostgreSQL
HA vs. reporting / query cancellation

      ˇeˇen´ - dva slaves, jeden pro HA a druh´ pro reporting
      r s ı                                   y




                   T. Vondra (CSPUG)   Replikace v PostgreSQL
Demo


   1   vytvoˇıme a nakonfigurujeme mastera
             r´
   2   vytvoˇıme slave, napoj´ na master
             r´              ıme
   3   provedeme nˇco na masterovi
                    e
   4   pod´ ame se jak se to zpropagovalo na slave
           ıv´
   5   zkus´ nˇjak´ dotazy nad slave (read / write)
            ıme e e
   6   zastav´ mastera
              ıme
   7   provedeme failover




                   T. Vondra (CSPUG)   Replikace v PostgreSQL
Demo / master
  postgresql.conf
  listen_addresses = ’127.0.0.1’
  port = 5432

  # archivn´ reˇim
           ı   z
  wal_level = hot_standby
  max_wal_senders = 10

  # archivn´ reˇim
           ı   z
  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
                    T. Vondra (CSPUG)   Replikace v PostgreSQL
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ˇen´ recovery (touch)
        c ı
  trigger_file = ’/var/pg9/failover’

  # naˇten´ z archivu log˚
      c   ı              u
  restore_command = ’cp /var/pg9/archive/%f "%p"’

                    T. Vondra (CSPUG)   Replikace v PostgreSQL
Nev´hody zabudovan´ replikace
   y              e


    1   slave je jen pro ˇten´
                         c ı
             nenapln´ si TEMP tabulku (probl´m pro reporting)
                     ıte                    e
             nenaˇtete hodnotu ze sekvence
                  c
             nelze udˇlat standardn´ z´lohu
                      e            ı a
    2   ne ´plnˇ elegantn´ monitoring
           u e           ı
             lag replikace na slave se d´ monitorovat pˇes “ps”
                                        a              r
             v´raznˇ se zlepˇ´ ve verzi 9.1
              y     e        sı
    3   nelze dˇlat kask´du (vˇichni vis´ na jednom masterovi)
               e        a     s         ı




                      T. Vondra (CSPUG)   Replikace v PostgreSQL
Extern´ n´stroje
      ı a


                         typ       technika      M/M          M/S   sync   async
   PostgreSQL 9.0      fyzick´
                             a        xlog         ne         ano     ne    ano
   PostgreSQL 9.1      fyzick´
                             a        xlog         ne         ano    ano    ano
   Londiste            logick´
                             a      triggers       ne         ano     ne    ano
   Bucardo             logick´
                             a      triggers      ano         ano     ne    ano
   slony-I             logick´
                             a      triggers       ne         ano     ne    ano
   pgpool-II           logick´
                             a       proxy       ano*         ne*    ano     ne
   Postgres-XC         cluster          -         ano          ne     ne    ano
  * u proxy kategorie jako master nebo slave nemaj´ ´plnˇ smysl
                                                  ıu e




                       T. Vondra (CSPUG)   Replikace v PostgreSQL
Londiste



      naps´no Skype, souˇ´st SkyTools (i dalˇ´ n´stroje)
           a              ca                 sı a
      implementov´no v Pythonu (jako skoro vˇe ve Skype)
                   a                           s
      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´mon - implementov´no v Perlu (PL/Perl)
                 e                 a
     zaloˇeno na LISTEN/NOTIFY
         z
          transakˇn´ notifikace zabudovan´ pˇımo do DB
                 c ı                    e r´
          jednoduch´ komunikace sessions pˇes frontu
                     a                     r
     nedok´ˇe replikovat DDL (nejsou DDL triggery)
          az
     master to master - aktu´lnˇ jen dva mastery
                            a e
     master to many slaves




                  T. Vondra (CSPUG)   Replikace v PostgreSQL
pgpool-II


      http://pgpool.projects.postgresql.org/
      pouˇ´ a proxy koncept (statement-based middleware)
          zıv´
      spojuje nˇkolik pokroˇil´ch vlastnost´
               e           c y             ı
            connection pooling
            replikace (vˇetnˇ online recovery)
                        c e
            load balancing (rozhazov´n´ queries na repliky)
                                       a ı
            parallel queries (distribuovan´ tabulky)
                                           e
      nˇkolik m´d˚, ne vˇdy je moˇno vˇe (parallel vs. failover)
       e       o u      z        z     s
      pokud chcete HA ˇeˇen´ jsou asi jednoduˇˇ´ n´stroje
                       r s ı,                ssı a




                     T. Vondra (CSPUG)   Replikace v PostgreSQL
slony-I


      http://slony.info/
      master-slave replikace (max. 20 subscriber˚)
                                                u
      zaloˇeno na triggerech a C funkc´
          z                           ıch
      plusy
          5 let zkuˇenost´ z provozu
                   s     ı
          t´mˇˇ kompletn´ ˇeˇen´ (failover, provisioning, ...)
           e er            ır s ı
      m´
       ınusy
          fronta ud´lost´ je ˇeˇena pˇes tabulku (nutno VACUUM)
                    a ı r s          r
          vyˇˇ´ overhead neˇ ˇeˇen´ s jinak ˇeˇenou frontou
             ssı             zr s ı         r s
          komplexn´ - sloˇit´ nastaven´ obt´zn´ ˇeˇen´ probl´m˚
                    ı    z e           ı,    ıˇ e r s ı     e u



                    T. Vondra (CSPUG)   Replikace v PostgreSQL
Jin´ DB
   e




          Oracle & MySQL




           T. Vondra (CSPUG)   Replikace v PostgreSQL
Jin´ DB / Oracle
   e

     DataGuard
         pouˇ´ a XLog, dva m´dy - “Redo Apply” a “SQL Apply”
            zıv´              o
         Redo Apply - fyzick´ replikace (= streaming replikace)
                            a
         SQL Apply - logick´ replikace, obohacen´ XLog, r˚zn´
                           a                     y         u a
         omezen´ (ne vˇechny objekty, ne vˇechny datov´ typy)
                ı     s                    s           e
         Active Data Guard (dalˇ´ $) umoˇnuje “hot standby”
                                sı        zˇ
     Streams
         logick´ replikace, postaven´ nad Advanced Queueing
               a                    a
         obecnˇ n´stroj pro distribuci informac´ (ne jen replikace)
               e a                             ı
     GoldenGate
         log-based logick´ replikace pro heterogenn´ prostˇed´
                         a                         ı      r ı
         (Oracle, DB2, MSSQL, MySQL, ...)
         Oracle doporuˇuje jako n´hradu za Streams
                       c           a

                  T. Vondra (CSPUG)   Replikace v PostgreSQL
Jin´ DB / MySQL
   e
     asynchronn´ logick´ master-slave replikace (od 5.5
               ı       a
     semi-synchronn´ı)
     postaveno na tzv. “binlogu” (statement-based log)
     statement-based (SBR)
         loguje kompletn´ SQL pˇıkazy (kter´ zmˇnily data)
                        ı      r´          e     e
         ne vˇechny SQL pˇıkazy jsou “bezpeˇn´”
             s             r´                c e
     row-based (RBR)
         loguj´ se fin´ln´ zmˇny jednotliv´ch ˇ´dk˚
              ı        a ı   e           y ra u
         bezpeˇnˇjˇ´ ale vˇtˇ´ objem dat neˇ SBR
                c e sı     e sı            z
     mixed-based (MBR)
         SBR nebo RBR podle typu eventu
     MySQL Cluster (NDB engine) - synchronn´ replikace
                                           ı
     zaloˇen´ na 2PC (ne na binlogu)
         z a

                  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

Weitere ähnliche Inhalte

Mehr von Tomas Vondra

CREATE STATISTICS - what is it for?
CREATE STATISTICS - what is it for?CREATE STATISTICS - what is it for?
CREATE STATISTICS - what is it for?Tomas Vondra
 
PostgreSQL performance improvements in 9.5 and 9.6
PostgreSQL performance improvements in 9.5 and 9.6PostgreSQL performance improvements in 9.5 and 9.6
PostgreSQL performance improvements in 9.5 and 9.6Tomas Vondra
 
PostgreSQL na EXT4, XFS, BTRFS a ZFS / FOSDEM PgDay 2016
PostgreSQL na EXT4, XFS, BTRFS a ZFS / FOSDEM PgDay 2016PostgreSQL na EXT4, XFS, BTRFS a ZFS / FOSDEM PgDay 2016
PostgreSQL na EXT4, XFS, BTRFS a ZFS / FOSDEM PgDay 2016Tomas Vondra
 
PostgreSQL on EXT4, XFS, BTRFS and ZFS
PostgreSQL on EXT4, XFS, BTRFS and ZFSPostgreSQL on EXT4, XFS, BTRFS and ZFS
PostgreSQL on EXT4, XFS, BTRFS and ZFSTomas Vondra
 
Performance improvements in PostgreSQL 9.5 and beyond
Performance improvements in PostgreSQL 9.5 and beyondPerformance improvements in PostgreSQL 9.5 and beyond
Performance improvements in PostgreSQL 9.5 and beyondTomas Vondra
 
PostgreSQL on EXT4, XFS, BTRFS and ZFS
PostgreSQL on EXT4, XFS, BTRFS and ZFSPostgreSQL on EXT4, XFS, BTRFS and ZFS
PostgreSQL on EXT4, XFS, BTRFS and ZFSTomas Vondra
 
Novinky v PostgreSQL 9.4 a JSONB
Novinky v PostgreSQL 9.4 a JSONBNovinky v PostgreSQL 9.4 a JSONB
Novinky v PostgreSQL 9.4 a JSONBTomas Vondra
 
PostgreSQL performance archaeology
PostgreSQL performance archaeologyPostgreSQL performance archaeology
PostgreSQL performance archaeologyTomas Vondra
 
Český fulltext a sdílené slovníky
Český fulltext a sdílené slovníkyČeský fulltext a sdílené slovníky
Český fulltext a sdílené slovníkyTomas Vondra
 
SSD vs HDD / WAL, indexes and fsync
SSD vs HDD / WAL, indexes and fsyncSSD vs HDD / WAL, indexes and fsync
SSD vs HDD / WAL, indexes and fsyncTomas Vondra
 
Čtení explain planu (CSPUG 21.6.2011)
Čtení explain planu (CSPUG 21.6.2011)Čtení explain planu (CSPUG 21.6.2011)
Čtení explain planu (CSPUG 21.6.2011)Tomas Vondra
 
PostgreSQL / Performance monitoring
PostgreSQL / Performance monitoringPostgreSQL / Performance monitoring
PostgreSQL / Performance monitoringTomas Vondra
 

Mehr von Tomas Vondra (14)

Data corruption
Data corruptionData corruption
Data corruption
 
CREATE STATISTICS - what is it for?
CREATE STATISTICS - what is it for?CREATE STATISTICS - what is it for?
CREATE STATISTICS - what is it for?
 
DB vs. encryption
DB vs. encryptionDB vs. encryption
DB vs. encryption
 
PostgreSQL performance improvements in 9.5 and 9.6
PostgreSQL performance improvements in 9.5 and 9.6PostgreSQL performance improvements in 9.5 and 9.6
PostgreSQL performance improvements in 9.5 and 9.6
 
PostgreSQL na EXT4, XFS, BTRFS a ZFS / FOSDEM PgDay 2016
PostgreSQL na EXT4, XFS, BTRFS a ZFS / FOSDEM PgDay 2016PostgreSQL na EXT4, XFS, BTRFS a ZFS / FOSDEM PgDay 2016
PostgreSQL na EXT4, XFS, BTRFS a ZFS / FOSDEM PgDay 2016
 
PostgreSQL on EXT4, XFS, BTRFS and ZFS
PostgreSQL on EXT4, XFS, BTRFS and ZFSPostgreSQL on EXT4, XFS, BTRFS and ZFS
PostgreSQL on EXT4, XFS, BTRFS and ZFS
 
Performance improvements in PostgreSQL 9.5 and beyond
Performance improvements in PostgreSQL 9.5 and beyondPerformance improvements in PostgreSQL 9.5 and beyond
Performance improvements in PostgreSQL 9.5 and beyond
 
PostgreSQL on EXT4, XFS, BTRFS and ZFS
PostgreSQL on EXT4, XFS, BTRFS and ZFSPostgreSQL on EXT4, XFS, BTRFS and ZFS
PostgreSQL on EXT4, XFS, BTRFS and ZFS
 
Novinky v PostgreSQL 9.4 a JSONB
Novinky v PostgreSQL 9.4 a JSONBNovinky v PostgreSQL 9.4 a JSONB
Novinky v PostgreSQL 9.4 a JSONB
 
PostgreSQL performance archaeology
PostgreSQL performance archaeologyPostgreSQL performance archaeology
PostgreSQL performance archaeology
 
Český fulltext a sdílené slovníky
Český fulltext a sdílené slovníkyČeský fulltext a sdílené slovníky
Český fulltext a sdílené slovníky
 
SSD vs HDD / WAL, indexes and fsync
SSD vs HDD / WAL, indexes and fsyncSSD vs HDD / WAL, indexes and fsync
SSD vs HDD / WAL, indexes and fsync
 
Čtení explain planu (CSPUG 21.6.2011)
Čtení explain planu (CSPUG 21.6.2011)Čtení explain planu (CSPUG 21.6.2011)
Čtení explain planu (CSPUG 21.6.2011)
 
PostgreSQL / Performance monitoring
PostgreSQL / Performance monitoringPostgreSQL / Performance monitoring
PostgreSQL / Performance monitoring
 

Replikace (CSPUG 19.4.2011)

  • 1. Replikace v PostgreSQL CSPUG, Praha Tom´ˇ Vondra (tv@fuzzy.cz) as Czech and Slovak PostgreSQL Users Group 19.4.2011
  • 2. Agenda ´c Uˇely replikace Varianty replikace Historie replikace v PostgreSQL Zabudovan´ replikace a Extern´ n´stroje ı a Srovn´n´ s dalˇ´ DB a ı sımi T. Vondra (CSPUG) Replikace v PostgreSQL
  • 3. ´c Uˇely replikace high-availability ˇk´lov´n´ v´konu (read vs. write) s a a ı y load balancing query partitioning migrace a upgrade bez v´padku y jin´ verze stejn´ datab´ze a e a uplnˇ jin´ datab´ze ´ e a a rychlejˇ´ pˇıstup pˇes WAN sı r´ r lok´ln´ kopie na poboˇk´ch a ı c a road warriors / kopie pro mobiln´ zaˇızen´ ı r´ ı T. Vondra (CSPUG) Replikace v PostgreSQL
  • 4. Varianty replikace master-master vs. master-slave synchronn´ vs. asynchronn´ ı ı fyzick´ vs. logick´ a a warm standby vs. hot standby zp˚sob implementace u xlog (log file shipping vs. streaming) trigger statement-based T. Vondra (CSPUG) Replikace v PostgreSQL
  • 5. Master vs. slave master autoritativn´ zdroj informac´ ı ı zpracov´v´ poˇadavky na zmˇny, pˇed´v´ je d´le a a z e r a a a slave zmˇny se pˇej´ ı z master datab´ze, jinak read-only e r ımaj´ a v podstatˇ jen “kopie” master datab´ze e a master-slave jednoduˇˇ´ “jednosmˇrn´” replikace ssı e a read scalability master-master obousmˇrn´ replikace - nutno ˇeˇit kolize e a r s write scalability T. Vondra (CSPUG) Replikace v PostgreSQL
  • 6. Synchronn´ vs. asynchronn´ replikace ı ı synchronn´ ı commit ˇek´ na potvrzen´ dokonˇen´ replikace c a ı c ı pomalejˇ´ ale vˇdy konzistentn´ jako celek sı, z ı asynchronn´ ı na dokonˇen´ replikace se neˇek´, zap´se se jen lok´lnˇ c ı c a ıˇ a e rychlejˇ´ ale m˚ˇe doj´ k nekonzistenci mezi origin´lem sı, uz ıt a a replikou (replika je “pozadu”) semi-synchronn´ ı kompromis mezi spolehlivost´ a v´konem ı y v´ replik, ˇek´ se jen na potvrzen´ z prvn´ ıce c a ı ı T. Vondra (CSPUG) Replikace v PostgreSQL
  • 7. Fyzick´ replikace a bin´rn´ kopie datov´ch blok˚ (xlog) a ı y u masteru do XLogu zap´se “bin´rn´ diff” (zmˇˇ byte X v ıˇ a ı en bloku Y na Z) slave pˇeˇte a aplikuje na bloky (v podstatˇ recovery) r c e T. Vondra (CSPUG) Replikace v PostgreSQL
  • 8. Fyzick´ replikace a klady minim´ln´ overhead (1%) a ı velmi jednoduch´ na nastaven´ e ı z´pory a jen kompletn´ datab´ze ı a stejn´ verze DB (form´t) a a stejn´ HW (zejm´na CPU architektura) y e jen master-slave (nemoˇnost ˇeˇen´ konflikt˚) z r s ı u T. Vondra (CSPUG) Replikace v PostgreSQL
  • 9. Fyzick´ replikace / Log file shipping a 1 UPDATE znamen´ zmˇnu nˇkolika datov´ch blok˚ a e e y u 2 kaˇd´ zmˇna generuje z´znam v transakˇn´ logu z a e a c ım 3 pˇi zaplnˇn´ segmentu (16MB) se archivuje (NFS, ...) r e ı 4 archivovan´ segment se aplikuje na slave datab´zi y a 5 v´sledkem je bin´rn´ kopie y a ı T. Vondra (CSPUG) Replikace v PostgreSQL
  • 10. Fyzick´ replikace / Streaming replication a 1 UPDATE znamen´ zmˇnu nˇkolika datov´ch blok˚ a e e y u 2 kaˇd´ zmˇna generuje z´znam v transakˇn´ logu z a e a c ım 3 z´znamy se (asynchronnˇ) pˇen´ˇ´ do slave datab´ze a e r ası a 4 zmˇny se aplikuj´ e ı 5 v´sledkem je (opˇt) bin´rn´ kopie y e a ı T. Vondra (CSPUG) Replikace v PostgreSQL
  • 11. Warm standby vs. Hot standby warm standby datab´ze nastartovan´ v “recovery m´du” a a o pˇij´ a z master datab´ze zmˇny a aplikuje je r ım´ a e slouˇ´ jen pro HA - nelze se pˇipojit a spouˇtˇt dotazy zı r se hot standby datab´ze nastartovan´ v “read-only m´du” a a o lze spouˇtˇt read-only dotazy (nedostane XID) se T. Vondra (CSPUG) Replikace v PostgreSQL
  • 12. Logick´ replikace a ne aplikace bin´rn´ zmˇn bez znalosti struktury dat a ıch e aplikace logick´ch operac´ (INSERT/UPDATE/DELETE) y ı klady replikace jen ˇ´sti datab´ze (napˇ. jedna tabulka) ca a r replikace do jin´ verze / jin´ DB (uprage a migrace) e e umoˇnuje multi-master replikaci zˇ z´pory a n´roˇnˇjˇ´ na nastaven´ i na zdroje a c e sı ı nutnost ˇeˇen´ konflikt˚ (specifick´ dle aplikace) r s ı u e T. Vondra (CSPUG) Replikace v PostgreSQL
  • 13. Logick´ replikace / zp˚soby implementace a u log vˇech SQL / opakovan´ aplikace na repliku s a zpˇtn´ interpretace xlog z´znam˚ e a a u triggery proxy zachycuj´ ı SQL ıc´ T. Vondra (CSPUG) Replikace v PostgreSQL
  • 14. Replikace nenahrazuje z´lohov´n´ a a ı replikuje se vˇechno (vˇetnˇ omyl˚) s c e u hacker, idiot, unit test omylem na produkˇn´ DB c ı DROP DATABASE, DELETE, ... Z´lohujte! Z´lohujte! Z´lohujte! a a a T. Vondra (CSPUG) Replikace v PostgreSQL
  • 15. Replikace v PostgreSQL Historie, souˇasnost a budoucnost c T. Vondra (CSPUG) Replikace v PostgreSQL
  • 16. Historie replikace v PostgreSQL “Unixov´ mentalita” core teamu a menˇ´ flexibiln´ n´stroje, moˇnost kombinace sı ı a z mnoho moˇnost´ implementace - radˇji externˇ z ı e e odpor k pˇid´v´n´ takov´ch vlastnost´ r a a ı y ı do verze 8.4 (vˇetnˇ) c e XLog file shipping replikace + “warm standby” (HA) zaj´ ımav´ extern´ n´stroje (Bucardo, Londiste, slony-I, ...) e ı a verze 9.0 asynchronn´ XLog streaming replikace ı moˇnost “hot standby” z verze 9.1 synchronn´ XLog streaming replikace ı T. Vondra (CSPUG) Replikace v PostgreSQL
  • 17. Zabudovan´ replikace a fyzick´ (a)synchronn´ replikace a ı rozpor mezi n´roky na HA a reporting (zab´ ı queries) a ıjen´ trochu probl´m pˇi ´mrt´ mastera (s v´ slavy) e r u ı ıce T. Vondra (CSPUG) Replikace v PostgreSQL
  • 18. HA vs. reporting / query cancellation high-availability c´ ılem je minim´ln´ delay oproti masteru (kv˚li failoveru) a ı u reporting dlouho bˇˇ´ ı dotazy nad velk´mi datov´mi objemy ezıc´ y y dotaz potˇebuje blok kter´ se zmˇnil − je zabit r y e → rychl´ aplikace zmˇn − vˇtˇ´ pravdˇpodobnost zabit´ a e → e sı e ı zaj´ ımav´ nastaven´ a ı vacuum defer cleanup age (master) hot standby feedback (standby) T. Vondra (CSPUG) Replikace v PostgreSQL
  • 19. HA vs. reporting / query cancellation ˇeˇen´ - dva slaves, jeden pro HA a druh´ pro reporting r s ı y T. Vondra (CSPUG) Replikace v PostgreSQL
  • 20. Demo 1 vytvoˇıme a nakonfigurujeme mastera r´ 2 vytvoˇıme slave, napoj´ na master r´ ıme 3 provedeme nˇco na masterovi e 4 pod´ ame se jak se to zpropagovalo na slave ıv´ 5 zkus´ nˇjak´ dotazy nad slave (read / write) ıme e e 6 zastav´ mastera ıme 7 provedeme failover T. Vondra (CSPUG) Replikace v PostgreSQL
  • 21. Demo / master postgresql.conf listen_addresses = ’127.0.0.1’ port = 5432 # archivn´ reˇim ı z wal_level = hot_standby max_wal_senders = 10 # archivn´ reˇim ı z 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 T. Vondra (CSPUG) Replikace v PostgreSQL
  • 22. 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ˇen´ recovery (touch) c ı trigger_file = ’/var/pg9/failover’ # naˇten´ z archivu log˚ c ı u restore_command = ’cp /var/pg9/archive/%f "%p"’ T. Vondra (CSPUG) Replikace v PostgreSQL
  • 23. Nev´hody zabudovan´ replikace y e 1 slave je jen pro ˇten´ c ı nenapln´ si TEMP tabulku (probl´m pro reporting) ıte e nenaˇtete hodnotu ze sekvence c nelze udˇlat standardn´ z´lohu e ı a 2 ne ´plnˇ elegantn´ monitoring u e ı lag replikace na slave se d´ monitorovat pˇes “ps” a r v´raznˇ se zlepˇ´ ve verzi 9.1 y e sı 3 nelze dˇlat kask´du (vˇichni vis´ na jednom masterovi) e a s ı T. Vondra (CSPUG) Replikace v PostgreSQL
  • 24. Extern´ n´stroje ı a typ technika M/M M/S sync async PostgreSQL 9.0 fyzick´ a xlog ne ano ne ano PostgreSQL 9.1 fyzick´ a xlog ne ano ano ano Londiste logick´ a triggers ne ano ne ano Bucardo logick´ a triggers ano ano ne ano slony-I logick´ a triggers ne ano ne ano pgpool-II logick´ a proxy ano* ne* ano ne Postgres-XC cluster - ano ne ne ano * u proxy kategorie jako master nebo slave nemaj´ ´plnˇ smysl ıu e T. Vondra (CSPUG) Replikace v PostgreSQL
  • 25. Londiste naps´no Skype, souˇ´st SkyTools (i dalˇ´ n´stroje) a ca sı a implementov´no v Pythonu (jako skoro vˇe ve Skype) a s 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
  • 26. Bucardo http://bucardo.org/ triggery a d´mon - implementov´no v Perlu (PL/Perl) e a zaloˇeno na LISTEN/NOTIFY z transakˇn´ notifikace zabudovan´ pˇımo do DB c ı e r´ jednoduch´ komunikace sessions pˇes frontu a r nedok´ˇe replikovat DDL (nejsou DDL triggery) az master to master - aktu´lnˇ jen dva mastery a e master to many slaves T. Vondra (CSPUG) Replikace v PostgreSQL
  • 27. pgpool-II http://pgpool.projects.postgresql.org/ pouˇ´ a proxy koncept (statement-based middleware) zıv´ spojuje nˇkolik pokroˇil´ch vlastnost´ e c y ı connection pooling replikace (vˇetnˇ online recovery) c e load balancing (rozhazov´n´ queries na repliky) a ı parallel queries (distribuovan´ tabulky) e nˇkolik m´d˚, ne vˇdy je moˇno vˇe (parallel vs. failover) e o u z z s pokud chcete HA ˇeˇen´ jsou asi jednoduˇˇ´ n´stroje r s ı, ssı a T. Vondra (CSPUG) Replikace v PostgreSQL
  • 28. slony-I http://slony.info/ master-slave replikace (max. 20 subscriber˚) u zaloˇeno na triggerech a C funkc´ z ıch plusy 5 let zkuˇenost´ z provozu s ı t´mˇˇ kompletn´ ˇeˇen´ (failover, provisioning, ...) e er ır s ı m´ ınusy fronta ud´lost´ je ˇeˇena pˇes tabulku (nutno VACUUM) a ı r s r vyˇˇ´ overhead neˇ ˇeˇen´ s jinak ˇeˇenou frontou ssı zr s ı r s komplexn´ - sloˇit´ nastaven´ obt´zn´ ˇeˇen´ probl´m˚ ı z e ı, ıˇ e r s ı e u T. Vondra (CSPUG) Replikace v PostgreSQL
  • 29. Jin´ DB e Oracle & MySQL T. Vondra (CSPUG) Replikace v PostgreSQL
  • 30. Jin´ DB / Oracle e DataGuard pouˇ´ a XLog, dva m´dy - “Redo Apply” a “SQL Apply” zıv´ o Redo Apply - fyzick´ replikace (= streaming replikace) a SQL Apply - logick´ replikace, obohacen´ XLog, r˚zn´ a y u a omezen´ (ne vˇechny objekty, ne vˇechny datov´ typy) ı s s e Active Data Guard (dalˇ´ $) umoˇnuje “hot standby” sı zˇ Streams logick´ replikace, postaven´ nad Advanced Queueing a a obecnˇ n´stroj pro distribuci informac´ (ne jen replikace) e a ı GoldenGate log-based logick´ replikace pro heterogenn´ prostˇed´ a ı r ı (Oracle, DB2, MSSQL, MySQL, ...) Oracle doporuˇuje jako n´hradu za Streams c a T. Vondra (CSPUG) Replikace v PostgreSQL
  • 31. Jin´ DB / MySQL e asynchronn´ logick´ master-slave replikace (od 5.5 ı a semi-synchronn´ı) postaveno na tzv. “binlogu” (statement-based log) statement-based (SBR) loguje kompletn´ SQL pˇıkazy (kter´ zmˇnily data) ı r´ e e ne vˇechny SQL pˇıkazy jsou “bezpeˇn´” s r´ c e row-based (RBR) loguj´ se fin´ln´ zmˇny jednotliv´ch ˇ´dk˚ ı a ı e y ra u bezpeˇnˇjˇ´ ale vˇtˇ´ objem dat neˇ SBR c e sı e sı z mixed-based (MBR) SBR nebo RBR podle typu eventu MySQL Cluster (NDB engine) - synchronn´ replikace ı zaloˇen´ na 2PC (ne na binlogu) z a T. Vondra (CSPUG) Replikace v PostgreSQL
  • 32. 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
  • 33. 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