PostgreSQL болон MySQL хоорондын хөндлөн хуулбар

PostgreSQL болон MySQL хоорондын хөндлөн хуулбар

Би PostgreSQL болон MySQL хоёрын хооронд хөндлөн хуулбарлах, мөн хоёр мэдээллийн сангийн сервер хооронд хөндлөн хуулбарлах аргуудыг тоймлох болно. Ихэвчлэн хөндлөн хуулбарласан мэдээллийн сангуудыг нэгэн төрлийн гэж нэрлэдэг бөгөөд энэ нь нэг RDBMS серверээс нөгөө рүү шилжих тохиромжтой арга юм.

PostgreSQL болон MySQL өгөгдлийн сангууд ерөнхийдөө харилцаа холбоо гэж тооцогддог боловч нэмэлт өргөтгөлүүдийн тусламжтайгаар NoSQL-ийн боломжуудыг санал болгодог. Энд бид PostgreSQL болон MySQL хоёрын хоорондын хуулбарыг DBMS-ийн харилцааны үүднээс авч үзэх болно.

Бид дотоод ажиллагааг бүхэлд нь тайлбарлахгүй, зөвхөн үндсэн зарчмуудыг тайлбарлах болно, ингэснээр та мэдээллийн сангийн серверүүдийн хооронд хуулбарлах, давуу тал, хязгаарлалт, хэрэглээний тохиолдлуудыг тохируулах санааг олж авах болно.

Ихэвчлэн хоёр ижил өгөгдлийн сангийн серверүүдийн хооронд хуулбарлах нь хоёртын горимд эсвэл мастер (хэвлэн нийтлэгч, мастер эсвэл идэвхтэй) болон боол (захиалагч, зогсолт эсвэл идэвхгүй) хоорондын асуулга ашиглан хийгддэг. Хуулбарлах зорилго нь боол тал дээр мастер мэдээллийн сангийн бодит цагийн хуулбарыг өгөх явдал юм. Энэ тохиолдолд хуулбарлах нь зөвхөн нэг чиглэлд хийгддэг тул өгөгдлийг мастераас боол руу, өөрөөр хэлбэл идэвхтэйээс идэвхгүй рүү шилжүүлдэг. Гэхдээ та хоёр өгөгдлийн сангийн хооронд репликацийг хоёр чиглэлд тохируулах боломжтой бөгөөд ингэснээр өгөгдлийг боолоос мастер руу идэвхтэй-идэвхтэй тохиргоонд шилжүүлэх боломжтой. Хоёр буюу түүнээс дээш ижил төрлийн өгөгдлийн сангийн серверүүдийн хооронд каскад хуулбарлах зэрэг энэ бүхэн боломжтой.Идэвхтэй-идэвхтэй эсвэл идэвхтэй-идэвхгүй тохиргоо нь хэрэгцээ шаардлага, анхны тохиргоонд ийм чадавхи байгаа эсэх, эсвэл гадаад тохиргооны шийдлүүдийг ашиглах, одоо байгаа нөхцлөөс хамаарна.

Тайлбарласан тохиргоог өөр өөр өгөгдлийн сангийн серверүүдийн хооронд хийх боломжтой. Серверийг өөр өгөгдлийн сангийн серверээс хуулбарласан өгөгдлийг хүлээн авч, хуулбарласан өгөгдлийн бодит цагийн агшин зуурын зургийг хадгалахаар тохируулж болно. MySQL болон PostgreSQL нь эдгээр тохиргоонуудын ихэнхийг дотооддоо эсвэл гуравдагч талын өргөтгөлөөр дамжуулан санал болгодог бөгөөд үүнд хоёртын бүртгэлийн арга, дискийг түгжих, мэдэгдэл болон мөр дээр суурилсан аргууд орно.

MySQL болон PostgreSQL хоорондын хөндлөн хуулбар нь нэг өгөгдлийн сангийн серверээс нөгөө рүү нэг удаа шилжихэд шаардлагатай. Эдгээр мэдээллийн сангууд нь өөр өөр протоколуудыг ашигладаг тул тэдгээрийг шууд холбох боломжгүй юм. Мэдээлэл солилцохын тулд та гадаад нээлттэй эхийн хэрэгслийг ашиглаж болно, жишээ нь pg_chameleon.

