PostgreSQL және MySQL арасындағы кросс репликация

PostgreSQL және MySQL арасындағы кросс репликация

Мен PostgreSQL және MySQL арасындағы кросс-репликацияны, сондай-ақ екі дерекқор серверлері арасындағы кросс-репликацияны орнату әдістерін сипаттаймын. Әдетте, кросс-репликацияланған дерекқорлар біртекті деп аталады және бұл бір RDBMS серверінен екіншісіне көшудің ыңғайлы әдісі болып табылады.

PostgreSQL және MySQL дерекқорлары әдетте реляциялық болып саналады, бірақ қосымша кеңейтімдермен олар NoSQL мүмкіндіктерін ұсынады. Мұнда біз реляциялық ДҚБЖ тұрғысынан PostgreSQL және MySQL арасындағы репликацияны талқылаймыз.

Дерекқор серверлері, артықшылықтар, шектеулер және пайдалану жағдайлары арасындағы репликацияны конфигурациялау туралы түсінік алу үшін біз барлық ішкі жұмыстарды сипаттамаймыз, жай ғана негізгі принциптер.

Әдетте, екі бірдей дерекқор серверлері арасындағы репликация екілік режимде немесе негізгі (баспагер, негізгі немесе белсенді деп атайды) және бағыныңқы (жазылушы, күту режимі немесе пассивті) арасындағы сұрауларды пайдалану арқылы орындалады. Репликацияның мақсаты негізгі дерекқордың бағынышты жағында нақты уақыттағы көшірмесін беру болып табылады. Бұл жағдайда деректер негізгіден бағыныштыға, яғни белсендіден пассивтіге ауысады, өйткені репликация тек бір бағытта орындалады. Бірақ екі бағытта да екі дерекқор арасында репликацияны орнатуға болады, осылайша деректер белсенді-белсенді конфигурацияда құлдан негізгіге тасымалданады. Мұның бәрі, соның ішінде каскадты репликация екі немесе одан да көп бірдей дерекқор серверлері арасында мүмкін.Белсенді-белсенді немесе белсенді-пассивті конфигурация қажеттілікке, бастапқы конфигурацияда мұндай мүмкіндіктердің қолжетімділігіне немесе сыртқы конфигурация шешімдерін және бар теңдестірулерді пайдалануға байланысты.

Сипатталған конфигурация әртүрлі дерекқор серверлері арасында мүмкін. Серверді басқа дерекқор серверінен репликацияланған деректерді қабылдауға конфигурациялауға болады және қайталанатын деректердің нақты уақыттағы суретін сақтайды. MySQL және PostgreSQL осы конфигурациялардың көпшілігін үйде немесе үшінші тарап кеңейтімдері арқылы ұсынады, соның ішінде екілік журнал әдістері, дискіні құлыптау және мәлімдеме және жолға негізделген әдістер.

MySQL және PostgreSQL арасындағы кросс репликация бір дерекқор серверінен екіншісіне бір реттік көшіру үшін қажет. Бұл деректер базалары әртүрлі протоколдарды пайдаланады, сондықтан оларды тікелей байланыстыру мүмкін емес. Деректер алмасуын орнату үшін сыртқы ашық бастапқы құралды пайдалануға болады, мысалы, pg_chameleon.

pg_hameleon дегеніміз не

pg_chameleon — Python 3 жүйесінде MySQL-тен PostgreSQL-ге көшіру жүйесі. Ол Python-да да ашық бастапқы mysql-репликация кітапханасын пайдаланады. Жол кескіндері MySQL кестелерінен шығарылады және PostgreSQL дерекқорында JSONB нысандары ретінде сақталады, содан кейін pl/pgsql функциясы арқылы шифры шешіледі және PostgreSQL дерекқорында ойнатылады.

pg_chameleon ерекшеліктері

Бір кластерден бірнеше MySQL схемаларын бір-көп конфигурациясында бір мақсатты PostgreSQL дерекқорына көшіруге болады
Бастапқы және мақсатты схема атаулары бірдей болуы мүмкін емес.
Репликация деректерін каскадты MySQL репликасынан алуға болады.
Қателерді қайталай алмайтын немесе шығармайтын кестелер алынып тасталады.
Әрбір репликация функциясы демондармен басқарылады.
YAML негізіндегі параметрлер мен конфигурация файлдары арқылы басқару.

Мысал:

Хост
vm1
vm2

ОЖ нұсқасы
CentOS Linux 7.6 x86_64
CentOS Linux 7.5 x86_64

