Διασταυρούμενη αναπαραγωγή μεταξύ PostgreSQL και MySQL

Διασταυρούμενη αναπαραγωγή μεταξύ PostgreSQL και MySQL

Θα μιλήσω εν συντομία για τη διασταυρούμενη αναπαραγωγή μεταξύ PostgreSQL και MySQL, καθώς και για μεθόδους ρύθμισης διασταυρούμενης αναπαραγωγής μεταξύ αυτών των δύο διακομιστών βάσεων δεδομένων. Οι διασταυρούμενες βάσεις δεδομένων αναφέρονται συνήθως ως ομοιογενείς βάσεις δεδομένων και αυτή είναι μια βολική μέθοδος για τη μετάβαση από έναν διακομιστή RDBMS σε έναν άλλο.

Οι βάσεις δεδομένων PostgreSQL και MySQL θεωρούνται παραδοσιακά σχεσιακές, αλλά με πρόσθετες επεκτάσεις προσφέρουν δυνατότητες NoSQL. Εδώ θα συζητήσουμε την αναπαραγωγή μεταξύ PostgreSQL και MySQL από μια προοπτική διαχείρισης σχεσιακής βάσης δεδομένων.

Δεν θα περιγράψουμε όλα τα εσωτερικά, μόνο τις βασικές αρχές, ώστε να έχετε μια ιδέα για τη ρύθμιση της αναπαραγωγής μεταξύ διακομιστών βάσης δεδομένων, πλεονεκτημάτων, περιορισμών και περιπτώσεων χρήσης.

Συνήθως, η αναπαραγωγή μεταξύ δύο πανομοιότυπων διακομιστών βάσης δεδομένων γίνεται είτε σε δυαδική λειτουργία είτε με ερωτήματα μεταξύ ενός κύριου (γνωστός και ως εκδότης, κύριος ή ενεργός) και ενός εξαρτημένου (συνδρομητής, αναμονής ή παθητικός). Ο σκοπός της αναπαραγωγής είναι να παρέχει ένα αντίγραφο σε πραγματικό χρόνο της κύριας βάσης δεδομένων στην πλευρά αναμονής. Σε αυτή την περίπτωση, τα δεδομένα μεταφέρονται από το master στο slave, δηλαδή από το ενεργό στο παθητικό, επειδή η αναπαραγωγή εκτελείται μόνο προς μία κατεύθυνση. Αλλά μπορείτε να ρυθμίσετε την αναπαραγωγή μεταξύ των δύο βάσεων δεδομένων και προς τις δύο κατευθύνσεις, έτσι ώστε τα δεδομένα να μεταφέρονται από το slave στο master σε μια ενεργή-ενεργή διαμόρφωση. Όλα αυτά, συμπεριλαμβανομένης της κλιμακωτής αναπαραγωγής, είναι δυνατά μεταξύ δύο ή περισσότερων πανομοιότυπων διακομιστών βάσης δεδομένων.Η ενεργή-ενεργή ή ενεργητική-παθητική διαμόρφωση εξαρτάται από την ανάγκη, τη διαθεσιμότητα τέτοιων δυνατοτήτων στην αρχική διαμόρφωση ή τη χρήση εξωτερικών λύσεων συντονισμού και το υπάρχον εμπόριο -offs.

Η περιγραφόμενη διαμόρφωση είναι δυνατή μεταξύ διαφορετικών διακομιστών βάσης δεδομένων. Ο διακομιστής μπορεί να ρυθμιστεί ώστε να λαμβάνει αναπαραγόμενα δεδομένα από άλλο διακομιστή βάσης δεδομένων και να διατηρεί ακόμα στιγμιότυπα σε πραγματικό χρόνο των αναπαραγόμενων δεδομένων. Η MySQL και η PostgreSQL προσφέρουν τις περισσότερες από αυτές τις διαμορφώσεις εγγενώς ή μέσω επεκτάσεων τρίτων, συμπεριλαμβανομένων μεθόδων δυαδικού αρχείου καταγραφής, κλειδωμάτων δίσκου και μεθόδων που βασίζονται σε δηλώσεις και σειρές.

Απαιτείται διασταυρούμενη αναπαραγωγή μεταξύ MySQL και PostgreSQL για μια εφάπαξ μετεγκατάσταση από έναν διακομιστή βάσης δεδομένων σε έναν άλλο. Αυτές οι βάσεις δεδομένων χρησιμοποιούν διαφορετικά πρωτόκολλα, επομένως δεν μπορείτε να τα συνδέσετε απευθείας. Για να διευκολύνετε την ανταλλαγή δεδομένων, μπορείτε να χρησιμοποιήσετε ένα εξωτερικό εργαλείο ανοιχτού κώδικα, όπως το pg_chameleon.

Τι είναι το pg_chameleon

Το pg_chameleon είναι ένα σύστημα αναπαραγωγής από MySQL σε PostgreSQL στην Python 3. Χρησιμοποιεί τη βιβλιοθήκη ανοιχτού κώδικα mysql-replication, επίσης στην Python. Οι εικόνες σειρών ανακτώνται από πίνακες MySQL και αποθηκεύονται ως αντικείμενα JSONB στη βάση δεδομένων PostgreSQL και, στη συνέχεια, αποκωδικοποιούνται από τη συνάρτηση pl/pgsql και αναπαράγονται στη βάση δεδομένων PostgreSQL.

