Isku dhufashada inta u dhaxaysa PostgreSQL iyo MySQL

Isku dhufashada inta u dhaxaysa PostgreSQL iyo MySQL

Waxaan qeexi doonaa isku-celinta u dhexeeya PostgreSQL iyo MySQL, iyo sidoo kale hababka loo dejiyo isku-celinta u dhexeeya labada xog-ururin. Caadi ahaan, xog ururin iskutallaab ah ayaa loo yaqaan 'homogeneous', waana hab ku habboon oo looga guurayo hal server RDBMS oo loo guurayo mid kale.

Xog ururinta PostgreSQL iyo MySQL ayaa guud ahaan loo arkaa inay xidhiidh leeyihiin, laakiin kordhinta dheeraadka ah waxay bixiyaan awoodaha NoSQL. Halkan waxaan kaga hadli doonaa ku celcelinta u dhaxaysa PostgreSQL iyo MySQL iyadoo laga eegayo aragtida DBMS ee xidhiidhka ah.

Ma sharxi doonno dhammaan shaqooyinka gudaha, kaliya mabaadi'da aasaasiga ah si aad u heshid fikrad ah habaynta nuqul ka dhexeeya server-yada xogta, faa'iidooyinka, xaddidnaanta iyo isticmaalka kiisaska.

Caadi ahaan, ku celcelinta u dhaxaysa laba xog ururin oo isku mid ah ayaa lagu sameeyaa qaab laba-geesood ah ama iyadoo la adeegsanayo su'aalo u dhexeeya sayid (aka daabacaha, sayid, ama firfircoon) iyo addoon (ku-salaysan, heegan, ama dadban). Ujeedada ku-noqoshada waa in la bixiyo koobi-waqtiga-dhabta ah ee kaydka xogta sayid ee dhinaca addoonta. Xaaladdan oo kale, xogta waxaa laga wareejiyaa sayidkii ilaa addoon, taas oo ah, ka firfircoon si aan qarsoodi ahayn, sababtoo ah ku celcelinta waxaa lagu sameeyaa hal jiha kaliya. Laakiin waxaad samayn kartaa ku celcelin inta u dhaxaysa laba xog ururin ee labada jiho, si xogta looga wareejiyo addoonka loona wareejiyo habaynta firfircoon ee firfircoon. Waxaas oo dhan, oo ay ku jiraan dib-u-celinta cascading, waxay suurtogal u tahay inta u dhaxaysa laba ama in ka badan oo isku mid ah server-yada xogta isku midka ah, qaabeynta firfircoon ee firfircoon ama firfircoon waxay ku xiran tahay baahida, helitaanka awoodahaas qaabeynta bilowga ah ama isticmaalka xalalka qaabeynta dibadda iyo ganacsi-offs ee jira.

Qaabeynta la sharraxay ayaa suurtagal ah inta u dhaxaysa server-yada xogta ee kala duwan. Seerfarka waxa loo habayn karaa si uu u aqbalo xogta nuqul ka mid ah kaydka kaydka kale oo uu weli hayo sawir-qaadista xogta la soo koobay ee wakhtiga-dhabta ah. MySQL iyo PostgreSQL waxay bixiyaan inta badan qaabayntan gudaha guriga ama iyada oo loo marayo kordhinta qolo saddexaad, oo ay ku jiraan hababka log ee binary, qufulka saxanka, iyo bayaannada-iyo hababka safka ku salaysan.

Ku-noqoshada u dhaxaysa MySQL iyo PostgreSQL ayaa loo baahan yahay guuritaan hal mar ah oo laga bilaabo hal kayd xogeed una guuro mid kale. Xog-ururintani waxa ay adeegsadaan borotokool kala duwan, sidaa awgeed suurtagal maaha in si toos ah loogu xidho. Si loo dhiso xog iswaydaarsi, waxaad isticmaali kartaa qalab il furan oo dibadeed, tusaale pg_chameleon.

Waa maxay pg_chameleon

pg_chameleon waa nidaam ku-dabasho oo laga bilaabo MySQL ilaa PostgreSQL ee Python 3. Waxay isticmaashaa isha furan ee mysql-replication maktabadda, sidoo kale Python. Sawirada safafka ah ayaa laga soosaaray miisaska MySQL waxaana lagu kaydiyaa sidii walxaha JSONB ee ku jira kaydka PostgreSQL, ka dibna waxaa furfuray shaqada pl/pgsql waxaana lagu soo saaray xogta PostgreSQL.

