postgresql: mέθοδοι για data replication

28
21/4/2013 PostgreSQL: Μέθοδοι για Data Replication 1/28 PostgreSQL: Μέθοδοι για Data Replication FOSSCOMM 2013 Δημήτρης Αγγελάκος @vyruss / [email protected]

Upload: jimmy-angelakos

Post on 30-May-2015

411 views

Category:

Technology


1 download

DESCRIPTION

Παρουσίασή μου για τη βάση δεδομένων PostgreSQL και των δυνατοτήτων Data Replication που προσφέρει, στα πλαίσια του 6ου Συνεδρίου Κοινοτήτων Ανοιχτού Λογισμικού FOSSCOMM 2013 στις 21/4/2013 στο Χαροκόπειο Πανεπιστήμιο Αθηνών.

TRANSCRIPT

Page 1: PostgreSQL: Mέθοδοι για Data Replication

21/4/2013 PostgreSQL: Μέθοδοι για Data Replication 1/28

PostgreSQL: Μέθοδοι για Data Replication

FOSSCOMM 2013Δημήτρης Αγγελάκος

@vyruss / [email protected]

Page 2: PostgreSQL: Mέθοδοι για Data Replication

21/4/2013 PostgreSQL: Μέθοδοι για Data Replication 2/28

PostgreSQL: Μέθοδοι για Data Replication

1) Εισαγωγή στην PostgreSQL

2) Data Replication

3) Λύσεις

4) Σύγκριση Τεχνολογιών

5) Εναλλακτικές

Page 3: PostgreSQL: Mέθοδοι για Data Replication

21/4/2013 PostgreSQL: Μέθοδοι για Data Replication 3/28

Εισαγωγή στην PostgreSQL

● “Η πιο εξελιγμένη open source database”– ACID (Atomicity, Consistency, Isolation, Durability)– SQL:2008 – Procedural languages– User-defined data types & objects– GiST: PostGIS, Full-text search, etc.– Database events & Asynchronous Notifications

Page 4: PostgreSQL: Mέθοδοι για Data Replication

21/4/2013 PostgreSQL: Μέθοδοι για Data Replication 4/28

Φρέσκια PostgreSQL

http://www.postgresql.org/download

Binary Packages– Linux, BSD, Solaris, Mac OS X, Windows– Repositories:

● Red Hat (RHEL, CentOS, Fedora, SL)● Debian / Ubuntu

– Ελλάδα: http://PostgreSQL.gr/

Page 5: PostgreSQL: Mέθοδοι για Data Replication

21/4/2013 PostgreSQL: Μέθοδοι για Data Replication 5/28

PostgreSQL: Μέθοδοι για Data Replication

1) Εισαγωγή στην PostgreSQL

2) Data Replication

3) Λύσεις

4) Σύγκριση Τεχνολογιών

5) Εναλλακτικές

Page 6: PostgreSQL: Mέθοδοι για Data Replication

21/4/2013 PostgreSQL: Μέθοδοι για Data Replication 6/28

Data Replication

● Failover

● Load Balancing

● Data Warehousing

Page 7: PostgreSQL: Mέθοδοι για Data Replication

21/4/2013 PostgreSQL: Μέθοδοι για Data Replication 7/28

Τύποι Data Replication (I)

● Shared Storage (π.χ. NAS)– Failover χωρίς απώλεια δεδομένων & overhead– Slaves ανενεργοί– SPOF

● Filesystem Replication (π.χ. DRBD)– Slaves ανενεργοί– Πιθανή απώλεια δεδομένων (async)

Page 8: PostgreSQL: Mέθοδοι για Data Replication

21/4/2013 PostgreSQL: Μέθοδοι για Data Replication 8/28

Τύποι Data Replication (II)

● Log-shipping Replication– Slaves ενεργοί– Πιθανή απώλεια δεδομένων (async)

● Trigger-based Replication– Overhead– Επίπεδο πίνακα– Data partitioning

Page 9: PostgreSQL: Mέθοδοι για Data Replication

21/4/2013 PostgreSQL: Μέθοδοι για Data Replication 9/28

PostgreSQL: Μέθοδοι για Data Replication

1) Εισαγωγή στην PostgreSQL

2) Data Replication

3) Λύσεις

4) Σύγκριση Τεχνολογιών

5) Συγκριτική ανάλυση

6) Εναλλακτικές

Page 10: PostgreSQL: Mέθοδοι για Data Replication