Χαρακτηριστικά του pg_chameleon

Πολλαπλά σχήματα MySQL από το ίδιο σύμπλεγμα μπορούν να αναπαραχθούν σε μία βάση δεδομένων στόχου PostgreSQL με διαμόρφωση ένα προς πολλά
Τα ονόματα του σχήματος πηγής και στόχου δεν μπορούν να είναι τα ίδια.
Τα δεδομένα αναπαραγωγής μπορούν να ανακτηθούν από ένα κλιμακωτό αντίγραφο της MySQL.
Οι πίνακες που δεν μπορούν να αναπαραχθούν ή να δημιουργήσουν σφάλματα εξαιρούνται.
Κάθε συνάρτηση αναπαραγωγής ελέγχεται από δαίμονες.
Έλεγχος με παραμέτρους και αρχεία ρυθμίσεων με βάση το YAML.

Παράδειγμα

Πλήθος
vm1
vm2

Έκδοση OS
CentOS Linux 7.6 x86_64
CentOS Linux 7.5 x86_64

Έκδοση διακομιστή βάσης δεδομένων
MySQL 5.7.26
PostgreSQL 10.5

Θύρα DB
3306
5433

Διεύθυνση IP
192.168.56.102
192.168.56.106

Αρχικά, προετοιμάστε όλα τα απαραίτητα στοιχεία για την εγκατάσταση του pg_chameleon. Αυτό το παράδειγμα έχει εγκατεστημένη την Python 3.6.8, η οποία δημιουργεί ένα εικονικό περιβάλλον και το ενεργοποιεί.

$> wget https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tar.xz
$> tar -xJf Python-3.6.8.tar.xz
$> cd Python-3.6.8
$> ./configure --enable-optimizations
$> make altinstall

Μόλις εγκατασταθεί με επιτυχία η Python3.6, πρέπει να ολοκληρωθούν οι υπόλοιπες απαιτήσεις, όπως η δημιουργία και η ενεργοποίηση ενός εικονικού περιβάλλοντος. Επίσης, η μονάδα pip ενημερώνεται στην πιο πρόσφατη έκδοση και χρησιμοποιείται για την εγκατάσταση του pg_chameleon. Οι παρακάτω εντολές εγκαθιστούν σκόπιμα το pg_chameleon 2.0.9, παρόλο που η τελευταία έκδοση είναι 2.0.10. Αυτό είναι απαραίτητο για την αποφυγή νέων σφαλμάτων στην ενημερωμένη έκδοση.

$> python3.6 -m venv venv
$> source venv/bin/activate
(venv) $> pip install pip --upgrade
(venv) $> pip install pg_chameleon==2.0.9

Στη συνέχεια καλούμε το pg_chameleon (ο chameleon είναι μια εντολή) με το όρισμα set_configuration_files για να ενεργοποιήσουμε το pg_chameleon και να δημιουργήσουμε τους προεπιλεγμένους καταλόγους και αρχεία διαμόρφωσης.

(venv) $> chameleon set_configuration_files
creating directory /root/.pg_chameleon
creating directory /root/.pg_chameleon/configuration/
creating directory /root/.pg_chameleon/logs/
creating directory /root/.pg_chameleon/pid/
copying configuration  example in /root/.pg_chameleon/configuration//config-example.yml

Δημιουργούμε τώρα ένα αντίγραφο του config-example.yml ως default.yml ώστε να γίνει το προεπιλεγμένο αρχείο διαμόρφωσης. Ένα δείγμα αρχείου διαμόρφωσης για αυτό το παράδειγμα παρέχεται παρακάτω.

$> cat default.yml
---
#global settings
pid_dir: '~/.pg_chameleon/pid/'
log_dir: '~/.pg_chameleon/logs/'
log_dest: file
log_level: info
log_days_keep: 10
rollbar_key: ''
rollbar_env: ''

# type_override allows the user to override the default type conversion into a different one.
type_override:
  "tinyint(1)":
    override_to: boolean
    override_tables:
      - "*"

#postgres  destination connection
pg_conn:
  host: "192.168.56.106"
  port: "5433"
  user: "usr_replica"
  password: "pass123"
  database: "db_replica"
  charset: "utf8"

sources:
  mysql:
    db_conn:
      host: "192.168.56.102"
      port: "3306"
      user: "usr_replica"
      password: "pass123"
      charset: 'utf8'
      connect_timeout: 10
    schema_mappings:
      world_x: pgworld_x
    limit_tables:
#      - delphis_mediterranea.foo
    skip_tables:
#      - delphis_mediterranea.bar
    grant_select_to:
      - usr_readonly
    lock_timeout: "120s"
    my_server_id: 100
    replica_batch_size: 10000
    replay_max_rows: 10000
    batch_retention: '1 day'
    copy_max_memory: "300M"
    copy_mode: 'file'
    out_dir: /tmp
    sleep_loop: 1
    on_error_replay: continue
    on_error_read: continue
    auto_maintenance: "disabled"
    gtid_enable: No
    type: mysql
    skip_events:
      insert:
        - delphis_mediterranea.foo #skips inserts on the table delphis_mediterranea.foo
      delete:
        - delphis_mediterranea #skips deletes on schema delphis_mediterranea
      update:

Το αρχείο διαμόρφωσης σε αυτό το παράδειγμα είναι ένα δείγμα αρχείου pg_chameleon με μικρές τροποποιήσεις για να ταιριάζει με το περιβάλλον προέλευσης και προορισμού και παρακάτω είναι μια επισκόπηση των διαφόρων ενοτήτων του αρχείου διαμόρφωσης.

Το αρχείο διαμόρφωσης default.yml έχει μια ενότητα καθολικών ρυθμίσεων (καθολικές ρυθμίσεις) όπου μπορείτε να ελέγξετε ρυθμίσεις όπως η θέση του αρχείου κλειδώματος, η θέση των αρχείων καταγραφής, η περίοδος αποθήκευσης για τα αρχεία καταγραφής κ.λπ. Στη συνέχεια ακολουθεί η παράκαμψη τύπου ενότητα, όπου ορίζονται κανόνες για την παράκαμψη τύπων κατά την αναπαραγωγή. Το προεπιλεγμένο παράδειγμα χρησιμοποιεί έναν κανόνα παράκαμψης τύπου που μετατρέπει το tinyint(1) σε boolean. Στην επόμενη ενότητα, καθορίζουμε τις λεπτομέρειες της σύνδεσης στη βάση δεδομένων προορισμού. Στην περίπτωσή μας, αυτή είναι μια βάση δεδομένων PostgreSQL, που δηλώνεται ως pg_conn. Στην τελευταία ενότητα, καθορίζουμε τα δεδομένα προέλευσης, δηλαδή τις παραμέτρους σύνδεσης της βάσης δεδομένων προέλευσης, το σχήμα αντιστοίχισης των βάσεων δεδομένων προέλευσης και προορισμού, πίνακες προς παράβλεψη, χρονικό όριο, μνήμη, μέγεθος πακέτου. Σημειώστε ότι το "sources" είναι πληθυντικός, που σημαίνει ότι μπορούμε να προσθέσουμε πολλές βάσεις δεδομένων πηγών στον ίδιο στόχο για να ρυθμίσουμε μια διαμόρφωση "πολλά προς ένα".

Η βάση δεδομένων world_x στο παράδειγμα περιέχει 4 πίνακες με σειρές που προτείνει η κοινότητα MySQL για το παράδειγμα. Μπορεί να γίνει λήψη εδώ. Το δείγμα βάσης δεδομένων έρχεται ως tar και συμπιεσμένο αρχείο με οδηγίες για τη δημιουργία και την εισαγωγή συμβολοσειρών.

Ένας ειδικός χρήστης με το ίδιο όνομα usr_replica δημιουργείται στις βάσεις δεδομένων MySQL και PostgreSQL. Η MySQL της παρέχει πρόσθετη πρόσβαση ανάγνωσης σε όλους τους αναπαραγόμενους πίνακες.

mysql> CREATE USER usr_replica ;
mysql> SET PASSWORD FOR usr_replica='pass123';
mysql> GRANT ALL ON world_x.* TO 'usr_replica';
mysql> GRANT RELOAD ON *.* to 'usr_replica';
mysql> GRANT REPLICATION CLIENT ON *.* to 'usr_replica';
mysql> GRANT REPLICATION SLAVE ON *.* to 'usr_replica';
mysql> FLUSH PRIVILEGES;

Στην πλευρά PostgreSQL, δημιουργείται μια βάση δεδομένων db_replica που δέχεται αλλαγές από τη βάση δεδομένων MySQL. Ο χρήστης usr_replica στο PostgreSQL διαμορφώνεται αυτόματα ως ο κάτοχος των δύο σχημάτων pgworld_x και sch_chameleon, τα οποία περιέχουν τους πραγματικούς αναπαραγόμενους πίνακες και τους πίνακες καταλόγου αναπαραγωγής, αντίστοιχα. Το όρισμα create_replica_schema είναι υπεύθυνο για την αυτόματη διαμόρφωση, όπως θα δείτε παρακάτω.

postgres=# CREATE USER usr_replica WITH PASSWORD 'pass123';
CREATE ROLE
postgres=# CREATE DATABASE db_replica WITH OWNER usr_replica;
CREATE DATABASE

Η βάση δεδομένων MySQL έχει διαμορφωθεί με ορισμένες αλλαγές ώστε να είναι έτοιμη για αναπαραγωγή όπως φαίνεται παρακάτω. Θα χρειαστεί να κάνετε επανεκκίνηση του διακομιστή βάσης δεδομένων για να τεθούν σε ισχύ οι αλλαγές.

$> vi /etc/my.cnf
binlog_format= ROW
binlog_row_image=FULL
log-bin = mysql-bin
server-id = 1

Τώρα είναι σημαντικό να ελέγξετε τη σύνδεση και στους δύο διακομιστές βάσης δεδομένων, ώστε να μην υπάρχουν προβλήματα κατά την εκτέλεση των εντολών pg_chameleon.

Στον κόμβο PostgreSQL:

$> mysql -u usr_replica -Ap'admin123' -h 192.168.56.102 -D world_x

Στον κόμβο MySQL:

