SlideShare una empresa de Scribd logo
1 de 54
Descargar para leer sin conexión
Bucardo:
                            Replication with
                            tiny little goats
                                             Selena Deckelmann
                                            selena@endpoint.com
en
 dp
  oi
     nt
        .c
       om




http://www.flickr.com/photos/kevincollins/
Hi!

             ★   Software Engineer / Postgres Lead
                 http://endpoint.com
             ★   We’re hiring! http://tr.im/EMGj
en
dp
 oi
     nt
        .c
       om
en
dp




       http://www.telegraph.co.uk/science/science-news/4409958/Extinct-ibex-is-
 oi
     nt
        .c




                             resurrected-by-cloning.html
       om
What can it do?
en
dp
 oi
     nt
        .c




     http://www.flickr.com/photos/8602783@N06/2294028540
       om
Master-slave

             • Scaling/Redundancy
             • UPGRADES (8.x -> 8.4)
             • Reporting databases
             • Data warehousing
             • Now handles SEQUENCES!
en
dp
 oi
     nt
        .c
       om
Master-master

             • Write between both databases!
             • Sync type: SWAP
             • Conflict resolution
en
dp
 oi
     nt
        .c
       om
Custom code

             • Respond to change
             • Filter
             • Run arbitrary code!
en
dp
 oi
     nt
        .c
       om
STORY TIME!
                                       item
                                         ski
                                        item
                                          ski
                                          item
                                            ski
                                           item
                                             item
                                             ski
                                               item
                                               ski
             item     onhand
                                                 ski
                                                 item
               skis      10
                                                   ski
                                                   item
                                                     ski
                                                     item
                                                       ski
                                                       item
                                                         ski
               on hand = count(item)
en
dp
 oi
     nt
        .c
       om
prod db
                                                                               reporting db
     new!
             item         NOTIFY bucardo
              ski
                                                         sync B                new!
                                                                                         item
                                                            syn                            ski
                                                                  cC
                                                                                      on hand
                              cA


                                        Y
                                      TIF                                                  +1
                           syn

                                    NO

             custom
              code


                       count(items)
                      and other stuff
en
dp
 oi
     nt
        .c
       om




                                            goat courtesy of: http://www.flickr.com/photos/nuritwilde/394603312
Strengths

             • Drop-in, no changes to Postgres
             • Control daemon/DB can run anywhere
             • EXTREME async
             • No locking of slaves
             • Command-line controls rock!
en
dp
 oi
     nt
        .c
       om
The Fine Print
             • No smooth DDL handling
             • Not for failover (aka high availability)
             • bloat: pg_listener, q, bucardo_delta,
               bucardo_track
             • No locking of slaves
             • No Windows support
             • One developer
en
dp
 oi
     nt
        .c
       om




                                             http://www.flickr.com/photos/ncarey/135901120/
en
dp
 oi
     nt
        .c




     http://wiki.postgresql.org/wiki/Replication,_Clustering,_and_Connection_Pooling
       om
Bucardo
 Concepts
en
dp
 oi
     nt
        .c
       om




             http://www.flickr.com/photos/kendrick/361173694
Glossary of terms
             • replication: copying data from one place to
               another
             • DDL: Data Definition Language (CREATE/
               DROP/ALTER)
             • DML: Data Manipulation Language (SELECT/
               INSERT/UPDATE/DELETE)
             • triggers: bits of code run before or after DML
en
dp
 oi
     nt
        .c
       om
Glossary of terms

             • goat: a database object (table or sequence)
             • herd: table contains unique name for a group of
               goats
             • syncs: replication events (one herd per sync)
en
dp
 oi
     nt
        .c
       om
flexible architecture
                         bucardo control
                            database




             master DB                     slave DB
en
dp
 oi
     nt
        .c
       om
flexible architecture
             same db
                              bucardo control
              cluster            database




                  master DB                     slave DB
en
dp
 oi
     nt
        .c
       om
flexible architecture
             same db cluster
                 bucardo control
                    database




                   master DB       slave DB
en
dp
 oi
     nt
        .c
       om
flexible architecture
                         same db cluster
                             bucardo control
                                database




             master DB          slave DB
en
dp
 oi
     nt
        .c
       om
Installing
en
dp
 oi
     nt
        .c
       om




                  http://www.flickr.com/photos/kendrick/361173694
Bucardo Requirements
             • Postgres (8.3 or higher recommended)
             • Perl & some packages:
              •   DBD::Pg 2.0

              •   DBI 1.51

              •   DBIx::Safe 1.2.4

              •   ExtUtils::MakeMaker 6.32

             • pl/perlu and pl/pgsql
en
dp
 oi
     nt
        .c
       om
Simple set up


             BUCARDO CONTROL database setup:
             bucardo_ctl install
en
dp
 oi
     nt
        .c
       om
Simple set up

             MASTER setup:
             bucardo_ctl add db MyDB name=master
             bucardo_ctl add all tables herd=all_tables
             bucardo_ctl add all sequences herd=all_tables

             SLAVE setup:
             bucardo_ctl add db MyDB name=slave port=6543
en
dp
 oi
     nt
        .c
       om
Setting up, cont.
             TEST:
             bucardo_ctl validate all

             REPLICATE:
             bucardo_ctl add sync delta
              type=pushdelta source=all_tables
              targetdb=slave
             bucardo_ctl start

             (installs triggers!)
en
dp
 oi
     nt
        .c
       om
Setting up

             • Initiate a one-time-copy: onetimecopy=[1|2]
             • Set up ongoing syncs: enabled by default
               (can set timeouts)
             • MANY configuration options
en
dp
 oi
     nt
        .c
       om
Admin stuff

             • Can set up defaults in .bucardorc
             • Only need one ‘bucardo’ database
             • Uses the ‘bucardo’ schema in replication
               sets for ease of admin, removal
en
dp
 oi
     nt
        .c
       om
Smooth upgrades!

             bucardo_ctl upgrade
             • Stop bucardo first (bucardo_ctl   stop)

             • applies DDL changes, functions
             • see also UPGRADE file
en
dp
 oi
     nt
        .c
       om
Stuff to watch out for

             • search_path for ‘bucardo’ user
             • PL/Perlu & pl/pgsql must be installed
             • Uses prepared statements, turn off with:
               bucardo_ctl update db MyDB
               server_side_prepares=0