pg_hameleon гэж юу вэ

pg_chameleon нь MySQL-ээс Python 3-т PostgreSQL рүү хуулбарлах систем юм. Энэ нь Python-д мөн нээлттэй эхийн mysql хуулбарлах номын санг ашигладаг. Мөрийн зургуудыг MySQL хүснэгтээс гаргаж аваад PostgreSQL мэдээллийн санд JSONB объект болгон хадгалаад pl/pgsql функцээр шифрлэгдэж PostgreSQL мэдээллийн санд хуулбарлана.

pg_hameleon-ийн онцлог

Нэг кластераас олон MySQL схемийг нэгээс олон тохиргоонд нэг зорилтот PostgreSQL мэдээллийн санд хуулбарлаж болно.
Эх сурвалж болон зорилтот схемийн нэр нь ижил байж болохгүй.
Давхардсан MySQL хуулбараас хуулбарлах өгөгдлийг татаж авч болно.
Хуулбарлах эсвэл алдаа гаргах боломжгүй хүснэгтүүдийг хассан болно.
Хуулбарлах функц бүрийг демонууд удирддаг.
YAML-д суурилсан параметрүүд болон тохиргооны файлуудаар дамжуулан удирдах.

Жишээ нь:

Хөтлөгч
vm1 дээр
vm2 дээр

OS хувилбар
CentOS Linux 7.6 x86_64
CentOS Linux 7.5 x86_64

DB серверийн хувилбар
MySQL 5.7.26
PostgreSQL 10.5

DB порт
3306
5433

IP хаяг
192.168.56.102
192.168.56.106

Эхлэхийн тулд pg_chameleon суулгахад шаардлагатай бүх бүрэлдэхүүн хэсгүүдийг бэлтгэ. Энэ жишээ нь виртуал орчинг үүсгэж идэвхжүүлдэг Python 3.6.8-г суулгасан болно.

$> wget https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tar.xz
$> tar -xJf Python-3.6.8.tar.xz
$> cd Python-3.6.8
$> ./configure --enable-optimizations
$> make altinstall

Python3.6-г амжилттай суулгасны дараа та виртуал орчин үүсгэх, идэвхжүүлэх зэрэг үлдсэн шаардлагуудыг биелүүлэх шаардлагатай. Нэмж дурдахад, pip модулийг хамгийн сүүлийн хувилбар болгон шинэчилж, pg_chameleon суулгахад ашигладаг. Доорх командууд нь pg_chameleon 2.0.9-г зориудаар суулгаж байгаа ч хамгийн сүүлийн хувилбар нь 2.0.10. Энэ нь шинэчилсэн хувилбарт шинэ алдаа гарахаас зайлсхийхэд зайлшгүй шаардлагатай.

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

Дараа нь бид pg_chameleon (хамелеон бол тушаал юм) гэж set_configuration_files аргументаар дуудаж, pg_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

Одоо бид config-example.yml-ийн хуулбарыг default.yml болгон үүсгэж, энэ нь үндсэн тохиргооны файл болно. Энэ жишээний тохиргооны файлыг доор өгөв.

$> cat default.yml
---
#global settings
pid_dir: '~/.pg_chameleon/pid/'
log_dir: '~/.pg_chameleon/logs/'
log_dest: file
log_level: info
log_days_keep: 10
rollbar_key: ''
rollbar_env: ''

# type_override allows the user to override the default type conversion into a different one.
type_override:
  "tinyint(1)":
    override_to: boolean
    override_tables:
      - "*"

#postgres  destination connection
pg_conn:
  host: "192.168.56.106"
  port: "5433"
  user: "usr_replica"
  password: "pass123"
  database: "db_replica"
  charset: "utf8"

sources:
  mysql:
    db_conn:
      host: "192.168.56.102"
      port: "3306"
      user: "usr_replica"
      password: "pass123"
      charset: 'utf8'
      connect_timeout: 10
    schema_mappings:
      world_x: pgworld_x
    limit_tables:
#      - delphis_mediterranea.foo
    skip_tables:
#      - delphis_mediterranea.bar
    grant_select_to:
      - usr_readonly
    lock_timeout: "120s"
    my_server_id: 100
    replica_batch_size: 10000
    replay_max_rows: 10000
    batch_retention: '1 day'
    copy_max_memory: "300M"
    copy_mode: 'file'
    out_dir: /tmp
    sleep_loop: 1
    on_error_replay: continue
    on_error_read: continue
    auto_maintenance: "disabled"
    gtid_enable: No
    type: mysql
    skip_events:
      insert:
        - delphis_mediterranea.foo #skips inserts on the table delphis_mediterranea.foo
      delete:
        - delphis_mediterranea #skips deletes on schema delphis_mediterranea
      update:

Энэ жишээн дэх тохиргооны файл нь эх сурвалж болон зорилтот орчинд тохирсон бага зэргийн өөрчлөлттэй pg_chameleon файлын жишээ бөгөөд тохиргооны файлын өөр өөр хэсгүүдийн тоймыг доор харуулав.

default.yml тохиргооны файлд түгжээтэй файлын байршил, бүртгэлийн байршил, бүртгэлийн хадгалах хугацаа гэх мэт тохиргоог удирдах боломжтой глобал тохиргооны хэсэг байдаг. Дараа нь төрлийг дарах хэсэг гарч ирнэ. хуулбарлах явцад төрлүүдийг дарах дүрмийн багц. Жишээ нь tinyint(1)-г логик утга руу хөрвүүлдэг төрлийг дарах дүрмийг анхдагч болгож өгдөг. Дараагийн хэсэгт бид зорилтот өгөгдлийн сантай холбогдох мэдээллийг зааж өгнө. Манай тохиолдолд энэ нь pg_conn гэж нэрлэгддэг PostgreSQL мэдээллийн сан юм. Сүүлийн хэсэгт бид эх өгөгдөл, өөрөөр хэлбэл эх мэдээллийн сангийн холболтын параметрүүд, эх ба зорилтот мэдээллийн сангийн хоорондох зураглалын схем, алгасах шаардлагатай хүснэгтүүд, хүлээх хугацаа, санах ой, багцын хэмжээг заана. "Эх сурвалж" нь олон тоон утгатай гэдгийг анхаарна уу, бид олон эх сурвалжийн мэдээллийн санг нэг зорилтот өгөгдлийн санд нэмж олон-нэг тохиргоог хийх боломжтой.

Жишээ өгөгдлийн сан world_x нь MySQL нийгэмлэгийн жишээ болгон санал болгодог мөр бүхий 4 хүснэгтийг агуулдаг. Үүнийг татаж авах боломжтой энд. Өгөгдлийн сангийн дээж нь мөр үүсгэх, импортлох заавар бүхий tar болон шахсан архив хэлбэрээр ирдэг.

MySQL болон PostgreSQL мэдээллийн санд usr_replica гэсэн ижил нэртэй тусгай хэрэглэгч үүсгэгддэг. MySQL-д бүх хуулбарласан хүснэгтэд унших нэмэлт эрхийг өгдөг.

mysql> CREATE USER usr_replica ;
mysql> SET PASSWORD FOR usr_replica='pass123';
mysql> GRANT ALL ON world_x.* TO 'usr_replica';
mysql> GRANT RELOAD ON *.* to 'usr_replica';
mysql> GRANT REPLICATION CLIENT ON *.* to 'usr_replica';
mysql> GRANT REPLICATION SLAVE ON *.* to 'usr_replica';
mysql> FLUSH PRIVILEGES;

PostgreSQL тал дээр MySQL өгөгдлийн сангийн өөрчлөлтийг хүлээн авах db_replica мэдээллийн сан үүсгэсэн. PostgreSQL дэх usr_replica хэрэглэгчийг pgworld_x болон sch_chameleon гэсэн хоёр схемийн эзэмшигчээр автоматаар тохируулсан бөгөөд тэдгээр нь бодит хуулбарласан хүснэгтүүд болон хуулбарлах лавлах хүснэгтүүдийг агуулдаг. Create_replica_schema аргумент нь автомат тохиргоог хариуцдаг бөгөөд үүнийг доороос харах болно.

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

