SlideShare a Scribd company logo
1 of 54
Download to read offline
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

More Related Content

What's hot

CSW2017 Peng qiu+shefang-zhong win32k -dark_composition_finnal_finnal_rm_mark
CSW2017 Peng qiu+shefang-zhong win32k -dark_composition_finnal_finnal_rm_markCSW2017 Peng qiu+shefang-zhong win32k -dark_composition_finnal_finnal_rm_mark
CSW2017 Peng qiu+shefang-zhong win32k -dark_composition_finnal_finnal_rm_markCanSecWest
 
Label based Mandatory Access Control on PostgreSQL
Label based Mandatory Access Control on PostgreSQLLabel based Mandatory Access Control on PostgreSQL
Label based Mandatory Access Control on PostgreSQLKohei KaiGai
 
AMD and the new “Zen” High Performance x86 Core at Hot Chips 28
AMD and the new “Zen” High Performance x86 Core at Hot Chips 28AMD and the new “Zen” High Performance x86 Core at Hot Chips 28
AMD and the new “Zen” High Performance x86 Core at Hot Chips 28AMD
 
MongoDB Administration 101
MongoDB Administration 101MongoDB Administration 101
MongoDB Administration 101MongoDB
 
Revisiting CephFS MDS and mClock QoS Scheduler
Revisiting CephFS MDS and mClock QoS SchedulerRevisiting CephFS MDS and mClock QoS Scheduler
Revisiting CephFS MDS and mClock QoS SchedulerYongseok Oh
 
Hierarchical Storage Management
Hierarchical Storage ManagementHierarchical Storage Management
Hierarchical Storage ManagementJaydeep Patel
 
Data Federation with Apache Spark
Data Federation with Apache SparkData Federation with Apache Spark
Data Federation with Apache SparkDataWorks Summit
 
[Pgday.Seoul 2017] 3. PostgreSQL WAL Buffers, Clog Buffers Deep Dive - 이근오
[Pgday.Seoul 2017] 3. PostgreSQL WAL Buffers, Clog Buffers Deep Dive - 이근오[Pgday.Seoul 2017] 3. PostgreSQL WAL Buffers, Clog Buffers Deep Dive - 이근오
[Pgday.Seoul 2017] 3. PostgreSQL WAL Buffers, Clog Buffers Deep Dive - 이근오PgDay.Seoul
 
Linux performance tuning & stabilization tips (mysqlconf2010)
Linux performance tuning & stabilization tips (mysqlconf2010)Linux performance tuning & stabilization tips (mysqlconf2010)
Linux performance tuning & stabilization tips (mysqlconf2010)Yoshinori Matsunobu
 
High Performance, Scalable MongoDB in a Bare Metal Cloud
High Performance, Scalable MongoDB in a Bare Metal CloudHigh Performance, Scalable MongoDB in a Bare Metal Cloud
High Performance, Scalable MongoDB in a Bare Metal CloudMongoDB
 
MemVerge: The Software Stack for CXL Environments
MemVerge: The Software Stack for CXL EnvironmentsMemVerge: The Software Stack for CXL Environments
MemVerge: The Software Stack for CXL EnvironmentsMemory Fabric Forum
 
The InnoDB Storage Engine for MySQL
The InnoDB Storage Engine for MySQLThe InnoDB Storage Engine for MySQL
The InnoDB Storage Engine for MySQLMorgan Tocker
 
Ceph QoS: How to support QoS in distributed storage system - Taewoong Kim
Ceph QoS: How to support QoS in distributed storage system - Taewoong KimCeph QoS: How to support QoS in distributed storage system - Taewoong Kim
Ceph QoS: How to support QoS in distributed storage system - Taewoong KimCeph Community
 
ASP.NET Core 6.0 全新功能探索
ASP.NET Core 6.0 全新功能探索ASP.NET Core 6.0 全新功能探索
ASP.NET Core 6.0 全新功能探索Will Huang
 
AMD EPYC™ Microprocessor Architecture
AMD EPYC™ Microprocessor ArchitectureAMD EPYC™ Microprocessor Architecture
AMD EPYC™ Microprocessor ArchitectureAMD
 
M|18 Deep Dive: InnoDB Transactions and Write Paths
M|18 Deep Dive: InnoDB Transactions and Write PathsM|18 Deep Dive: InnoDB Transactions and Write Paths
M|18 Deep Dive: InnoDB Transactions and Write PathsMariaDB plc
 
Postgres & Red Hat Cluster Suite
Postgres & Red Hat Cluster SuitePostgres & Red Hat Cluster Suite
Postgres & Red Hat Cluster SuiteEDB
 

What's hot (20)

CSW2017 Peng qiu+shefang-zhong win32k -dark_composition_finnal_finnal_rm_mark
CSW2017 Peng qiu+shefang-zhong win32k -dark_composition_finnal_finnal_rm_markCSW2017 Peng qiu+shefang-zhong win32k -dark_composition_finnal_finnal_rm_mark
CSW2017 Peng qiu+shefang-zhong win32k -dark_composition_finnal_finnal_rm_mark
 