$> psql -p 5433 -U usr_replica -h 192.168.56.106 db_replica

Οι επόμενες τρεις εντολές pg_chameleon (chameleon) προετοιμάζουν το περιβάλλον, προσθέτουν την πηγή και αρχικοποιούν το αντίγραφο. Το όρισμα create_replica_schema στο pg_chameleon δημιουργεί ένα προεπιλεγμένο σχήμα (sch_chameleon) και ένα σχήμα αναπαραγωγής (pgworld_x) στη βάση δεδομένων PostgreSQL, όπως είπαμε. Το όρισμα add_source προσθέτει μια βάση δεδομένων πηγής στη διαμόρφωση διαβάζοντας το αρχείο διαμόρφωσης (default.yml), το οποίο στην περίπτωσή μας είναι mysql, και το init_replica προετοιμάζει τη διαμόρφωση με βάση τις ρυθμίσεις στο αρχείο διαμόρφωσης.

$> chameleon create_replica_schema --debug
$> chameleon add_source --config default --source mysql --debug
$> chameleon init_replica --config default --source mysql --debug

Η έξοδος αυτών των τριών εντολών δείχνει ξεκάθαρα την επιτυχία τους. Όλες οι αποτυχίες ή τα συντακτικά σφάλματα υποδεικνύονται σε απλά και κατανοητά μηνύματα με συμβουλές για τον τρόπο επίλυσης προβλημάτων.

Τέλος, ξεκινάμε την αναπαραγωγή με start_replica και λαμβάνουμε ένα μήνυμα επιτυχίας.

$> chameleon start_replica --config default --source mysql 
output: Starting the replica process for source mysql

Η κατάσταση της αναπαραγωγής μπορεί να ερωτηθεί με το όρισμα show_status και τα σφάλματα μπορούν να προβληθούν με το όρισμα show_errors.

Το αποτέλεσμα.

Όπως έχουμε ήδη πει, οι δαίμονες διαχειρίζονται κάθε συνάρτηση αναπαραγωγής. Για να τα προβάλετε, υποβάλετε ερώτημα στον πίνακα διεργασιών με την εντολή Linux ps, όπως φαίνεται παρακάτω.

Το αποτέλεσμα.

Η αναπαραγωγή δεν θεωρείται ρυθμισμένη μέχρι να τη δοκιμάσουμε σε πραγματικό χρόνο, όπως φαίνεται παρακάτω. Δημιουργούμε έναν πίνακα, εισάγουμε μερικές εγγραφές στη βάση δεδομένων MySQL και καλούμε το όρισμα sync_tables στο pg_chameleon για να ενημερώσουμε τους δαίμονες και να αναπαράγουμε τον πίνακα με τις εγγραφές στη βάση δεδομένων PostgreSQL.

mysql> create table t1 (n1 int primary key, n2 varchar(10));
Query OK, 0 rows affected (0.01 sec)
mysql> insert into t1 values (1,'one');
Query OK, 1 row affected (0.00 sec)
mysql> insert into t1 values (2,'two');
Query OK, 1 row affected (0.00 sec)

$> chameleon sync_tables --tables world_x.t1 --config default --source mysql
Sync tables process for source mysql started.

Για να επικυρώσουμε τα αποτελέσματα της δοκιμής, ρωτάμε τον πίνακα από τη βάση δεδομένων PostgreSQL και εξάγουμε τις σειρές.

$> psql -p 5433 -U usr_replica -d db_replica -c "select * from pgworld_x.t1";
 n1 |  n2
----+-------
  1 | one
  2 | two

Εάν κάνουμε μετεγκατάσταση, οι ακόλουθες εντολές pg_chameleon θα είναι το τέλος της μετεγκατάστασης. Οι εντολές θα πρέπει να εκτελούνται αφού επαληθεύσουμε ότι οι σειρές όλων των πινάκων προορισμού έχουν αντιγραφεί, με αποτέλεσμα μια κανονικά μεταφερθείσα βάση δεδομένων PostgreSQL χωρίς αναφορές στη βάση δεδομένων πηγής ή στο σχήμα αναπαραγωγής (sch_chameleon).

$> chameleon stop_replica --config default --source mysql 
$> chameleon detach_replica --config default --source mysql --debug

Μπορείτε προαιρετικά να διαγράψετε την αρχική διαμόρφωση και το σχήμα αναπαραγωγής με τις ακόλουθες εντολές.

$> chameleon drop_source --config default --source mysql --debug
$> chameleon drop_replica_schema --config default --source mysql --debug

Οφέλη του pg_chameleon

Εύκολη εγκατάσταση και διαμόρφωση.
Βολική αντιμετώπιση προβλημάτων και ανίχνευση ανωμαλιών με σαφή μηνύματα σφάλματος.
Πρόσθετοι ειδικοί πίνακες μπορούν να προστεθούν στην αναπαραγωγή μετά την αρχικοποίηση χωρίς αλλαγή της υπόλοιπης διαμόρφωσης.
Είναι δυνατό να ρυθμίσετε πολλαπλές βάσεις δεδομένων πηγών για μια βάση δεδομένων προορισμού, και αυτό είναι πολύ βολικό εάν συγχωνεύετε δεδομένα από μία ή περισσότερες βάσεις δεδομένων MySQL σε μία βάση δεδομένων PostgreSQL.
Μπορείτε να επιλέξετε να μην επαναληφθούν οι επιλεγμένοι πίνακες.