MySQL мэдээллийн баазыг доор үзүүлсэн шиг хуулбарлахад бэлтгэхийн тулд зарим параметрийн өөрчлөлтөөр тохируулсан. Өөрчлөлтүүд хүчин төгөлдөр болохын тулд та мэдээллийн сангийн серверийг дахин эхлүүлэх шаардлагатай болно.

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

Одоо pg_chameleon командуудыг ажиллуулахад ямар ч асуудал гарахгүйн тулд мэдээллийн баазын серверүүдийн холболтыг шалгах нь чухал юм.

PostgreSQL зангилаа дээр:

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

MySQL зангилаа дээр:

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

Дараагийн гурван pg_chameleon (хамелеон) команд нь орчныг бэлтгэж, эх сурвалжийг нэмж, хуулбарыг эхлүүлнэ. pg_chameleon-ын create_replica_schema аргумент нь PostgreSQL мэдээллийн санд өгөгдмөл схем (sch_chameleon) болон хуулбарлах схемийг (pgworld_x) үүсгэдэг. add_source аргумент нь тохиргооны файлыг (default.yml) уншиж тохиргоонд эх өгөгдлийн санг нэмдэг бөгөөд манай тохиолдолд энэ нь mysql бөгөөд init_replica нь тохиргооны файлын параметрүүд дээр тулгуурлан тохиргоог эхлүүлдэг.

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

Эдгээр гурван тушаалын гаралт нь тэдгээрийг амжилттай гүйцэтгэсэн гэдгийг тодорхой харуулж байна. Аливаа эвдрэл эсвэл синтакс алдааг асуудлыг хэрхэн засах талаар зөвлөмж бүхий энгийн, ойлгомжтой мессежээр мэдээлдэг.

Эцэст нь бид start_replica ашиглан хуулбарлах ажлыг эхлүүлж, амжилтын тухай мессеж хүлээн авна.

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

Хуулбарлах статусыг show_status аргументыг ашиглан асууж, алдааг show_errors аргументыг ашиглан харж болно.

Үр дүн.

Өмнө дурьдсанчлан хуулбарлах функц бүрийг демонууд удирддаг. Тэдгээрийг үзэхийн тулд бид доор үзүүлсэн шиг Linux ps командын тусламжтайгаар процессын хүснэгтээс асуудаг.

Үр дүн.

Доор үзүүлсэн шиг бид үүнийг бодит цаг хугацаанд турших хүртэл хуулбарыг тохируулсан гэж үзэхгүй. Бид хүснэгт үүсгэж, MySQL мэдээллийн санд хэд хэдэн бичлэг оруулаад pg_chameleon дахь sync_tables аргументыг дуудаж, дэмонуудыг шинэчилж, хүснэгтийг 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.

Туршилтын үр дүнг баталгаажуулахын тулд бид PostgreSQL мэдээллийн сангаас хүснэгтийг асууж, мөрүүдийг гаргадаг.

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

Хэрэв бид шилжилт хийж байгаа бол дараах pg_chameleon командууд нь түүний төгсгөл болно. Бид бүх зорилтот хүснэгтийн мөрүүдийг хуулбарласан гэдэгт итгэлтэй болсны дараа тушаалуудыг гүйцэтгэх шаардлагатай бөгөөд үр дүн нь эх мэдээллийн сан эсвэл хуулбарлах схем (sch_chameleon)-ийн лавлагаагүйгээр цэвэрхэн шилжүүлсэн PostgreSQL мэдээллийн сан болно.

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

Хэрэв хүсвэл та дараах тушаалуудыг ашиглан анхны тохиргоо болон хуулбарлах схемийг устгаж болно.

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

pg_chameleon-ийн давуу тал

Тохируулах, тохируулахад хялбар.
Тодорхой алдааны мэдэгдлүүдээр гажигуудыг хялбархан олж засварлаж, илрүүлээрэй.
Үлдсэн тохиргоог өөрчлөхгүйгээр эхлүүлсний дараа хуулбарлахад нэмэлт тусгай хүснэгтүүдийг нэмж болно.
Нэг зорилтот мэдээллийн санд зориулж олон эх сурвалжийн мэдээллийн санг тохируулах боломжтой бөгөөд хэрэв та нэг буюу хэд хэдэн MySQL өгөгдлийн сангаас өгөгдлийг нэг PostgreSQL мэдээллийн санд нэгтгэж байгаа бол энэ нь маш хэрэгтэй.
Сонгосон хүснэгтүүдийг хуулбарлах шаардлагагүй.

