PostgreSQL жана MySQL ортосунда кайчылаш репликация

PostgreSQL жана MySQL ортосунда кайчылаш репликация

Мен PostgreSQL жана MySQL ортосундагы кайчылаш репликацияны, ошондой эле эки маалымат базасы серверинин ортосунда кайчылаш репликацияны орнотуу ыкмаларын айтып берем. Адатта, кайчылаш репликацияланган маалымат базалары бир тектүү деп аталат жана бул RDBMS серверинен экинчисине өтүүнүн ыңгайлуу ыкмасы.

PostgreSQL жана MySQL маалымат базалары көбүнчө реляциялык деп эсептелет, бирок кошумча кеңейтүүлөр менен алар NoSQL мүмкүнчүлүктөрүн сунуштайт. Бул жерде биз PostgreSQL жана MySQL ортосундагы репликацияны реляциялык DBMS көз карашынан талкуулайбыз.

Биз бүт ички иштерди сүрөттөбөйбүз, жөн гана негизги принциптерди, андыктан сиз маалымат базасынын серверлери, артыкчылыктары, чектөөлөрү жана колдонуу учурлары ортосунда репликацияны конфигурациялоо жөнүндө түшүнүк аласыз.

Эреже катары, эки бирдей маалымат базасы серверинин ортосундагы репликация бинардык режимде же мастер (жарыялоочу, башкы же активдүү) менен кулдун (абонент, күтүү же пассивдүү) ортосундагы сурамдарды колдонуу менен жүзөгө ашырылат. Репликациялоонун максаты - кул тараптагы башкы маалымат базасынын реалдуу убакыт режиминде көчүрмөсүн берүү. Мында маалыматтар кожоюндан кулга, башкача айтканда активдүүдөн пассивдүүгө өтөт, анткени репликация бир багытта гана жүргүзүлөт. Бирок сиз эки маалымат базасынын ортосунда эки багытта репликацияны орното аласыз, андыктан маалыматтар кулдан мастерге активдүү-активдүү конфигурацияда өткөрүлөт. Мунун баары, анын ичинде каскаддык репликация, эки же андан көп окшош маалыматтар базасынын серверлеринин ортосунда мүмкүн.Активдүү-активдүү же активдүү-пассивдүү конфигурация муктаждыктарга, баштапкы конфигурацияда мындай мүмкүнчүлүктөрдүн болушуна же тышкы конфигурация чечимдерин колдонууга жана учурдагы компромисстерге көз каранды.

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

MySQL менен PostgreSQL ортосундагы кайчылаш репликация бир маалымат базасынын серверинен экинчисине бир жолку көчүү үчүн керек. Бул маалымат базалары ар кандай протоколдорду колдонушат, ошондуктан аларды түз байланыштыруу мүмкүн эмес. Маалымат алмашууну орнотуу үчүн сиз тышкы ачык булак куралын колдоно аласыз, мисалы pg_chameleon.

pg_chameleon деген эмне

pg_chameleon – Python 3те MySQLден PostgreSQLге репликациялоо системасы. Ал Pythonдо да ачык булактуу mysql-репликация китепканасын колдонот. Катар сүрөттөр MySQL таблицаларынан чыгарылып, PostgreSQL маалымат базасында JSONB объектилери катары сакталат, андан кийин pl/pgsql функциясы аркылуу шифрленет жана PostgreSQL маалымат базасында кайра чыгарылат.

pg_chameleon өзгөчөлүктөрү

Бир эле кластерден бир нече MySQL схемалары бирден көп конфигурацияда бир максаттуу PostgreSQL маалымат базасына репликацияланышы мүмкүн
Булак менен максаттуу схемалардын аталыштары бирдей болушу мүмкүн эмес.
Репликация маалыматтарын каскаддуу MySQL репликасынан алууга болот.
Кайталай албаган же каталарды чыгара албаган таблицалар чыгарылбайт.
Ар бир репликация функциясы демондор тарабынан башкарылат.
YAML негизиндеги параметрлер жана конфигурация файлдары аркылуу башкаруу.

мисал

Host
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 ийгиликтүү орнотулгандан кийин, сиз виртуалдык чөйрөнү түзүү жана активдештирүү сыяктуу калган талаптарды аткарышыңыз керек. Кошумча, пип модулу акыркы версияга жаңыртылган жана 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 (хамелеон – бул буйрук) деп, pg_chameleon'ду иштетүү жана демейки каталогдорду жана конфигурация файлдарын түзүү үчүн set_configuration_files аргументи менен чакырабыз.

(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 таблицаны камтыйт. Аны жүктөп алса болот бул жерде. Үлгү маалымат базасы катарларды түзүү жана импорттоо боюнча нускамалар менен tar жана кысылган архив катары келет.

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 даректери жана порттору жөнүндө маалымат берет.

Host
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

Бул жерде биз /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-таблицаларын иштетүү түйүндөрдүн ортосундагы репликациянын эрежелери жана багыттары сактала турган каталог таблицаларын түзөт. Акырында, үлгү маалыматтар таблицаларга жүктөлөт.

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 түйүнүндө жеткиликтүү экенин эске алыңыз, анткени биз дал ушул жерде түзүү-sym-tables буйругун иштетип, репликацияны башкарабыз. Ал эми дүкөн-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ден corp-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 менен репликацияны орнотууга катышкан ар кандай түшүнүктөрдү майда-чүйдөсүнө чейин сүрөттөйт.

Source: www.habr.com

Комментарий кошуу