en
dp
 oi
     nt
        .c
       om
LIVE DEMO!


             • http://github.com/selenamarie/
               bucardo_examples
en
dp
 oi
     nt
        .c
       om
Internals
en
dp
 oi
     nt




                  http://www.flickr.com/photos/chelseagirlphotos
        .c
       om
Internals
             bucardo=# d
                                    List of relations
              Schema |               Name             |   Type   | Owner
             ---------+-------------------------------+----------+---------
              bucardo | audit_pid                     | table    | bucardo
              bucardo | audit_pid_id_seq              | sequence | bucardo
              bucardo | bucardo_config                | table    | bucardo
              bucardo | bucardo_custom_trigger        | table    | bucardo
              bucardo | bucardo_custom_trigger_id_seq | sequence | bucardo
              bucardo | bucardo_log_message           | table    | bucardo
              bucardo | bucardo_rate                  | table    | bucardo
              bucardo | customcode                    | table    | bucardo
              bucardo | customcode_id_seq             | sequence | bucardo
              bucardo | customcode_map                | table    | bucardo
              bucardo | db                            | table    | bucardo
              bucardo | db_connlog                    | table    | bucardo
              bucardo | dbgroup                       | table    | bucardo
              bucardo | dbmap                         | table    | bucardo
              bucardo | goat                          | table    | bucardo
              bucardo | goat_id_seq                   | sequence | bucardo
              bucardo | herd                          | table    | bucardo
              bucardo | herdmap                       | table    | bucardo
              bucardo | q                             | table    | bucardo
              bucardo | sync                          | table    | bucardo
              bucardo | upgrade_log                   | table    | bucardo
en




             (21 rows)
dp
 oi
     nt
        .c
       om
goats
         Table "bucardo.goat"
                  Column       |           Type           |
         ----------------------+--------------------------+
          id                   | integer                  |
          db                   | text                     |
          schemaname           | text                     |
          tablename            | text                     |
          reltype              | text                     |
          pkey                 | text                     |
          qpkey                | text                     |
          pkeytype             | text                     |
          has_delta            | boolean                  |
          ping                 | boolean                  |
          ...
en
dp
 oi
     nt
        .c
       om
goats

 # bucardo_ctl list tables
 Table: archive.course_logging        DB:   odw_master   PK:   none
 Table: archive.messages              DB:   odw_master   PK:   none
 Table: archive.student_assignments   DB:   odw_master   PK:   none
 Table: archive.student_courses       DB:   odw_master   PK:   none
 Table: logging.activity              DB:   odw_master   PK:   activity_name (varchar)
 Table: logging.course_logging        DB:   odw_master   PK:   course_logging_id (int4)
 Table: public.ecash_transaction      DB:   odw_master   PK:   trans_id (int4)
 Table: public.feedback               DB:   odw_master   PK:   date (timestamp)
 Table: public.holidays               DB:   odw_master   PK:   customernum|month|day|
 year (int4|int4|int4|int4)
 ...
en
dp
 oi
     nt
        .c
       om
bucardo_ctl list sequences
Sequence     63:   logging.logging_seq
Sequence     64:   public.trans_id_seq
Sequence     65:   public.num_seq
Sequence     66:   public.upload_seq
en
dp
 oi
     nt
        .c
       om
bucardo database
             bucardo=# d
                                    List of relations
              Schema |               Name             |   Type   | Owner
             ---------+-------------------------------+----------+---------
             ...
              bucardo | db                            | table    | bucardo
              bucardo | db_connlog                    | table    | bucardo
              bucardo | dbgroup                       | table    | bucardo
              bucardo | dbmap                         | table    | bucardo
              bucardo | goat                          | table    | bucardo
              bucardo | goat_id_seq                   | sequence | bucardo
              bucardo | herd                          | table    | bucardo
              bucardo | herdmap                       | table    | bucardo
              bucardo | q                             | table    | bucardo
              bucardo | sync                          | table    | bucardo
              bucardo | upgrade_log                   | table    | bucardo
             (21 rows)
en
dp
 oi
     nt
        .c
       om
Status

      # bucardo_ctl status
      Days back: 3 User: bucardo Database: bucardo Port: 8000
        PID of Bucardo MCP: 6876
      Name     Type State PID Last_good Time I/U/D Last_bad Time
      ========+=====+=====+====+=========+=====+=====+========+====
      a_delta | P   |idle |6886|1m4s     |0s   |0/0/0|unknown |
      b_delta | P   |idle |6885|1m4s     |0s   |0/0/0|9h32m47s|0s
      c_delta | P   |idle |6887|1m4s     |0s   |0/0/0|unknown |
      d_delta | P   |idle |6888|54s      |0s   |0/0/0|2m6s    |3s
      e_delta | P   |idle |6890|1m4s     |0s   |0/0/0|9h32m47s|0s
      f_delta | P   |idle |6889|1m4s     |0s   |0/0/0|9h32m47s|0s
en
dp
 oi
     nt
        .c
       om
# bucardo_ctl status a_delta
             Days back: 3 User: bucardo Database: bucardo Port: 8000
             ======================================================================
             Sync name:            a_delta
             Current state:        idle (PID = 6888)
             Type:                 pushdelta
             Source herd/database: all_a / a_master
             Target database:      a_slave
             Tables in sync:       26
             Last good:            3m 34s (time to run: 0s)
             Last good time:       Oct 16, 2009 17:52:20 Target: a_slave
             Ins/Upd/Del:          20 / 0 / 50
             Last bad:             4m 47s (time to run: 3s)
             Last bad time:        Oct 16, 2009 17:51:08 Target: a_slave
             Latest bad reason: ?
             PID file:             /var/run/bucardo/bucardo.ctl.sync.a_delta.pid
             PID file created:     Fri Oct 16 17:52:09 2009
             Status:               active
             Limitdbs:             0
             Priority:             0
             Checktime:            none
             Overdue time:         00:00:00
             Expired time:         00:00:00
             Stayalive:            yes       Kidsalive: yes
             Rebuild index:        0         Do_listen: yes
             Ping:                 yes       Makedelta: no
en
dp




             Onetimecopy:          0
 oi
     nt
        .c
       om
How Bucardo replicates
en
dp
 oi
     nt
        .c
       om