DB сервер нұсқасы
MySQL 5.7.26
PostgreSQL 10.5

ДҚ порты
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 қосу және әдепкі каталогтар мен конфигурация файлдарын жасау үшін 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) мәнін логикалық мәнге түрлендіретін түрді қайта анықтау ережесі болып табылады. Келесі бөлімде мақсатты дерекқорға қосылу мәліметтерін көрсетеміз. Біздің жағдайда бұл pg_conn деп белгіленген PostgreSQL дерекқоры. Соңғы бөлімде біз бастапқы деректерді, яғни бастапқы деректер қорының қосылу параметрлерін, бастапқы және мақсатты деректер базаларының арасындағы салыстыру схемасын, өткізіп жіберуді қажет ететін кестелерді, күту уақытын, жадты, пакет өлшемін көрсетеміз. «Көздер» көпше екенін ескеріңіз, яғни біз көп-бір конфигурацияны орнату үшін бір мақсатты дерекқорға бірнеше бастапқы дерекқорды қоса аламыз.

world_x дерекқорының мысалында MySQL қауымдастығы мысал ретінде ұсынатын жолдары бар 4 кесте бар. Оны жүктеп алуға болады осында. Дерекқор үлгісі тар және қысылған мұрағат ретінде жолдарды жасау және импорттау нұсқауларымен бірге келеді.

MySQL және PostgreSQL дерекқорларында usr_replica деген атпен арнайы пайдаланушы жасалады. 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 жағында MySQL дерекқорынан өзгертулерді қабылдайтын db_replica дерекқоры жасалады. PostgreSQL жүйесіндегі usr_replica пайдаланушысы автоматты түрде екі схеманың иесі ретінде конфигурацияланады: 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 (хамелеон) пәрмендері ортаны дайындайды, көзді қосады және репликаны инициализациялайды. pg_chameleon үшін create_replica_schema аргументі PostgreSQL дерекқорында әдепкі схеманы (sch_chameleon) және репликация схемасын (pgworld_x) жасайды, біз бұрын талқылаған болатынбыз. 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 дерекқорына бірнеше жазба енгіземіз және демондарды жаңарту және PostgreSQL дерекқорына жазбалармен кестені көшіру үшін pg_chameleon ішіндегі sync_tables аргументін шақырамыз.

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 пәрмендері оның соңы болады. Барлық мақсатты кестелердің жолдары репликацияланғанына және нәтиже бастапқы дерекқорға немесе репликация схемасына (sch_chameleon) сілтемесіз ұқыпты көшірілген PostgreSQL дерекқоры болатынына сенімді болғаннан кейін пәрмендерді орындау керек.

$> 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 және басқа да бұлттық дерекқор даналары, мысалы Redshift, және Azure және т.б. Қолжетімді мүмкіндіктер: дерекқор мен файлды синхрондау, көп негізгі дерекқорды репликациялау, сүзгіленген синхрондау, түрлендіру және т.б. Бұл Java құралы және JRE немесе JDK (8.0 немесе одан жоғары нұсқасы) стандартты шығарылымын қажет етеді. Мұнда бастапқы дерекқордағы триггерлерге жасалған деректер өзгерістерін жазып алуға және тиісті мақсатты дерекқорға пакеттер түрінде жіберуге болады.

SymmetricDS мүмкіндіктері

Құрал платформаға тәуелсіз, яғни екі немесе одан да көп әртүрлі дерекқорлар деректермен алмасуы мүмкін.
Реляциялық дерекқорлар деректерді өзгерту жазбалары арқылы синхрондалады, ал файлдық жүйе негізіндегі дерекқорлар файлды синхрондауды пайдаланады.
Ережелер жиынына негізделген Push және Pull әдістерін қолданатын екі жақты репликация.
Деректерді тасымалдау қауіпсіз және өткізу қабілеті төмен желілер арқылы мүмкін болады.
Түйіндер сәтсіздіктен кейін жұмысын қайта бастаған кезде автоматты қалпына келтіру және қақтығыстарды автоматты түрде шешу.
Бұлттық үйлесімді және қуатты кеңейтім API интерфейстері.

Мысал:

SymmetricDS екі жолдың бірімен конфигурациялануы мүмкін:
Екі бағынышты (еншілес) түйіндер арасындағы деректер репликациясын орталықтандыратын негізгі (ата-аналық) түйін және еншілес түйіндер арасындағы байланыс тек ата-ана арқылы жүзеге асады.
Белсенді түйін (1-түйін) делдалсыз басқа белсенді түйінмен (2-түйін) репликациялау үшін байланыса алады.