pg_chameleon-ийн сул тал

Зөвхөн MySQL 5.5 ба түүнээс дээш хувилбаруудыг эх сурвалж болгон, PostgreSQL 9.5 ба түүнээс дээш хувилбаруудыг зорилтот мэдээллийн сан болгон дэмждэг.
Хүснэгт бүр үндсэн эсвэл өвөрмөц түлхүүртэй байх ёстой, эс тэгвээс init_replica процессын явцад хүснэгтүүдийг эхлүүлдэг боловч хуулбарлагдахгүй.
Нэг талын хуулбар - зөвхөн MySQL-ээс PostgreSQL хүртэл. Тиймээс энэ нь зөвхөн "идэвхтэй-идэвхгүй" хэлхээнд тохиромжтой.
Эх сурвалж нь зөвхөн MySQL өгөгдлийн сан байж болох ба PostgreSQL мэдээллийн санг дэмжих нь зөвхөн туршилтын бөгөөд хязгаарлалттай (дэлгэрэнгүй үзэх энд)

pg_chameleon хайлтын үр дүн

pg_chameleon дахь хуулбарлах арга нь мэдээллийн санг MySQL-ээс PostgreSQL руу шилжүүлэхэд тохиромжтой. Нэлээд сул тал нь хуулбарлах нь зөвхөн нэг талдаа байдаг тул мэдээллийн сангийн мэргэжилтнүүд үүнийг шилжихээс өөр зүйлд ашиглахыг хүсэхгүй байх магадлалтай. Гэхдээ нэг талын хуулбарлах асуудлыг өөр нэг нээлттэй эхийн хэрэглүүр болох SymmetricDS ашиглан шийдэж болно.

Дэлгэрэнгүйг албан ёсны баримт бичгээс уншина уу энд. Тушаалын шугамын тусламжийг олж болно энд.

SymmetricDS-ийн тойм

SymmetricDS нь Oracle, MongoDB, PostgreSQL, MySQL, SQL Server, MariaDB, DB2, Sybase, Greenplum, Informix, H2, Firebird болон бусад үүлэн мэдээллийн санд, жишээ нь Redshift, болон бусад нийтлэг мэдээллийн санд дурын мэдээллийн санг хуулбарладаг нээлттэй эхийн хэрэгсэл юм. Azure гэх мэт Боломжтой боломжууд: өгөгдлийн сан ба файлын синхрончлол, олон мастер мэдээллийн санг хуулбарлах, шүүсэн синхрончлол, хувиргалт болон бусад. Энэ нь Java хэрэгсэл бөгөөд JRE эсвэл JDK (8.0 ба түүнээс дээш хувилбар) стандарт хувилбарыг шаарддаг. Энд эх сурвалжийн мэдээллийн сан дахь триггерүүдийн өгөгдлийн өөрчлөлтийг бүртгэж, багц хэлбэрээр тохирох зорилтот мэдээллийн сан руу илгээх боломжтой.

SymmetricDS функцууд

Энэхүү хэрэгсэл нь платформоос хамааралгүй бөгөөд хоёр ба түүнээс дээш өөр мэдээллийн сан өгөгдөл солилцох боломжтой гэсэн үг юм.
Харилцааны өгөгдлийн сангууд өгөгдлийн өөрчлөлтийн бүртгэлийг ашиглан синхрончлогддог бол файлын системд суурилсан мэдээллийн сан нь файлын синхрончлолыг ашигладаг.
Тодорхой дүрмийн дагуу Push and Pull аргыг ашиглан хоёр талын хуулбар.
Аюулгүй, бага зурвасын сүлжээгээр өгөгдөл дамжуулах боломжтой.
Алдаа гарсны дараа зангилаа дахин ажиллах үед автоматаар сэргээх, зөрчилдөөнийг автоматаар шийдвэрлэх.
Клоудтай нийцтэй, хүчирхэг өргөтгөл API.