Triggers
 INSERT, UPDATE, DELETE


                          bucardo_add_delta
                                 IN
                                   SE
                                      RT


                                           bucardo_delta


                          bucardo_triggerkick_[sync]



                                                 NOTIFY!
en
dp
 oi
     nt
        .c    om
NOTIFY / LISTEN
             • Simple interprocess communication
               psql# LISTEN scotch;
               psql# NOTIFY scotch;
               Asynchronous notification "scotch"
               received from server process with PID
               1337.
             • Any Postgres process can listen in
en
dp
 oi
     nt
        .c
       om
Actual Triggers!
              Table "public.test"
  Column |          Type          | Modifiers
 --------+-----------------------+-----------
  test    | character varying(15) | not null
 Indexes:
     "test_pkey" PRIMARY KEY, btree ("test")
 Triggers:
     bucardo_add_delta AFTER INSERT OR DELETE OR
 UPDATE ON test FOR EACH ROW EXECUTE PROCEDURE
 bucardo_add_delta_role()
     bucardo_triggerkick_a_delta AFTER INSERT OR
 DELETE OR UPDATE ON test FOR EACH STATEMENT
 EXECUTE PROCEDURE bucardo_triggerkick_a_delta()
en
dp
 oi
     nt
        .c
       om
Bucardo

                             NOTIFY         NOTIFY
             NOTIFY    MCP            CTL              KID
TRIGGER


                      INSERT INTO “q”

                                  SELECT from “q”
                                    UPDATE “q”


             Flow of control                         REPLICATION
en




                                                        EVENT!
dp
 oi
     nt
        .c
       om
How Syncs happen

             • NOTIFY vs. timeout vs. kick
              • NOTIFY - from master db to MCP
              • timeout - controller detects
              • kick - manual/from MCP to controller
en
dp
 oi
     nt
        .c
       om
Processes!
             • MCP, CTL, KID
              • MCP: master control process
              • CTL: controller (track, kick off/kill KIDs)
              • KID: sync processes
en
dp
 oi
     nt
        .c
       om
Administrativa

             • Totally ok to kill KIDs
             • CTL cleans up after you
             • May need to kill open database handles (for
               unfinished COPYs, etc)
en
dp
 oi
     nt
        .c
       om
Other interesting tables

              On your master DB:
              • bucardo_delta table has: ID, txn_time
              • bucardo_track table: who’s done what?
en
dp
 oi
     nt
        .c
       om
Sync types

             • Fullcopy. Timeout/kick. TRUNCATE or
               DELETE, then COPY
             • Pushdelta. Trigger. One way master-slave.
             • Swap. Trigger. Two-way. Conflict resolution.
en
dp
 oi
     nt
        .c
       om
Note about triggers:
             • canonical way to disable triggers:
               ALTER TABLE DISABLE TRIGGER ALL;
               :(
             • pre 8.3 way: UPDATE pg_class..
             • SET session_replication_role = ‘replica’;
              • Applies to just the current session
              • Thanks, Jan!
en
dp
 oi
     nt
        .c
       om
Dealing with failure

             • Troubleshooting
             • Backing up Bucardo itself
             • What happens when you lose the
               Bucardodb?
en
dp
 oi
     nt
        .c
       om
Bucardo hooks

             • LIVE DATA CHANGES!
             • pass in a hashref (ROW or ROWINFO)
             • Returned value - bitmapped (a/b or both!)
             • Affect the replication event, side effects
             • Example: cache invalidation
en
dp
 oi
     nt
        .c
       om
Bucardo Hooks

             • customcode & customcode_map
              • Conflict handlers (SWAP syncs)
              • Pure Perl
              • Exception - fix and try again
              • Pre and post trigger
en
dp
 oi
     nt
        .c
       om
Development

             • bucardo.org
             • mailing lists: http://bucardo.org/wiki/
               Bucardo_mailing_list
             • Release early, often.
             • Please submit patches! bug reports! tests!
en
dp
 oi
     nt
        .c
       om
Questions?
                          .com
                       nt
                  oi
               dp
             en
Thanks!

             http://www.slideshare.net/selenamarie/bucardo
             selena@endpoint.com
             @selenamarie on Twitter
             rss: http://www.chesnok.com/daily
en
dp
 oi
     nt
        .c
       om

Más contenido relacionado

La actualidad más candente

Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例
Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例
Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例Yahoo!デベロッパーネットワーク
 
すごく分かるwarden
すごく分かるwardenすごく分かるwarden
すごく分かるwardeni_yudai
 
AmebaのMongoDB活用事例
AmebaのMongoDB活用事例AmebaのMongoDB活用事例
AmebaのMongoDB活用事例Akihiro Kuwano
 
MySQLのバックアップ運用について色々
MySQLのバックアップ運用について色々MySQLのバックアップ運用について色々
MySQLのバックアップ運用について色々yoku0825
 
NOSQLの基礎知識(講義資料)
NOSQLの基礎知識(講義資料)NOSQLの基礎知識(講義資料)
NOSQLの基礎知識(講義資料)CLOUDIAN KK
 
アーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションアーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションMasahiko Sawada
 
Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術まで
 Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術まで Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術まで
Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術までAkihiro Suda
 
日本OpenStackユーザ会 第37回勉強会
日本OpenStackユーザ会 第37回勉強会日本OpenStackユーザ会 第37回勉強会
日本OpenStackユーザ会 第37回勉強会Yushiro Furukawa
 
KubeCon + CloudNativeCon Europe 2022 Recap / Kubernetes Meetup Tokyo #51 / #k...
KubeCon + CloudNativeCon Europe 2022 Recap / Kubernetes Meetup Tokyo #51 / #k...KubeCon + CloudNativeCon Europe 2022 Recap / Kubernetes Meetup Tokyo #51 / #k...
KubeCon + CloudNativeCon Europe 2022 Recap / Kubernetes Meetup Tokyo #51 / #k...Preferred Networks
 
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48Preferred Networks
 
Monitoring Kafka without instrumentation using eBPF with Antón Rodríguez | Ka...
Monitoring Kafka without instrumentation using eBPF with Antón Rodríguez | Ka...Monitoring Kafka without instrumentation using eBPF with Antón Rodríguez | Ka...
Monitoring Kafka without instrumentation using eBPF with Antón Rodríguez | Ka...HostedbyConfluent
 
TripleOの光と闇
TripleOの光と闇TripleOの光と闇
TripleOの光と闇Manabu Ori
 
OpenStackで始めるクラウド環境構築入門 Havana&DevStack編
OpenStackで始めるクラウド環境構築入門 Havana&DevStack編OpenStackで始めるクラウド環境構築入門 Havana&DevStack編
OpenStackで始めるクラウド環境構築入門 Havana&DevStack編VirtualTech Japan Inc.
 
Interrupt Affinityについて
Interrupt AffinityについてInterrupt Affinityについて
Interrupt AffinityについてTakuya ASADA
 
dm-writeboost-kernelvm
dm-writeboost-kernelvmdm-writeboost-kernelvm
dm-writeboost-kernelvmAkira Hayakawa
 
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)NTT DATA Technology & Innovation
 
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)Hironobu Suzuki
 
