21/4/2013 PostgreSQL: Μέθοδοι για Data Replication 1/28
PostgreSQL: Μέθοδοι για Data Replication
FOSSCOMM 2013
Δημήτρης Αγγελάκος
@vyruss / vyruss@hellug.gr
21/4/2013 PostgreSQL: Μέθοδοι για Data Replication 2/28
PostgreSQL: Μέθοδοι για Data Replication
1) Εισαγωγή στην PostgreSQL
2) Data Replication
3) Λύσεις
4) Σύγκριση Τεχνολογιών
5) Εναλλακτικές
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
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/
21/4/2013 PostgreSQL: Μέθοδοι για Data Replication 5/28
PostgreSQL: Μέθοδοι για Data Replication
1) Εισαγωγή στην PostgreSQL
2) Data Replication
3) Λύσεις
4) Σύγκριση Τεχνολογιών
5) Εναλλακτικές
21/4/2013 PostgreSQL: Μέθοδοι για Data Replication 6/28
Data Replication
● Failover
● Load Balancing
● Data Warehousing
21/4/2013 PostgreSQL: Μέθοδοι για Data Replication 7/28
Τύποι Data Replication (I)
● Shared Storage (π.χ. NAS)
– Failover χωρίς απώλεια δεδομένων & overhead
– Slaves ανενεργοί
– SPOF
● Filesystem Replication (π.χ. DRBD)
– Slaves ανενεργοί
– Πιθανή απώλεια δεδομένων (async)
21/4/2013 PostgreSQL: Μέθοδοι για Data Replication 8/28
Τύποι Data Replication (II)
● Log-shipping Replication
– Slaves ενεργοί
– Πιθανή απώλεια δεδομένων (async)
● Trigger-based Replication
– Overhead
– Επίπεδο πίνακα
– Data partitioning
21/4/2013 PostgreSQL: Μέθοδοι για Data Replication 9/28
PostgreSQL: Μέθοδοι για Data Replication
1) Εισαγωγή στην PostgreSQL
2) Data Replication
3) Λύσεις
4) Σύγκριση Τεχνολογιών
5) Συγκριτική ανάλυση
6) Εναλλακτικές
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
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
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'
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 ubuntu@10.0.0.5:/tmp
●
Slave :
cd /var/lib/postgresql/9.1/
sudo tar xf /tmp/backup.txz
●
Master :
SELECT pg_stop_backup();
21/4/2013 PostgreSQL: Μέθοδοι για Data Replication 14/28
Slony-I (I)
● Trigger-based Replication
– Επιλέγουμε τους πίνακες που μας ενδιαφέρουν
– Πολλαπλές πηγές πίνακα (Master)
– Υποστηρίζει διαφορετικές :
● Εκδόσεις PostgreSQL
● Αρχιτεκτονικές
● Λειτουργικά συστήματα
– Για αργό δίκτυο
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
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');
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
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
–
21/4/2013 PostgreSQL: Μέθοδοι για Data Replication 19/28
pgpool-II (II)
● Η συνεισφορά μου:
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
21/4/2013 PostgreSQL: Μέθοδοι για Data Replication 21/28
Χρειάζομαι όντως Replication;
● Παλιά καλά DBLINK functions!
● Ξέρω καλύτερα τη βάση μου
● Επιλεκτικό
● Προχωρημένες λειτουργίες (Business Logic)
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;
21/4/2013 PostgreSQL: Μέθοδοι για Data Replication 23/28
PostgreSQL: Μέθοδοι για Data Replication
1) Εισαγωγή στην PostgreSQL
2) Data Replication
3) Λύσεις
4) Σύγκριση Τεχνολογιών
5) Εναλλακτικές
21/4/2013 PostgreSQL: Μέθοδοι για Data Replication 24/28
Σύγκριση Τεχνολογιών (Ι)
● Scope:
– Native, Pgpool : Ολόκληρη η βάση
– Slony : Επίπεδο πίνακα
● Conflict Resolution
– Native, Slony : Δε χρειάζεται
● Πιθανότητα απώλειας δεδομένων
– Όχι όταν έχουμε Synchronous (άρα όχι Slony)
21/4/2013 PostgreSQL: Μέθοδοι για Data Replication 25/28
Σύγκριση Τεχνολογιών (ΙΙ)
● Πολλαπλοί Master
– Native, Slony : Όχι
– Pgpool : Ναι
● Multimaster Replication
– Άλλος τύπος replication
21/4/2013 PostgreSQL: Μέθοδοι για Data Replication 26/28
PostgreSQL: Μέθοδοι για Data Replication
1) Εισαγωγή στην PostgreSQL
2) Data Replication
3) Λύσεις
4) Σύγκριση Τεχνολογιών
5) Εναλλακτικές
21/4/2013 PostgreSQL: Μέθοδοι για Data Replication 27/28
Εναλλακτικές
● Postgres-XC
– Παρακλάδι, τακτικά merge (έρχεται το Μάιο)
– Write-scalable, shared-nothing
● Bucardo
– Ασύγχρονο Multimaster
– Trigger-based
– Load Balancing
● Londiste
21/4/2013 PostgreSQL: Μέθοδοι για Data Replication 28/28
PostgreSQL: Μέθοδοι για Data Replication
Σας ευχαριστώ!
http://PostgreSQL.gr/

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

  • 1.
    21/4/2013 PostgreSQL: Μέθοδοιγια Data Replication 1/28 PostgreSQL: Μέθοδοι για Data Replication FOSSCOMM 2013 Δημήτρης Αγγελάκος @vyruss / vyruss@hellug.gr
  • 2.
    21/4/2013 PostgreSQL: Μέθοδοιγια Data Replication 2/28 PostgreSQL: Μέθοδοι για Data Replication 1) Εισαγωγή στην PostgreSQL 2) Data Replication 3) Λύσεις 4) Σύγκριση Τεχνολογιών 5) Εναλλακτικές
  • 3.
    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
  • 4.
    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/
  • 5.
    21/4/2013 PostgreSQL: Μέθοδοιγια Data Replication 5/28 PostgreSQL: Μέθοδοι για Data Replication 1) Εισαγωγή στην PostgreSQL 2) Data Replication 3) Λύσεις 4) Σύγκριση Τεχνολογιών 5) Εναλλακτικές
  • 6.
    21/4/2013 PostgreSQL: Μέθοδοιγια Data Replication 6/28 Data Replication ● Failover ● Load Balancing ● Data Warehousing
  • 7.
    21/4/2013 PostgreSQL: Μέθοδοιγια Data Replication 7/28 Τύποι Data Replication (I) ● Shared Storage (π.χ. NAS) – Failover χωρίς απώλεια δεδομένων & overhead – Slaves ανενεργοί – SPOF ● Filesystem Replication (π.χ. DRBD) – Slaves ανενεργοί – Πιθανή απώλεια δεδομένων (async)
  • 8.
    21/4/2013 PostgreSQL: Μέθοδοιγια Data Replication 8/28 Τύποι Data Replication (II) ● Log-shipping Replication – Slaves ενεργοί – Πιθανή απώλεια δεδομένων (async) ● Trigger-based Replication – Overhead – Επίπεδο πίνακα – Data partitioning
  • 9.
    21/4/2013 PostgreSQL: Μέθοδοιγια Data Replication 9/28 PostgreSQL: Μέθοδοι για Data Replication 1) Εισαγωγή στην PostgreSQL 2) Data Replication 3) Λύσεις 4) Σύγκριση Τεχνολογιών 5) Συγκριτική ανάλυση 6) Εναλλακτικές
  • 10.
    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
  • 11.
    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
  • 12.
    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'
  • 13.
    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 ubuntu@10.0.0.5:/tmp ● Slave : cd /var/lib/postgresql/9.1/ sudo tar xf /tmp/backup.txz ● Master : SELECT pg_stop_backup();
  • 14.
    21/4/2013 PostgreSQL: Μέθοδοιγια Data Replication 14/28 Slony-I (I) ● Trigger-based Replication – Επιλέγουμε τους πίνακες που μας ενδιαφέρουν – Πολλαπλές πηγές πίνακα (Master) – Υποστηρίζει διαφορετικές : ● Εκδόσεις PostgreSQL ● Αρχιτεκτονικές ● Λειτουργικά συστήματα – Για αργό δίκτυο
  • 15.
    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
  • 16.
    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');
  • 17.
    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
  • 18.
    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 –
  • 19.
    21/4/2013 PostgreSQL: Μέθοδοιγια Data Replication 19/28 pgpool-II (II) ● Η συνεισφορά μου:
  • 20.
    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
  • 21.
    21/4/2013 PostgreSQL: Μέθοδοιγια Data Replication 21/28 Χρειάζομαι όντως Replication; ● Παλιά καλά DBLINK functions! ● Ξέρω καλύτερα τη βάση μου ● Επιλεκτικό ● Προχωρημένες λειτουργίες (Business Logic)
  • 22.
    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;
  • 23.
    21/4/2013 PostgreSQL: Μέθοδοιγια Data Replication 23/28 PostgreSQL: Μέθοδοι για Data Replication 1) Εισαγωγή στην PostgreSQL 2) Data Replication 3) Λύσεις 4) Σύγκριση Τεχνολογιών 5) Εναλλακτικές
  • 24.
    21/4/2013 PostgreSQL: Μέθοδοιγια Data Replication 24/28 Σύγκριση Τεχνολογιών (Ι) ● Scope: – Native, Pgpool : Ολόκληρη η βάση – Slony : Επίπεδο πίνακα ● Conflict Resolution – Native, Slony : Δε χρειάζεται ● Πιθανότητα απώλειας δεδομένων – Όχι όταν έχουμε Synchronous (άρα όχι Slony)
  • 25.
    21/4/2013 PostgreSQL: Μέθοδοιγια Data Replication 25/28 Σύγκριση Τεχνολογιών (ΙΙ) ● Πολλαπλοί Master – Native, Slony : Όχι – Pgpool : Ναι ● Multimaster Replication – Άλλος τύπος replication
  • 26.
    21/4/2013 PostgreSQL: Μέθοδοιγια Data Replication 26/28 PostgreSQL: Μέθοδοι για Data Replication 1) Εισαγωγή στην PostgreSQL 2) Data Replication 3) Λύσεις 4) Σύγκριση Τεχνολογιών 5) Εναλλακτικές
  • 27.
    21/4/2013 PostgreSQL: Μέθοδοιγια Data Replication 27/28 Εναλλακτικές ● Postgres-XC – Παρακλάδι, τακτικά merge (έρχεται το Μάιο) – Write-scalable, shared-nothing ● Bucardo – Ασύγχρονο Multimaster – Trigger-based – Load Balancing ● Londiste
  • 28.
    21/4/2013 PostgreSQL: Μέθοδοιγια Data Replication 28/28 PostgreSQL: Μέθοδοι για Data Replication Σας ευχαριστώ! http://PostgreSQL.gr/