Μειονεκτήματα του pg_chameleon

Υποστηρίζεται μόνο με MySQL 5.5 και άνω ως πηγή και PostgreSQL 9.5 και άνω ως βάση δεδομένων προορισμού.
Κάθε πίνακας πρέπει να έχει ένα πρωτεύον ή μοναδικό κλειδί, διαφορετικά οι πίνακες αρχικοποιούνται στη διαδικασία init_replica αλλά δεν αναπαράγονται.
Μονόδρομη αναπαραγωγή - μόνο από τη MySQL στην PostgreSQL. Επομένως, είναι κατάλληλο μόνο για το ενεργητικό-παθητικό σχήμα.
Η πηγή μπορεί να είναι μόνο μια βάση δεδομένων MySQL και η υποστήριξη για μια βάση δεδομένων PostgreSQL ως πηγή είναι μόνο πειραματική και περιορισμένη (μάθετε περισσότερα εδώ)

Σύνολα για pg_chameleon

Η μέθοδος αναπαραγωγής στο pg_chameleon είναι εξαιρετική για τη μετεγκατάσταση μιας βάσης δεδομένων από τη MySQL στην PostgreSQL. Το μεγάλο μειονέκτημα είναι ότι η αναπαραγωγή είναι μόνο μονόδρομη, επομένως οι επαγγελματίες της βάσης δεδομένων είναι απίθανο να θέλουν να τη χρησιμοποιήσουν για οτιδήποτε άλλο εκτός από τη μετανάστευση. Αλλά το πρόβλημα της μονόδρομης αναπαραγωγής μπορεί να λυθεί με ένα άλλο εργαλείο ανοιχτού κώδικα - το SymmetricDS.

Διαβάστε περισσότερα στην επίσημη τεκμηρίωση εδώ. Μπορείτε να βρείτε βοήθεια για τη γραμμή εντολών εδώ.

Επισκόπηση του SymmetricDS

Το SymmetricDS είναι ένα εργαλείο ανοιχτού κώδικα που αναπαράγει οποιαδήποτε βάση δεδομένων σε οποιαδήποτε άλλη κοινή βάση δεδομένων: Oracle, MongoDB, PostgreSQL, MySQL, SQL Server, MariaDB, DB2, Sybase, Greenplum, Informix, H2, Firebird και άλλες παρουσίες βάσης δεδομένων cloud, για παράδειγμα Redshift, και Azure, κ.λπ. Διαθέσιμα χαρακτηριστικά: συγχρονισμός βάσης δεδομένων και αρχείων, αναπαραγωγή πολλαπλών βασικών βάσεων δεδομένων, φιλτραρισμένος συγχρονισμός, μετασχηματισμός και άλλα. Αυτό είναι ένα εργαλείο Java και απαιτεί την τυπική έκδοση JRE ή JDK (έκδοση 8.0 ή νεότερη). Εδώ μπορείτε να καταγράψετε τις αλλαγές δεδομένων σε ενεργοποιητές στη βάση δεδομένων προέλευσης και να τις στείλετε στην κατάλληλη βάση δεδομένων προορισμού ως παρτίδες.

Δυνατότητες SymmetricDS

Το εργαλείο είναι ανεξάρτητο από την πλατφόρμα, που σημαίνει ότι δύο ή περισσότερες διαφορετικές βάσεις δεδομένων μπορούν να ανταλλάσσουν δεδομένα.
Οι σχεσιακές βάσεις δεδομένων συγχρονίζονται καταγράφοντας αλλαγές δεδομένων και οι βάσεις δεδομένων που βασίζονται σε συστήματα αρχείων χρησιμοποιούν συγχρονισμό αρχείων.
Αμφίδρομη αναπαραγωγή χρησιμοποιώντας μεθόδους ώθησης και έλξης που βασίζονται σε ένα σύνολο κανόνων.
Η μετάδοση δεδομένων είναι δυνατή μέσω ασφαλών δικτύων και δικτύων με χαμηλό εύρος ζώνης.
Αυτόματη ανάκτηση όταν οι κόμβοι επανέρχονται μετά από αποτυχία και αυτόματη επίλυση διενέξεων.
Συμβατά με το νέφος και αποτελεσματικά API επεκτάσεων.

Παράδειγμα

Το SymmetricDS μπορεί να ρυθμιστεί με έναν από τους δύο τρόπους:
Ένας κύριος (γονικός) κόμβος που συντονίζει κεντρικά την αναπαραγωγή δεδομένων μεταξύ δύο εξαρτημένων (παιδιών) κόμβων και η ανταλλαγή δεδομένων μεταξύ θυγατρικών κόμβων πραγματοποιείται μόνο μέσω του γονέα.
Ένας ενεργός κόμβος (κόμβος 1) μπορεί να επικοινωνήσει για αναπαραγωγή με έναν άλλο ενεργό κόμβο (κόμβος 2) χωρίς ενδιάμεσο.