Pcapngを読んでみる
Pcapngを読んでみるPcapngを読んでみる
Pcapngを読んでみるYagi Shinnosuke
 

La actualidad más candente (20)

Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例
Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例
Yahoo!ニュースにおけるBFFパフォーマンスチューニング事例
 
How to run P4 BMv2
How to run P4 BMv2How to run P4 BMv2
How to run P4 BMv2
 
すごく分かるwarden
すごく分かるwardenすごく分かるwarden
すごく分かるwarden
 
AmebaのMongoDB活用事例
AmebaのMongoDB活用事例AmebaのMongoDB活用事例
AmebaのMongoDB活用事例
 
MySQLのバックアップ運用について色々
MySQLのバックアップ運用について色々MySQLのバックアップ運用について色々
MySQLのバックアップ運用について色々
 
NOSQLの基礎知識(講義資料)
NOSQLの基礎知識(講義資料)NOSQLの基礎知識(講義資料)
NOSQLの基礎知識(講義資料)
 
アーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションアーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーション
 
Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術まで
 Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術まで Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術まで
Dockerセキュリティ: 今すぐ役に立つテクニックから,次世代技術まで
 
日本OpenStackユーザ会 第37回勉強会
日本OpenStackユーザ会 第37回勉強会日本OpenStackユーザ会 第37回勉強会
日本OpenStackユーザ会 第37回勉強会
 
KubeCon + CloudNativeCon Europe 2022 Recap / Kubernetes Meetup Tokyo #51 / #k...
KubeCon + CloudNativeCon Europe 2022 Recap / Kubernetes Meetup Tokyo #51 / #k...KubeCon + CloudNativeCon Europe 2022 Recap / Kubernetes Meetup Tokyo #51 / #k...
KubeCon + CloudNativeCon Europe 2022 Recap / Kubernetes Meetup Tokyo #51 / #k...
 
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
わかる!metadata.managedFields / Kubernetes Meetup Tokyo 48
 
Monitoring Kafka without instrumentation using eBPF with Antón Rodríguez | Ka...
Monitoring Kafka without instrumentation using eBPF with Antón Rodríguez | Ka...Monitoring Kafka without instrumentation using eBPF with Antón Rodríguez | Ka...
Monitoring Kafka without instrumentation using eBPF with Antón Rodríguez | Ka...
 
TripleOの光と闇
TripleOの光と闇TripleOの光と闇
TripleOの光と闇
 
OpenStackで始めるクラウド環境構築入門 Havana&DevStack編
OpenStackで始めるクラウド環境構築入門 Havana&DevStack編OpenStackで始めるクラウド環境構築入門 Havana&DevStack編
OpenStackで始めるクラウド環境構築入門 Havana&DevStack編
 
Interrupt Affinityについて
Interrupt AffinityについてInterrupt Affinityについて
Interrupt Affinityについて
 
dm-writeboost-kernelvm
dm-writeboost-kernelvmdm-writeboost-kernelvm
dm-writeboost-kernelvm
 
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
 
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
 
PostgreSQL Replication with Bucardo
PostgreSQL Replication with BucardoPostgreSQL Replication with Bucardo
PostgreSQL Replication with Bucardo
 
Pcapngを読んでみる
Pcapngを読んでみるPcapngを読んでみる
Pcapngを読んでみる
 

Destacado (14)

Phyto-oils
Phyto-oilsPhyto-oils
Phyto-oils
 
Principi di grafica
Principi di graficaPrincipi di grafica
Principi di grafica
 
Un lindo mensaje
Un lindo mensajeUn lindo mensaje
Un lindo mensaje
 
我行·你行·大家行03
我行·你行·大家行03我行·你行·大家行03
我行·你行·大家行03
 
我行·你行·大家行02
我行·你行·大家行02我行·你行·大家行02
我行·你行·大家行02
 
Process Groups
Process GroupsProcess Groups
Process Groups
 
Cand...
Cand...Cand...
Cand...
 
Generations atworkmodernsamplefinal
Generations atworkmodernsamplefinalGenerations atworkmodernsamplefinal
Generations atworkmodernsamplefinal
 
Powerpoint LiveWIRE 2009
Powerpoint LiveWIRE 2009Powerpoint LiveWIRE 2009
Powerpoint LiveWIRE 2009
 
Zambetul
ZambetulZambetul
Zambetul
 
Criza
CrizaCriza
Criza
 
Letters from the open source trenches - Postgres community
Letters from the open source trenches - Postgres communityLetters from the open source trenches - Postgres community
Letters from the open source trenches - Postgres community
 
Foldervisie
FoldervisieFoldervisie
Foldervisie
 
Retrospectiva
RetrospectivaRetrospectiva
Retrospectiva
 

Similar a Bucardo

Cacheconcurrencyconsistency cassandra svcc
Cacheconcurrencyconsistency cassandra svccCacheconcurrencyconsistency cassandra svcc
Cacheconcurrencyconsistency cassandra svccsrisatish ambati
 
Dynamic Change Data Capture with Flink CDC and Consistent Hashing
Dynamic Change Data Capture with Flink CDC and Consistent HashingDynamic Change Data Capture with Flink CDC and Consistent Hashing
Dynamic Change Data Capture with Flink CDC and Consistent HashingHostedbyConfluent
 