21/4/2013 PostgreSQL: Μέθοδοι για Data Replication 10/28

PostgreSQL Native (I)

● Log-shipping (Streaming) Replication– Τι είναι τα WALs

● Write-Ahead Logging● Online Backup● Point-in-time Recovery (PITR)

● Standby Servers● File-based / Streaming

Page 11: PostgreSQL: Mέθοδοι για Data Replication

21/4/2013 PostgreSQL: Μέθοδοι για Data Replication 11/28

PostgreSQL Native (II)

● Σε 5 λεπτά ;● Master :

– postgresql.conf :listen_address = '*'

wal_level = hot_standby

max_wal_senders = 3

archive_mode = on

archive_command = 'cp -i %p /tmp/archive/%f'

– pg_hba.conf :host replication all 10.0.0.0/24 trust

Page 12: PostgreSQL: Mέθοδοι για Data Replication

21/4/2013 PostgreSQL: Μέθοδοι για Data Replication 12/28

PostgreSQL Native (III)

● Slave :– postgresql.conf :

hot_standby = on

– recovery.conf : (όχι στο config dir αλλά στο data dir)

standby_mode = 'on'

primary_conninfo = 'host=10.0.0.1'

archive_mode = on

restore_command = 'cp -i /tmp/archive/%f %p'

Page 13: PostgreSQL: Mέθοδοι για Data Replication

21/4/2013 PostgreSQL: Μέθοδοι για Data Replication 13/28

PostgreSQL Native (IV)

● Master :

SELECT pg_start_backup('backup',true);

cd /var/lib/postgresql/9.1/

sudo tar cpJf /tmp/backup.txz main

rsync -av /tmp/backup.txz [email protected]:/tmp● Slave :

cd /var/lib/postgresql/9.1/

sudo tar xf /tmp/backup.txz● Master :

SELECT pg_stop_backup();

Page 14: PostgreSQL: Mέθοδοι για Data Replication

21/4/2013 PostgreSQL: Μέθοδοι για Data Replication 14/28

Slony-I (I)

● Trigger-based Replication– Επιλέγουμε τους πίνακες που μας ενδιαφέρουν– Πολλαπλές πηγές πίνακα (Master)– Υποστηρίζει διαφορετικές :

● Εκδόσεις PostgreSQL● Αρχιτεκτονικές● Λειτουργικά συστήματα

– Για αργό δίκτυο

Page 15: PostgreSQL: Mέθοδοι για Data Replication

21/4/2013 PostgreSQL: Μέθοδοι για Data Replication 15/28

Slony-I (II)

● Σε 5 λεπτά ;– Πακέτα :

● postgresql-9.1-slony1-2● slony1-2-bin

– Config : ● pg_hba.conf:

host mydb_slony slony 10.0.0.0/24 md5● /usr/share/doc/slony1-2-bin/examples/slon_tools.conf-sample.gz

Page 16: PostgreSQL: Mέθοδοι για Data Replication

21/4/2013 PostgreSQL: Μέθοδοι για Data Replication 16/28

Slony-I (III)

● /etc/slony1/slon_tools.conf :

add_node(node => 1,

host => '10.0.0.1',

dbname => 'mydb_slony',

port => 5432,

user => 'slony',

password => '12345');

add_node(node => 2,

parent => 1,

host => '10.0.0.4',

dbname => 'mydb_slony',

port => 5432,

user => 'slony',

password => '12345');

Page 17: PostgreSQL: Mέθοδοι για Data Replication

21/4/2013 PostgreSQL: Μέθοδοι για Data Replication 17/28

Slony-I (IV)

● /etc/slony1/slon_tools.conf :

“set1" => {

"set_id" => 1,

"pkeyedtables" => [

'mytable',

],

},● slonik_init_cluster | slonik● sudo slon_start 1● sudo slon_start 2● slonik_create_set 1 | slonik● slonik_subscribe_set 1 2 | slonik

Page 18: PostgreSQL: Mέθοδοι για Data Replication

21/4/2013 PostgreSQL: Μέθοδοι για Data Replication 18/28

pgpool-II (I)

● Statement-based Cluster Middleware– Connection Pooling– Load Balancing– Query Cache στη μνήμη– Failover– Replication (Ενσωματωμένο sync ή Εξωτερικό)– High Availability (watchdog)– Connection Queueing– Parallel Queries–

Page 19: PostgreSQL: Mέθοδοι για Data Replication