Label based Mandatory Access Control on PostgreSQL
Label based Mandatory Access Control on PostgreSQLLabel based Mandatory Access Control on PostgreSQL
Label based Mandatory Access Control on PostgreSQL
 
Spark sql
Spark sqlSpark sql
Spark sql
 
AMD and the new “Zen” High Performance x86 Core at Hot Chips 28
AMD and the new “Zen” High Performance x86 Core at Hot Chips 28AMD and the new “Zen” High Performance x86 Core at Hot Chips 28
AMD and the new “Zen” High Performance x86 Core at Hot Chips 28
 
MongoDB Administration 101
MongoDB Administration 101MongoDB Administration 101
MongoDB Administration 101
 
Revisiting CephFS MDS and mClock QoS Scheduler
Revisiting CephFS MDS and mClock QoS SchedulerRevisiting CephFS MDS and mClock QoS Scheduler
Revisiting CephFS MDS and mClock QoS Scheduler
 
Hierarchical Storage Management
Hierarchical Storage ManagementHierarchical Storage Management
Hierarchical Storage Management
 
Data Federation with Apache Spark
Data Federation with Apache SparkData Federation with Apache Spark
Data Federation with Apache Spark
 
[Pgday.Seoul 2017] 3. PostgreSQL WAL Buffers, Clog Buffers Deep Dive - 이근오
[Pgday.Seoul 2017] 3. PostgreSQL WAL Buffers, Clog Buffers Deep Dive - 이근오[Pgday.Seoul 2017] 3. PostgreSQL WAL Buffers, Clog Buffers Deep Dive - 이근오
[Pgday.Seoul 2017] 3. PostgreSQL WAL Buffers, Clog Buffers Deep Dive - 이근오
 
Linux performance tuning & stabilization tips (mysqlconf2010)
Linux performance tuning & stabilization tips (mysqlconf2010)Linux performance tuning & stabilization tips (mysqlconf2010)
Linux performance tuning & stabilization tips (mysqlconf2010)
 
High Performance, Scalable MongoDB in a Bare Metal Cloud
High Performance, Scalable MongoDB in a Bare Metal CloudHigh Performance, Scalable MongoDB in a Bare Metal Cloud
High Performance, Scalable MongoDB in a Bare Metal Cloud
 
MemVerge: The Software Stack for CXL Environments
MemVerge: The Software Stack for CXL EnvironmentsMemVerge: The Software Stack for CXL Environments
MemVerge: The Software Stack for CXL Environments
 
The InnoDB Storage Engine for MySQL
The InnoDB Storage Engine for MySQLThe InnoDB Storage Engine for MySQL
The InnoDB Storage Engine for MySQL
 
Ceph QoS: How to support QoS in distributed storage system - Taewoong Kim
Ceph QoS: How to support QoS in distributed storage system - Taewoong KimCeph QoS: How to support QoS in distributed storage system - Taewoong Kim
Ceph QoS: How to support QoS in distributed storage system - Taewoong Kim
 
ASP.NET Core 6.0 全新功能探索
ASP.NET Core 6.0 全新功能探索ASP.NET Core 6.0 全新功能探索
ASP.NET Core 6.0 全新功能探索
 
AMD EPYC™ Microprocessor Architecture
AMD EPYC™ Microprocessor ArchitectureAMD EPYC™ Microprocessor Architecture
AMD EPYC™ Microprocessor Architecture
 
CephFS Update
CephFS UpdateCephFS Update
CephFS Update
 
M|18 Deep Dive: InnoDB Transactions and Write Paths
M|18 Deep Dive: InnoDB Transactions and Write PathsM|18 Deep Dive: InnoDB Transactions and Write Paths
M|18 Deep Dive: InnoDB Transactions and Write Paths
 
Postgres & Red Hat Cluster Suite
Postgres & Red Hat Cluster SuitePostgres & Red Hat Cluster Suite
Postgres & Red Hat Cluster Suite
 
Understanding DPDK
Understanding DPDKUnderstanding DPDK
Understanding DPDK
 

Viewers also liked

Viewers also liked (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 to 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 to Bucardo (13)

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)
 

More from 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
 

More from 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
 

Recently uploaded

Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfIngrid Airi González
 
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
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI AgeCprime
 
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Scott Andery
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Hiroshi SHIBATA
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality AssuranceInflectra
 
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
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demoHarshalMandlekar2
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
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
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityIES VE
 
Manual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditManual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditSkynet Technologies
 
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
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesThousandEyes
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesKari Kakkonen
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch TuesdayIvanti
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rick Flair
 

Recently uploaded (20)

Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdf
 
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
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI Age
 
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
 
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
 
Sample pptx for embedding into website for demo
Sample pptx for embedding into website for demoSample pptx for embedding into website for demo
Sample pptx for embedding into website for demo
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
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
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a reality
 
Manual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance AuditManual 508 Accessibility Compliance Audit
Manual 508 Accessibility Compliance Audit
 
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
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examples
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch Tuesday
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...
 

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