Dynamic Change Data Capture with Flink CDC and Consistent Hashing
Dynamic Change Data Capture with Flink CDC and Consistent HashingDynamic Change Data Capture with Flink CDC and Consistent Hashing
Dynamic Change Data Capture with Flink CDC and Consistent HashingYaroslav Tkachenko
 
MongoDB Basic Concepts
MongoDB Basic ConceptsMongoDB Basic Concepts
MongoDB Basic ConceptsMongoDB
 
Ensuring High Availability for Real-time Analytics featuring Boxed Ice / Serv...
Ensuring High Availability for Real-time Analytics featuring Boxed Ice / Serv...Ensuring High Availability for Real-time Analytics featuring Boxed Ice / Serv...
Ensuring High Availability for Real-time Analytics featuring Boxed Ice / Serv...MongoDB
 
MongoDB: Optimising for Performance, Scale & Analytics
MongoDB: Optimising for Performance, Scale & AnalyticsMongoDB: Optimising for Performance, Scale & Analytics
MongoDB: Optimising for Performance, Scale & AnalyticsServer Density
 
The DynaSlave Plugin
The DynaSlave PluginThe DynaSlave Plugin
The DynaSlave PluginBrian Moyles
 
London Spark Meetup Project Tungsten Oct 12 2015
London Spark Meetup Project Tungsten Oct 12 2015London Spark Meetup Project Tungsten Oct 12 2015
London Spark Meetup Project Tungsten Oct 12 2015Chris Fregly
 
Scylla Summit 2018: Keynote - 4 Years of Scylla
Scylla Summit 2018: Keynote - 4 Years of ScyllaScylla Summit 2018: Keynote - 4 Years of Scylla
Scylla Summit 2018: Keynote - 4 Years of ScyllaScyllaDB
 
Games for the Masses (Jax)
Games for the Masses (Jax)Games for the Masses (Jax)
Games for the Masses (Jax)Wooga
 
Scale-Out Using Spark in Serverless Herd Mode!
Scale-Out Using Spark in Serverless Herd Mode!Scale-Out Using Spark in Serverless Herd Mode!
Scale-Out Using Spark in Serverless Herd Mode!Databricks
 
Scalable Elastic Systems Architecture (SESA)
Scalable Elastic Systems Architecture (SESA)Scalable Elastic Systems Architecture (SESA)
Scalable Elastic Systems Architecture (SESA)Eric Van Hensbergen
 

Similar a Bucardo (14)

Bucardo
BucardoBucardo
Bucardo
 
Ruby's GC 20
Ruby's GC 20Ruby's GC 20
Ruby's GC 20
 
Cacheconcurrencyconsistency cassandra svcc
Cacheconcurrencyconsistency cassandra svccCacheconcurrencyconsistency cassandra svcc
Cacheconcurrencyconsistency cassandra svcc
 
Dynamic Change Data Capture with Flink CDC and Consistent Hashing
Dynamic Change Data Capture with Flink CDC and Consistent HashingDynamic Change Data Capture with Flink CDC and Consistent Hashing
Dynamic Change Data Capture with Flink CDC and Consistent Hashing
 
Dynamic Change Data Capture with Flink CDC and Consistent Hashing
Dynamic Change Data Capture with Flink CDC and Consistent HashingDynamic Change Data Capture with Flink CDC and Consistent Hashing
Dynamic Change Data Capture with Flink CDC and Consistent Hashing
 
MongoDB Basic Concepts
MongoDB Basic ConceptsMongoDB Basic Concepts
MongoDB Basic Concepts
 
Ensuring High Availability for Real-time Analytics featuring Boxed Ice / Serv...
Ensuring High Availability for Real-time Analytics featuring Boxed Ice / Serv...Ensuring High Availability for Real-time Analytics featuring Boxed Ice / Serv...
Ensuring High Availability for Real-time Analytics featuring Boxed Ice / Serv...
 
MongoDB: Optimising for Performance, Scale & Analytics
MongoDB: Optimising for Performance, Scale & AnalyticsMongoDB: Optimising for Performance, Scale & Analytics
MongoDB: Optimising for Performance, Scale & Analytics
 
The DynaSlave Plugin
The DynaSlave PluginThe DynaSlave Plugin
The DynaSlave Plugin
 
London Spark Meetup Project Tungsten Oct 12 2015
London Spark Meetup Project Tungsten Oct 12 2015London Spark Meetup Project Tungsten Oct 12 2015
London Spark Meetup Project Tungsten Oct 12 2015
 
Scylla Summit 2018: Keynote - 4 Years of Scylla
Scylla Summit 2018: Keynote - 4 Years of ScyllaScylla Summit 2018: Keynote - 4 Years of Scylla
Scylla Summit 2018: Keynote - 4 Years of Scylla
 
Games for the Masses (Jax)
Games for the Masses (Jax)Games for the Masses (Jax)
Games for the Masses (Jax)
 
Scale-Out Using Spark in Serverless Herd Mode!
Scale-Out Using Spark in Serverless Herd Mode!Scale-Out Using Spark in Serverless Herd Mode!
Scale-Out Using Spark in Serverless Herd Mode!
 
Scalable Elastic Systems Architecture (SESA)
Scalable Elastic Systems Architecture (SESA)Scalable Elastic Systems Architecture (SESA)
Scalable Elastic Systems Architecture (SESA)
 

Más de Selena Deckelmann

While we're here, let's fix computer science education
While we're here, let's fix computer science educationWhile we're here, let's fix computer science education
While we're here, let's fix computer science educationSelena Deckelmann
 
Mistakes were made - LCA 2012
Mistakes were made - LCA 2012Mistakes were made - LCA 2012
Mistakes were made - LCA 2012Selena Deckelmann
 
Postgres needs an aircraft carrier
Postgres needs an aircraft carrierPostgres needs an aircraft carrier
Postgres needs an aircraft carrierSelena Deckelmann
 
Harder, better, faster, stronger: PostgreSQL 9.1
Harder, better, faster, stronger: PostgreSQL 9.1Harder, better, faster, stronger: PostgreSQL 9.1
Harder, better, faster, stronger: PostgreSQL 9.1Selena Deckelmann
 
Own it: working with a changing open source community
Own it: working with a changing open source communityOwn it: working with a changing open source community
Own it: working with a changing open source communitySelena Deckelmann
 