Жишээ нь:

SymmetricDS-ийг хоёр аргын аль нэгээр тохируулж болно:
Хоёр боол (хүүхдийн) зангилааны хооронд өгөгдлийн хуулбарыг төвлөрсөн байдлаар зохицуулдаг мастер (эцэг эх) зангилаа бөгөөд хүүхэд зангилаа хоорондын харилцаа нь зөвхөн эцэг эхээр дамждаг.
Идэвхтэй зангилаа (1-р зангилаа) нь зуучлагчгүйгээр өөр идэвхтэй зангилаа (2-р зангилаа)-тай хуулбарлахаар холбогдож болно.

Хоёр хувилбарт өгөгдөл солилцох нь Push and Pull ашиглан явагддаг. Энэ жишээнд бид идэвхтэй-идэвхтэй тохиргоог авч үзэх болно. Архитектурыг бүхэлд нь тайлбарлахад хэтэрхий удаан хугацаа шаардагдах тул судалгаагаа хийгээрэй. гарын авлагаSymmetricDS төхөөрөмжийн талаар илүү ихийг мэдэхийг хүсвэл.

SymmetricDS суулгах нь маш энгийн: zip файлын нээлттэй эхийн хувилбарыг татаж аваарай Эндээс тэгээд хүссэн газраа аваад гарга. Доорх хүснэгтэд энэ жишээн дээрх SymmetricDS-ийн суулгалтын байршил, хувилбар, мөн өгөгдлийн сангийн хувилбарууд, Линукс хувилбарууд, IP хаягууд болон хоёр зангилааны портуудын талаарх мэдээллийг харуулав.

Хөтлөгч
vm1 дээр
vm2 дээр

OS хувилбар
CentOS Linux 7.6 x86_64
CentOS Linux 7.6 x86_64

DB серверийн хувилбар
MySQL 5.7.26
PostgreSQL 10.5

DB порт
3306
5832

IP хаяг
192.168.1.107
192.168.1.112

SymmetricDS хувилбар
SymmetricDS 3.9
SymmetricDS 3.9

SymmetricDS суулгах зам
/usr/local/symmetric-server-3.9.20
/usr/local/symmetric-server-3.9.20

SymmetricDS зангилааны нэр
корп-000
дэлгүүр-001

Энд бид /usr/local/symmetric-server-3.9.20-д SymmetricDS-ийг суулгаж, тэнд янз бүрийн дэд директор, файлууд хадгалагдах болно. Бид дээж, хөдөлгүүрийн дэд сангуудыг сонирхож байна. Дээжийн лавлах нь зангилааны шинж чанар бүхий жишээ тохиргооны файлууд, мөн таныг хурдан эхлүүлэхийн тулд жишээ SQL скриптүүдийг агуулдаг.

Дээжийн лавлах хэсэгт бид зангилааны шинж чанартай гурван тохиргооны файлыг харж байна - нэр нь тодорхой схем дэх зангилааны шинж чанарыг харуулдаг.

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

SymmetricDS нь үндсэн 3 зангилааны загварт шаардлагатай бүх тохиргооны файлуудтай (сонголт 1), мөн ижил файлуудыг 2 зангилаатай загварт (сонголт 2) ашиглаж болно. Шаардлагатай тохиргооны файлыг дээжийн лавлахаас vm1 хост дээрх хөдөлгүүрүүд рүү хуулна уу. Энэ нь дараах байдлаар харагдаж байна.

$> cat engines/corp-000.properties
engine.name=corp-000
db.driver=com.mysql.jdbc.Driver
db.url=jdbc:mysql://192.168.1.107:3306/replica_db?autoReconnect=true&useSSL=false
db.user=root
db.password=admin123
registration.url=
sync.url=http://192.168.1.107:31415/sync/corp-000
group.id=corp
external.id=000

SymmetricDS тохиргооны энэ зангилааг corp-000 гэж нэрлэдэг бөгөөд өгөгдлийн сангийн холболтыг mysql jdbc драйвераар зохицуулдаг бөгөөд дээрх холболтын мөр болон нэвтрэх үнэмлэхийг ашигладаг. Бид replica_db мэдээллийн сантай холбогдож, схем үүсгэх явцад хүснэгтүүд үүснэ. sync.url нь синхрончлол хийх цэгтэй хаана холбогдохыг харуулж байна.