21/4/2013 PostgreSQL: Μέθοδοι για Data Replication 19/28

pgpool-II (II)

● Η συνεισφορά μου:

Page 20: PostgreSQL: Mέθοδοι για Data Replication

21/4/2013 PostgreSQL: Μέθοδοι για Data Replication 20/28

pgpool-II (III)

● Σε 5 λεπτά ;● Πακέτα:

– pgpool2– postgresql-9.1-pgpool2

● /etc/pgpool2/pgpool.conf :

backend_hostname0 = '10.0.0.1'

backend_port0 = 5432

backend_weight0 = 1

backend_data_directory0 = '/var/lib/postgresql/9.1/main'

backend_flag0 = 'ALLOW_TO_FAILOVER'

backend_hostname1 = '10.0.0.2'

backend_port1 = 5432

backend_weight1 = 1

backend_data_directory1 = '/var/lib/postgresql/9.1/main'

backend_flag1 = 'ALLOW_TO_FAILOVER'

pool_passwd = ''

replication_mode = on

load_balance_mode = on

Page 21: PostgreSQL: Mέθοδοι για Data Replication

21/4/2013 PostgreSQL: Μέθοδοι για Data Replication 21/28

Χρειάζομαι όντως Replication;

● Παλιά καλά DBLINK functions!

● Ξέρω καλύτερα τη βάση μου

● Επιλεκτικό

● Προχωρημένες λειτουργίες (Business Logic)

Page 22: PostgreSQL: Mέθοδοι για Data Replication

21/4/2013 PostgreSQL: Μέθοδοι για Data Replication 22/28

Χρειάζομαι όντως Replication;

rsql := 'SELECT id, blah

FROM mytable

WHERE id > ' || last_inserted_id ||

ORDER BY id ASC';

PERFORM dblink_connect('conn', conn_string);

PERFORM dblink_open('conn', 'cur', rsql);

LOOP

INSERT INTO toptable (remote_id, blah)

SELECT id, blah

FROM dblink_fetch('conn', 'cur', 500)

IF NOT FOUND THEN EXIT; END IF;

END LOOP;

Page 23: PostgreSQL: Mέθοδοι για Data Replication

21/4/2013 PostgreSQL: Μέθοδοι για Data Replication 23/28

PostgreSQL: Μέθοδοι για Data Replication

1) Εισαγωγή στην PostgreSQL

2) Data Replication

3) Λύσεις

4) Σύγκριση Τεχνολογιών

5) Εναλλακτικές

Page 24: PostgreSQL: Mέθοδοι για Data Replication

21/4/2013 PostgreSQL: Μέθοδοι για Data Replication 24/28

Σύγκριση Τεχνολογιών (Ι)

● Scope:– Native, Pgpool : Ολόκληρη η βάση– Slony : Επίπεδο πίνακα

● Conflict Resolution– Native, Slony : Δε χρειάζεται

● Πιθανότητα απώλειας δεδομένων– Όχι όταν έχουμε Synchronous (άρα όχι Slony)

Page 25: PostgreSQL: Mέθοδοι για Data Replication

21/4/2013 PostgreSQL: Μέθοδοι για Data Replication 25/28

Σύγκριση Τεχνολογιών (ΙΙ)

● Πολλαπλοί Master– Native, Slony : Όχι– Pgpool : Ναι

● Multimaster Replication– Άλλος τύπος replication

Page 26: PostgreSQL: Mέθοδοι για Data Replication

21/4/2013 PostgreSQL: Μέθοδοι για Data Replication 26/28

PostgreSQL: Μέθοδοι για Data Replication

1) Εισαγωγή στην PostgreSQL

2) Data Replication

3) Λύσεις

4) Σύγκριση Τεχνολογιών

5) Εναλλακτικές

Page 27: PostgreSQL: Mέθοδοι για Data Replication

21/4/2013 PostgreSQL: Μέθοδοι για Data Replication 27/28

Εναλλακτικές

● Postgres-XC– Παρακλάδι, τακτικά merge (έρχεται το Μάιο)– Write-scalable, shared-nothing

● Bucardo– Ασύγχρονο Multimaster– Trigger-based– Load Balancing

● Londiste

Page 28: PostgreSQL: Mέθοδοι για Data Replication

21/4/2013 PostgreSQL: Μέθοδοι για Data Replication 28/28

PostgreSQL: Μέθοδοι για Data Replication

Σας ευχαριστώ!

http://PostgreSQL.gr/