Managing terabytes: When Postgres gets big
Managing terabytes: When Postgres gets bigManaging terabytes: When Postgres gets big
Managing terabytes: When Postgres gets bigSelena Deckelmann
 
Managing terabytes: When PostgreSQL gets big
Managing terabytes: When PostgreSQL gets bigManaging terabytes: When PostgreSQL gets big
Managing terabytes: When PostgreSQL gets bigSelena Deckelmann
 
How a bunch of normal people Used Technology To Repair a Rigged Election
How a bunch of normal people Used Technology To Repair a Rigged ElectionHow a bunch of normal people Used Technology To Repair a Rigged Election
How a bunch of normal people Used Technology To Repair a Rigged ElectionSelena Deckelmann
 
Open Source Bridge Opening Day
Open Source Bridge Opening DayOpen Source Bridge Opening Day
Open Source Bridge Opening DaySelena Deckelmann
 
What Assumptions Make: Filesystem I/O from a database perspective
What Assumptions Make: Filesystem I/O from a database perspectiveWhat Assumptions Make: Filesystem I/O from a database perspective
What Assumptions Make: Filesystem I/O from a database perspectiveSelena Deckelmann
 

Más de Selena Deckelmann (20)

While we're here, let's fix computer science education
While we're here, let's fix computer science educationWhile we're here, let's fix computer science education
While we're here, let's fix computer science education
 
Algorithms are Recipes
Algorithms are RecipesAlgorithms are Recipes
Algorithms are Recipes
 
Hire the right way
Hire the right wayHire the right way
Hire the right way
 
Mistakes were made - LCA 2012
Mistakes were made - LCA 2012Mistakes were made - LCA 2012
Mistakes were made - LCA 2012
 
Pg92 HA, LCA 2012, Ballarat
Pg92 HA, LCA 2012, BallaratPg92 HA, LCA 2012, Ballarat
Pg92 HA, LCA 2012, Ballarat
 
Managing terabytes
Managing terabytesManaging terabytes
Managing terabytes
 
Mistakes were made
Mistakes were madeMistakes were made
Mistakes were made
 
Postgres needs an aircraft carrier
Postgres needs an aircraft carrierPostgres needs an aircraft carrier
Postgres needs an aircraft carrier
 
Mistakes were made
Mistakes were madeMistakes were made
Mistakes were made
 
Harder, better, faster, stronger: PostgreSQL 9.1
Harder, better, faster, stronger: PostgreSQL 9.1Harder, better, faster, stronger: PostgreSQL 9.1
Harder, better, faster, stronger: PostgreSQL 9.1
 
How to ask for money
How to ask for moneyHow to ask for money
How to ask for money
 
Own it: working with a changing open source community
Own it: working with a changing open source communityOwn it: working with a changing open source community
Own it: working with a changing open source community
 
Managing terabytes: When Postgres gets big
Managing terabytes: When Postgres gets bigManaging terabytes: When Postgres gets big
Managing terabytes: When Postgres gets big
 
Managing terabytes: When PostgreSQL gets big
Managing terabytes: When PostgreSQL gets bigManaging terabytes: When PostgreSQL gets big
Managing terabytes: When PostgreSQL gets big
 
Pdxpugday2010 pg90
Pdxpugday2010 pg90Pdxpugday2010 pg90
Pdxpugday2010 pg90
 
Making Software Communities
Making Software CommunitiesMaking Software Communities
Making Software Communities
 
Illustrated buffer cache
Illustrated buffer cacheIllustrated buffer cache
Illustrated buffer cache
 
How a bunch of normal people Used Technology To Repair a Rigged Election
How a bunch of normal people Used Technology To Repair a Rigged ElectionHow a bunch of normal people Used Technology To Repair a Rigged Election
How a bunch of normal people Used Technology To Repair a Rigged Election
 
Open Source Bridge Opening Day
Open Source Bridge Opening DayOpen Source Bridge Opening Day
Open Source Bridge Opening Day
 
What Assumptions Make: Filesystem I/O from a database perspective
What Assumptions Make: Filesystem I/O from a database perspectiveWhat Assumptions Make: Filesystem I/O from a database perspective
What Assumptions Make: Filesystem I/O from a database perspective
 

Último

A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
Ryan Mahoney - Will Artificial Intelligence Replace Real Estate Agents
Ryan Mahoney - Will Artificial Intelligence Replace Real Estate AgentsRyan Mahoney - Will Artificial Intelligence Replace Real Estate Agents
Ryan Mahoney - Will Artificial Intelligence Replace Real Estate AgentsRyan Mahoney
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsNathaniel Shimoni
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
What is Artificial Intelligence?????????
What is Artificial Intelligence?????????What is Artificial Intelligence?????????
What is Artificial Intelligence?????????blackmambaettijean
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersNicole Novielli
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...AliaaTarek5
 
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterMydbops
 

Último (20)

A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
Ryan Mahoney - Will Artificial Intelligence Replace Real Estate Agents
Ryan Mahoney - Will Artificial Intelligence Replace Real Estate AgentsRyan Mahoney - Will Artificial Intelligence Replace Real Estate Agents
Ryan Mahoney - Will Artificial Intelligence Replace Real Estate Agents
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directions
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
What is Artificial Intelligence?????????
What is Artificial Intelligence?????????What is Artificial Intelligence?????????
What is Artificial Intelligence?????????
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software Developers
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
(How to Program) Paul Deitel, Harvey Deitel-Java How to Program, Early Object...
 
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL Router
 