Και στις δύο επιλογές, η ανταλλαγή δεδομένων πραγματοποιείται χρησιμοποιώντας Push και Pull. Σε αυτό το παράδειγμα, θα εξετάσουμε τη διαμόρφωση ενεργού-ενεργού. Είναι πολύ μεγάλο για να περιγράψω ολόκληρη την αρχιτεκτονική, γι' αυτό μελετήστε οδηγόςγια να μάθετε περισσότερα σχετικά με τη συσκευή SymmetricDS.

Η εγκατάσταση του SymmetricDS είναι εύκολη: κατεβάστε το αρχείο zip ανοιχτού κώδικα ως εκ τούτου, και να το εξαγάγετε όπου θέλετε. Ο παρακάτω πίνακας παραθέτει τη θέση εγκατάστασης και την έκδοση του SymmetricDS σε αυτό το παράδειγμα, καθώς και εκδόσεις βάσης δεδομένων, εκδόσεις Linux, διευθύνσεις IP και θύρες και για τους δύο κόμβους.

Πλήθος
vm1
vm2

Έκδοση OS
CentOS Linux 7.6 x86_64
CentOS Linux 7.6 x86_64

Έκδοση διακομιστή βάσης δεδομένων
MySQL 5.7.26
PostgreSQL 10.5

Θύρα DB
3306
5832

Διεύθυνση IP
192.168.1.107
192.168.1.112

Έκδοση SymmetricDS
SymmetricDS 3.9
SymmetricDS 3.9

Διαδρομή εγκατάστασης SymmetricDS
/usr/local/symmetric-server-3.9.20
/usr/local/symmetric-server-3.9.20

Όνομα κεντρικού υπολογιστή SymmetricDS
corp-000
κατάστημα-001

Εδώ εγκαθιστούμε το SymmetricDS στο /usr/local/symmetric-server-3.9.20 και διάφοροι υποκατάλογοι και αρχεία θα αποθηκευτούν εκεί. Μας ενδιαφέρουν τα δείγματα υποκαταλόγων και οι κινητήρες. Ο κατάλογος δειγμάτων περιέχει δείγματα αρχείων διαμόρφωσης με ιδιότητες κόμβου, καθώς και δείγματα σεναρίων SQL για γρήγορη εκκίνηση της επίδειξης.

Στον κατάλογο δειγμάτων, βλέπουμε τρία αρχεία διαμόρφωσης με ιδιότητες κόμβου - το όνομα δείχνει τη φύση του κόμβου σε ένα συγκεκριμένο σχήμα.

corp-000.properties
store-001.properties
store-002.properties

Το SymmetricDS έχει όλα τα απαραίτητα αρχεία διαμόρφωσης για ένα βασικό σχήμα 3 κόμβων (επιλογή 1) και τα ίδια αρχεία μπορούν να χρησιμοποιηθούν για ένα σχήμα 2 κόμβων (επιλογή 2). Αντιγράψτε το απαιτούμενο αρχείο διαμόρφωσης από τον κατάλογο δειγμάτων σε μηχανές στον κεντρικό υπολογιστή vm1. Αποδεικνύεται ως εξής:

$> cat engines/corp-000.properties
engine.name=corp-000
db.driver=com.mysql.jdbc.Driver
db.url=jdbc:mysql://192.168.1.107:3306/replica_db?autoReconnect=true&useSSL=false
db.user=root
db.password=admin123
registration.url=
sync.url=http://192.168.1.107:31415/sync/corp-000
group.id=corp
external.id=000

Αυτός ο κόμβος ονομάζεται corp-000 στη διαμόρφωση SymmetricDS και η σύνδεση της βάσης δεδομένων διαχειρίζεται το πρόγραμμα οδήγησης mysql jdbc που χρησιμοποιεί την παραπάνω συμβολοσειρά σύνδεσης και τα διαπιστευτήρια σύνδεσης. Συνδεόμαστε στη βάση δεδομένων replica_db και θα δημιουργηθούν πίνακες κατά τη δημιουργία σχήματος. Το sync.url εμφανίζει τον σύνδεσμο προς τον κόμβο προς συγχρονισμό.

Ο κόμβος 2 στον κεντρικό υπολογιστή vm2 έχει ρυθμιστεί ως store-001 και τα υπόλοιπα καθορίζονται στο αρχείο node.properties παρακάτω. Ο κόμβος store-001 εκτελεί τη βάση δεδομένων PostgreSQL και το pgdb_replica είναι η βάση δεδομένων προς αναπαραγωγή. Το register.url επιτρέπει στον vm2 host να επικοινωνήσει με τον vm1 host και να λάβει λεπτομέρειες διαμόρφωσης από αυτόν.

$> cat engines/store-001.properties
engine.name=store-001
db.driver=org.postgresql.Driver
db.url=jdbc:postgresql://192.168.1.112:5832/pgdb_replica
db.user=postgres
db.password=admin123
registration.url=http://192.168.1.107:31415/sync/corp-000
group.id=store
external.id=001

