Hoʻopili hou ma waena o PostgreSQL a me MySQL

Hoʻopili hou ma waena o PostgreSQL a me MySQL

E wehewehe au i ka cross-replication ma waena o PostgreSQL a me MySQL, a me nā ʻano hana no ka hoʻonohonoho ʻana i ka cross-replication ma waena o nā kikowaena waihona ʻelua. ʻO ka mea maʻamau, ua kapa ʻia nā ʻikepili i hoʻohālikelike ʻia i ka homogeneous, a he ala kūpono ia e neʻe ai mai kahi kikowaena RDBMS i kekahi.

ʻO ka PostgreSQL a me MySQL ʻikepili i manaʻo ʻia he pilina, akā me nā hoʻonui hou e hāʻawi lākou i nā mana NoSQL. Maanei e kūkākūkā mākou i ka replication ma waena o PostgreSQL a me MySQL mai kahi hiʻohiʻona DBMS pili.

ʻAʻole mākou e wehewehe i ka hana holoʻokoʻa i loko, ʻo nā kumu kumu wale nō i loaʻa iā ʻoe kahi manaʻo o ka hoʻonohonoho hou ʻana ma waena o nā kikowaena waihona, nā pono, nā palena a me nā hihia hoʻohana.

ʻO ka maʻamau, hana ʻia ka hana hou ʻana ma waena o ʻelua mau kikowaena waihona ʻikepili like ʻole ma ke ʻano binary a i ʻole ka hoʻohana ʻana i nā nīnau ma waena o kahi haku (a. ʻO ke kumu o ka hana hou ʻana, ʻo ia ka hāʻawi ʻana i kahi kope manawa maoli o ka waihona kumu ma ka ʻaoʻao kauā. I kēia hihia, ua hoʻoili ʻia ka ʻikepili mai ka haku a i ke kauā, ʻo ia hoʻi, mai ka hana a hiki i ka passive, no ka mea, hana ʻia ka replication ma kahi ʻaoʻao hoʻokahi. Akā hiki iā ʻoe ke hoʻonohonoho i ka replication ma waena o nā ʻikepili ʻelua ma nā ʻaoʻao ʻelua, no laila e hoʻololi ʻia ka ʻikepili mai ke kauā i ka haku ma kahi hoʻonohonoho hoʻoikaika. Hiki i kēia mau mea a pau, me ka hoʻopiʻi hou ʻana, ma waena o ʻelua a ʻoi aku paha nā kikowaena waihona ʻikepili like ʻole.

Hiki ke hoʻonohonoho i wehewehe ʻia ma waena o nā kikowaena waihona ʻokoʻa. Hiki ke hoʻonohonoho ʻia ke kikowaena no ka ʻae ʻana i ka ʻikepili i hoʻopili ʻia mai kahi kikowaena waihona ʻē aʻe a mālama mau i nā kiʻi paʻi manawa maoli o ka ʻikepili i hoʻopili ʻia. Hāʻawi ʻo MySQL a me PostgreSQL i ka hapa nui o kēia mau hoʻonohonoho i loko o ka hale a i ʻole ma o ka hoʻonui ʻia ʻana o nā ʻaoʻao ʻekolu, e komo pū ana me nā ʻano log binary, laka disk, a me nā ʻano ʻōlelo-a me ka lālani.

Pono ka hoʻopili hou ʻana ma waena o MySQL a me PostgreSQL no ka neʻe ʻana i hoʻokahi manawa mai kahi kikowaena waihona i kekahi. Hoʻohana kēia mau waihona i nā protocols ʻokoʻa, no laila ʻaʻole hiki ke hoʻopili pololei iā lākou. No ka hoʻokumu ʻana i ka hoʻololi ʻana i ka ʻikepili, hiki iā ʻoe ke hoʻohana i kahi hāmeʻa open source waho, no ka laʻana pg_chameleon.

He aha ka pg_chameleon

ʻO pg_chameleon kahi ʻōnaehana replication mai MySQL a i PostgreSQL ma Python 3. Hoʻohana ʻo ia i ka open source mysql-replication library, pū kekahi ma Python. Lawe ʻia nā kiʻi lālani mai nā papa MySQL a mālama ʻia e like me nā mea JSONB i ka waihona PostgreSQL, a laila hoʻokaʻawale ʻia e ka hana pl/pgsql a hoʻopuka hou ʻia i ka waihona PostgreSQL.

Nā hiʻohiʻona o pg_chameleon

Hiki ke hoʻopili hou ʻia nā ʻōkuhi MySQL he nui mai ka puʻupuʻu hoʻokahi i hoʻokahi pahu waihona PostgreSQL ma kahi hoʻonohonoho hoʻokahi-a-nui.
ʻAʻole hiki ke ʻano like ke kumu a me nā inoa papa kuhikuhi.
Hiki ke kiʻi ʻia ka ʻikepili replication mai kahi hoʻopiʻi MySQL cascaded.
Hoʻokaʻawale ʻia nā papa ʻaʻole hiki ke hana hou a hoʻopuka i nā hewa.
Hoʻomalu ʻia kēlā me kēia hana replication e nā daemons.
Manao ma o YAML-based parameters and configuration files.

Pākuhi:

Mea Hoʻokipa
vm1
vm2

mana OS
ʻO CentOS Linux 7.6 x86_64
ʻO CentOS Linux 7.5 x86_64

Mana kikowaena DB
5.7.26 MySQL
ʻO PostgreSQL 10.5

awa DB
3306
5433

IP wahi
192.168.56.102
192.168.56.106

No ka hoʻomaka, hoʻomākaukau i nā mea pono a pau e hoʻokomo i ka pg_chameleon. Hoʻokomo kēia hiʻohiʻona iā Python 3.6.8, nāna e hana a hoʻōla i ke kaiapuni virtual.

$> 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

Ma hope o ka hoʻokomo maikaʻi ʻana iā Python3.6, pono ʻoe e hoʻopiha i nā koi i koe, e like me ka hana ʻana a me ka hoʻāla ʻana i kahi kaiapuni virtual. Eia hou, ua hoʻonui ʻia ka module pip i ka mana hou loa a hoʻohana ʻia e hoʻokomo i ka pg_chameleon. ʻO nā kauoha ma lalo nei me ka manaʻo e hoʻokomo i ka pg_chameleon 2.0.9, ʻoiai ʻo 2.0.10 ka mana hou loa. Pono kēia no ka pale ʻana i nā pōpoki hou i ka mana hou.

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

Kāhea mākou iā pg_chameleon (he kauoha ka chameleon) me ka hoʻopaʻapaʻa set_configuration_files e hiki ai iā pg_chameleon a hana i nā papa kuhikuhi paʻamau a me nā faila hoʻonohonoho.

(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

I kēia manawa, hana mākou i kope o config-example.yml e like me default.yml i lilo ia i faila hoʻonohonoho paʻamau. Hāʻawi ʻia kahi faila hoʻonohonoho laʻana no kēia laʻana ma lalo nei.

$> 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:

ʻO ka faila hoʻonohonoho i kēia laʻana he laʻana pg_chameleon file me nā hoʻololi liʻiliʻi e kūpono i ke kumu a me nā kaiapuni i hoʻopaʻa ʻia, a ma lalo nei kahi ʻike o nā ʻāpana like ʻole o ka faila hoʻonohonoho.

Aia i loko o ka waihona hoʻonohonoho default.yml kahi ʻāpana o nā hoʻonohonoho honua, kahi e hiki ai iā ʻoe ke hoʻokele i nā hoʻonohonoho e like me ka wahi o ka faila laka, kahi o nā lāʻau, ka manawa mālama no nā lāʻau, a me nā mea ʻē aʻe. he hoʻonohonoho o nā lula no ke kau ʻana i nā ʻano i ka wā o ka hana hou ʻana. Hoʻololi ka laʻana i kahi lula e hoʻololi i ka liʻiliʻi (1) i kahi waiwai boolean. Ma ka ʻāpana aʻe, hōʻike mākou i nā kikoʻī pili i ka ʻikepili target. I kā mākou hihia, he waihona PostgreSQL kēia, i koho ʻia pg_conn. Ma ka ʻāpana hope, hōʻike mākou i ka ʻikepili kumu, ʻo ia hoʻi, nā ʻāpana pili o ka waihona kumu, ka hoʻolālā palapala ma waena o ke kumu a me nā ʻikepili i hoʻopaʻa ʻia, nā papa e pono e hoʻokuʻu ʻia, ka manawa kali, ka hoʻomanaʻo, ka nui o ka pūʻolo. E hoʻomaopopo he nui nā "kumu", ʻo ia hoʻi, hiki iā mākou ke hoʻohui i nā ʻikepili kumu he nui i hoʻokahi waihona i hoʻopaʻa ʻia e hoʻonohonoho i kahi hoʻonohonoho nui-a-hoʻokahi.

Aia i loko o ka waihona waihona world_x nā papa 4 me nā lālani i hāʻawi ʻia e ke kaiāulu MySQL ma ke ʻano he laʻana. Hiki ke hoʻoiho ʻia maanei. Hele mai ka waihona waihona ma ke ʻano he tar a me ka waihona i hoʻopaʻa ʻia me nā kuhikuhi no ka hana ʻana a me ka lawe ʻana i nā lālani.

Ma MySQL a me PostgreSQL waihona, hana ʻia kahi mea hoʻohana kūikawā me ka inoa like usr_replica. Ma MySQL, hāʻawi ʻia nā kuleana heluhelu hou i nā papa i hoʻopili ʻia.

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;

Ma ka ʻaoʻao PostgreSQL, ua hana ʻia kahi waihona db_replica e ʻae i nā loli mai ka waihona MySQL. Hoʻonohonoho ʻia ka mea hoʻohana usr_replica ma PostgreSQL ma ke ʻano he mea nona nā schemas ʻelua, pgworld_x a me sch_chameleon, aia i loko o nā papa kuhikuhi maoli a me nā papa kuhikuhi replication. Aia ke kuleana o ka create_replica_schema no ka hoʻonohonoho maʻalahi, e like me kāu e ʻike ai ma lalo nei.

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

Hoʻonohonoho ʻia ka waihona MySQL me kekahi mau hoʻololi hoʻololi no ka hoʻomākaukau ʻana no ka hana hou ʻana e like me ka mea i hōʻike ʻia ma lalo nei. Pono ʻoe e hoʻomaka hou i ke kikowaena waihona no ka hoʻololi ʻana i ka hopena.

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

I kēia manawa he mea nui e nānā i ka pilina i nā kikowaena waihona ʻelua i ʻole pilikia i ka wā e holo ai i nā kauoha pg_chameleon.

Ma ka node PostgreSQL:

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

Ma ka node MySQL:

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

ʻO nā kauoha pg_chameleon (chameleon) ʻekolu aʻe e hoʻomākaukau i ke kaiapuni, hoʻohui i ke kumu, a hoʻomaka i ke kope. Hoʻokumu ka mea hoʻopaʻapaʻa create_replica_schema iā pg_chameleon i kahi schema paʻamau (sch_chameleon) a me kahi schema replication (pgworld_x) i ka waihona PostgreSQL, e like me kā mākou i kūkākūkā ai. Hoʻohui ka hoʻopaʻapaʻa add_source i kahi waihona kumu i ka hoʻonohonoho ʻana ma ka heluhelu ʻana i ka faila hoʻonohonoho (default.yml), a i kā mākou hihia ʻo ia ka mysql, a hoʻomaka ka init_replica i ka hoʻonohonoho ma muli o nā ʻāpana i ka faila hoʻonohonoho.

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

ʻO ka hoʻopuka o kēia mau kauoha ʻekolu e hōʻike maopopo ana ua hoʻokō pono lākou. Hōʻike ʻia nā ulia a i ʻole nā ​​hewa syntax i nā memo maʻalahi me nā ʻōlelo aʻoaʻo pehea e hoʻoponopono ai i ka pilikia.

ʻO ka hope, hoʻomaka mākou i ka hana hou ʻana me ka hoʻohana ʻana i ka start_replica a loaʻa i kahi leka kūleʻa.

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

Hiki ke nīnau ʻia ke kūlana replication me ka hoʻopaʻapaʻa show_status, a hiki ke ʻike ʻia nā hewa me ka hoʻohana ʻana i ka manaʻo show_errors.

ʻO ka hopena.

E like me kā mākou i ʻōlelo ai, mālama ʻia kēlā me kēia hana replication e nā daemons. No ka nānā ʻana iā lākou, nīnau mākou i ka papa hana me ke kauoha Linux ps, e like me ka mea i hōʻike ʻia ma lalo nei.

ʻO ka hopena.

ʻAʻole manaʻo ʻia ka hana hou ʻana a hiki i ka wā e hoʻāʻo ai mākou i ka manawa maoli, e like me ka hōʻike ʻana ma lalo nei. Hana mākou i papaʻaina, hoʻokomo i ʻelua mau moʻolelo i loko o ka waihona MySQL, a kāhea aku i ka hoʻopaʻapaʻa sync_tables ma pg_chameleon e hoʻohou i nā daemons a hoʻopili hou i ka papa me nā moʻolelo i ka waihona 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.

No ka hōʻoia ʻana i nā hopena hōʻike, nīnau mākou i ka pākaukau mai ka waihona PostgreSQL a hoʻopuka i nā lālani.

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

Inā mākou e neʻe nei, ʻo nā kauoha pg_chameleon e pau ana. Pono e hoʻokō ʻia nā kauoha ma hope o ko mākou maopopo ʻana ua hana hou ʻia nā lālani o nā papa kuhikuhi āpau, a ʻo ka hopena e neatly neatly neatly PostgreSQL database me ka ʻole o nā kuhikuhi ʻana i ka waihona kumu a i ʻole ka hoʻolālā hou ʻana (sch_chameleon).

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

Inā makemake ʻia, hiki iā ʻoe ke hoʻohana i kēia mau kauoha e hoʻopau i ka hoʻonohonoho kumu a me ka hoʻolālā hou.

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

Nā pono o pg_chameleon

Hoʻonohonoho maʻalahi a hoʻonohonoho.
E hoʻoponopono maʻalahi a ʻike i nā anomalies me nā memo hewa.
Hiki ke hoʻohui ʻia nā papa kūikawā hou i ka replication ma hope o ka hoʻomaka ʻana me ka hoʻololi ʻole i ke koena o ka hoʻonohonoho.
Hiki iā ʻoe ke hoʻonohonoho i nā ʻikepili kumu he nui no kahi waihona kikoʻī hoʻokahi, a he mea maikaʻi loa kēia inā ʻoe e hoʻohui i ka ʻikepili mai hoʻokahi a ʻoi aku paha nā waihona MySQL i hoʻokahi waihona PostgreSQL.
ʻAʻole pono ʻoe e hana hou i nā papa i koho ʻia.

Nā hemahema o pg_chameleon

Kākoʻo wale ʻia me MySQL 5.5 a ma luna ma ke ʻano he kumu a me PostgreSQL 9.5 a ma luna aʻe ma ke ʻano he waihona waihona.
Pono e loaʻa i kēlā me kēia pākaukau kahi kī nui a ʻokoʻa paha, inā ʻaʻole e hoʻomaka ʻia nā papa ma ke kaʻina hana init_replica akā ʻaʻole i hana hou ʻia.
Hoʻokahi ala hou - mai MySQL a i PostgreSQL wale nō. No laila, kūpono wale ia no ke kaapuni "active-passive".
Hiki i ke kumu he waihona MySQL wale nō, a me ke kākoʻo no kahi waihona PostgreSQL ma ke ʻano he kumu hoʻokolohua wale nō a me nā palena (e aʻo hou aʻe. maanei)

Nā hualoaʻa no pg_chameleon

He mea maikaʻi ke ʻano hana hou i pg_chameleon no ka neʻe ʻana i kahi waihona mai MySQL a i PostgreSQL. ʻO ka haʻahaʻa koʻikoʻi, ʻo ka hoʻopiʻi ʻana he ala hoʻokahi wale nō, no laila ʻaʻole makemake ka poʻe loea waihona e hoʻohana iā ia no kekahi mea ʻē aʻe ma mua o ka neʻe ʻana. Akā hiki ke hoʻopau ʻia ka pilikia o ka hoʻopiʻi ʻana i hoʻokahi ala me kahi mea hana open source - SymmetricDS.

E heluhelu hou aʻe ma ka palapala kūhelu maanei. Hiki ke loaʻa ke kōkua laina kauoha maanei.

Nānā nui o SymmetricDS

ʻO SymmetricDS kahi mea hana punawai e hoʻopili ana i kekahi ʻikepili i kekahi ʻikepili maʻamau: Oracle, MongoDB, PostgreSQL, MySQL, SQL Server, MariaDB, DB2, Sybase, Greenplum, Informix, H2, Firebird a me nā manawa ʻikepili ʻē aʻe, e like me Redshift, a ʻO Azure, etc. Loaʻa nā hiʻohiʻona: ka waihona waihona a me ka hoʻonohonoho ʻana i nā faila, ka replication database multi-master, synchronization kānana, hoʻololi a me nā mea ʻē aʻe. He mea hana Java kēia a koi aku i kahi hoʻokuʻu maʻamau o ka JRE a i ʻole JDK (version 8.0 a i ʻole ke kiʻekiʻe). Maʻaneʻi, hiki ke hoʻopaʻa ʻia nā hoʻololi ʻikepili i nā mea hoʻoulu i ka waihona kumu a hoʻouna ʻia i ka ʻikepili pahuhopu kūpono ma ke ʻano o nā pūʻulu.

Nā hiʻohiʻona SymmetricDS

He kahua kūʻokoʻa ka mea hana, ʻo ia hoʻi, hiki i ʻelua a ʻoi aku paha nā ʻikepili ʻokoʻa ke hoʻololi i ka ʻikepili.
Hoʻonohonoho ʻia nā ʻikepili pili me ka hoʻohana ʻana i nā moʻolelo hoʻololi ʻikepili, aʻo nā waihona waihona waihona waihona e hoʻohana ana i ka synchronization file.
Hoʻopiʻi ʻelua ʻaoʻao me ka hoʻohana ʻana i nā ʻano Push a me Pull e pili ana i kahi hoʻonohonoho o nā lula.
Hiki ke hoʻoili ʻikepili ma luna o nā pūnaewele paʻa a me ka bandwidth haʻahaʻa.
Hoʻihoʻi ʻakomi i ka wā e hoʻomaka hou ai nā nodes ma hope o ka hāʻule ʻana a me ka hoʻonā hakakā maʻalahi.
Nā API hoʻonui kūpono a ikaika hoʻi.

Pākuhi:

Hiki ke hoʻonohonoho ʻia ʻo SymmetricDS ma kekahi o nā koho ʻelua:
He kumu (makua) node e hoʻonohonoho pono ana i ka hoʻopili ʻana i ka ʻikepili ma waena o nā node kauā (keiki), a ma o ka makua wale nō ke kamaʻilio ʻana ma waena o nā node keiki.
Hiki ke kamaʻilio node node (Node 1) no ka hoʻopili hou ʻana me kekahi node hana ʻē aʻe (Node 2) me ka ʻole o ka mea hoʻopili.

Ma nā koho ʻelua, loaʻa ka hoʻololi ʻikepili me ka hoʻohana ʻana i ka Push a me Pull. Ma kēia hiʻohiʻona e noʻonoʻo mākou i kahi hoʻonohonoho hoʻoikaika. He lōʻihi loa ka wehewehe ʻana i ka hoʻolālā holoʻokoʻa, no laila e hana i kāu noiʻi. alakaʻie aʻo hou e pili ana i ka polokalamu SymmetricDS.

He mea maʻalahi loa ka hoʻouka ʻana iā SymmetricDS: hoʻoiho i ka mana open source o ka faile zip mai kēia wahi a lawe aku i waho ma kahi āu e makemake ai. Hāʻawi ka papa ma lalo i ka ʻike e pili ana i ka wahi hoʻokomo a me ka mana o SymmetricDS i kēia laʻana, a me nā mana waihona, nā mana Linux, nā IP address, a me nā awa no nā node ʻelua.

Mea Hoʻokipa
vm1
vm2

mana OS
ʻO CentOS Linux 7.6 x86_64
ʻO CentOS Linux 7.6 x86_64

Mana kikowaena DB
5.7.26 MySQL
ʻO PostgreSQL 10.5

awa DB
3306
5832

IP wahi
192.168.1.107
192.168.1.112

Manaʻo SymmetricDS
SymmetricDS 3.9
SymmetricDS 3.9

Ala hoʻokomo ʻo SymmetricDS
/usr/local/symmetric-server-3.9.20
/usr/local/symmetric-server-3.9.20

inoa node SymmetricDS
kino-000
hale kūʻai-001

Maanei mākou e hoʻokomo ai i ka SymmetricDS ma /usr/local/symmetric-server-3.9.20, a e mālama ʻia nā subdirectories a me nā faila ma laila. Makemake mākou i nā subdirectories a me nā engines. Aia i loko o ka papa kuhikuhi nā la'ana nā faila ho'onohonoho me nā waiwai node, a me nā palapala SQL e ho'omaka koke ai.

Ma ka papa kuhikuhi laʻana ʻike mākou i ʻekolu faila hoʻonohonoho me nā waiwai node - hōʻike ka inoa i ke ʻano o ka node i kekahi ʻano.

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

Loaʻa iā SymmetricDS nā faila hoʻonohonoho pono a pau no kahi hoʻolālā kumu 3-node (koho 1), a hiki ke hoʻohana ʻia nā faila like no ka hoʻolālā 2-node (koho 2). E kope i ka faila hoʻonohonoho i makemake ʻia mai ka papa kuhikuhi hoʻohālike i nā mīkini ma ka host vm1. E like me kēia:

$> 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

Ua kapa ʻia kēia node i ka hoʻonohonoho SymmetricDS corp-000, a mālama ʻia ka pilina waihona e ka mea hoʻokele mysql jdbc, nāna e hoʻohana i ke kaula pili ma luna a me nā hōʻoia hōʻoia. Hoʻopili mākou i ka waihona replica_db a e hana ʻia nā papa i ka wā o ka hana ʻana. sync.url hōʻike i kahi o ka pilina i ka node no ka hoʻonohonoho.

Hoʻonohonoho ʻia ʻo Node 2 ma ka host vm2 e like me ka hale kūʻai-001 a ʻo ke koena i hōʻike ʻia ma ka faila node.properties ma lalo. Holo ka hale kūʻai Node-001 i ka ʻikepili PostgreSQL a ʻo pgdb_replica ka waihona replication. registration.url hiki i ka host vm2 ke hoʻokaʻaʻike i ka host vm1 a loaʻa nā kikoʻī hoʻonohonoho mai ia mea.

$> 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

Loaʻa i ka laʻana SymmetricDS i hoʻopau ʻia nā ʻāpana no ka hoʻonohonoho ʻana i ʻelua ala hou ma waena o ʻelua mau kikowaena waihona (ʻelua nodes). Hana ʻia nā ʻanuʻu ma lalo ma ka host vm1 (corp-000), ka mea e hana i kahi laʻana schema me 4 mau papa. A laila e holo ana i ka create-sym-tables me ke kauoha symadmin e hana i nā papa kuhikuhi kahi e mālama ʻia ai nā lula a me ke kuhikuhi o ka replication ma waena o nā nodes. ʻO ka hope, hoʻouka ʻia ka ʻikepili laʻana i nā papa.

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

Ma ka la'ana, ua ho'onohonoho 'akomi 'ia ka 'ikamu a me ka mea_selling_price e hana hou mai ka corp-000 a i ka hale-001, a ua ho'onohonoho 'akomi 'ia nā papa kū'ai (sale_transaction and sale_return_line_item) e hana hou mai ka hale kū'ai-001 a i ka corp-000. I kēia manawa, hana mākou i kahi schema ma ka ʻikepili PostgreSQL ma ka host vm2 (store-001) e hoʻomākaukau ai no ka loaʻa ʻana o ka ʻikepili mai corp-000.

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

E nānā pono i ka waihona MySQL ma vm1 he mau papa hiʻohiʻona a me nā papa helu SymmetricDS. E hoʻomaopopo i ka loaʻa ʻana o nā papa ʻōnaehana SymmetricDS (prefixed me sym_) i kēia manawa ma ka node corp-000 no ka mea ma laila mākou i holo ai i ke kauoha create-sym-tables a e hoʻokele ana i ka hoʻopiʻi. A i loko o ka waihona ma ka hale kūʻai node-001 aia wale nō nā papa hiʻohiʻona 4 me ka ʻole o ka ʻikepili.

ʻO nā mea a pau. Ua mākaukau ke kaiapuni e holo i nā kaʻina hana sym server ma nā node ʻelua e like me ka hōʻike ʻana ma lalo nei.

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

Hoʻouna ʻia nā mea hoʻokomo i kahi faila log background (symmetric.log) i loko o ka waihona logs ma ka papa kuhikuhi kahi i hoʻokomo ʻia ai ʻo SymmetricDS, a me ka hoʻopuka maʻamau. Hiki ke hoʻomaka ʻia ke kikowaena sym ma ka hale kūʻai node-001.

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

Inā holo ʻoe i ke kaʻina hana sym server ma ka vm2 host, e hana pū ia i nā papa helu SymmetricDS ma ka waihona PostgreSQL. Inā holo ʻoe i ke kaʻina hana sym server ma nā node ʻelua, hoʻonohonoho pū lākou me kekahi i kekahi e hoʻopili hou i ka ʻikepili mai corp-000 a store-001. Inā ma hope o kekahi mau kekona e nīnau mākou i nā papa 4 a pau ma nā ʻaoʻao ʻelua, e ʻike mākou ua kūleʻa ka hana hou ʻana. A i ʻole hiki iā ʻoe ke hoʻouna i ka bootstrap i ka hale kūʻai node-001 mai corp-000 me kēia kauoha.

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

I kēia manawa, ua hoʻokomo ʻia kahi moʻolelo hou i loko o ka papaʻaina mea ma ka waihona MySQL ma ka node corp-000 (host: vm1), a hiki iā ʻoe ke nānā i kāna replication i ka waihona PostgreSQL ma ka hale kūʻai node-001 (host: vm2). ʻIke mākou i kahi hana huki e hoʻoneʻe i ka ʻikepili mai corp-000 a i hale kūʻai-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)

No ka hana ʻana i kahi hana Push e hoʻoneʻe i ka ʻikepili mai ka hale kūʻai-001 a i ka corp-000, hoʻokomo mākou i kahi moʻolelo i loko o ka papa kūʻai_transaction a hōʻoia i ka holomua o ka hana hou ʻana.

ʻO ka hopena.

ʻIke mākou i ka hoʻonohonoho kūleʻa o ka replication ʻelua ʻaoʻao o nā papa hiʻohiʻona ma waena o MySQL a me PostgreSQL ʻikepili. No ka hoʻonohonoho hou ʻana i nā papa hoʻohana hou, e hahai i kēia mau ʻanuʻu: Hana mākou i ka papa t1 no ka laʻana a hoʻonohonoho i kāna mau lula replication e like me kēia. Ma kēia ala mākou e hoʻonohonoho ai i ka replication wale nō mai corp-000 i 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)

Hoʻomaopopo ʻia ka hoʻonohonoho ʻana no ka hoʻololi ʻana o ka schema, ʻo ia hoʻi, ka hoʻohui ʻana i kahi papaʻaina hou, me ka hoʻohana ʻana i ke kauoha symadmin me ka hoʻopaʻapaʻa sync-triggers, e hana hou ana i nā mea hoʻomaka e palapala i nā wehewehe papa. hoʻouna ʻia ka papa kuhikuhi no ka hoʻouna ʻana i nā hoʻololi schema i ka hale kūʻai node-001, a ua hoʻonohonoho hou ʻia ka pākaukau t1.

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

Nā pōmaikaʻi o SymmetricDS

Hoʻonohonoho maʻalahi a me ka hoʻonohonoho ʻana, me kahi hoʻonohonoho mākaukau o nā faila me nā ʻāpana no ka hana ʻana i kahi kaapuni ʻekolu-node a ʻelua-node.
ʻO nā ʻikepili cross-platform a me ke kūʻokoʻa o ka paepae, me nā kikowaena, laptops a me nā polokalamu kelepona.
Hoʻopili hou i kekahi waihona i kekahi ʻikepili ʻē aʻe ma ka ʻāina, ma ka WAN a i ʻole ma ke ao.
Hiki i ka hana maikaʻi loa me nā ʻikepili ʻelua a i ʻole mau tausani no ka hoʻopiʻi maʻalahi.
Uku uku me GUI a me ke kākoʻo maikaʻi loa.

Nā hemahema o SymmetricDS

Pono ʻoe e wehewehe lima i nā lula a me ke kuhikuhi o ka hoʻopiʻi ʻana ma ka laina kauoha ma o nā ʻōlelo SQL e hoʻouka i nā papa papa inoa, hiki ke maʻalahi.
ʻO ka hoʻonohonoho ʻana i nā papa he nui no ka hana hou ʻana he mea paʻakikī ke ʻole ʻoe e hoʻohana i nā palapala e hana i nā ʻōlelo SQL e wehewehe i nā lula a me ke kuhikuhi o ka replication.
Nui loa ka ʻike i hoʻopaʻa ʻia i loko o nā lāʻau, a i kekahi manawa pono ʻoe e hoʻomaʻemaʻe i ka faila log i ʻole e lawe i kahi nui.

Nā hualoaʻa no SymmetricDS

ʻAe ʻo SymmetricDS iā ʻoe e hoʻonohonoho i ka hoʻopiʻi ʻelua ʻaoʻao ma waena o ʻelua, ʻekolu, a i ʻole he mau kaukani node e hoʻopili a hoʻonohonoho i nā faila. He mea hana kūʻokoʻa kēia e hana kūʻokoʻa i nā hana he nui, e like me ka hoʻihoʻi ʻana i ka ʻikepili ma hope o ka manawa lōʻihi o ka manawa haʻahaʻa ma kahi node, paʻa a maikaʻi hoʻi ka hoʻololi ʻana o ka ʻikepili ma waena o nā nodes ma o HTTPS, ka hoʻokele hakakā ma muli o kahi hoʻonohonoho o nā lula, etc. SymmetricDS performs ka hana hou ʻana ma waena o nā waihona, no laila, hiki ke hoʻohana ʻia no nā ʻano hiʻohiʻona like ʻole, me ka neʻe ʻana, ka neʻe ʻana, ka hāʻawi ʻana, kānana ʻana, a me ka hoʻololi ʻana o ka ʻikepili ma nā kahua.

Hoʻokumu ʻia ka laʻana ma luna o ka luna alakaʻi wikiwiki na SymmetricDS. IN palapala hoʻohana E wehewehe kikoʻī i nā manaʻo like ʻole e pili ana i ka hoʻonohonoho hou ʻana me SymmetricDS.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka