PostgreSQL va MySQL o'rtasida o'zaro replikatsiya

PostgreSQL va MySQL o'rtasida o'zaro replikatsiya

Men PostgreSQL va MySQL o'rtasidagi o'zaro replikatsiyani, shuningdek, ikkita ma'lumotlar bazasi serverlari o'rtasida o'zaro replikatsiyani o'rnatish usullarini aytib beraman. Odatda, o'zaro takrorlangan ma'lumotlar bazalari bir hil deb ataladi va bu RDBMS serveridan boshqasiga o'tishning qulay usuli hisoblanadi.

PostgreSQL va MySQL ma'lumotlar bazalari odatda relyatsion hisoblanadi, ammo qo'shimcha kengaytmalar bilan ular NoSQL imkoniyatlarini taklif qiladi. Bu erda biz PostgreSQL va MySQL o'rtasidagi replikatsiyani relyatsion DBMS nuqtai nazaridan muhokama qilamiz.

Ma'lumotlar bazasi serverlari, afzalliklari, cheklovlari va foydalanish holatlari o'rtasida replikatsiyani sozlash haqida tasavvurga ega bo'lishingiz uchun biz butun ichki ishlarni tasvirlamaymiz, faqat asosiy tamoyillar.

Odatda, ikkita bir xil ma'lumotlar bazasi serverlari o'rtasida replikatsiya ikkilik rejimda yoki asosiy (nashriyotchi, asosiy yoki faol) va tobe (obunachi, kutish yoki passiv) o'rtasidagi so'rovlar yordamida amalga oshiriladi. Replikatsiyadan maqsad asosiy ma'lumotlar bazasining real vaqt rejimida qul tomonida nusxasini taqdim etishdir. Bunda ma'lumotlar masterdan qulga, ya'ni faoldan passivga o'tkaziladi, chunki replikatsiya faqat bitta yo'nalishda amalga oshiriladi. Ammo siz ikkita ma'lumotlar bazasi o'rtasida har ikki yo'nalishda replikatsiyani o'rnatishingiz mumkin, shunda ma'lumotlar faol-faol konfiguratsiyada quldan masterga uzatiladi. Bularning barchasi, shu jumladan, kaskadli replikatsiya, ikki yoki undan ortiq bir xil ma'lumotlar bazasi serverlari o'rtasida mumkin.Faol-faol yoki faol-passiv konfiguratsiya ehtiyojga, dastlabki konfiguratsiyada bunday imkoniyatlarning mavjudligiga yoki tashqi konfiguratsiya echimlaridan foydalanishga va mavjud o'zaro kelishuvlarga bog'liq.

Ta'riflangan konfiguratsiya turli ma'lumotlar bazasi serverlari o'rtasida mumkin. Server boshqa ma'lumotlar bazasi serveridan replikatsiya qilingan ma'lumotlarni qabul qilish va takrorlangan ma'lumotlarning real vaqtda suratlarini saqlab turish uchun sozlanishi mumkin. MySQL va PostgreSQL ushbu konfiguratsiyalarning aksariyatini uyda yoki uchinchi tomon kengaytmalari, jumladan ikkilik jurnal usullari, diskni blokirovka qilish va bayonot va qatorga asoslangan usullar orqali taklif qiladi.

MySQL va PostgreSQL o'rtasidagi o'zaro replikatsiya bir ma'lumotlar bazasi serveridan boshqasiga bir martalik o'tish uchun kerak. Ushbu ma'lumotlar bazalari turli xil protokollardan foydalanadi, shuning uchun ularni to'g'ridan-to'g'ri bog'lash mumkin emas. Ma'lumotlar almashinuvini o'rnatish uchun siz tashqi ochiq manba vositasidan foydalanishingiz mumkin, masalan, pg_chameleon.

pg_chameleon nima

pg_chameleon MySQL-dan Python 3-da PostgreSQL-ga replikatsiya tizimidir. U Python-da ham ochiq manbali mysql-replikatsiya kutubxonasidan foydalanadi. Qator tasvirlari MySQL jadvallaridan olinadi va JSONB ob'ektlari sifatida PostgreSQL ma'lumotlar bazasida saqlanadi, so'ngra pl/pgsql funksiyasi orqali shifrlanadi va PostgreSQL ma'lumotlar bazasida qayta ishlab chiqariladi.

pg_chameleon xususiyatlari

Xuddi shu klasterdan bir nechta MySQL sxemalari bittadan ko'p konfiguratsiyada bitta maqsadli PostgreSQL ma'lumotlar bazasiga ko'paytirilishi mumkin
Manba va maqsad sxema nomlari bir xil bo'lishi mumkin emas.
Replikatsiya ma'lumotlarini kaskadli MySQL replikasidan olish mumkin.
Replikatsiya qila olmaydigan yoki xatoliklarni keltirib chiqara olmaydigan jadvallar bundan mustasno.
Har bir replikatsiya funksiyasi demonlar tomonidan boshqariladi.
YAML asosidagi parametrlar va konfiguratsiya fayllari orqali boshqarish.

misol

Xost
vm1
vm2

OS versiyasi
CentOS Linux 7.6 x86_64
CentOS Linux 7.5 x86_64

DB server versiyasi
MySQL 5.7.26
PostgreSQL 10.5

JB porti
3306
5433

IP manzili
192.168.56.102
192.168.56.106

Boshlash uchun pg_chameleon o'rnatish uchun barcha kerakli komponentlarni tayyorlang. Ushbu misol virtual muhitni yaratadigan va faollashtiradigan Python 3.6.8 ni o'rnatadi.

$> 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 ni muvaffaqiyatli o'rnatganingizdan so'ng, virtual muhitni yaratish va faollashtirish kabi qolgan talablarni bajarishingiz kerak. Bundan tashqari, pip moduli so'nggi versiyaga yangilanadi va pg_chameleon o'rnatish uchun ishlatiladi. Quyidagi buyruqlar pg_chameleon 2.0.9 ni ataylab o'rnatadi, garchi oxirgi versiya 2.0.10. Bu yangilangan versiyada yangi xatolarni oldini olish uchun kerak.

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

Keyin pg_chameleonni (xameleon - bu buyruq) set_configuration_files argumenti bilan chaqiramiz va pg_chameleonni faollashtirish va standart kataloglar va konfiguratsiya fayllarini yaratish.

(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

Endi biz config-example.yml nusxasini default.yml sifatida yaratamiz, shunda u standart konfiguratsiya fayliga aylanadi. Quyida ushbu misol uchun konfiguratsiya faylining namunasi keltirilgan.

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

Ushbu misoldagi konfiguratsiya fayli pg_chameleon fayli namunasi boʻlib, manba va maqsadli muhitlarga mos keladigan kichik oʻzgarishlarga ega va quyida konfiguratsiya faylining turli boʻlimlari haqida umumiy maʼlumot berilgan.

default.yml konfiguratsiya faylida global sozlamalar bo'limi mavjud bo'lib, u erda siz qulflangan faylning joylashuvi, jurnallarning joylashuvi, jurnallar uchun saqlash muddati va boshqalar kabi sozlamalarni boshqarishingiz mumkin. Keyin turni bekor qilish bo'limi keladi. replikatsiya paytida turlarni bekor qilish qoidalari to'plami. Misol sukut bo'yicha tinyint(1) ni mantiqiy qiymatga o'zgartiradigan turni bekor qilish qoidasi hisoblanadi. Keyingi bo'limda biz maqsadli ma'lumotlar bazasiga ulanish tafsilotlarini aniqlaymiz. Bizning holatda, bu pg_conn deb nomlangan PostgreSQL ma'lumotlar bazasi. Oxirgi bo'limda biz manba ma'lumotlarini, ya'ni manba ma'lumotlar bazasining ulanish parametrlarini, manba va maqsadli ma'lumotlar bazalari o'rtasidagi xaritalash sxemasini, o'tkazib yuborilishi kerak bo'lgan jadvallarni, kutish vaqtini, xotirani, paket hajmini ko'rsatamiz. E'tibor bering, "manbalar" ko'plikdir, ya'ni biz bir nechta manba ma'lumotlar bazasini bitta maqsadli ma'lumotlar bazasiga qo'shishimiz mumkin.

World_x ma'lumotlar bazasi misolida MySQL hamjamiyati misol sifatida taqdim etadigan qatorli 4 ta jadval mavjud. Uni yuklab olish mumkin shu yerda. Namuna ma'lumotlar bazasi tar va siqilgan arxiv sifatida qatorlarni yaratish va import qilish bo'yicha ko'rsatmalar bilan birga keladi.

MySQL va PostgreSQL ma'lumotlar bazalarida usr_replica nomi bilan maxsus foydalanuvchi yaratiladi. MySQL-da unga barcha takrorlangan jadvallarga qo'shimcha o'qish huquqlari beriladi.

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 tomonida MySQL ma'lumotlar bazasidan o'zgarishlarni qabul qiladigan db_replica ma'lumotlar bazasi yaratilgan. PostgreSQL-dagi usr_replica foydalanuvchisi avtomatik ravishda ikkita sxemaning egasi sifatida sozlangan: pgworld_x va sch_chameleon, ular mos ravishda haqiqiy takrorlangan jadvallar va replikatsiya katalog jadvallarini o'z ichiga oladi. Create_replica_schema argumenti quyida ko'rib turganingizdek, avtomatik konfiguratsiya uchun javobgardir.

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

MySQL ma'lumotlar bazasi quyida ko'rsatilganidek, uni replikatsiyaga tayyorlash uchun ba'zi parametr o'zgarishlari bilan tuzilgan. O'zgarishlar kuchga kirishi uchun ma'lumotlar bazasi serverini qayta ishga tushirishingiz kerak bo'ladi.

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

Endi pg_chameleon buyruqlarini ishga tushirishda hech qanday muammo bo'lmasligi uchun ikkala ma'lumotlar bazasi serverlariga ulanishni tekshirish muhimdir.

PostgreSQL tugunida:

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

MySQL tugunida:

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

Keyingi uchta pg_chameleon (hameleon) buyrug'i muhitni tayyorlaydi, manba qo'shadi va replikani ishga tushiradi. pg_chameleon uchun create_replica_schema argumenti, biz allaqachon muhokama qilganimizdek, PostgreSQL ma'lumotlar bazasida standart sxemani (sch_chameleon) va replikatsiya sxemasini (pgworld_x) yaratadi. add_source argumenti konfiguratsiya faylini (default.yml) o'qish orqali konfiguratsiyaga manba ma'lumotlar bazasini qo'shadi va bizning holatda bu MySQL, init_replica esa konfiguratsiya faylidagi parametrlar asosida konfiguratsiyani ishga tushiradi.

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

Ushbu uchta buyruqning chiqishi ularning muvaffaqiyatli bajarilganligini aniq ko'rsatadi. Har qanday buzilishlar yoki sintaksis xatolari muammoni qanday hal qilish bo'yicha maslahatlar bilan oddiy, aniq xabarlarda xabar qilinadi.

Nihoyat, start_replica yordamida replikatsiyani boshlaymiz va muvaffaqiyat haqida xabar olamiz.

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

Replikatsiya holatini show_status argumenti yordamida so'rash mumkin va xatolarni show_errors argumenti yordamida ko'rish mumkin.

Natija.

Yuqorida aytib o'tganimizdek, har bir replikatsiya funktsiyasi demonlar tomonidan boshqariladi. Ularni ko'rish uchun biz quyida ko'rsatilganidek, Linux ps buyrug'i bilan jarayonlar jadvalini so'raymiz.

Natija.

Quyida ko'rsatilganidek, biz uni real vaqtda sinab ko'rmagunimizcha, replikatsiya tuzilgan deb hisoblanmaydi. Biz jadval yaratamiz, MySQL ma'lumotlar bazasiga bir nechta yozuvlarni kiritamiz va demonlarni yangilash va PostgreSQL ma'lumotlar bazasiga yozuvlar bilan jadvalni takrorlash uchun pg_chameleon-da sync_tables argumentini chaqiramiz.

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.

Sinov natijalarini tasdiqlash uchun biz PostgreSQL ma'lumotlar bazasidan jadvalni so'raymiz va qatorlarni chiqaramiz.

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

Agar biz migratsiyani amalga oshirayotgan bo'lsak, quyidagi pg_chameleon buyruqlari uning oxiri bo'ladi. Buyruqlar barcha maqsadli jadvallar satrlari takrorlanganiga amin bo'lganimizdan so'ng bajarilishi kerak va natijada manba ma'lumotlar bazasiga yoki replikatsiya sxemasiga (sch_chameleon) havolalarsiz aniq ko'chirilgan PostgreSQL ma'lumotlar bazasi bo'ladi.

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

Agar xohlasangiz, asl konfiguratsiya va replikatsiya sxemasini o'chirish uchun quyidagi buyruqlardan foydalanishingiz mumkin.

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

pg_chameleon afzalliklari

Oson sozlash va sozlash.
Aniq xato xabarlari bilan anomaliyalarni osongina bartaraf qiling va aniqlang.
Konfiguratsiyaning qolgan qismini o'zgartirmasdan ishga tushirilgandan so'ng replikatsiyaga qo'shimcha maxsus jadvallar qo'shilishi mumkin.
Bitta maqsadli ma'lumotlar bazasi uchun bir nechta manba ma'lumotlar bazalarini sozlash mumkin va agar siz bir yoki bir nechta MySQL ma'lumotlar bazalaridan ma'lumotlarni bitta PostgreSQL ma'lumotlar bazasiga birlashtirsangiz, bu juda foydali.
Tanlangan jadvallarni takrorlash shart emas.

pg_chameleonning kamchiliklari

Faqat MySQL 5.5 va undan yuqori versiyalari manba sifatida, PostgreSQL 9.5 va undan yuqori versiyalari maqsadli maʼlumotlar bazasi sifatida qoʻllab-quvvatlanadi.
Har bir jadval asosiy yoki noyob kalitga ega bo'lishi kerak, aks holda jadvallar init_replica jarayonida ishga tushiriladi, lekin takrorlanmaydi.
Bir tomonlama replikatsiya - faqat MySQL dan PostgreSQL ga. Shuning uchun u faqat "faol-passiv" sxema uchun javob beradi.
Manba faqat MySQL ma'lumotlar bazasi bo'lishi mumkin va PostgreSQL ma'lumotlar bazasini manba sifatida qo'llab-quvvatlash faqat eksperimental va cheklovlarga ega (batafsil ma'lumot shu yerda)

pg_chameleon uchun natijalar

pg_chameleon-dagi replikatsiya usuli ma'lumotlar bazasini MySQL-dan PostgreSQL-ga o'tkazish uchun juda yaxshi. Muhim salbiy tomoni shundaki, replikatsiya faqat bir tomonlama, shuning uchun ma'lumotlar bazasi mutaxassislari uni migratsiyadan boshqa narsa uchun ishlatishni xohlamaydilar. Ammo bir tomonlama replikatsiya muammosini boshqa ochiq manbali vosita - SymmetricDS yordamida hal qilish mumkin.

Batafsil rasmiy hujjatlarda o'qing shu yerda. Buyruqlar qatori yordamini topish mumkin shu yerda.

SymmetricDS ga umumiy nuqtai

SymmetricDS har qanday ma'lumotlar bazasini boshqa har qanday umumiy ma'lumotlar bazasiga takrorlaydigan ochiq manbali vositadir: Oracle, MongoDB, PostgreSQL, MySQL, SQL Server, MariaDB, DB2, Sybase, Greenplum, Informix, H2, Firebird va boshqa bulutli ma'lumotlar bazasi misollari, masalan, Redshift va boshqalar. Azure va boshqalar. Mavjud xususiyatlar: ma'lumotlar bazasi va fayllarni sinxronlashtirish, ko'p asosiy ma'lumotlar bazasini replikatsiya qilish, filtrlangan sinxronizatsiya, transformatsiya va boshqalar. Bu Java vositasidir va JRE yoki JDK ning standart versiyasini talab qiladi (versiya 8.0 yoki undan yuqori). Bu erda manba ma'lumotlar bazasidagi triggerlarga ma'lumotlarning o'zgarishi yozilishi va tegishli maqsadli ma'lumotlar bazasiga partiyalar shaklida yuborilishi mumkin.

SymmetricDS xususiyatlari

Asbob platformadan mustaqil, ya'ni ikki yoki undan ortiq turli ma'lumotlar bazasi ma'lumotlarni almashishi mumkin.
Relyatsion ma'lumotlar bazalari ma'lumotlarni o'zgartirish yozuvlari yordamida sinxronlashtiriladi, fayl tizimiga asoslangan ma'lumotlar bazalari esa fayl sinxronizatsiyasidan foydalanadi.
Bir qator qoidalar asosida Push va Pull usullaridan foydalangan holda ikki tomonlama replikatsiya.
Ma'lumotlarni uzatish xavfsiz va past tarmoqli kengligi bo'lgan tarmoqlar orqali mumkin.
Nosozlikdan so'ng tugunlar ishlashni davom ettirganda avtomatik tiklash va nizolarni avtomatik hal qilish.
Bulutga mos keladigan va kuchli kengaytmali API.

misol

SymmetricDS ikkita variantdan birida sozlanishi mumkin:
Ikki qul (bola) tugunlar o'rtasida ma'lumotlar replikatsiyasini markazlashtirilgan tarzda muvofiqlashtiradigan asosiy (ota-ona) tugun va bolalar tugunlari o'rtasidagi aloqa faqat ota-ona orqali amalga oshiriladi.
Faol tugun (1-tugun) vositachisiz boshqa faol tugun (2-tugun) bilan replikatsiya qilish uchun muloqot qilishi mumkin.

Ikkala variantda ham ma'lumotlar almashinuvi Push va Pull yordamida amalga oshiriladi. Ushbu misolda biz faol-faol konfiguratsiyani ko'rib chiqamiz. Butun arxitekturani tasvirlash juda uzoq vaqt talab etadi, shuning uchun tadqiqotingizni qiling. etakchilikSymmetricDS qurilmasi haqida ko'proq ma'lumot olish uchun.

SymmetricDS-ni o'rnatish juda oddiy: zip faylning ochiq manba versiyasini yuklab oling shu yerda va uni xohlagan joyingizga olib boring. Quyidagi jadvalda ushbu misolda SymmetricDS ning o'rnatish joyi va versiyasi, shuningdek, ma'lumotlar bazasi versiyalari, Linux versiyalari, IP manzillari va ikkala tugun uchun portlar haqida ma'lumot berilgan.

Xost
vm1
vm2

OS versiyasi
CentOS Linux 7.6 x86_64
CentOS Linux 7.6 x86_64

DB server versiyasi
MySQL 5.7.26
PostgreSQL 10.5

JB porti
3306
5832

IP manzili
192.168.1.107
192.168.1.112

SymmetricDS versiyasi
SymmetricDS 3.9
SymmetricDS 3.9

SymmetricDS o'rnatish yo'li
/usr/local/symmetric-server-3.9.20
/usr/local/symmetric-server-3.9.20

SymmetricDS tugun nomi
korp-000
do'kon - 001

Bu erda biz SymmetricDS-ni /usr/local/symmetric-server-3.9.20 da o'rnatamiz va u erda turli pastki kataloglar va fayllar saqlanadi. Biz namunalar va dvigatellar kichik kataloglari bilan qiziqamiz. Namunalar katalogi tugun xususiyatlariga ega namuna konfiguratsiya fayllarini, shuningdek, sizni tezda boshlash uchun misol SQL skriptlarini o'z ichiga oladi.

Namunalar katalogida biz tugun xususiyatlariga ega uchta konfiguratsiya faylini ko'ramiz - nom ma'lum bir sxemada tugunning tabiatini ko'rsatadi.

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

SymmetricDS-da asosiy 3-tugunli dizayn uchun barcha kerakli konfiguratsiya fayllari mavjud (variant 1) va bir xil fayllar 2-tugunli dizayn uchun ishlatilishi mumkin (variant 2). Kerakli konfiguratsiya faylini namunalar katalogidan vm1 xostidagi dvigatellarga nusxalash. Bu shunday chiqadi:

$> 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 konfiguratsiyasidagi ushbu tugun corp-000 deb ataladi va ma'lumotlar bazasi ulanishi yuqoridagi ulanish qatori va kirish ma'lumotlaridan foydalanadigan mysql jdbc drayveri tomonidan boshqariladi. Biz replica_db ma'lumotlar bazasiga ulanamiz va sxema yaratish jarayonida jadvallar yaratiladi. sync.url sinxronlash uchun tugun bilan qayerga murojaat qilishni ko'rsatadi.

vm2 xostidagi 2-tugun do'kon-001 sifatida sozlangan, qolganlari esa quyidagi node.properties faylida ko'rsatilgan. Tugun do'koni-001 PostgreSQL ma'lumotlar bazasini boshqaradi va pgdb_replica replikatsiya ma'lumotlar bazasi. register.url vm2 xostiga vm1 xostiga murojaat qilish va undan konfiguratsiya tafsilotlarini olish imkonini beradi.

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

Tugallangan SymmetricDS misolida ikkita ma'lumotlar bazasi serverlari (ikki tugun) o'rtasida ikki tomonlama replikatsiyani o'rnatish parametrlari mavjud. Quyidagi amallar vm1 xostida (corp-000) bajariladi, bu 4 ta jadvalli misol sxemasini yaratadi. Keyin symadmin buyrug'i bilan create-sym-jadvallarni ishga tushirish, tugunlar orasidagi replikatsiya qoidalari va yo'nalishi saqlanadigan katalog jadvallarini yaratadi. Nihoyat, namunaviy ma'lumotlar jadvallarga yuklanadi.

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

Misolda, mahsulot va sotilgan_narx jadvallari korp-000dan do'kon-001ga, sotuvlar jadvallari (sotish_tranzaktsiyasi va sotilgan_qaytish_satrlari) avtomatik ravishda do'kon-001dan korp-000ga takrorlash uchun sozlangan. Endi biz PostgreSQL ma'lumotlar bazasida vm2 xostida (do'kon-001) sxemani yaratamiz, uni corp-000 dan ma'lumotlarni olishga tayyorlash.

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

vm1 da MySQL ma'lumotlar bazasida misol jadvallari va SymmetricDS katalog jadvallari mavjudligini tekshiring. Esda tutingki, SymmetricDS tizim jadvallari (sym_ prefiksi bilan) hozirda faqat node corp-000 da mavjud, chunki biz oʻsha yerda yaratish-sym-tables buyrugʻini ishga tushirdik va replikatsiyani boshqaramiz. Va do'kon-001 tugunidagi ma'lumotlar bazasida ma'lumotlarsiz faqat 4 ta misol jadvali bo'ladi.

Hammasi. Atrof-muhit quyida ko'rsatilganidek, ikkala tugunda sim-server jarayonlarini ishga tushirishga tayyor.

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

Jurnal yozuvlari SymmetricDS o'rnatilgan katalogdagi jurnallar papkasidagi fon jurnali fayliga (symmetric.log), shuningdek standart chiqishga yuboriladi. Sim-server endi do'kon-001 da ishga tushirilishi mumkin.

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

Agar siz vm2 xostida sim-server jarayonini ishga tushirsangiz, u PostgreSQL ma'lumotlar bazasida SymmetricDS katalog jadvallarini ham yaratadi. Agar siz ikkala tugunda sim-server jarayonini ishga tushirsangiz, ular corp-000 dan store-001 gacha bo'lgan ma'lumotlarni takrorlash uchun bir-biri bilan muvofiqlashadi. Agar bir necha soniyadan so'ng biz har ikki tomonning barcha 4 ta jadvalini so'rasak, replikatsiya muvaffaqiyatli bo'lganini ko'ramiz. Yoki bootstrapni quyidagi buyruq bilan corp-001 dan do'kon-000 tuguniga yuborishingiz mumkin.

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

Shu nuqtada, MySQL ma'lumotlar bazasidagi elementlar jadvaliga corp-000 tugunidagi yangi yozuv kiritiladi (host: vm1) va siz uning PostgreSQL ma'lumotlar bazasiga replikatsiyalanishini 001 tugun do'konidagi (host: vm2) tekshirishingiz mumkin. Biz ma'lumotlarni corp-000-dan do'kon-001-ga ko'chirish uchun Pull operatsiyasini ko'ramiz.

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)

Ma'lumotlarni do'kon-001-dan corp-000-ga o'tkazish uchun Push operatsiyasini bajarish uchun sale_transaction jadvaliga yozuv kiritamiz va replikatsiya muvaffaqiyatli ekanligini tekshiramiz.

Natija.

MySQL va PostgreSQL ma'lumotlar bazalari o'rtasida misol jadvallarini ikki tomonlama takrorlash muvaffaqiyatli o'rnatilganligini ko'ramiz. Yangi foydalanuvchi jadvallari uchun replikatsiyani sozlash uchun quyidagi amallarni bajaring: Masalan, t1 jadvalini yaratamiz va uning replikatsiya qoidalarini quyidagicha sozlaymiz. Shunday qilib, biz korp-000 dan do'kon-001 ga faqat replikatsiyani sozlaymiz.

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)

So‘ngra konfiguratsiyaga sxema o‘zgarishi, ya’ni jadval ta’riflarini xaritalash uchun triggerlarni qayta yaratuvchi sinxronlash-triggerlar argumenti bilan symadmin buyrug‘i yordamida yangi jadval qo‘shilishi haqida xabar beriladi. send-schema sxema o'zgarishlarini do'kon-001 tuguniga yuborish uchun bajariladi va t1 jadvalining replikatsiyasi sozlanadi.

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

SymmetricDS ning afzalliklari

Oson o'rnatish va sozlash, shu jumladan uch tugunli yoki ikkita tugunli sxemani yaratish uchun parametrlarga ega tayyor fayllar to'plami.
O'zaro platforma ma'lumotlar bazalari va platforma mustaqilligi, jumladan serverlar, noutbuklar va mobil qurilmalar.
Har qanday ma'lumotlar bazasini boshqa har qanday ma'lumotlar bazasiga mahalliy, WAN yoki bulutda takrorlang.
Qulay replikatsiya uchun bir nechta ma'lumotlar bazalari yoki bir necha minglar bilan optimal ishlash imkoniyati.
GUI va mukammal yordamga ega pullik versiya.

SymmetricDS ning kamchiliklari

Katalog jadvallarini yuklash uchun SQL iboralari orqali buyruq satrida takrorlash qoidalari va yo'nalishini qo'lda belgilashingiz kerak, bu noqulay bo'lishi mumkin.
Replikatsiya qoidalari va yo'nalishini belgilaydigan SQL iboralarini yaratish uchun skriptlardan foydalanmasangiz, replikatsiya uchun ko'plab jadvallarni o'rnatish zerikarli bo'lishi mumkin.
Jurnallarda juda ko'p ma'lumot yozilmoqda va ba'zan siz jurnal faylini juda ko'p joy egallamasligi uchun uni tartibga solishingiz kerak.

SymmetricDS uchun natijalar

SymmetricDS fayllarni takrorlash va sinxronlashtirish uchun ikki, uch yoki hatto bir necha ming tugunlar o'rtasida ikki tomonlama replikatsiyani o'rnatish imkonini beradi. Bu tugunda uzoq vaqt ishlamay qolgandan so‘ng ma’lumotlarni avtomatik tiklash, HTTPS orqali tugunlar o‘rtasida xavfsiz va samarali ma’lumotlar almashinuvi, qoidalar to‘plamiga asoslangan nizolarni avtomatik boshqarish va h.k. kabi ko‘plab vazifalarni mustaqil bajaradigan noyob vositadir. SymmetricDS har qanday ma'lumotlar bazalari o'rtasida replikatsiya, shuning uchun u turli xil stsenariylarda, jumladan, migratsiya, migratsiya, tarqatish, filtrlash va platformalar bo'ylab ma'lumotlarni o'zgartirish uchun ishlatilishi mumkin.

Misol mansabdor shaxsga asoslangan tezkor qo'llanma SymmetricDS tomonidan. IN foydalanuvchi uchun qo'llanma SymmetricDS bilan replikatsiyani o'rnatish bilan bog'liq turli tushunchalarni batafsil tavsiflaydi.

Manba: www.habr.com

a Izoh qo'shish