Το ολοκληρωμένο παράδειγμα SymmetricDS περιέχει επιλογές για τη ρύθμιση αμφίδρομης αναπαραγωγής μεταξύ δύο διακομιστών βάσης δεδομένων (δύο κόμβοι). Τα παρακάτω βήματα εκτελούνται στον κεντρικό υπολογιστή vm1 (corp-000), ο οποίος θα δημιουργήσει ένα δείγμα σχήματος με 4 πίνακες. Στη συνέχεια, η εκτέλεση των create-sym-tables με την εντολή symadmin δημιουργεί πίνακες καταλόγου όπου θα αποθηκευτούν οι κανόνες και η κατεύθυνση της αναπαραγωγής μεταξύ των κόμβων. Τέλος, τα δείγματα δεδομένων φορτώνονται στους πίνακες.

vm1$> cd /usr/local/symmetric-server-3.9.20/bin
vm1$> ./dbimport --engine corp-000 --format XML create_sample.xml
vm1$> ./symadmin --engine corp-000 create-sym-tables
vm1$> ./dbimport --engine corp-000 insert_sample.sql

Στο παράδειγμα, οι πίνακες item και item_selling_price διαμορφώνονται αυτόματα ώστε να αναπαράγονται από το corp-000 στο store-001 και οι πίνακες πώλησης (sale_transaction και sale_return_line_item) διαμορφώνονται αυτόματα ώστε να αναπαράγονται από το store-001 στο corp-000. Τώρα δημιουργούμε ένα σχήμα στη βάση δεδομένων PostgreSQL στον κεντρικό υπολογιστή vm2 (store-001) για να το προετοιμάσουμε για λήψη δεδομένων από το corp-000.

vm2$> cd /usr/local/symmetric-server-3.9.20/bin
vm2$> ./dbimport --engine store-001 --format XML create_sample.xml

Βεβαιωθείτε ότι έχετε ελέγξει ότι η βάση δεδομένων MySQL στο vm1 διαθέτει πίνακες δειγμάτων και πίνακα καταλόγου SymmetricDS. Σημειώστε ότι οι πίνακες συστήματος SymmetricDS (με το πρόθεμα sym_) είναι προς το παρόν διαθέσιμοι μόνο στον κόμβο corp-000, επειδή εκεί εκτελέσαμε την εντολή δημιουργία-sym-tables και θα διαχειριστούμε την αναπαραγωγή. Και στη βάση δεδομένων στον κόμβο store-001 θα υπάρχουν μόνο 4 πίνακες παραδειγμάτων χωρίς δεδομένα.

Ολα. Το περιβάλλον είναι έτοιμο να εκτελέσει διεργασίες διακομιστή sym και στους δύο κόμβους όπως φαίνεται παρακάτω.

vm1$> cd /usr/local/symmetric-server-3.9.20/bin
vm1$> sym 2>&1 &

Οι εγγραφές καταγραφής αποστέλλονται στο αρχείο καταγραφής φόντου (symmetric.log) στον φάκελο καταγραφής στον κατάλογο όπου είναι εγκατεστημένο το SymmetricDS, καθώς και στην τυπική έξοδο. Ο διακομιστής Sym μπορεί τώρα να εκκινηθεί στον κόμβο store-001.

vm2$> cd /usr/local/symmetric-server-3.9.20/bin
vm2$> sym 2>&1 &

Εάν εκτελέσετε τη διαδικασία διακομιστή sym στον κεντρικό υπολογιστή vm2, θα δημιουργήσει επίσης τους πίνακες καταλόγου SymmetricDS στη βάση δεδομένων PostgreSQL. Εάν εκτελέσετε τη διαδικασία διακομιστή sym και στους δύο κόμβους, θα συντονιστούν μεταξύ τους για την αναπαραγωγή δεδομένων από το corp-000 στο store-001. Εάν μετά από λίγα δευτερόλεπτα ρωτήσουμε και τους 4 πίνακες και στις δύο πλευρές, θα δούμε ότι η αναπαραγωγή ήταν επιτυχής. Ή μπορείτε να στείλετε το bootstrap στο store-001 από το corp-000 με την ακόλουθη εντολή.

vm1$> ./symadmin --engine corp-000 reload-node 001

Σε αυτό το σημείο, μια νέα εγγραφή εισάγεται στον πίνακα στοιχείων στη βάση δεδομένων MySQL στον κόμβο corp-000 (κεντρικός υπολογιστής: vm1) και μπορεί να ελεγχθεί για αναπαραγωγή στη βάση δεδομένων PostgreSQL στον κόμβο αποθήκευσης-001 (κεντρικός υπολογιστής: vm2). Βλέπουμε μια λειτουργία Pull για τη μετακίνηση δεδομένων από το corp-000 στο store-001.

mysql> insert into item values ('22000002','Jelly Bean');
Query OK, 1 row affected (0.00 sec)

vm2$> psql -p 5832 -U postgres pgdb_replica -c "select * from item"
 item_id  |   name
----------+-----------
 11000001 | Yummy Gum
 22000002 | Jelly Bean
(2 rows)

Για να εκτελέσουμε μια λειτουργία push για τη μετακίνηση δεδομένων από το store-001 στο corp-000, εισάγουμε μια εγγραφή στον πίνακα sale_transaction και επαληθεύουμε ότι η αναπαραγωγή έχει ολοκληρωθεί.

Το αποτέλεσμα.

Βλέπουμε μια επιτυχημένη ρύθμιση αμφίδρομης αναπαραγωγής των παραδειγμάτων πινάκων μεταξύ των βάσεων δεδομένων MySQL και PostgreSQL. Για να ρυθμίσετε την αναπαραγωγή για νέους πίνακες χρηστών, ακολουθήστε τα παρακάτω βήματα. Δημιουργούμε τον πίνακα t1 για παράδειγμα και ρυθμίζουμε τους κανόνες αναπαραγωγής του ως εξής. Έτσι, ρυθμίσαμε μόνο την αναπαραγωγή από το corp-000 στο store-001.

mysql> create table  t1 (no integer);
Query OK, 0 rows affected (0.01 sec)

mysql> insert into sym_channel (channel_id,create_time,last_update_time) 
values ('t1',current_timestamp,current_timestamp);
Query OK, 1 row affected (0.01 sec)

mysql> insert into sym_trigger (trigger_id, source_table_name,channel_id,
last_update_time, create_time) values ('t1', 't1', 't1', current_timestamp,
current_timestamp);
Query OK, 1 row affected (0.01 sec)

mysql> insert into sym_trigger_router (trigger_id, router_id,
Initial_load_order, create_time,last_update_time) values ('t1',
'corp-2-store-1', 1, current_timestamp,current_timestamp);
Query OK, 1 row affected (0.01 sec)

Στη συνέχεια, η διαμόρφωση ειδοποιείται για την αλλαγή σχήματος, δηλαδή την προσθήκη ενός νέου πίνακα, χρησιμοποιώντας την εντολή symadmin με το όρισμα sync-triggers, το οποίο αναδημιουργεί τους κανόνες ετικέτας ώστε να ταιριάζουν με τους ορισμούς του πίνακα. Το Send-schema εκτελείται για την αποστολή αλλαγών σχήματος στο store-001 και ο πίνακας t1 αναπαράγεται.

vm1$> ./symadmin -e corp-000 --node=001 sync-triggers    
vm1$> ./symadmin send-schema -e corp-000 --node=001 t1

Οφέλη του SymmetricDS

Εύκολη εγκατάσταση και διαμόρφωση, συμπεριλαμβανομένου ενός έτοιμου συνόλου αρχείων με παραμέτρους για τη δημιουργία ενός σχήματος με τρεις ή δύο κόμβους.
Βάσεις δεδομένων μεταξύ πλατφορμών και ανεξαρτησία πλατφόρμας, συμπεριλαμβανομένων διακομιστών, φορητών υπολογιστών και φορητών συσκευών.
Αντιγράψτε οποιαδήποτε βάση δεδομένων σε οποιαδήποτε άλλη βάση δεδομένων τοπικά, στο WAN ή στο cloud.
Δυνατότητα βέλτιστης εργασίας με μερικές βάσεις δεδομένων ή αρκετές χιλιάδες για εύκολη αναπαραγωγή.
Έκδοση επί πληρωμή με GUI και εξαιρετική υποστήριξη.

Μειονεκτήματα του SymmetricDS

Πρέπει να ορίσετε με μη αυτόματο τρόπο τους κανόνες και την κατεύθυνση της αναπαραγωγής στη γραμμή εντολών μέσω δηλώσεων SQL για να φορτώσετε τους πίνακες καταλόγου, κάτι που μπορεί να είναι άβολο.
Η ρύθμιση πολλών πινάκων για αναπαραγωγή μπορεί να είναι κουραστική, εκτός και αν χρησιμοποιείτε σενάρια για να δημιουργήσετε εντολές SQL που ορίζουν τους κανόνες και την κατεύθυνση της αναπαραγωγής.
Υπάρχουν πάρα πολλές πληροφορίες στα αρχεία καταγραφής και μερικές φορές χρειάζεται να καθαρίσετε το αρχείο καταγραφής ώστε να μην καταλαμβάνει πολύ χώρο.

Περίληψη του SymmetricDS

Το SymmetricDS σάς επιτρέπει να ρυθμίσετε την αμφίδρομη αναπαραγωγή μεταξύ δύο, τριών ή ακόμα και πολλών χιλιάδων κόμβων προκειμένου να αναπαραγάγετε και να συγχρονίσετε αρχεία. Είναι ένα μοναδικό εργαλείο που εκτελεί πολλές εργασίες από μόνο του, όπως αυτόματη ανάκτηση δεδομένων μετά από μεγάλο χρόνο διακοπής λειτουργίας σε έναν κόμβο, ασφαλή και αποτελεσματική επικοινωνία μεταξύ κόμβων μέσω HTTPS, αυτόματη διαχείριση συγκρούσεων με βάση ένα σύνολο κανόνων κ.λπ. SymmetricDS μεταξύ οποιωνδήποτε βάσεων δεδομένων, επομένως, μπορεί να χρησιμοποιηθεί για μια μεγάλη ποικιλία σεναρίων, συμπεριλαμβανομένης της μετεγκατάστασης, της αναβάθμισης, της διανομής, του φιλτραρίσματος και του μετασχηματισμού δεδομένων σε πλατφόρμες.

Το παράδειγμα βασίζεται στον επίσημο γρήγορος οδηγός από την SymmetricDS. ΣΕ εγχειρίδιο χρήστη Περιγράφει λεπτομερώς τις διάφορες έννοιες που εμπλέκονται στη ρύθμιση της αναπαραγωγής με το SymmetricDS.

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο