Replication using PostgreSQL Replicator

19

Click here to load reader

Transcript of Replication using PostgreSQL Replicator

Page 1: Replication using PostgreSQL Replicator

PostgreSQL Replication

Joshua D. Drake / Command Prompt, Inc.

Major Contributor PostgreSQL.Org

President PgUS

Page 2: Replication using PostgreSQL Replicator

Why

PostgreSQL + Replicator represents the easiest and most flexible PostgreSQL replication

solution to date.

Page 3: Replication using PostgreSQL Replicator

What features does it support?

● Master to many (Asynchronous) slaves

● Partial Sets

● Unique features

– Role replication

– Grant replication

– Large object replication

– Transaction logs, not triggers

● Failover/Promote

● Integrated, no triggers, easy DDL

Page 4: Replication using PostgreSQL Replicator

Open Source + Supported

● BSD Licensed● Open Community

● https://projects.commandprompt.com/public/replicator

● Supported● Commercially from http://www.commandprompt.com

Page 5: Replication using PostgreSQL Replicator

Get it!

● RPM:– http://www.pgsqlrpms.org/

● Source:● #! svn co \

https://projects.commandprompt.com/public/replicator/repo

● Debian/Ubuntu● Working on it

Page 6: Replication using PostgreSQL Replicator

Compile it

● jd@hardy:~/repos$ cd REPLICATOR-8.3-1.8/

● jd@hardy:~/repos/REPLICATOR-8.3-1.8$ autoconf

● jd@hardy:~/repos/REPLICATOR-8.3-1.8$ ./configure \ --prefix=/tmp/replicator

– checking build system type... i686-pc-linux-gnu

– checking host system type... i686-pc-linux-gnu

– checking which template to use... linux

– checking whether to build with 64-bit integer date/time support... no

– checking whether NLS is wanted... no

– checking for default port number... 5432

– [...]

Page 7: Replication using PostgreSQL Replicator

Install it

● jd@hardy:~/repos/REPLICATOR-8.3-1.8$ make -j2 install

– make -C doc install

– make[1]: Entering directory `/home/jd/repos/REPLICATOR-8.3-1.8/doc'

– make[1]: Nothing to be done for `install'.

– make[1]: Leaving directory `/home/jd/repos/REPLICATOR-8.3-1.8/doc'

– make -C src install

● [...]

Page 8: Replication using PostgreSQL Replicator

Test it

● jd@hardy:~/repos/REPLICATOR-8.3-1.8$ cd \ src/test/replication

● jd@hardy:~ PGROOT=/tmp/replicator ./test.pl | grep -i succeeded

Page 9: Replication using PostgreSQL Replicator

If only it could be... always

● test1 succeeded

● test2 succeeded

● test4 succeeded

● test5 succeeded

● test6 succeeded

● test7 succeeded

● test8 succeeded

● test9 succeeded

● test10 succeeded

● test11 succeeded

● test12 succeeded

● test14 succeeded

● test15 succeeded

● test16 succeeded

● test17 succeeded

● test_lo succeeded

Page 10: Replication using PostgreSQL Replicator

Initialize Master

● jd@hardy:~/$ cd /tmp/replicator

● jd@hardy:/$ bin/initdb -D data

● jd@hardy:/$ bin/pg_ctl -D data start

● jd@hardy:/$ bin/createdb -U postgres repl_test;

● jd@hardy:/$ bin/pg_ctl -D data stop

● jd@hardy:/$ bin/init-mammoth-database -D data \ repl_test

Database repl_test ready for

Mammoth Replicator

Page 11: Replication using PostgreSQL Replicator

The postgresql.conf

● replication_enable = false

● replication_mode = master

● replication_slave_no = 0

● replication_database = 'repl_test'

● replication_mcp_address = '127.0.0.1'

● replication_mcp_port = 7777

● replication_mcp_authkey = 'mcp-key'

● replication_data_path = 'rlog'

Page 12: Replication using PostgreSQL Replicator

postgresql.conf (2)

● replication_mcp_require_ssl = false

● replication_compression = true

● replication_use_utf8_encoding = true

Page 13: Replication using PostgreSQL Replicator

Apply useful functions

● pg_ctl -D data start

● psql -U jd repl_test \ < /tmp/replicator/share/postgresql/replicator-functions.sql

Page 14: Replication using PostgreSQL Replicator

The MCP

● Master Control Process– Manages replication between nodes

● Transactions● Promotion● Status

– Has queueing mechanism

– Unlimited (in theory) slaves without impact on master

– Operates on any server

Page 15: Replication using PostgreSQL Replicator

mcp_server.conf

● mcp_listen_address = "0.0.0.0"

● mcp_listen_port = 7777

● mcp_authkey = "mcp-key"

● mcp_master_address = "127.0.0.1"

● mcp_max_slaves = 5

● mcp_slave_addresses = "0:192.168.0.1, 1:192.168.0.1"

● mcp_promote_allow = ""

Page 16: Replication using PostgreSQL Replicator

mcp_server.conf (2)

● mcp_queue_min_size = 16000000

● mcp_queue_max_size = 32000000

● mcp_require_ssl = 0

● log_level = "log"

● replication_data_path = "rlog”

Page 17: Replication using PostgreSQL Replicator

Fire up

● Start the mcp– mcp_server -D /data/mcp_data

● Start Replication on relation– Make sure you have a primary key– ALTER TABLE foo ENABLE REPLICATION

– ALTER TABLE foo ENABLE REPLICATION ON SLAVE 0;

● Replicate the whole database– SELECT enable_replication_global('{0}')

Page 18: Replication using PostgreSQL Replicator

Check the status

type brecno frecno vrecno lrecno sync connected timestamp

master 888 888 0 497519 sync true Sat Jan 31 08:41:35

slave 0 - 497520 497519 - sync true Sat Jan 31 08:41:35

slave 1 - 888 0 - desync false Wed Dec 31 16:00:00

slave 2 - 888 0 - desync false Wed Dec 31 16:00:00

slave 3 - 888 0 - desync false Wed Dec 31 16:00:00

slave 4 - 888 0 - desync false Wed Dec 31 16:00:00

(In the normal output year is there too)

Page 19: Replication using PostgreSQL Replicator

Fail over

Two modes:– PROMOTE

– PROMOTE FORCE;