Репликатсияи байни PostgreSQL ва MySQL

Репликатсияи байни PostgreSQL ва MySQL

Ман такрори байни PostgreSQL ва MySQL ва инчунин усулҳои танзими такрории байни ду сервери пойгоҳи додаҳоро шарҳ медиҳам. Одатан, пойгоҳи додаҳои такрорӣ якхела номида мешаванд ва он усули қулайи гузариш аз як сервери RDBMS ба сервери дигар мебошад.

Пойгоҳи додаҳои PostgreSQL ва MySQL одатан релятсионӣ ҳисобида мешаванд, аммо бо васеъшавии иловагӣ онҳо имкониятҳои NoSQL-ро пешниҳод мекунанд. Дар ин ҷо мо такрори байни PostgreSQL ва MySQL-ро аз нуқтаи назари реляционии DBMS баррасӣ хоҳем кард.

Мо тамоми корҳои дохилиро тавсиф намекунем, танҳо принсипҳои асосӣ, то шумо дар бораи конфигуратсияи такрорӣ байни серверҳои пойгоҳи додаҳо, бартариятҳо, маҳдудиятҳо ва ҳолатҳои истифода тасаввурот пайдо кунед.

Одатан, такрорӣ байни ду сервери якхелаи пойгоҳи додаҳо ё дар реҷаи дуӣ ё бо истифода аз дархостҳо байни устод (ношир, устод ё фаъол) ва ғулом (муштарӣ, интизорӣ ё ғайрифаъол) анҷом дода мешавад. Мақсади такрорӣ таъмин кардани нусхаи вақти воқеии пойгоҳи додаҳои асосӣ дар тарафи ғулом аст. Дар ин маврид маълумот аз устод ба ғулом, яъне аз фаъол ба пассив интиқол дода мешавад, зеро такрорӣ танҳо дар як самт иҷро мешавад. Аммо шумо метавонед нусхабардориро байни ду пойгоҳи додаҳо дар ҳар ду самт насб кунед, то маълумот аз ғулом ба устод дар конфигуратсияи фаъол-фаъол интиқол дода шавад. Ҳамаи ин, аз ҷумла такрори каскадӣ, дар байни ду ё зиёда серверҳои якхелаи пойгоҳи додаҳо имконпазир аст.Танзимоти фаъол-фаъол ё фаъол-фассивӣ аз ниёз, мавҷудияти чунин қобилиятҳо дар конфигуратсияи аввалия ё истифодаи ҳалли конфигуратсияи беруна ва муомилоти мавҷуда вобаста аст.

Конфигуратсияи тавсифшуда дар байни серверҳои гуногуни пойгоҳи додаҳо имконпазир аст. Серверро метавон танзим кард, ки маълумоти такроршавандаро аз дигар сервери пойгоҳи додаҳо қабул кунад ва ҳоло ҳам аксҳои лаҳзаи воқеии маълумоти такроршударо нигоҳ дорад. MySQL ва PostgreSQL аксари ин конфигуратсияҳоро дар дохили хона ё тавассути васеъшавии тарафи сеюм, аз ҷумла усулҳои сабти бинарӣ, қулфи диск ва усулҳои ба баёния ва сатр асосёфта пешниҳод мекунанд.

Репликатсияи байни MySQL ва PostgreSQL барои интиқоли якдафъаина аз як сервери пойгоҳи дода ба сервери дигар лозим аст. Ин пойгоҳи додаҳо протоколҳои гуногунро истифода мебаранд, бинобар ин бевосита пайваст кардани онҳо имконнопазир аст. Барои ташкили мубодилаи маълумот, шумо метавонед як абзори берунаи кушодаасосро истифода баред, масалан pg_chameleon.

pg_chameleon чист

pg_chameleon як системаи такрорӣ аз MySQL ба PostgreSQL дар Python 3 мебошад. Он китобхонаи кушодаи mysql-репликатсияро, инчунин дар 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

Версияи сервери DB
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

Сипас, мо бо далели set_configuration_files pg_chameleon (хамелеон фармон аст) занг мезанем, то 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) -ро ба арзиши мантиқӣ табдил медиҳад. Дар фасли оянда, мо тафсилоти пайвастшавӣ ба базаи ҳадафро муайян мекунем. Дар ҳолати мо, ин пойгоҳи додаҳои PostgreSQL мебошад, ки pg_conn таъин шудааст. Дар фасли охир мо маълумоти сарчашма, яъне параметрҳои пайвастшавии базаи манбаъ, схемаи харитасозии байни базаҳои манбаъ ва мақсаднок, ҷадвалҳое, ки бояд гузаред, вақти интизорӣ, хотира, андозаи бастаҳоро нишон медиҳем. Аҳамият диҳед, ки "манбаъҳо" ҷамъ аст, яъне мо метавонем ба як махзани ягонаи мақсаднок пойгоҳи додаҳои сарчашмаҳои сершумор илова кунем, то конфигуратсияи бисёр ба як танзим кунем.

Намунаи пойгоҳи додаи world_x дорои 4 ҷадвал бо сатрҳо мебошад, ки ҷомеаи MySQL ҳамчун намуна пешниҳод мекунад. Онро зеркашӣ кардан мумкин аст дар ин ҷо. Пойгоҳи намунавӣ ҳамчун бойгонии фишурда ва қатрон бо дастурҳо барои эҷод ва воридоти сатрҳо меояд.

Дар пойгоҳи додаҳои 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, пойгоҳи додаи 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 ва дигар намунаҳои махзани абрӣ, масалан Redshift ва Azure ва ғайра. Хусусиятҳои мавҷуда: синхронизатсияи пойгоҳи додаҳо ва файлҳо, такрории бисёрсоҳаи пойгоҳи додаҳо, синхронизатсияи филтршуда, табдилдиҳӣ ва ғайра. Ин абзори Java аст ва барориши стандартии JRE ё JDK (версияи 8.0 ё навтар) талаб мекунад. Дар ин ҷо, тағироти маълумотро ба триггерҳо дар пойгоҳи додаҳои манбаъ сабт кардан мумкин аст ва ба пойгоҳи додаҳои мақсадноки мувофиқ дар шакли гурӯҳҳо фиристода мешавад.

Хусусиятҳои SymmetricDS

Восита аз платформа мустақил аст, яъне ду ё зиёда пойгоҳи додаҳои гуногун метавонанд маълумотро мубодила кунанд.
Пойгоҳи додаҳои релятсионӣ бо истифода аз сабтҳои тағир додани маълумот ҳамоҳанг карда мешаванд, дар ҳоле ки пойгоҳи додаҳои ба системаи файлӣ асосёфта ҳамоҳангсозии файлро истифода мебаранд.
Репликатсияи дуҷониба бо истифода аз усулҳои Push and Pull дар асоси маҷмӯи қоидаҳо.
Интиқоли маълумот тавассути шабакаҳои бехатар ва фарохмаҷрои паст имконпазир аст.
Барқарорсозии худкор вақте ки гиреҳҳо пас аз нокомӣ ва ҳалли автоматии низоъ ба кор шурӯъ мекунанд.
API-ҳои васеъи абрӣ мувофиқ ва пурқувват.

Мисол

SymmetricDS-ро дар яке аз ду вариант танзим кардан мумкин аст:
Гиреҳи устод (волид), ки такрори маълумотро байни ду гиреҳи ғулом (кӯдак) ба таври мутамарказ ҳамоҳанг мекунад ва иртибот байни гиреҳҳои кӯдак танҳо тавассути волидайн сурат мегирад.
Гиреҳи фаъол (гиреҳи 1) метавонад барои такрорӣ бо дигар гиреҳи фаъол (гиреҳи 2) бидуни миёнарав муошират кунад.

Дар ҳарду интихоб мубодилаи маълумот бо истифода аз Push and Pull сурат мегирад. Дар ин мисол мо конфигуратсияи фаъол-фаъолро баррасӣ хоҳем кард. Барои тавсифи тамоми меъморӣ хеле тӯлонӣ хоҳад буд, бинобар ин тадқиқоти худро анҷом диҳед. роҳнамоБарои гирифтани маълумоти бештар дар бораи дастгоҳи SymmetricDS.

Насб кардани SymmetricDS хеле содда аст: версияи кушодаи файли zip-ро зеркашӣ кунед аз ин ҷо ва ба ҳар ҷое, ки мехоҳед, берун кунед. Дар ҷадвали зер маълумот дар бораи макони насб ва версияи SymmetricDS дар ин мисол, инчунин версияҳои пойгоҳи додаҳо, версияҳои Linux, суроғаҳои IP ва портҳо барои ҳарду гиреҳ оварда шудааст.

Идоракунанда
vm1
vm2

Версияи OS
CentOS Linux 7.6 x86_64
CentOS Linux 7.6 x86_64

Версияи сервери DB
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

Ин гиреҳ дар конфигуратсияи SymmetricDS corp-000 номида мешавад ва пайвасти пойгоҳи додаҳо аз ҷониби драйвери mysql jdbc идора карда мешавад, ки сатри пайвасти дар боло буда ва маълумоти эътимоднокии вурудро истифода мебарад. Мо ба пойгоҳи додаи replica_db пайваст мешавем ва ҷадвалҳо ҳангоми сохтани схема сохта мешаванд. sync.url нишон медиҳад, ки дар куҷо бо гиреҳ барои ҳамоҳангсозӣ тамос гирифтан лозим аст.

Гиреҳи 2 дар мизбони vm2 ҳамчун мағоза-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 дорои параметрҳо барои танзими такрори дуҷониба байни ду сервери пойгоҳи додаҳо (ду гиреҳ). Қадамҳои дар поён овардашуда дар host vm1 (corp-000) иҷро карда мешаванд, ки схемаи намунавиро бо 4 ҷадвал эҷод мекунад. Сипас, иҷро кардани ҷадвалҳои эҷоди сим-симҳо бо фармони 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

Дар мисол, ҷадвалҳои ашё ва нархи_фурӯш ба таври худкор барои такрор кардан аз corp-000 ба мағоза-001 ва ҷадвалҳои фурӯш (sale_transaction ва sale_return_line_item) ба таври худкор барои такрор кардан аз мағоза-001 ба корп-000 танзим карда мешаванд. Ҳоло мо дар пойгоҳи додаҳои PostgreSQL дар host vm2 (мағоза-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_) дар айни замон танҳо дар node corp-000 дастрасанд, зеро дар он ҷо мо фармони create-sym-tables-ро иҷро кардем ва такрориро идора мекунем. Ва дар базаи гиреҳи мағоза-001 танҳо 4 ҷадвали намунавӣ бидуни маълумот мавҷуд хоҳад буд.

Ҳама. Муҳит омода аст, ки равандҳои сервери симро дар ҳарду гиреҳ иҷро кунад, тавре ки дар зер нишон дода шудааст.

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

Сабтҳои журнал ба файли сабти замина (symmetric.log) дар папкаи гузоришҳо дар директорияе, ки SymmetricDS насб шудааст, инчунин ба баромади стандартӣ фиристода мешаванд. Ҳоло сервери симро дар гиреҳи мағоза-001 оғоз кардан мумкин аст.

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

Агар шумо раванди сервери симро дар мизбони vm2 иҷро кунед, он инчунин ҷадвалҳои каталоги SymmetricDS-ро дар пойгоҳи додаҳои PostgreSQL эҷод мекунад. Агар шумо раванди сервери симро дар ҳарду гиреҳ иҷро кунед, онҳо бо ҳамдигар ҳамоҳанг мешаванд, то маълумотро аз corp-000 то мағоза-001 такрор кунанд. Агар пас аз чанд сония мо ҳамаи 4 ҷадвалро дар ҳарду тараф пурсем, мо мебинем, ки такрорӣ муваффақ буд. Ё шумо метавонед bootstrap-ро ба гиреҳ мағоза-001 аз corp-000 бо фармони зерин фиристед.

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

Дар ин лаҳза, сабти нав ба ҷадвали адад дар базаи MySQL дар node corp-000 (хост: vm1) ворид карда мешавад ва шумо метавонед такрории онро ба пойгоҳи додаҳои PostgreSQL дар гиреҳи мағоза-001 (хост: vm2) тафтиш кунед. Мо амалиёти кашидани маълумотро аз 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 барои интиқоли маълумот аз мағоза-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 барои фиристодани тағйироти схема ба гиреҳи мағоза-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. ДАР дастури истифодабаранда Ба таври муфассал мафҳумҳои мухталиферо, ки дар танзими такрорӣ бо SymmetricDS иштирок мекунанд, тавсиф мекунад.

Манбаъ: will.com

Илова Эзоҳ