Host vm2 дээрх 2-р зангилаа дэлгүүр-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 жишээ нь мэдээллийн сангийн хоёр сервер (хоёр зангилаа) хооронд хоёр талын хуулбарыг тохируулах параметрүүдийг агуулна. Дараах алхмуудыг host vm1 (corp-000) дээр гүйцэтгэх бөгөөд энэ нь 4 хүснэгт бүхий жишээ схемийг үүсгэх болно. Дараа нь create-sym-tables-ийг symadmin тушаалаар ажиллуулснаар зангилаа хоорондын хуулбарлах дүрэм, чиглэл хадгалагдах лавлах хүснэгтүүдийг үүсгэнэ. Эцэст нь түүвэр өгөгдлийг хүснэгтэд ачаална.

vm1$> cd /usr/local/symmetric-server-3.9.20/bin
vm1$> ./dbimport --engine corp-000 --format XML create_sample.xml
vm1$> ./symadmin --engine corp-000 create-sym-tables
vm1$> ./dbimport --engine corp-000 insert_sample.sql

Жишээн дээр барааны болон барааны_борлуулалтын_үнийн хүснэгтүүд нь корпораци-000-аас дэлгүүр-001, борлуулалтын хүснэгтүүд (худалдааны_гүйлгээ болон борлуулалтын_буцаах_мөрийн_бараа) нь дэлгүүр-001-ээс корпораци-000 хүртэл хуулбарлахаар автоматаар тохируулагдсан. Одоо бид vm2 (дэлгүүр-001) дээр PostgreSQL мэдээллийн санд схемийг үүсгэж, corp-000-аас өгөгдөл хүлээн авахад бэлтгэх болно.

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

vm1 дээрх MySQL мэдээллийн санд жишээ хүснэгтүүд болон SymmetricDS каталогийн хүснэгтүүд байгаа эсэхийг шалгаарай. SymmetricDS системийн хүснэгтүүд (sym_-ийн угтвартай) одоогоор зөвхөн node corp-000 дээр боломжтой гэдгийг анхаарна уу, учир нь энд бид create-sym-tables командыг ажиллуулж, хуулбарыг удирдах болно. Мөн зангилааны дэлгүүр-001 дээрх мэдээллийн санд өгөгдөлгүй зөвхөн 4 жишээ хүснэгт байх болно.

Бүгд. Энэ орчин нь доор үзүүлсэн шиг хоёр зангилаа дээр сим серверийн процессуудыг ажиллуулахад бэлэн байна.

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

Бүртгэлийн оруулгуудыг SymmetricDS суулгасан лавлах дахь бүртгэлийн хавтсанд байгаа арын бүртгэлийн файл (symmetric.log) болон стандарт гаралт руу илгээдэг. Sym серверийг одоо зангилааны дэлгүүр-001 дээр эхлүүлэх боломжтой.

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

Хэрэв та vm2 хост дээр сим серверийн процессыг ажиллуулбал PostgreSQL мэдээллийн санд SymmetricDS каталогийн хүснэгтүүдийг үүсгэх болно. Хэрэв та хоёр зангилаа дээр сим серверийн процессыг ажиллуулбал тэдгээр нь corp-000-аас store-001 хүртэлх өгөгдлийг хуулбарлахын тулд хоорондоо уялдаатай байдаг. Хэдэн секундын дараа бид 4 хүснэгтийг хоёр талаас нь асуувал хуулбар амжилттай болсныг харах болно. Эсвэл та дараах командыг ашиглан corp-001-аас node store-000 руу ачаалагчийг илгээж болно.

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

Энэ үед node corp-000 (хост: vm1) дээрх MySQL өгөгдлийн сан дахь зүйлийн хүснэгтэд шинэ бичлэг орсон бөгөөд та үүнийг node store-001 (хост: vm2) дээрх PostgreSQL мэдээллийн санд хуулбарлаж байгааг шалгаж болно. Бид өгөгдлийг corp-000-аас store-001 рүү шилжүүлэх Татах үйлдлийг харж байна.