Bucardo

  • 1. Bucardo: Replication with tiny little goats Selena Deckelmann selena@endpoint.com en dp oi nt .c om http://www.flickr.com/photos/kevincollins/
  • 2. Hi! ★ Software Engineer / Postgres Lead http://endpoint.com ★ We’re hiring! http://tr.im/EMGj en dp oi nt .c om
  • 3. en dp http://www.telegraph.co.uk/science/science-news/4409958/Extinct-ibex-is- oi nt .c resurrected-by-cloning.html om
  • 4. What can it do? en dp oi nt .c http://www.flickr.com/photos/8602783@N06/2294028540 om
  • 5. Master-slave • Scaling/Redundancy • UPGRADES (8.x -> 8.4) • Reporting databases • Data warehousing • Now handles SEQUENCES! en dp oi nt .c om
  • 6. Master-master • Write between both databases! • Sync type: SWAP • Conflict resolution en dp oi nt .c om
  • 7. Custom code • Respond to change • Filter • Run arbitrary code! en dp oi nt .c om
  • 8. STORY TIME! item ski item ski item ski item item ski item ski item onhand ski item skis 10 ski item ski item ski item ski on hand = count(item) en dp oi nt .c om
  • 9. prod db reporting db new! item NOTIFY bucardo ski sync B new! item syn ski cC on hand cA Y TIF +1 syn NO custom code count(items) and other stuff en dp oi nt .c om goat courtesy of: http://www.flickr.com/photos/nuritwilde/394603312
  • 10. Strengths • Drop-in, no changes to Postgres • Control daemon/DB can run anywhere • EXTREME async • No locking of slaves • Command-line controls rock! en dp oi nt .c om
  • 11. The Fine Print • No smooth DDL handling • Not for failover (aka high availability) • bloat: pg_listener, q, bucardo_delta, bucardo_track • No locking of slaves • No Windows support • One developer en dp oi nt .c om http://www.flickr.com/photos/ncarey/135901120/
  • 12. en dp oi nt .c http://wiki.postgresql.org/wiki/Replication,_Clustering,_and_Connection_Pooling om
  • 13. Bucardo Concepts en dp oi nt .c om http://www.flickr.com/photos/kendrick/361173694
  • 14. Glossary of terms • replication: copying data from one place to another • DDL: Data Definition Language (CREATE/ DROP/ALTER) • DML: Data Manipulation Language (SELECT/ INSERT/UPDATE/DELETE) • triggers: bits of code run before or after DML en dp oi nt .c om
  • 15. Glossary of terms • goat: a database object (table or sequence) • herd: table contains unique name for a group of goats • syncs: replication events (one herd per sync) en dp oi nt .c om
  • 16. flexible architecture bucardo control database master DB slave DB en dp oi nt .c om
  • 17. flexible architecture same db bucardo control cluster database master DB slave DB en dp oi nt .c om
  • 18. flexible architecture same db cluster bucardo control database master DB slave DB en dp oi nt .c om
  • 19. flexible architecture same db cluster bucardo control database master DB slave DB en dp oi nt .c om
  • 20. Installing en dp oi nt .c om http://www.flickr.com/photos/kendrick/361173694
  • 21. Bucardo Requirements • Postgres (8.3 or higher recommended) • Perl & some packages: • DBD::Pg 2.0 • DBI 1.51 • DBIx::Safe 1.2.4 • ExtUtils::MakeMaker 6.32 • pl/perlu and pl/pgsql en dp oi nt .c om
  • 22. Simple set up BUCARDO CONTROL database setup: bucardo_ctl install en dp oi nt .c om
  • 23. Simple set up MASTER setup: bucardo_ctl add db MyDB name=master bucardo_ctl add all tables herd=all_tables bucardo_ctl add all sequences herd=all_tables SLAVE setup: bucardo_ctl add db MyDB name=slave port=6543 en dp oi nt .c om
  • 24. Setting up, cont. TEST: bucardo_ctl validate all REPLICATE: bucardo_ctl add sync delta type=pushdelta source=all_tables targetdb=slave bucardo_ctl start (installs triggers!) en dp oi nt .c om
  • 25. Setting up • Initiate a one-time-copy: onetimecopy=[1|2] • Set up ongoing syncs: enabled by default (can set timeouts) • MANY configuration options en dp oi nt .c om
  • 26. Admin stuff • Can set up defaults in .bucardorc • Only need one ‘bucardo’ database • Uses the ‘bucardo’ schema in replication sets for ease of admin, removal en dp oi nt .c om
  • 27. Smooth upgrades! bucardo_ctl upgrade • Stop bucardo first (bucardo_ctl stop) • applies DDL changes, functions • see also UPGRADE file en dp oi nt .c om
  • 28. Stuff to watch out for • search_path for ‘bucardo’ user • PL/Perlu & pl/pgsql must be installed • Uses prepared statements, turn off with: bucardo_ctl update db MyDB server_side_prepares=0 en dp oi nt .c om
  • 29. LIVE DEMO! • http://github.com/selenamarie/ bucardo_examples en dp oi nt .c om
  • 30. Internals en dp oi nt http://www.flickr.com/photos/chelseagirlphotos .c om
  • 31. Internals bucardo=# d List of relations Schema | Name | Type | Owner ---------+-------------------------------+----------+--------- bucardo | audit_pid | table | bucardo bucardo | audit_pid_id_seq | sequence | bucardo bucardo | bucardo_config | table | bucardo bucardo | bucardo_custom_trigger | table | bucardo bucardo | bucardo_custom_trigger_id_seq | sequence | bucardo bucardo | bucardo_log_message | table | bucardo bucardo | bucardo_rate | table | bucardo bucardo | customcode | table | bucardo bucardo | customcode_id_seq | sequence | bucardo bucardo | customcode_map | table | bucardo bucardo | db | table | bucardo bucardo | db_connlog | table | bucardo bucardo | dbgroup | table | bucardo bucardo | dbmap | table | bucardo bucardo | goat | table | bucardo bucardo | goat_id_seq | sequence | bucardo bucardo | herd | table | bucardo bucardo | herdmap | table | bucardo bucardo | q | table | bucardo bucardo | sync | table | bucardo bucardo | upgrade_log | table | bucardo en (21 rows) dp oi nt .c om
  • 32. goats Table "bucardo.goat" Column | Type | ----------------------+--------------------------+ id | integer | db | text | schemaname | text | tablename | text | reltype | text | pkey | text | qpkey | text | pkeytype | text | has_delta | boolean | ping | boolean | ... en dp oi nt .c om
  • 33. goats # bucardo_ctl list tables Table: archive.course_logging DB: odw_master PK: none Table: archive.messages DB: odw_master PK: none Table: archive.student_assignments DB: odw_master PK: none Table: archive.student_courses DB: odw_master PK: none Table: logging.activity DB: odw_master PK: activity_name (varchar) Table: logging.course_logging DB: odw_master PK: course_logging_id (int4) Table: public.ecash_transaction DB: odw_master PK: trans_id (int4) Table: public.feedback DB: odw_master PK: date (timestamp) Table: public.holidays DB: odw_master PK: customernum|month|day| year (int4|int4|int4|int4) ... en dp oi nt .c om
  • 34. bucardo_ctl list sequences Sequence 63: logging.logging_seq Sequence 64: public.trans_id_seq Sequence 65: public.num_seq Sequence 66: public.upload_seq en dp oi nt .c om
  • 35. bucardo database bucardo=# d List of relations Schema | Name | Type | Owner ---------+-------------------------------+----------+--------- ... bucardo | db | table | bucardo bucardo | db_connlog | table | bucardo bucardo | dbgroup | table | bucardo bucardo | dbmap | table | bucardo bucardo | goat | table | bucardo bucardo | goat_id_seq | sequence | bucardo bucardo | herd | table | bucardo bucardo | herdmap | table | bucardo bucardo | q | table | bucardo bucardo | sync | table | bucardo bucardo | upgrade_log | table | bucardo (21 rows) en dp oi nt .c om
  • 36. Status # bucardo_ctl status Days back: 3 User: bucardo Database: bucardo Port: 8000 PID of Bucardo MCP: 6876 Name Type State PID Last_good Time I/U/D Last_bad Time ========+=====+=====+====+=========+=====+=====+========+==== a_delta | P |idle |6886|1m4s |0s |0/0/0|unknown | b_delta | P |idle |6885|1m4s |0s |0/0/0|9h32m47s|0s c_delta | P |idle |6887|1m4s |0s |0/0/0|unknown | d_delta | P |idle |6888|54s |0s |0/0/0|2m6s |3s e_delta | P |idle |6890|1m4s |0s |0/0/0|9h32m47s|0s f_delta | P |idle |6889|1m4s |0s |0/0/0|9h32m47s|0s en dp oi nt .c om
  • 37. # bucardo_ctl status a_delta Days back: 3 User: bucardo Database: bucardo Port: 8000 ====================================================================== Sync name: a_delta Current state: idle (PID = 6888) Type: pushdelta Source herd/database: all_a / a_master Target database: a_slave Tables in sync: 26 Last good: 3m 34s (time to run: 0s) Last good time: Oct 16, 2009 17:52:20 Target: a_slave Ins/Upd/Del: 20 / 0 / 50 Last bad: 4m 47s (time to run: 3s) Last bad time: Oct 16, 2009 17:51:08 Target: a_slave Latest bad reason: ? PID file: /var/run/bucardo/bucardo.ctl.sync.a_delta.pid PID file created: Fri Oct 16 17:52:09 2009 Status: active Limitdbs: 0 Priority: 0 Checktime: none Overdue time: 00:00:00 Expired time: 00:00:00 Stayalive: yes Kidsalive: yes Rebuild index: 0 Do_listen: yes Ping: yes Makedelta: no en dp Onetimecopy: 0 oi nt .c om
  • 39. Triggers INSERT, UPDATE, DELETE bucardo_add_delta IN SE RT bucardo_delta bucardo_triggerkick_[sync] NOTIFY! en dp oi nt .c om
  • 40. NOTIFY / LISTEN • Simple interprocess communication psql# LISTEN scotch; psql# NOTIFY scotch; Asynchronous notification "scotch" received from server process with PID 1337. • Any Postgres process can listen in en dp oi nt .c om
  • 41. Actual Triggers! Table "public.test" Column | Type | Modifiers --------+-----------------------+----------- test | character varying(15) | not null Indexes: "test_pkey" PRIMARY KEY, btree ("test") Triggers: bucardo_add_delta AFTER INSERT OR DELETE OR UPDATE ON test FOR EACH ROW EXECUTE PROCEDURE bucardo_add_delta_role() bucardo_triggerkick_a_delta AFTER INSERT OR DELETE OR UPDATE ON test FOR EACH STATEMENT EXECUTE PROCEDURE bucardo_triggerkick_a_delta() en dp oi nt .c om
  • 42. Bucardo NOTIFY NOTIFY NOTIFY MCP CTL KID TRIGGER INSERT INTO “q” SELECT from “q” UPDATE “q” Flow of control REPLICATION en EVENT! dp oi nt .c om
  • 43. How Syncs happen • NOTIFY vs. timeout vs. kick • NOTIFY - from master db to MCP • timeout - controller detects • kick - manual/from MCP to controller en dp oi nt .c om
  • 44. Processes! • MCP, CTL, KID • MCP: master control process • CTL: controller (track, kick off/kill KIDs) • KID: sync processes en dp oi nt .c om
  • 45. Administrativa • Totally ok to kill KIDs • CTL cleans up after you • May need to kill open database handles (for unfinished COPYs, etc) en dp oi nt .c om
  • 46. Other interesting tables On your master DB: • bucardo_delta table has: ID, txn_time • bucardo_track table: who’s done what? en dp oi nt .c om
  • 47. Sync types • Fullcopy. Timeout/kick. TRUNCATE or DELETE, then COPY • Pushdelta. Trigger. One way master-slave. • Swap. Trigger. Two-way. Conflict resolution. en dp oi nt .c om
  • 48. Note about triggers: • canonical way to disable triggers: ALTER TABLE DISABLE TRIGGER ALL; :( • pre 8.3 way: UPDATE pg_class.. • SET session_replication_role = ‘replica’; • Applies to just the current session • Thanks, Jan! en dp oi nt .c om
  • 49. Dealing with failure • Troubleshooting • Backing up Bucardo itself • What happens when you lose the Bucardodb? en dp oi nt .c om
  • 50. Bucardo hooks • LIVE DATA CHANGES! • pass in a hashref (ROW or ROWINFO) • Returned value - bitmapped (a/b or both!) • Affect the replication event, side effects • Example: cache invalidation en dp oi nt .c om
  • 51. Bucardo Hooks • customcode & customcode_map • Conflict handlers (SWAP syncs) • Pure Perl • Exception - fix and try again • Pre and post trigger en dp oi nt .c om
  • 52. Development • bucardo.org • mailing lists: http://bucardo.org/wiki/ Bucardo_mailing_list • Release early, often. • Please submit patches! bug reports! tests! en dp oi nt .c om
  • 53. Questions? .com nt oi dp en
  • 54. Thanks! http://www.slideshare.net/selenamarie/bucardo selena@endpoint.com @selenamarie on Twitter rss: http://www.chesnok.com/daily en dp oi nt .c om