Tilmaamaha pg_chameleon

Nidaamyo badan oo MySQL ah oo ka socda koox isku mid ah ayaa lagu soo celin karaa hal bartilmaameed oo xogta PostgreSQL ah oo hal-ilaa-badan ah.
Isha iyo magacyada qorshaynta bartilmaameedku isku mid ma noqon karaan.
Xogta ku celcelinta waxa laga soo saari karaa nuqul MySQL ah oo cascaded.
Shaxda aan soo celin karin ama aan soo saari karin khaladaadka waa laga saaray.
Hawl kasta oo soo-noqosho ah waxa gacanta ku haya dheemanka.
Ku xakamee xuduudaha ku saleysan YAML iyo faylalka qaabeynta.

Tusaale:

Martigeliyaha
xikmad
xikmad

Nooca OS
CentOS Linux 7.6 x86_64
CentOS Linux 7.5 x86_64

DB nooca server
MySQL 5.7.26
PostgreSQL 10.5

dekedda DB
3306
5433

Cinwaanka IP
192.168.56.102
192.168.56.106

Si aad u bilowdo, diyaari dhammaan qaybaha lagama maarmaanka ah si aad u rakibto pg_chameleon. Tusaalahani wuxuu ku rakibayaa Python 3.6.8, kaas oo abuura oo dhaqaajiya jawiga casriga ah.

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

Ka dib markii si guul leh loo rakibo Python3.6, waxaad u baahan tahay inaad buuxiso shuruudaha hadhay, sida abuurista iyo kicinta jawi muuqaal ah. Intaa waxaa dheer, moduleka pip-ka waxaa loo cusboonaysiiyay noocii ugu dambeeyay waxaana loo isticmaalaa in lagu rakibo pg_chameleon. Amarrada hoose waxay si ula kac ah ugu rakibaan pg_chameleon 2.0.9, in kasta oo nooca ugu dambeeya uu yahay 2.0.10. Tani waa lagama maarmaan si looga fogaado kutaannada cusub ee nooca la cusboonaysiiyay.

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

Waxaan markaa u wacnaa pg_chameleon (chameleon waa amar) oo leh doodda set_configuration_files si aan u awoodno pg_chameleon una abuurno hagaha caadiga ah iyo faylalka qaabeynta.