mysql> insert into item values ('22000002','Jelly Bean');
Query OK, 1 row affected (0.00 sec)

vm2$> psql -p 5832 -U postgres pgdb_replica -c "select * from item"
 item_id  |   name
----------+-----------
 11000001 | Yummy Gum
 22000002 | Jelly Bean
(2 rows)

Мэдээллийг дэлгүүр-001-ээс корпорац-000 руу шилжүүлэхийн тулд Push үйлдлийг гүйцэтгэхийн тулд бид борлуулалтын_гүйлгээний хүснэгтэнд бичлэг оруулж, хуулбар амжилттай болсон эсэхийг шалгана.

Үр дүн.

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 командыг ашиглан шинэ хүснэгт нэмэх тухай мэдэгддэг бөгөөд энэ нь хүснэгтийн тодорхойлолтыг буулгах триггерүүдийг дахин үүсгэдэг. send-schema нь схемийн өөрчлөлтийг зангилааны дэлгүүр-001 руу илгээх ба t1 хүснэгтийн хуулбарыг тохируулсан.

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

SymmetricDS-ийн ашиг тус

Гурван зангилаа эсвэл хоёр зангилаатай хэлхээ үүсгэх параметр бүхий бэлэн файлуудыг багтаасан хялбар суурилуулалт, тохиргоо.
Сервер, зөөврийн компьютер, хөдөлгөөнт төхөөрөмж зэрэг платформ хоорондын мэдээллийн сан ба платформын бие даасан байдал.
Аливаа өгөгдлийн санг WAN эсвэл үүлэн доторх бусад мэдээллийн санд хуулбарлах.
Тохиромжтой хуулбарлахын тулд хэд хэдэн мэдээллийн сан эсвэл хэдэн мянган мэдээллийн сантай оновчтой ажиллах боломж.
GUI болон маш сайн дэмжлэг бүхий төлбөртэй хувилбар.

SymmetricDS-ийн сул тал

Каталогийн хүснэгтүүдийг ачаалахын тулд SQL хэллэгээр дамжуулан тушаалын мөрөнд хуулбарлах дүрэм, чиглэлийг гараар тодорхойлох шаардлагатай бөгөөд энэ нь эвгүй байж болно.
Хэрэв та хуулбарлах дүрэм, чиглэлийг тодорхойлсон SQL хэллэгийг үүсгэхийн тулд скрипт ашиглахгүй бол хуулбарлах олон хүснэгтүүдийг тохируулах нь уйтгартай байх болно.
Бүртгэлд хэт их мэдээлэл бичигдсэн байдаг тул заримдаа лог файлыг хэт их зай эзлэхгүйн тулд цэгцлэх шаардлагатай болдог.

SymmetricDS-ийн үр дүн

SymmetricDS нь файлуудыг хуулбарлах, синхрончлохын тулд хоёр, гурав, бүр хэдэн мянган зангилааны хооронд хоёр талын хуулбарыг тохируулах боломжийг олгодог. Энэ нь зангилаа дээр удаан хугацаагаар зогссоны дараа өгөгдлийг автоматаар сэргээх, HTTPS-ээр дамжуулан зангилааны хооронд найдвартай, үр ашигтай мэдээлэл солилцох, дүрэм журмын дагуу автомат зөрчилдөөнийг удирдах гэх мэт олон ажлыг бие даан гүйцэтгэдэг өвөрмөц хэрэгсэл юм. SymmetricDS нь ямар ч мэдээллийн сангийн хооронд хуулбарлах боломжтой тул платформ дээрх өгөгдлийг шилжүүлэх, шилжүүлэх, түгээх, шүүх, өөрчлөх зэрэг олон төрлийн хувилбаруудад ашиглаж болно.

Жишээ нь албан тушаалтан дээр үндэслэсэн болно хурдан гарын авлага SymmetricDS. IN Хэрэглэгчийн заавар SymmetricDS-тэй хуулбарлахыг тохируулахтай холбоотой янз бүрийн ойлголтуудыг дэлгэрэнгүй тайлбарласан.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх