PostgreSQL සහ MySQL අතර හරස් අනුකරණය

PostgreSQL සහ MySQL අතර හරස් අනුකරණය

මම PostgreSQL සහ MySQL අතර හරස්-ප්‍රතිනිර්මාණය මෙන්ම දත්ත සමුදා සේවාදායක දෙක අතර හරස්-ප්‍රතිනිර්මාණය සැකසීමේ ක්‍රම දක්වමි. සාමාන්‍යයෙන්, හරස් ප්‍රතිනිර්මාණය කරන ලද දත්ත සමුදායන් සමජාතීය ලෙස හඳුන්වනු ලබන අතර, එය එක් RDBMS සේවාදායකයකින් තවත් ස්ථානයකට ගමන් කිරීමේ පහසු ක්‍රමයකි.

PostgreSQL සහ MySQL දත්ත සමුදායන් සාමාන්‍යයෙන් සම්බන්ධතා ලෙස සලකනු ලැබේ, නමුත් අමතර දිගු සමඟ ඒවා NoSQL හැකියාවන් ලබා දෙයි. මෙහිදී අපි PostgreSQL සහ MySQL අතර අනුවර්තනය සම්බන්ධක DBMS ඉදිරිදර්ශනයකින් සාකච්ඡා කරමු.

අපි සම්පූර්ණ අභ්‍යන්තර ක්‍රියාකාරිත්වය විස්තර නොකරමු, මූලික මූලධර්ම පමණක් වන අතර එමඟින් දත්ත සමුදා සේවාදායකයන්, වාසි, සීමාවන් සහ භාවිත අවස්ථා අතර අනුවර්තනය වින්‍යාස කිරීම පිළිබඳ අදහසක් ඔබට ලැබෙනු ඇත.

සාමාන්‍යයෙන්, සමාන දත්ත සමුදා සේවාදායක දෙකක් අතර ප්‍රතිනිර්මාණය සිදු කරනු ලබන්නේ ද්විමය ප්‍රකාරයේදී හෝ ස්වාමියා (a.k.a. ප්‍රකාශක, ප්‍රධාන, හෝ ක්‍රියාකාරී) සහ වහලෙකු (ග්‍රාහක, පොරොත්තු, හෝ උදාසීන) අතර විමසුම් භාවිතා කරමිනි. අනුකරණයේ පරමාර්ථය වන්නේ වහල් පැත්තේ ප්‍රධාන දත්ත ගබඩාවේ තත්‍ය කාලීන පිටපතක් සැපයීමයි. මෙම අවස්ථාවෙහිදී, දත්ත ස්වාමියාගේ සිට වහල් වෙත මාරු කරනු ලැබේ, එනම් සක්‍රීය සිට නිෂ්ක්‍රීය වෙත, අනුකරණය සිදු කරනු ලබන්නේ එක් දිශාවකට පමණක් බැවිනි. නමුත් ඔබට දෙපැත්තටම දත්ත සමුදා දෙකක් අතර ප්‍රතිනිර්මාණය සැකසිය හැක, එවිට දත්ත සක්‍රිය-ක්‍රියාකාරී වින්‍යාසය තුළ ස්ලේව් සිට මාස්ටර් වෙත මාරු කරනු ලැබේ. කැස්කැඩින් ප්‍රතිනිර්මාණය ඇතුළුව මේ සියල්ල සමාන දත්ත සමුදා සේවාදායක දෙකක් හෝ වැඩි ගණනක් අතර කළ හැක.ක්‍රියාකාරී-ක්‍රියාකාරී හෝ සක්‍රිය-නිෂ්ක්‍රීය වින්‍යාසය මූලික වින්‍යාස කිරීමේදී හෝ බාහිර වින්‍යාස විසඳුම් භාවිතා කිරීමේදී අවශ්‍යතාවය, ලබා ගැනීමේ හැකියාව සහ පවතින වෙළඳාම් මත රඳා පවතී.

විස්තර කරන ලද වින්‍යාසය විවිධ දත්ත සමුදා සේවාදායකයන් අතර කළ හැකිය. වෙනත් දත්ත සමුදා සේවාදායකයකින් අනුරූ දත්ත පිළිගැනීමට සේවාදායකය වින්‍යාසගත කළ හැකි අතර ප්‍රතිනිර්මාණය කරන ලද දත්තවල තත්‍ය කාලීන ස්නැප්ෂොට් දිගටම පවත්වාගෙන යයි. MySQL සහ PostgreSQL මෙම වින්‍යාසයන් බොහොමයක් ගෘහස්ථ හෝ තෙවන පාර්ශවීය දිගු හරහා ලබා දෙයි, ද්විමය ලොග් ක්‍රම, තැටි අගුළු දැමීම සහ ප්‍රකාශ සහ පේළි පදනම් වූ ක්‍රම ඇතුළත් වේ.

MySQL සහ PostgreSQL අතර හරස් පිටපත් කිරීම එක් දත්ත සමුදා සේවාදායකයකින් තවත් එකකට සංක්‍රමණය වීම සඳහා අවශ්‍ය වේ. මෙම දත්ත සමුදායන් විවිධ ප්‍රොටෝකෝල භාවිතා කරයි, එබැවින් ඒවා කෙලින්ම සම්බන්ධ කළ නොහැක. දත්ත හුවමාරුව ස්ථාපිත කිරීම සඳහා, ඔබට බාහිර විවෘත මූලාශ්‍ර මෙවලමක් භාවිතා කළ හැකිය, උදාහරණයක් ලෙස pg_chameleon.

pg_chameleon යනු කුමක්ද?

pg_chameleon යනු MySQL සිට PostgreSQL දක්වා Python 3 හි අනුකරණ පද්ධතියකි. එය Python හි විවෘත මූලාශ්‍ර mysql-replication පුස්තකාලය භාවිතා කරයි. පේළි රූප 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

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 ස්ථාපනය කිරීමට භාවිතා කරයි. නවතම අනුවාදය 2.0.9 වුවද පහත විධාන හිතාමතාම pg_chameleon 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 (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

දැන් අපි default.yml ලෙස config-example.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 අගයක් බවට පරිවර්තනය කරන ආකාරයේ අතික්‍රමණය කිරීමේ රීතියකට පෙරනිමි වේ. ඊළඟ කොටසේදී, අපි ඉලක්ක දත්ත ගබඩාවට සම්බන්ධතා විස්තර සඳහන් කරමු. අපගේ නඩුවේදී, මෙය 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 (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 තර්කය භාවිතයෙන් දෝෂ බැලිය හැක.

ප්‍රති ult ලය.

අප දැනටමත් පවසා ඇති පරිදි, එක් එක් අනුවර්තන කාර්යය ඩීමන් විසින් පාලනය කරනු ලැබේ. ඒවා බැලීමට, අපි පහත දැක්වෙන පරිදි Linux ps විධානය සමඟ ක්‍රියාවලි වගුව විමසන්නෙමු.

ප්‍රති ult ලය.

පහත දැක්වෙන පරිදි, අපි එය තථ්‍ය කාලීනව පරීක්ෂා කරන තෙක් අනුකරණය වින්‍යාස කර ඇති බවක් නොසැලකේ. අපි වගුවක් සාදන්නෙමු, 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 සඳහා ප්‍රතිඵල

MySQL සිට PostgreSQL වෙත දත්ත සමුදායක් සංක්‍රමණය කිරීම සඳහා pg_chameleon හි අනුකරණ ක්‍රමය විශිෂ්ටයි. සැලකිය යුතු අවාසිය නම්, අනුවර්තනය එක් මාර්ගයක් පමණක් වන අතර, දත්ත සමුදා වෘත්තිකයන්ට සංක්‍රමණය හැර වෙනත් කිසිවක් සඳහා එය භාවිතා කිරීමට අවශ්‍ය නොවනු ඇත. නමුත් එක්-මාර්ග අනුකරණයේ ගැටළුව වෙනත් විවෘත මූලාශ්‍ර මෙවලමක් සමඟ විසඳිය හැකිය - සමමිතික DS.

නිල ලේඛනවල වැඩිදුර කියවන්න මෙහි. විධාන රේඛා උපකාරය සොයාගත හැකිය මෙහි.

සමමිතික DS පිළිබඳ දළ විශ්ලේෂණය

SymmetricDS යනු ඕනෑම දත්ත සමුදායක් වෙනත් ඕනෑම පොදු දත්ත ගබඩාවකට ප්‍රතිවර්තනය කරන විවෘත මූලාශ්‍ර මෙවලමකි: Oracle, MongoDB, PostgreSQL, MySQL, SQL Server, MariaDB, DB2, Sybase, Greenplum, Informix, H2, Firebird සහ අනෙකුත් වලාකුළු දත්ත සමුදා අවස්ථා, උදා. Azure, ආදිය ලබා ගත හැකි විශේෂාංග: දත්ත සමුදාය සහ ගොනු සමමුහුර්තකරණය, බහු-ප්‍රධාන දත්ත සමුදාය අනුකරණය, පෙරූ සමමුහුර්තකරණය, පරිවර්තනය සහ වෙනත්. මෙය Java මෙවලමක් වන අතර JRE හෝ JDK (අනුවාදය 8.0 හෝ ඊට වැඩි) සම්මත නිකුතුවක් අවශ්‍ය වේ. මෙහිදී, මූලාශ්‍ර දත්ත ගබඩාවේ ඇති ප්‍රේරක වෙත දත්ත වෙනස් කිරීම් පටිගත කර කණ්ඩායම් ආකාරයෙන් සුදුසු ඉලක්ක දත්ත ගබඩාවට යැවිය හැක.

සමමිතික DS විශේෂාංග

මෙවලම වේදිකා ස්වාධීන වේ, එනම් විවිධ දත්ත සමුදායන් දෙකකට හෝ වැඩි ගණනකට දත්ත හුවමාරු කළ හැක.
සම්බන්ධතා දත්ත සමුදායන් දත්ත වෙනස් කිරීමේ වාර්තා භාවිතයෙන් සමමුහුර්ත කර ඇති අතර ගොනු පද්ධති මත පදනම් වූ දත්ත සමුදායන් ගොනු සමමුහුර්තකරණය භාවිතා කරයි.
නීති මාලාවක් මත Push සහ Pull ක්‍රම භාවිතා කරමින් ද්වි-මාර්ග අනුකරණය.
ආරක්ෂිත සහ අඩු කලාප පළල ජාල හරහා දත්ත හුවමාරු කළ හැක.
අසාර්ථක වීමෙන් පසු නෝඩ් නැවත ක්‍රියාත්මක වන විට ස්වයංක්‍රීය ප්‍රතිසාධනය සහ ස්වයංක්‍රීය ගැටුම් නිරාකරණය.
Cloud ගැළපෙන සහ බලවත් දිගු API.

උදාහරණ:

SymmetricDS විකල්ප දෙකෙන් එකකින් වින්‍යාසගත කළ හැක:
ස්ලේව් (ළමා) නෝඩ් දෙකක් අතර දත්ත අනුවර්තනය මධ්‍යගතව සම්බන්ධීකරණය කරන ප්‍රධාන (මාපිය) නෝඩයක් සහ ළමා නෝඩ් අතර සන්නිවේදනය සිදුවන්නේ මාපියන් හරහා පමණි.
සක්‍රීය නෝඩයකට (Node 1) අතරමැදියෙකු නොමැතිව වෙනත් ක්‍රියාකාරී නෝඩයක් (Node 2) සමඟ ප්‍රතිවර්තනය සඳහා සන්නිවේදනය කළ හැක.

විකල්ප දෙකෙහිම, දත්ත හුවමාරුව Push සහ 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

DB වරාය
3306
5832

IP ලිපිනය
192.168.1.107
192.168.1.112

සමමිතික DS අනුවාදය
සමමිතික DS 3.9
සමමිතික DS 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-node නිර්මාණයක් සඳහා අවශ්‍ය සියලුම වින්‍යාස ගොනු ඇත (විකල්ප 1), සහ එම ගොනු 2-node නිර්මාණයක් සඳහා භාවිතා කළ හැක (විකල්ප 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 හි Node 2 store-001 ලෙස වින්‍යාස කර ඇති අතර ඉතිරිය පහත node.properties ගොනුවේ දක්වා ඇත. Node store-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 උදාහරණයේ දත්ත සමුදා සේවාදායක දෙකක් (නෝඩ් දෙකක්) අතර ද්වි-මාර්ග අනුකරණයක් සැකසීම සඳහා පරාමිතීන් අඩංගු වේ. පහත පියවර සත්කාරක vm1 (corp-000) මත සිදු කෙරේ, එමඟින් වගු 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

උදාහරණයේ, item_selling_price වගු corp-000 සිට store-001 දක්වා ප්‍රතිවර්තනය වීමට ස්වයංක්‍රීයව වින්‍යාස කර ඇති අතර, විකුණුම් වගු (sale_transaction සහ sale_return_line_item) store-001 සිට corp-000 දක්වා ප්‍රතිවර්තනය වීමට ස්වයංක්‍රීයව වින්‍යාස කෙරේ. දැන් අපි corp-2 වෙතින් දත්ත ලබා ගැනීම සඳහා එය සකස් කිරීම සඳහා සත්කාරක vm001 (store-000) හි PostgreSQL දත්ත ගබඩාව තුළ ක්‍රමලේඛනයක් සාදන්නෙමු.

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

vm1 මත MySQL දත්ත සමුදායේ උදාහරණ වගු සහ සමමිතික DS නාමාවලි වගු තිබේදැයි පරීක්ෂා කිරීමට වග බලා ගන්න. SymmetricDS පද්ධති වගු (sym_ සමඟ උපසර්ග කර ඇත) දැනට node corp-000 මත පමණක් ලබා ගත හැකි බව සලකන්න, මන්ද අපි create-sym-tables විධානය ක්‍රියාත්මක කළේ එහිදී වන අතර අනුකරණය කළමනාකරණය කරනු ඇත. තවද node store-001 හි දත්ත ගබඩාවේ දත්ත නොමැතිව උදාහරණ වගු 4 ක් පමණක් ඇත.

සෑම. පහත දැක්වෙන පරිදි නෝඩ් දෙකෙහිම sym server processes ක්‍රියාත්මක කිරීමට පරිසරය සූදානම්ය.

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

ලොග් ඇතුළත් කිරීම් SymmetricDS ස්ථාපනය කර ඇති නාමාවලියෙහි ලොග් ෆෝල්ඩරයේ පසුබිම් ලොග් ගොනුවකට (symmetric.log) මෙන්ම සම්මත ප්‍රතිදානය වෙත යවනු ලැබේ. sym සේවාදායකය දැන් node store-001 මත ආරම්භ කළ හැක.

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

ඔබ vm2 ධාරකය මත sym server ක්‍රියාවලිය ක්‍රියාත්මක කරන්නේ නම්, එය PostgreSQL දත්ත ගබඩාවේ SymmetricDS නාමාවලි වගු ද සාදනු ඇත. ඔබ නෝඩ් දෙකෙහිම sym සේවාදායක ක්‍රියාවලිය ක්‍රියාත්මක කරන්නේ නම්, ඒවා corp-000 සිට store-001 දක්වා දත්ත ප්‍රතිවර්තනය කිරීමට එකිනෙකා සමඟ සම්බන්ධීකරණය කරයි. තත්පර කිහිපයකට පසු අපි දෙපැත්තේ ඇති වගු 4ම විමසා බැලුවහොත්, අනුවර්තනය සාර්ථක වූ බව අපට පෙනෙනු ඇත. නැතහොත් පහත විධානය සමඟින් ඔබට bootstrap එක corp-001 වෙතින් node store-000 වෙත යැවිය හැක.

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

මෙම අවස්ථාවෙහිදී, node corp-000 (සත්කාරක: vm1) මත MySQL දත්ත ගබඩාවේ අයිතම වගුව වෙත නව වාර්තාවක් ඇතුළත් කර ඇති අතර, ඔබට node store-001 (host: vm2) හි PostgreSQL දත්ත ගබඩාවට එහි අනුවර්තනය පරීක්ෂා කළ හැක. අපි corp-000 සිට store-001 දක්වා දත්ත ගෙනයාමට Pull මෙහෙයුමක් දකිමු.

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)

store-001 සිට corp-000 වෙත දත්ත ගෙනයාමට Push මෙහෙයුමක් සිදු කිරීම සඳහා, අපි sale_transaction වගුවට වාර්තාවක් ඇතුළු කර අනුවර්තනය සාර්ථක බව තහවුරු කරමු.

ප්‍රති ult ලය.

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 විධානය භාවිතා කරමින්, වගු අර්ථ දැක්වීම් සිතියම්ගත කිරීමට ප්‍රේරක ප්‍රතිනිර්මාණය කරයි. node store-001 වෙත schema වෙනස්කම් යැවීමට send-schema ක්‍රියාත්මක කර ඇති අතර t1 වගුවේ අනුකරණය වින්‍යාස කර ඇත.

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

සමමිතික DS හි ප්රතිලාභ

ත්‍රි-නෝඩ් හෝ ද්වි-නෝඩ් පරිපථයක් නිර්මාණය කිරීම සඳහා පරාමිතීන් සහිත සූදානම් කළ ගොනු කට්ටලයක් ඇතුළුව පහසු ස්ථාපනය සහ වින්‍යාස කිරීම.
සර්වර්, ලැප්ටොප් සහ ජංගම උපාංග ඇතුළුව හරස් වේදිකා දත්ත සමුදායන් සහ වේදිකා ස්වාධීනත්වය.
ඕනෑම දත්ත සමුදායක් දේශීයව, WAN මත හෝ වලාකුළෙහි වෙනත් දත්ත ගබඩාවකට පිටපත් කරන්න.
පහසු අනුකරණයක් සඳහා දත්ත සමුදා කිහිපයක් හෝ දහස් ගණනක් සමඟ ප්‍රශස්ත වැඩ කිරීමේ හැකියාව.
GUI සහ විශිෂ්ට සහාය සහිත ගෙවුම් අනුවාදය.

සමමිතික DS හි අවාසි

ඔබට අපහසු විය හැකි නාමාවලි වගු පූරණය කිරීමට SQL ප්‍රකාශ හරහා විධාන රේඛාවේ ප්‍රතිනිර්මාණය කිරීමේ නීති සහ දිශාව අතින් නිර්වචනය කළ යුතුය.
අනුකරණයේ රීති සහ දිශාව නිර්වචනය කරන SQL ප්‍රකාශයන් සෑදීමට ඔබ ස්ක්‍රිප්ට් භාවිතා නොකරන්නේ නම් අනුකරණය සඳහා බොහෝ වගු සැකසීම වෙහෙසකර විය හැක.
ලඝු-සටහන් තුළ ඕනෑවට වඩා තොරතුරු වාර්තා වී ඇති අතර, සමහර විට ඔබට ලොග් ගොනුව වැඩි ඉඩක් නොගන්නා ලෙස පිළිවෙලට තැබිය යුතුය.

SymmetricDS සඳහා ප්‍රතිඵල

SymmetricDS මඟින් ගොනු ප්‍රතිවර්තනය කිරීමට සහ සමමුහුර්ත කිරීමට නෝඩ් දෙකක්, තුනක් හෝ දහස් ගණනක් අතර ද්වි-මාර්ග අනුකරණයක් සැකසීමට ඔබට ඉඩ සලසයි. මෙය නෝඩයක දිගු කාලපරිච්ඡේදයකින් පසු ස්වයංක්‍රීය දත්ත ප්‍රතිසාධනය, HTTPS හරහා නෝඩ් අතර ආරක්ෂිත සහ කාර්යක්ෂම දත්ත හුවමාරුව, රීති මාලාවක් මත පදනම් වූ ස්වයංක්‍රීය ගැටුම් කළමනාකරණය යනාදී බොහෝ කාර්යයන් ස්වාධීනව සිදු කරන අද්විතීය මෙවලමකි. SymmetricDS සිදු කරයි. ඕනෑම දත්ත සමුදායක් අතර අනුකරණය, එබැවින්, සංක්‍රමණය, සංක්‍රමණය, බෙදා හැරීම, පෙරීම සහ වේදිකා හරහා දත්ත පරිවර්තනය කිරීම ඇතුළු විවිධ අවස්ථා සඳහා එය භාවිතා කළ හැක.

උදාහරණය නිල මත පදනම් වේ ඉක්මන් මාර්ගෝපදේශය SymmetricDS මගින්. තුල පරිශීලක අත්පොත SymmetricDS සමඟ අනුවර්තනය සැකසීමට සම්බන්ධ විවිධ සංකල්ප විස්තරාත්මකව විස්තර කරයි.

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න