(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

Hadda waxaan abuurnaa nuqul ah config-example.yml sida default.yml si ay u noqoto faylka qaabeynta caadiga ah. Faylka qaabeynta muunada ee tusaalahan ayaa hoos lagu bixiyay.

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

Faylka qaabeynta ee tusaalahan waa muunad faylka pg_chameleon oo leh wax ka beddel yar oo ku habboon isha iyo deegaanka la beegsanayo, hoostana waa dulmar qaybaha kala duwan ee faylka qaabeynta.

Faylka qaabeynta default.yml waxaa ku jira qayb ka mid ah goobaha caalamiga ah, halkaas oo aad ku maamuli karto goobaha sida goobta faylka qufulka, goobta diiwaanka, xilliga kaydinta logs, iwm xeerar u dejisan noocyada ka-hortagga inta lagu jiro soo-celinta. Tusaalahan waxa uu u rogayaa nooc ka mid ah xeerka ka soo horjeeda kaas oo u beddelaya wax yar (1) qiimaha boolean. Qaybta soo socota, waxaan ku qeexnaa faahfaahinta isku xirka xogta xogta bartilmaameedka. Xaaladeena, kani waa xogta PostgreSQL, ee loo qoondeeyay pg_conn. Qeybta ugu dambeysa, waxaan ku muujineynaa xogta isha, taas oo ah, xuduudaha isku xirka xogta xogta, nidaamka khariidadda ee u dhexeeya ilaha iyo database-yada bartilmaameedka, miisaska u baahan in la dhaafo, wakhtiga sugitaanka, xusuusta, cabbirka xirmada. Ogsoonow in "ilo" ay yihiin jamac, taasoo la macno ah in aan ku dari karno xog uruurin badan oo kayd ah oo la beegsanayo si loo dejiyo qaabaynta mid-ilaa-hal.

Tusaalaha database world_x waxa uu ka kooban yahay 4 miis oo saf leh oo bulshada MySQL ay u bixiso tusaale ahaan. Waa la soo dejisan karaa halkan. Xogta muunadu waxay u timaadaa daamur iyo kayd la cufan oo leh tilmaamo abuurista iyo soo dejinta safafka.

MySQL iyo PostgreSQL xog-ururinta, isticmaale gaar ah ayaa lagu abuuray isla magaca usr_replica. MySQL dhexdeeda, waxa lasiiyaa xuquuqo akhrin dheeraad ah oo la xidhiidha miisaska la soo koobay.

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;

Dhinaca PostgreSQL, kaydka db_replica ayaa la sameeyay kaas oo aqbali doona isbeddelada xogta MySQL. Isticmaalaha usr_replica ee ku jira PostgreSQL waxa si toos ah loogu habeeyey inuu yahay mulkiilaha laba schemas, pgworld_x iyo sch_chameleon, kuwaas oo ka kooban miisaska dhabta ah ee la soo koobay iyo miisaska hagaha nuqulka, siday u kala horreeyaan. Doodda create_replica_schema ayaa mas'uul ka ah qaabeynta tooska ah, sida aad hoos ku arki doonto.

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

Xogta MySQL waxa lagu habeeyey isbedelo cabbiraadda si loogu diyaariyo ku-noqoshada sida hoos ku cad. Waxaad u baahan doontaa inaad dib u bilowdo server-ka xogta si isbedelku u dhaqan galo.

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

Hadda waxaa muhiim ah in la hubiyo isku xirka labada xog-ururin si aysan wax dhibaato ah u dhicin marka la wado amarrada pg_chameleon.

Dusha sare ee PostgreSQL:

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

On budhka MySQL:

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

Saddexda soo socota ee pg_chameleon (chameleon) amarrada waxay diyaariyaan deegaanka, ku dar isha, oo bilow nuqulka. Doodda create_replica_schema ee pg_chameleon waxay abuurtaa schema default (sch_chameleon) iyo qaabaynta qaabaynta (pgworld_x) gudaha kaydka PostgreSQL, sidii aynu hore uga wada hadalnay. Doodda add_source waxay ku darsataa xogta isha qaabeynta iyadoo la akhrinayo faylka qaabeynta (default.yml), xaaladdeenna waa mysql, iyo init_replica waxay bilaabeysaa qaabeynta iyadoo lagu saleynayo cabbirrada faylka qaabeynta.

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

Soo saarista saddexdan amar waxay si cad u tilmaamaysaa in si guul leh loo fuliyay. Shilalka ama khaladaadka syntax kasta waxaa lagu soo warramey fariimo fudud oo cad oo leh tilmaamo ku saabsan sida loo xaliyo dhibaatada.

Ugu dambeyntii, waxaan ku bilownaa ku celcelin annagoo adeegsanayna start_replica waxaana helnaa fariinta guusha.

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

Xaaladda ku-noqoshada waxa lagu waydiin karaa iyada oo la adeegsanayo doodda show_status, khaladaadkana waa la arki karaa iyada oo la adeegsanayo dooda show_errors.

Natiijo.

Sidaan horeyba u sheegnay, shaqo kasta oo ku-noqosho waxaa gacanta ku haya daemons. Si aan u aragno iyaga, waxaanu waydiinaynaa miiska nidaamka oo leh amarka Linux ps, sida hoos ku cad.

Natiijo.

Ku-noqoshada looma tixgalinayo in la habeeyey ilaa aan tijaabino wakhtiga dhabta ah, sida hoos ku cad. Waxaan abuurnaa miis, waxaanu gelinaa dhawr diiwaan gelin xogta MySQL, oo ​​wac doodaha sync_tables ee pg_chameleon si aan u cusboonaysiiyo daemons-ka oo aan ugu beddelno miiska diiwaannada kaydka 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.

Si loo xaqiijiyo natiijooyinka imtixaanka, waxaanu ka waydiinaynaa miiska xogta PostgreSQL oo aanu soo saarno safafka.

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

Haddii aan samaynayno socdaal, amarrada pg_chameleon ee soo socda ayaa noqon doona dhammaadka. Awaamiirta ayaa loo baahan yahay in la fuliyo ka dib markii aan hubinno in dhammaan safafka miisaska bartilmaameedka la soo koobay, natiijaduna waxay noqon doontaa xogta PostgreSQL oo si habsami leh u guurtay iyada oo aan tixraacin xogta isha ama nidaamka nuqulka (sch_chameleon).

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

Haddii la rabo, waxaad isticmaali kartaa amarradan soo socda si aad u tirtirto qaabaynta asalka ah iyo nidaamka ku celcelinta.

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

Faa'iidooyinka pg_chameleon

Habayn fudud iyo habayn
Si fudud u cilad oo u aqoonso cilladaha leh farriimaha khaladka cad.
Miisas gaar ah oo dheeraad ah ayaa lagu dari karaa ku celcelinta ka dib bilowga iyada oo aan la beddelin inta ka hartay qaabeynta.
Waa suurtogal in la habeeyo xog ururin ilo badan oo hal xog ah oo la beegsanayo, tanina aad bay faa'iido u leedahay haddii aad isku darayso xogta hal ama in ka badan oo MySQL ah oo aad geliso hal kayd oo PostgreSQL ah.
Uma baahnid inaad ku celceliso miisaska la doortay.

Khasaaraha PG_chameleon

Kaliya waxaa lagu taageeray MySQL 5.5 iyo wixii ka sareeya ilaha iyo PostgreSQL 9.5 iyo wixii ka sareeya sida xogta bartilmaameedka ah.
Miis kastaa waa inuu lahaadaa furaha aasaasiga ah ama gaarka ah, haddii kale shaxanka waa la bilaabay inta lagu jiro nidaamka init_replica laakiin lama soo koobin.
Ku celcelinta hal dhinac ah - kaliya laga bilaabo MySQL ilaa PostgreSQL. Sidaa darteed, waxay ku habboon tahay oo kaliya wareegga "firfircoon ee aan firfircoonayn".
Isha waxa ay noqon kartaa oo kaliya kaydka MySQL, iyo taageerada xogta PostgreSQL maadaama isha ay tahay tijaabo kaliya iyo xaddidaadyo (wax badan baro halkan)

Natiijooyinka pg_chameleon

Habka ku-noqoshada ee pg_chameleon wuxuu ku fiican yahay ka haajiridda xogta MySQL una guuri lahayd PostgreSQL. Hoos-u-dhaca weyni waa in ku-noqoshada ay tahay hal-jid oo keliya, sidaa darteed xirfadlayaasha xog-ururinta uma badna inay rabaan inay u adeegsadaan wax aan ahayn socdaalka. Laakiin dhibaatada hal-jid-ku-celinta waxaa lagu xallin karaa qalab kale oo furan - SymmetricDS.

Wax badan ka sii akhri dukumentiga rasmiga ah halkan. Caawinta khadka taliska waa la heli karaa halkan.

Dulmarka SymmetricDS

SymmetricDS waa qalab il furan oo ku soo celiya xog kasta xog kasta oo kale oo caadi ah: Oracle, MongoDB, PostgreSQL, MySQL, SQL Server, MariaDB, DB2, Sybase, Greenplum, Informix, H2, Firebird iyo tusaalooyinka kale ee xogta daruuraha, tusaale ahaan Redshift, iyo Azure, iwm. Astaamaha la heli karo: xog ururinta xogta iyo faylka, ku celcelinta xogta badan ee master-ka, isku xidhka la sifeeyay, isbeddelka iyo kuwa kale. Kani waa aalad Java ah oo u baahan in si caadi ah loo sii daayo JRE ama JDK (nooca 8.0 ama ka sareeya). Halkan, xogta waxay isu beddeshaa kiciyeyaasha ku jira kaydka xogta isha waa la duubi karaa oo loo diri karaa xogta bartilmaameedka habboon ee qaabka dufcadaha.

Sifooyinka SymmetricDS

Qalabku waa madal madax-bannaan, taasoo la micno ah in laba ama in ka badan oo xog-ururin oo kala duwan ay isweydaarsan karaan xogta.
Kaydka xogta ee xidhiidhka ah ayaa la mideeyaa iyadoo la isticmaalayo diiwaanada beddelka xogta, halka xogta nidaamka faylka ku salaysan ay isticmaalaan isku xidhka faylka.
Ku celcelinta laba-geesoodka ah iyadoo la adeegsanayo hababka riixida iyo jiidida oo ku salaysan xeerar.
Wareejinta xogta waxay suurtogal u tahay shabakadaha ammaansan iyo kuwa hooseeya.
Soo kabasho toos ah marka qanjidhada ay dib u bilaabaan shaqada ka dib fashilka iyo xallinta isku dhaca tooska ah.
Cloud ku habboon oo awood badan APIs.

Tusaale:

SymmetricDS waxaa lagu habayn karaa mid ka mid ah labada doorasho:
Ustaad (waalid) noode oo udub dhexaad u ah isku xirka xogta udhaxeysa labada nooji ee addoonta (ilmaha), iyo xiriirka ka dhexeeya qanjidhada ilmaha waxay ku dhacdaa waalidka oo keliya.
Noodka firfircoon (Node 1) wuxuu la xiriiri karaa ku-nooleynta noode kale oo firfircoon (Node 2) iyada oo aan lahayn dhexdhexaadiye.

Labada doorashoba, xog-isweydaarsigu wuxuu ku dhacaa riix iyo jiid. Tusaalahan waxa aanu tixgelin doonaa qaabaynta firfircoon ee firfircoon. Waxay qaadan doontaa waqti aad u dheer in la qeexo dhammaan qaab-dhismeedka, sidaas darteed samee cilmi-baaristaada. hagesi aad wax badan uga barato aaladda SymmetricDS.

Ku rakibida SymmetricDS waa mid aad u fudud: soo deji nooca isha furan ee faylka zip-ka halkan oo meeshaad doonto ka saar. Jadwalka hoose wuxuu bixiyaa macluumaadka ku saabsan goobta rakibaadda iyo nooca SymmetricDS ee tusaalahan, iyo sidoo kale noocyada xogta, noocyada Linux, cinwaannada IP, iyo dekedaha labada nood.

Martigeliyaha
xikmad
xikmad

Nooca OS
CentOS Linux 7.6 x86_64
CentOS Linux 7.6 x86_64

DB nooca server
MySQL 5.7.26
PostgreSQL 10.5

dekedda DB
3306
5832

Cinwaanka IP
192.168.1.107
192.168.1.112

Nooca SymmetricDS
SymmetricDS 3.9
SymmetricDS 3.9

Dariiqa rakibaadda SymmetricDS
/usr/local/symmetric-server-3.9.20
/usr/local/symmetric-server-3.9.20

SymmetricDS magaca noodhka
corp-000
dukaanka-001

Halkan waxaan ku rakibnay SymmetricDS gudaha /usr/local/symmetric-server-3.9.20, waxaana lagu kaydin doonaa hage-hoosaadyo iyo faylal kala duwan. Waxaan xiisaynaynaa muunadyada iyo matoorada buug-hoosaadka. Tusaha muunadaha waxa ku jira tusaale faylal habayn leh oo leh astaamo noodh ah, iyo sidoo kale tusaale qoraallada SQL si aad si dhakhso leh ugu bilowdo.

Tusaha muunadaha waxaan ku aragnaa saddex faylal oo qaabeyn ah oo leh guryaha noodhka - magacu wuxuu muujinayaa dabeecadda noodhka ee nidaam gaar ah.

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

SymmetricDS waxay haysataa dhammaan faylasha qaabeynta lagama maarmaanka u ah naqshadaynta 3-node ee aasaasiga ah (ikhtiyaarka 1), isla faylal isku mid ah ayaa loo isticmaali karaa naqshadeynta 2-node (doorashada 2). Ku koobbi faylka qaabeynta ee loo baahan yahay tusaha muunadyada matoorada ku jira martigeliyaha vm1. Waxay u egtahay sidan:

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

Noodkan ku jira qaabeynta SymmetricDS waxaa loo yaqaan corp-000, iyo isku xirka xogta xogta waxaa gacanta ku haya darawalka mysql jdbc, kaas oo adeegsada xadhkaha xidhiidhka ee kore iyo aqoonsiga gelitaanka. Waxaan ku xireynaa xogta replica_db oo miisaska waa la abuuri doonaa inta lagu jiro abuurista schema. sync.url waxay tusinaysaa meesha lagala xidhiidho noodhka isku xidhka.

Node 2 ee martida loo yahay vm2 waxaa loo habeeyey sida dukaanka-001 inta soo hartayna waxaa lagu qeexay faylka node.properties ee hoose. Dukaanka Node-001 wuxuu maamulaa xogta PostgreSQL iyo pgdb_replica waa kaydinta nuqulka registration.url waxay u ogolaataa martigeliyaha vm2 inuu la xidhiidho martigeliyaha vm1 oo uu ka helo faahfaahinta qaabaynta.

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

Tusaalaha SymmetricDS ee la dhammaystiray waxa uu ka kooban yahay cabbirro samaynta laba-geesood oo ku celcelin ah oo u dhexeeya laba xog-ururin (laba nood). Tallaabooyinka hoose waxaa lagu sameeyaa martigeliyaha vm1 (corp-000), kaas oo abuuri doona tusaale tusaale oo leh 4 miis. Kadibna ku socodsiinta abuur-sym-tables oo leh amarka symadmin waxay abuurtaa miisaska hagaha halkaas oo lagu kaydin doono qawaaniinta iyo jihada isku dhufashada ee u dhexeeya noodyada. Ugu dambeyntii, xogta muunada ayaa lagu shubaa miisaska.

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

Tusaalaha, shayga iyo shayga_selling_price miisaska si toos ah ayaa loo habeeyey si ay ugu soo celiyaan corp-000 ilaa dukaanka-001, iyo miisaska iibka (sale_transaction iyo sale_return_line_item) ayaa si toos ah loo habeeyey si ay uga soo celshaan dukaanka-001 ilaa corp-000. Hadda waxaan ku abuureynaa schema xogta PostgreSQL ee martigeliyaha vm2 (dukaanka-001) si aan ugu diyaarino inay xogta ka hesho corp-000.

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

Hubi inaad hubiso in xogta MySQL ee vm1 ay leedahay miisaska tusaalaha ah iyo miisaska buugga ee SymmetricDS. Ogsoonow in miisaska nidaamka SymmetricDS (horgale ku leh sym_) ay hadda diyaar ku yihiin node corp-000 sababtoo ah waa meesha aan ku maamuleyno amarka abuur-sym-tables waxaana lagu maamuli doonaa ku celcelinta. Iyo kaydka kaydka node-001 waxaa jiri doona 4 tusaale oo keliya oo aan xog lahayn.

Dhammaan Deegaanku wuxuu diyaar u yahay inuu socodsiiyo hababka server-ka sym ee labada noodu sida hoos ku cad.

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

Gelida galitaanka waxa loo diraa galka taarikhda (symmetric.log) ee ku jira galka diiwaanka ee tusaha halka SymmetricDS lagu rakibay, iyo sidoo kale wax soo saarka caadiga ah. Server-ka sym hadda waxa laga bilaabi karaa dukaanka node-001.

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

Haddii aad ku socodsiiso nidaamka server-ka vm2 martigeliyaha, waxay sidoo kale abuuri doontaa jaantusyada buugaagta SymmetricDS ee kaydka PostgreSQL. Haddii aad ku socodsiiso nidaamka server-ka sym ee labada noodu, waxay isku-dubbaridaan midba midka kale si ay u soo celiyaan xogta corp-000 ilaa dukaanka-001. Haddii dhowr ilbiriqsi ka dib aan weydiino dhammaan 4-ta shax ee labada dhinac, waxaan arki doonaa in ku celcelintu ay guul gaartay. Ama waxaad u diri kartaa bootstrap dukaanka node-001 corp-000 adoo wata amarkan soo socda.

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

Halkaa marka ay marayso, rikoodh cusub ayaa la geliyaa miiska shayga ee kaydka MySQL ee node corp-000 (martigeliyaha: vm1), waxaadna ka hubin kartaa ku-noqoshadeeda kaydka xogta PostgreSQL ee dukaanka node-001 (martigeliyaha: vm2). Waxaan aragnaa hawl-jiid si xogta corp-000 looga raro dukaanka-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)

Si loo sameeyo hawlgalka riix si xogta laga raro dukaanka-001 loona wareejiyo corp-000, waxaanu galinaa diiwaanka miiska sale_transaction oo aanu xaqiijino in ku celcelintu guul tahay.

Natiijo.

Waxaan aragnaa habaynta guusha leh ee ku celcelinta laba-geesoodka ah ee jaantusyada tusaalaha ee u dhexeeya MySQL iyo Xogaha PostgreSQL. Si aad u dejiso ku celcelinta miisaska isticmaalaha cusub, raac talaabooyinkan: Waxaan u abuurnaa miiska t1 tusaale ahaan waxaana u habeyneynaa xeerarkeeda ku-noqoshada sida soo socota. Sidan ayaanu u habaynaynaa kaliya ku-noqoshada corp-000 ilaa dukaanka-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)

Qaabeynta ayaa markaa la ogeysiiyaa isbeddelka schema, taas oo ah, ku darista miis cusub, iyada oo la adeegsanayo amarka symadmin oo leh doodda kicinta, taas oo dib u abuureysa kiciyeyaasha si ay u sawirto qeexitaannada miiska. send-schema waa la fuliyay si loogu diro isbedelada schema dukaanka-001, iyo ku celcelinta miiska t1 waa la habeeyey.

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

Faa'iidooyinka SymmetricDS

Rakibaadda fudud iyo qaabeynta, oo ay ku jiraan faylal diyaarsan oo la sameeyay oo leh cabbirro loogu talagalay abuuritaanka wareegga saddex-node ama laba-node.
Xog-ururinta-madax-bannaan iyo madax-bannaanida goobta, oo ay ku jiraan server-yada, laptop-yada iyo qalabka mobaylada.
Ku celi xog kasta xog kasta oo kale oo gudaha ah, WAN ama daruuraha.
Suurtagalnimada shaqada ugu fican oo leh dhowr xog-ururin ama dhowr kun oo ku habboon ku celcelinta.
Nooca la bixiyay oo leh GUI iyo taageero aad u fiican.

Khasaaraha SymmetricDS

Waxaad u baahan tahay inaad gacanta ku qeexdo xeerarka iyo jihada ku celcelinta khadka taliska adoo adeegsanaya weedho SQL si aad ugu shubto miisaska buugaagta, taas oo noqon karta mid aan habboonayn.
Dejinta jaantusyo badan oo ku celcelintu waxay noqon kartaa mid caajis ah ilaa aad isticmaasho qoraallada si aad u abuurto weedho SQL oo qeexaya xeerarka iyo jihada ku celcelinta.
Waxaa jira macluumaad aad u badan oo lagu duubay diiwaanka, mararka qaarkoodna waxaad u baahan tahay inaad hagaajiso faylka log si uusan u qaadin meel aad u badan.

Natiijooyinka SymmetricDS

SymmetricDS waxay kuu ogolaanaysaa inaad dejiso ku celcelin laba-geesood ah oo u dhexeeya laba, saddex, ama xitaa dhawr kun oo noodood si aad u soo koobto oo aad isu waafajiso faylasha. Tani waa qalab gaar ah oo si madaxbanaan u qabta hawlo badan, sida soo kabashada xogta tooska ah ka dib wakhti dheer oo hoos u dhac ku yimid qanjidhada, xogta sugan oo hufan ee dhexda noodhka iyada oo loo marayo HTTPS, maaraynta isku dhaca tooska ah ee ku salaysan xeerar, iwm. SymmetricDS waxay qabataa ku dhufashada u dhaxaysa xog kasta, sidaa darteed, waxaa loo isticmaali karaa xaalado kala duwan oo kala duwan, oo ay ku jiraan socdaalka, socdaalka, qaybinta, shaandhaynta, iyo beddelka xogta goobaha.

Tusaaluhu wuxuu ku salaysan yahay rasmiga ah hage degdeg ah by SymmetricDS. IN buug-gacmeedka isticmaale Wuxuu si faahfaahsan u qeexayaa fikradaha kala duwan ee ku lug leh samaynta ku celcelinta SymmetricDS.

Source: www.habr.com

Add a comment