Екі опцияда деректер алмасу Push and Pull көмегімен жүзеге асырылады. Бұл мысалда біз белсенді-белсенді конфигурацияны қарастырамыз. Бүкіл архитектураны сипаттау тым көп уақытты алады, сондықтан зерттеуіңізді жасаңыз. көшбасшылықSymmetricDS құрылғысы туралы көбірек білу үшін.

SymmetricDS орнату өте қарапайым: zip файлының ашық бастапқы нұсқасын жүктеп алыңыз мұнда және оны қалаған жерден алыңыз. Төмендегі кестеде орнату орны және осы мысалдағы SymmetricDS нұсқасы, сондай-ақ дерекқор нұсқалары, Linux нұсқалары, IP мекенжайлары және екі түйінге арналған порттар туралы ақпарат берілген.

Хост
vm1
vm2

ОЖ нұсқасы
CentOS Linux 7.6 x86_64
CentOS Linux 7.6 x86_64

DB сервер нұсқасы
MySQL 5.7.26
PostgreSQL 10.5

ДҚ порты
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

Мұнда біз /usr/local/symmetric-server-3.9.20 ішіне SymmetricDS орнатамыз, сонда әртүрлі ішкі каталогтар мен файлдар сақталады. Бізді үлгілер мен қозғалтқыштардың ішкі каталогтары қызықтырады. Үлгілер каталогында түйін сипаттары бар мысал конфигурация файлдары, сондай-ақ жылдам бастау үшін мысал 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

SymmetricDS конфигурациясындағы бұл түйін corp-000 деп аталады және дерекқор қосылымын жоғарыдағы қосылым жолын және кіру тіркелгі деректерін пайдаланатын mysql jdbc драйвері өңдейді. Біз replica_db дерекқорына қосыламыз және кестелер схеманы жасау кезінде жасалады. sync.url синхрондау үшін түйінмен қай жерде байланысу керектігін көрсетеді.

vm2 хостындағы 2 түйін дүкен-001 ретінде конфигурацияланған, ал қалғандары төмендегі node.properties файлында көрсетілген. Түйін қоймасы-001 PostgreSQL дерекқорын іске қосады және pgdb_replica репликация дерекқоры болып табылады. Register.url vm2 хостына vm1 хостымен байланысуға және одан конфигурация мәліметтерін алуға мүмкіндік береді.

$> 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 мысалы екі дерекқор серверлері (екі түйін) арасында екі жақты репликацияны орнатуға арналған параметрлерді қамтиды. Төмендегі қадамдар 1 кестеден тұратын мысал схемасын жасайтын vm000 (corp-4) хостында орындалады. Содан кейін symadmin пәрменімен create-sym-tables іске қосу түйіндер арасындағы репликация ережелері мен бағыты сақталатын каталог кестелерін жасайды. Соңында үлгі деректер кестелерге жүктеледі.

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

Мысалда элемент және тауар_сату_бағасы кестелері 000-дан дүкен-001-ге көшіру үшін автоматты түрде конфигурацияланады, ал сату кестелері (сату_транзакциясы және сатылым_қайтару_жолы) дүкен-001-ден корпус-000-ға көшіру үшін автоматты түрде конфигурацияланады. Енді біз PostgreSQL дерекқорында vm2 хостында (дүкен-001) схеманы жасаймыз, оны corp-000 деректерін қабылдауға дайындаймыз.

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

vm1 жүйесіндегі MySQL дерекқорында мысал кестелері және SymmetricDS каталог кестелері бар екенін тексеріңіз. SymmetricDS жүйелік кестелері (sym_ префиксі бар) қазіргі уақытта тек corp-000 түйінінде қол жетімді екенін ескеріңіз, себебі біз осы жерде кестелерді құру-жазба пәрменін орындадық және репликацияны басқарамыз. Ал дүкен-001 түйініндегі дерекқорда деректерсіз тек 4 мысал кесте болады.

Барлық. Орта төменде көрсетілгендей екі түйінде де сим-сервер процестерін іске қосуға дайын.

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

Журнал жазбалары SymmetricDS орнатылған каталогтағы журналдар қалтасындағы фондық журнал файлына (symmetric.log), сондай-ақ стандартты шығысқа жіберіледі. Енді сим-серверді 001 түйінінде іске қосуға болады.

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

vm2 хостында сим-сервер процесін іске қоссаңыз, ол PostgreSQL дерекқорында SymmetricDS каталог кестелерін де жасайды. Егер екі түйінде де сим-сервер процесін іске қоссаңыз, олар corp-000-ден дүкен-001-ге дейінгі деректерді көшіру үшін бір-бірімен үйлестіреді. Бірнеше секундтан кейін біз барлық 4 кестені екі жақтан сұрасақ, репликация сәтті болғанын көреміз. Немесе жүктеу жолағын келесі пәрмен арқылы corp-001-ден дүкен-000 түйініне жіберуге болады.

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

Осы кезде Corp-000 түйініндегі MySQL дерекқорындағы элементтер кестесіне жаңа жазба енгізіледі (хост: vm1) және сіз оның PostgreSQL дерекқорына репликациясын 001 түйінінде (хост: vm2) тексере аласыз. Деректерді corp-000-ден дүкен-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)

Деректерді дүкен-001-ден корпус-000-ге жылжыту үшін Push әрекетін орындау үшін біз sale_transaction кестесіне жазба енгіземіз және репликацияның сәтті екенін тексереміз.

Нәтиже.

MySQL және PostgreSQL дерекқорлары арасында мысал кестелерінің екі жақты репликациясын сәтті орнатуды көреміз. Жаңа пайдаланушы кестелері үшін репликацияны орнату үшін мына қадамдарды орындаңыз: Мысалы, t1 кестесін жасаймыз және оның репликация ережелерін келесідей конфигурациялаймыз. Осылайша біз corp-000-ден дүкен-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 пәрменін пайдалану арқылы жаңа кестенің қосылуы туралы хабарланады. send-schema схема өзгерістерін қойма-001 түйініне жіберу үшін орындалады және t1 кестесінің репликациясы конфигурацияланады.

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

SymmetricDS артықшылықтары

Үш түйінді немесе екі түйінді схеманы құруға арналған параметрлері бар дайын файлдар жинағын қоса, оңай орнату және конфигурациялау.
Кросс-платформалық дерекқорлар және платформа тәуелсіздігі, соның ішінде серверлер, ноутбуктер және мобильді құрылғылар.
Кез келген дерекқорды жергілікті, WAN желісінде немесе бұлтта кез келген басқа дерекқорға көшіріңіз.
Ыңғайлы көшіру үшін бірнеше деректер базасымен немесе бірнеше мыңмен оңтайлы жұмыс істеу мүмкіндігі.
GUI және тамаша қолдауы бар ақылы нұсқа.

SymmetricDS кемшіліктері

Қолайсыз болуы мүмкін каталог кестелерін жүктеу үшін SQL операторлары арқылы пәрмен жолында репликация ережелері мен бағытын қолмен анықтау керек.
Репликация ережелері мен бағытын анықтайтын SQL мәлімдемелерін жасау үшін сценарийлерді пайдаланбасаңыз, репликация үшін көптеген кестелерді орнату жалықтыруы мүмкін.
Журналдарда тым көп ақпарат жазылып жатыр, кейде журнал файлын тым көп орын алмас үшін ретке келтіру қажет.

SymmetricDS нәтижелері

SymmetricDS файлдарды көшіру және синхрондау үшін екі, үш немесе тіпті бірнеше мың түйіндер арасында екі жақты репликацияны орнатуға мүмкіндік береді. Бұл түйінде ұзақ уақыт бойы тоқтап тұрғаннан кейін деректерді автоматты түрде қалпына келтіру, HTTPS арқылы түйіндер арасында қауіпсіз және тиімді деректер алмасу, ережелер жиынтығы негізінде қақтығыстарды автоматты түрде басқару және т.б. сияқты көптеген тапсырмаларды дербес орындайтын бірегей құрал. SymmetricDS орындайды. кез келген дерекқор арасындағы репликация, сондықтан оны платформалар бойынша деректерді тасымалдау, тасымалдау, тарату, сүзу және түрлендіруді қоса алғанда, сценарийлердің кең ауқымы үшін пайдалануға болады.

Мысал шенеунікке негізделген жылдам нұсқаулық SymmetricDS бойынша. IN Пайдаланушы нұсқаулығы SymmetricDS көмегімен репликацияны орнатуға қатысты әртүрлі тұжырымдамаларды егжей-тегжейлі сипаттайды.

Ақпарат көзі: www.habr.com

пікір қалдыру