PostgreSQL və MySQL arasında çarpaz replikasiya

PostgreSQL və MySQL arasında çarpaz replikasiya

Mən qısaca PostgreSQL və MySQL arasında çarpaz replikasiya, həmçinin bu iki verilənlər bazası serveri arasında çarpaz replikasiyanın qurulması üsulları haqqında danışacağam. Çapraz təkrarlanan verilənlər bazalarına adətən homojen verilənlər bazaları deyilir və bu, bir RDBMS serverindən digərinə köçmək üçün əlverişli üsuldur.

PostgreSQL və MySQL verilənlər bazaları ənənəvi olaraq əlaqəli hesab edilir, lakin əlavə genişləndirmələrlə onlar NoSQL imkanlarını təklif edirlər. Burada PostgreSQL və MySQL arasında relyasiya verilənlər bazası idarəçiliyi perspektivindən replikasiyanı müzakirə edəcəyik.

Verilənlər bazası serverləri, üstünlükləri, məhdudiyyətləri və istifadə halları arasında replikasiyanın qurulması barədə fikir əldə etmək üçün bütün daxili elementləri, yalnız əsas prinsipləri təsvir etməyəcəyik.

Tipik olaraq, iki eyni verilənlər bazası serverləri arasında replikasiya ya binar rejimdə, ya da master (naşir, master və ya aktiv) və qul (abunəçi, gözləmə və ya passiv) arasında sorğular vasitəsilə həyata keçirilir. Replikasiyanın məqsədi gözləmə tərəfində əsas verilənlər bazasının real vaxt surətini təmin etməkdir. Bu zaman verilənlər masterdan slaveyə, yəni aktivdən passivə ötürülür, çünki replikasiya yalnız bir istiqamətdə aparılır. Lakin siz iki verilənlər bazası arasında hər iki istiqamətdə replikasiya qura bilərsiniz ki, məlumatlar aktiv-aktiv konfiqurasiyada quldan masterə ötürülsün. Bütün bunlar, o cümlədən kaskadlı replikasiya iki və ya daha çox eyni verilənlər bazası serverləri arasında mümkündür.Aktiv-aktiv və ya aktiv-passiv konfiqurasiya ehtiyacdan, ilkin konfiqurasiyada belə imkanların mövcudluğundan və ya xarici tənzimləmə həllərinin istifadəsindən və mövcud ticarətdən asılıdır. -offlar.

Təsvir edilən konfiqurasiya müxtəlif verilənlər bazası serverləri arasında mümkündür. Server başqa verilənlər bazası serverindən təkrarlanan məlumatları qəbul etmək üçün konfiqurasiya edilə bilər və yenə də təkrarlanan məlumatların real vaxt görüntülərini saxlaya bilər. MySQL və PostgreSQL bu konfiqurasiyaların əksəriyyətini yerli olaraq və ya üçüncü tərəf uzantıları, o cümlədən ikili jurnal metodları, disk kilidləri, bəyanat və sıra əsaslı metodlar vasitəsilə təklif edir.

MySQL və PostgreSQL arasında çarpaz replikasiya bir verilənlər bazası serverindən digərinə birdəfəlik miqrasiya üçün lazımdır. Bu verilənlər bazaları müxtəlif protokollardan istifadə edir, ona görə də onları birbaşa əlaqələndirə bilməzsiniz. Məlumat mübadiləsini asanlaşdırmaq üçün siz pg_chameleon kimi xarici açıq mənbə alətindən istifadə edə bilərsiniz.

pg_chameleon nədir

pg_chameleon MySQL-dən Python 3-də PostgreSQL-ə replikasiya sistemidir. O, Python-da da mysql-replikasiya açıq mənbə kitabxanasından istifadə edir. Sətir şəkilləri MySQL cədvəllərindən götürülür və PostgreSQL verilənlər bazasında JSONB obyektləri kimi saxlanılır, sonra pl/pgsql funksiyası tərəfindən deşifrə edilir və PostgreSQL verilənlər bazasında səsləndirilir.

pg_chameleon xüsusiyyətləri

Eyni klasterdən çoxsaylı MySQL sxemləri birdən çox konfiqurasiya ilə tək PostgreSQL hədəf verilənlər bazasına təkrarlana bilər
Mənbə və hədəf sxem adları eyni ola bilməz.
Replikasiya məlumatları MySQL kaskad replikasından əldə edilə bilər.
Səhvləri təkrarlaya bilməyən və ya yarada bilməyən cədvəllər xaric edilir.
Hər bir təkrarlama funksiyası demonlar tərəfindən idarə olunur.
YAML əsasında parametrlər və konfiqurasiya faylları ilə nəzarət.

Misal

Ev sahibi
vm1
vm2

OS versiyası
CentOS Linux 7.6 x86_64
CentOS Linux 7.5 x86_64

Verilənlər bazası server versiyası
MySQL 5.7.26
PostgreSQL 10.5

DB portu
3306
5433

IP ünvanı
192.168.56.102
192.168.56.106

Əvvəlcə pg_chameleon quraşdırmaq üçün bütün lazımi komponentləri hazırlayın. Bu nümunədə virtual mühit yaradan və onu aktivləşdirən Python 3.6.8 quraşdırılıb.

$> 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 uğurla quraşdırıldıqdan sonra virtual mühitin yaradılması və aktivləşdirilməsi kimi qalan tələblər yerinə yetirilməlidir. Həmçinin, pip modulu ən son versiyaya yenilənir və pg_chameleon quraşdırmaq üçün istifadə olunur. Ən son versiyanın 2.0.9 olmasına baxmayaraq, aşağıdakı əmrlər qəsdən pg_chameleon 2.0.10-u quraşdırır. Bu, yenilənmiş versiyada yeni səhvlərin qarşısını almaq üçün lazımdır.

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

Sonra pg_chameleon-u işə salmaq və standart konfiqurasiya qovluqlarını və fayllarını yaratmaq üçün set_configuration_files arqumenti ilə pg_chameleon (buqələmun əmrdir) çağırırıq.

(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

İndi biz config-example.yml-in surətini default.yml olaraq edirik ki, o, standart konfiqurasiya faylına çevrilsin. Bu nümunə üçün nümunə konfiqurasiya faylı aşağıda verilmişdir.

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

Bu nümunədəki konfiqurasiya faylı mənbə və hədəf mühitlərə uyğunlaşmaq üçün kiçik dəyişiklikləri olan nümunə pg_chameleon faylıdır və aşağıda konfiqurasiya faylının müxtəlif bölmələrinin icmalı verilmişdir.

default.yml konfiqurasiya faylında kilid faylının yeri, qeydlərin yeri, qeydlərin saxlanma müddəti və s. kimi parametrlərə nəzarət edə biləcəyiniz qlobal parametrlər (qlobal parametrlər) bölməsi var. Sonra növbənin dəyişdirilməsi gəlir. bölmə, burada replikasiya zamanı növlərin üstünlüyü üçün müəyyən edilmiş qaydalar. Defolt nümunə tinyint(1)-i mantiqə çevirən növün ləğvi qaydasından istifadə edir. Növbəti hissədə hədəf verilənlər bazasına qoşulma təfərrüatlarını müəyyənləşdiririk. Bizim vəziyyətimizdə bu, pg_conn kimi qeyd olunan PostgreSQL verilənlər bazasıdır. Sonuncu bölmədə mənbə verilənləri, yəni mənbə verilənlər bazasının əlaqə parametrlərini, mənbə və hədəf verilənlər bazalarının xəritəçəkmə sxemini, buraxılacaq cədvəlləri, timeout, yaddaş, paket ölçüsünü müəyyən edirik. Nəzərə alın ki, "mənbələr" cəmdir, yəni çoxlu-bir konfiqurasiya qurmaq üçün eyni hədəfə çoxlu mənbə verilənlər bazası əlavə edə bilərik.

Nümunədəki world_x verilənlər bazası MySQL icmasının misal üçün təklif etdiyi sətirləri olan 4 cədvəldən ibarətdir. Yüklənə bilər burada. Nümunə verilənlər bazası sətirlərin yaradılması və idxalı üçün təlimatlarla birlikdə tar və sıxılmış arxiv kimi gəlir.

MySQL və PostgreSQL verilənlər bazalarında usr_replica adlı eyni adlı xüsusi istifadəçi yaradılır. MySQL ona bütün təkrarlanan cədvəllərə əlavə oxumaq imkanı verir.

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 tərəfində MySQL verilənlər bazasından dəyişiklikləri qəbul edəcək db_replica verilənlər bazası yaradılır. PostgreSQL-də usr_replica istifadəçisi avtomatik olaraq iki pgworld_x və sch_chameleon sxeminin sahibi kimi konfiqurasiya edilir ki, bunlarda müvafiq olaraq faktiki təkrarlanmış cədvəllər və replikasiya kataloqu cədvəlləri var. Create_replica_schema arqumenti aşağıda görəcəyiniz kimi avtomatik konfiqurasiyadan məsuldur.

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

MySQL verilənlər bazası aşağıda göstərildiyi kimi onu təkrarlamaya hazır etmək üçün bəzi dəyişikliklərlə konfiqurasiya edilmişdir. Dəyişikliklərin qüvvəyə minməsi üçün verilənlər bazası serverini yenidən başlatmalısınız.

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

İndi pg_chameleon əmrlərini yerinə yetirərkən heç bir problem olmaması üçün hər iki verilənlər bazası serveri ilə əlaqəni yoxlamaq vacibdir.

PostgreSQL qovşağında:

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

MySQL node-da:

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

Növbəti üç pg_chameleon (hameleon) əmri mühiti hazırlayır, mənbə əlavə edir və replikanı işə salır. pg_chameleon üçün create_replica_schema arqumenti dediyimiz kimi PostgreSQL verilənlər bazasında defolt sxem (sch_chameleon) və replikasiya sxemi (pgworld_x) yaradır. add_source arqumenti konfiqurasiya faylını (default.yml) oxuyaraq konfiqurasiyaya mənbə verilənlər bazasını əlavə edir, bu bizim vəziyyətimizdə mysql-dir və init_replica konfiqurasiya faylındakı parametrlər əsasında konfiqurasiyanı işə salır.

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

Bu üç əmrin çıxışı onların uğurunu açıq şəkildə göstərir. Bütün nasazlıqlar və ya sintaksis xətaları problemlərin həllinə dair göstərişlərlə sadə və başa düşülən mesajlarda göstərilir.

Nəhayət, start_replica ilə replikasiyaya başlayırıq və uğur mesajı alırıq.

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

Replikasiya statusu show_status arqumenti ilə sorğulana bilər və səhvlərə show_errors arqumenti ilə baxmaq olar.

Nəticə.

Artıq dediyimiz kimi, demonlar hər replika funksiyasını idarə edir. Onlara baxmaq üçün aşağıda göstərildiyi kimi Linux ps əmri ilə proses cədvəlini sorğulayın.

Nəticə.

Aşağıda göstərildiyi kimi, biz onu real vaxt rejimində sınaqdan keçirənə qədər təkrarlama konfiqurasiya edilmiş hesab edilmir. Cədvəl yaradırıq, MySQL verilənlər bazasına bir neçə qeyd daxil edirik və demonları yeniləmək və cədvəli qeydlərlə PostgreSQL verilənlər bazasına təkrarlamaq üçün pg_chameleon-da sync_tables arqumentini çağırırıq.

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.

Test nəticələrini yoxlamaq üçün PostgreSQL verilənlər bazasından cədvəli sorğulayırıq və sətirləri çıxarırıq.

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

Əgər köçürsək, aşağıdakı pg_chameleon əmrləri köçün sonu olacaq. Əmrlər bütün hədəf cədvəllərinin cərgələrinin təkrarlandığını yoxladıqdan sonra icra edilməlidir, nəticədə mənbə verilənlər bazasına və ya replikasiya sxeminə (sch_chameleon) istinadlar olmadan səliqəli şəkildə köçürülmüş PostgreSQL verilənlər bazası əldə edilir.

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

Siz isteğe bağlı olaraq aşağıdakı əmrlərlə orijinal konfiqurasiya və replikasiya sxemini silə bilərsiniz.

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

pg_chameleon-un faydaları

Asan quraşdırma və konfiqurasiya.
Aydın səhv mesajları ilə rahat problemlərin aradan qaldırılması və anomaliyaların aşkarlanması.
Konfiqurasiyanın qalan hissəsi dəyişdirilmədən işə salındıqdan sonra replikasiyaya əlavə xüsusi cədvəllər əlavə edilə bilər.
Bir hədəf verilənlər bazası üçün bir neçə mənbə verilənlər bazası qurmaq mümkündür və bu, bir və ya bir neçə MySQL verilənlər bazasından məlumatları bir PostgreSQL verilənlər bazasında birləşdirsəniz, çox faydalıdır.
Siz seçilmiş cədvəlləri təkrarlamamağı seçə bilərsiniz.

pg_chameleon-un mənfi cəhətləri

Yalnız mənbə kimi MySQL 5.5 və daha yuxarı versiyalar, hədəf verilənlər bazası kimi isə PostgreSQL 9.5 və yuxarısı ilə dəstəklənir.
Hər bir cədvəlin əsas və ya unikal açarı olmalıdır, əks halda cədvəllər init_replica prosesində işə salınır, lakin təkrarlanmır.
Birtərəfli replikasiya - yalnız MySQL-dən PostgreSQL-ə qədər. Buna görə də, yalnız aktiv-passiv sxem üçün uyğundur.
Mənbə yalnız MySQL verilənlər bazası ola bilər və mənbə kimi PostgreSQL verilənlər bazasına dəstək yalnız eksperimentaldır və məhduddur (ətraflı məlumat burada)

pg_chameleon üçün cəmi

pg_chameleon-da təkrarlama metodu verilənlər bazasını MySQL-dən PostgreSQL-ə köçürmək üçün əladır. Böyük mənfi cəhət odur ki, replikasiya yalnız birtərəflidir, ona görə də verilənlər bazası mütəxəssisləri çətin ki, ondan miqrasiyadan başqa bir şey üçün istifadə etsinlər. Ancaq birtərəfli təkrarlama problemi başqa bir açıq mənbə vasitəsi ilə həll edilə bilər - SymmetricDS.

Daha ətraflı rəsmi sənədlərdə oxuyun burada. Komanda xətti yardımı tapıla bilər burada.

SymmetricDS-ə ümumi baxış

SymmetricDS istənilən verilənlər bazasını hər hansı digər ümumi verilənlər bazasına təkrarlayan açıq mənbə alətidir: Oracle, MongoDB, PostgreSQL, MySQL, SQL Server, MariaDB, DB2, Sybase, Greenplum, Informix, H2, Firebird və digər bulud verilənlər bazası nümunələri, məsələn Redshift, və Azure və s. Mövcud xüsusiyyətlər: verilənlər bazası və fayl sinxronizasiyası, çox əsaslı verilənlər bazası replikasiyası, filtrlənmiş sinxronizasiya, transformasiya və s. Bu Java alətidir və standart buraxılış JRE və ya JDK tələb edir (versiya 8.0 və ya daha yüksək). Burada mənbə verilənlər bazasında tetikleyiciler üzrə məlumat dəyişikliklərini qeyd edə və onları qruplar şəklində müvafiq hədəf verilənlər bazasına göndərə bilərsiniz.

SymmetricDS imkanları

Alət platformadan müstəqildir, yəni iki və ya daha çox müxtəlif verilənlər bazası məlumat mübadiləsi edə bilər.
Əlaqəli verilənlər bazaları məlumat dəyişikliklərini qeyd etməklə sinxronlaşdırılır və fayl sistemlərinə əsaslanan verilənlər bazaları fayl sinxronizasiyasından istifadə edir.
Qaydalar toplusuna əsaslanan təkan və çəkmə üsullarından istifadə edərək ikitərəfli təkrarlama.
Məlumat ötürülməsi təhlükəsiz şəbəkələr və aşağı bant genişliyi olan şəbəkələr üzərindən mümkündür.
Bir uğursuzluqdan sonra qovşaqlar bərpa edildikdə avtomatik bərpa və münaqişənin avtomatik həlli.
Buludla uyğun və səmərəli genişləndirmə API-ləri.

Misal

SymmetricDS iki yoldan biri ilə konfiqurasiya edilə bilər:
İki kölə (alt) qovşaq arasında məlumatların təkrarlanmasını və uşaq qovşaqları arasında məlumat mübadiləsini mərkəzləşdirilmiş şəkildə əlaqələndirən master (valideyn) node yalnız valideyn vasitəsilə həyata keçirilir.
Aktiv qovşaq (node ​​1) vasitəçi olmadan başqa bir aktiv node (2 node) ilə replikasiya üçün əlaqə saxlaya bilər.

Hər iki variantda məlumat mübadiləsi Push and Pull istifadə edərək baş verir. Bu nümunədə biz aktiv-aktiv konfiqurasiyanı nəzərdən keçirəcəyik. Bütün memarlığı təsvir etmək çox uzundur, ona görə də öyrənin bələdçiSymmetricDS cihazı haqqında ətraflı öyrənmək üçün.

SymmetricDS quraşdırmaq asandır: açıq mənbəli zip faylını endirin buradan və istədiyiniz yerdə çıxarın. Aşağıdakı cədvəldə bu nümunədə SymmetricDS-in quraşdırılması yeri və versiyası, həmçinin verilənlər bazası versiyaları, Linux versiyaları, IP ünvanları və hər iki qovşaq üçün portlar verilmişdir.

Ev sahibi
vm1
vm2

OS versiyası
CentOS Linux 7.6 x86_64
CentOS Linux 7.6 x86_64

Verilənlər bazası server versiyası
MySQL 5.7.26
PostgreSQL 10.5

DB portu
3306
5832

IP ünvanı
192.168.1.107
192.168.1.112

SymmetricDS Versiyası
SymmetricDS 3.9
SymmetricDS 3.9

SymmetricDS quraşdırma yolu
/usr/local/symmetric-server-3.9.20
/usr/local/symmetric-server-3.9.20

SymmetricDS host adı
corp-000
mağaza-001

Burada SymmetricDS-i /usr/local/symmetric-server-3.9.20-də quraşdırırıq və orada müxtəlif alt kataloqlar və fayllar saxlanılacaq. Biz alt kataloqların nümunələri və mühərrikləri ilə maraqlanırıq. Nümunələr qovluğunda qovşaq xassələri olan nümunə konfiqurasiya faylları, həmçinin nümayişi tez başlamaq üçün nümunə SQL skriptləri var.

Nümunələr qovluğunda biz node xassələri olan üç konfiqurasiya faylını görürük - ad müəyyən bir sxemdə düyünün təbiətini göstərir.

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

SymmetricDS əsas 3 node sxemi (seçim 1) üçün bütün lazımi konfiqurasiya fayllarına malikdir və eyni fayllar 2 node sxemi (seçim 2) üçün istifadə edilə bilər. Tələb olunan konfiqurasiya faylını nümunələr kataloqundan vm1 hostundakı mühərriklərə kopyalayın. Belə çıxır:

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

Bu node SymmetricDS konfiqurasiyasında corp-000 adlanır və verilənlər bazası əlaqəsi yuxarıdakı əlaqə sətirindən və giriş etimadnaməsini istifadə edən mysql jdbc sürücüsü tərəfindən idarə olunur. Biz replica_db verilənlər bazasına qoşuluruq və sxem yaradılması zamanı cədvəllər yaradılacaq. sync.url sinxronizasiya etmək üçün qovşağın keçidini göstərir.

Host vm2-də 2-ci qovşaq mağaza-001 kimi konfiqurasiya edilib, qalanı isə aşağıdakı node.properties faylında göstərilib. Mağaza-001 nodu PostgreSQL verilənlər bazasını idarə edir və pgdb_replica təkrarlanacaq verilənlər bazasıdır. register.url vm2 hostuna vm1 host ilə əlaqə saxlamağa və ondan konfiqurasiya təfərrüatlarını əldə etməyə imkan verir.

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

Tamamlanmış SymmetricDS nümunəsi iki verilənlər bazası serveri (iki qovşaq) arasında ikitərəfli replikasiyanın qurulması variantlarını ehtiva edir. Aşağıdakı addımlar 1 cədvəldən ibarət nümunə sxem yaradacaq host vm000 (corp-4) üzərində yerinə yetirilir. Sonra symadmin əmri ilə yarat-sim-cədvəllərinin icrası qovşaqlar arasında təkrarlanma qaydaları və istiqamətlərinin saxlanacağı kataloq cədvəlləri yaradır. Nəhayət, nümunə məlumatları cədvəllərə yüklənir.

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

Nümunədə, maddə və satış_qiyməti cədvəlləri korp-000-dən mağaza-001-ə, satış cədvəlləri (sale_transaction və sale_return_line_element) avtomatik olaraq mağaza-001-dən korp-000-a təkrarlanmaq üçün konfiqurasiya edilib. İndi biz postgreSQL verilənlər bazasında vm2 hostunda (mağaza-001) bir sxem yaradırıq ki, onu corp-000-dən məlumat almağa hazırlayırıq.

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

vm1-də MySQL verilənlər bazasında nümunə cədvəllərə və SymmetricDS kataloq cədvəlinə malik olduğunu yoxlamağa əmin olun. Qeyd edək ki, SymmetricDS sistem cədvəlləri (sym_ ilə prefikslə) hazırda yalnız corp-000 qovşağında mövcuddur, çünki biz burada yarat-sim-masaları əmrini icra etdik və replikasiyanı idarə edəcəyik. Mağaza-001 qovşağındakı verilənlər bazasında məlumatsız yalnız 4 nümunə cədvəli olacaq.

Hamısı. Mühit aşağıda göstərildiyi kimi hər iki qovşaqda sim server proseslərini işə salmağa hazırdır.

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

Jurnal qeydləri SymmetricDS-in quraşdırıldığı qovluqdakı log qovluğundakı fon jurnalı faylına (symmetric.log), həmçinin standart çıxışa göndərilir. Sim server indi mağaza-001 node-da işə salına bilər.

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

Əgər siz vm2 hostunda sim server prosesini işlədirsinizsə, o, PostgreSQL verilənlər bazasında SymmetricDS kataloq cədvəllərini də yaradacaq. Hər iki qovşaqda sim server prosesini işlədirsinizsə, onlar corp-000-dən mağaza-001-ə qədər məlumatları təkrarlamaq üçün bir-biri ilə əlaqələndirəcəklər. Bir neçə saniyədən sonra hər iki tərəfdəki 4 cədvəlin hamısını sorğulasaq, təkrarlamanın uğurlu olduğunu görərik. Yaxud aşağıdakı əmrlə bootstrap-ı corp-001-dən store-000-ə göndərə bilərsiniz.

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

Bu nöqtədə, node corp-000 (host: vm1) üzərində MySQL verilənlər bazasındakı element cədvəlinə yeni qeyd daxil edilir və node store-001 (host: vm2) üzərindəki PostgreSQL verilənlər bazasına təkrarlanma üçün yoxlanıla bilər. Məlumatları corp-000-dən mağaza-001-ə köçürmək üçün Pull əməliyyatını görürük.

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)

Məlumatı mağaza-001-dən corp-000-ə köçürmək üçün təkan əməliyyatını yerinə yetirmək üçün biz sale_transaction cədvəlinə qeyd daxil edirik və təkrarlamanın tamamlandığını yoxlayırıq.

Nəticə.

MySQL və PostgreSQL verilənlər bazaları arasında nümunə cədvəllərinin ikitərəfli təkrarlanmasının uğurlu qurulmasını görürük. Yeni istifadəçi cədvəlləri üçün replikasiya qurmaq üçün aşağıdakı addımları yerinə yetirin. Məsələn, t1 cədvəlini yaradırıq və onun təkrarlanma qaydalarını aşağıdakı kimi qururuq. Beləliklə, biz yalnız corp-000-dən mağaza-001-ə replikasiya qurduq.

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)

Daha sonra konfiqurasiya, cədvəl təriflərinə uyğunlaşdırmaq üçün triggerləri yenidən yaradan sinxronizasiya-tetikleyiciler arqumenti ilə symadmin əmrindən istifadə etməklə sxem dəyişikliyi, yəni yeni cədvəlin əlavə edilməsi barədə məlumatlandırılır. Göndərmə sxemi sxem dəyişikliklərini mağaza-001-ə göndərmək üçün işlədilir və t1 cədvəli təkrarlanır.

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

SymmetricDS-in üstünlükləri

Asan quraşdırma və konfiqurasiya, o cümlədən üç və ya iki qovşaqdan ibarət bir sxem yaratmaq üçün parametrləri olan hazır fayl dəsti.
Serverlər, noutbuklar və mobil cihazlar da daxil olmaqla çarpaz platforma verilənlər bazası və platformanın müstəqilliyi.
İstənilən verilənlər bazasını yerli olaraq, WAN-da və ya buludda hər hansı digər verilənlər bazasına təkrarlayın.
Asan təkrarlama üçün bir neçə verilənlər bazası və ya bir neçə min ilə optimal işləmək bacarığı.
GUI və əla dəstəyi olan pullu versiya.

SymmetricDS-in çatışmazlıqları

Kataloq cədvəllərini yükləmək üçün SQL ifadələri vasitəsilə əmr sətirində təkrarlama qaydalarını və istiqamətlərini əl ilə təyin etməlisiniz, bu isə əlverişsiz ola bilər.
Replikasiya qaydalarını və istiqamətlərini müəyyən edən SQL ifadələrini yaratmaq üçün skriptlərdən istifadə etməyincə, təkrarlama üçün çoxlu cədvəllərin qurulması yorucu ola bilər.
Jurnallarda çoxlu məlumat var və bəzən çox yer tutmamaq üçün log faylını təmizləmək lazımdır.

SymmetricDS-in xülasəsi

SymmetricDS faylları təkrarlamaq və sinxronlaşdırmaq üçün iki, üç və ya hətta bir neçə min qovşaq arasında ikitərəfli replikasiya qurmağa imkan verir. Bu, qovşaqda uzun müddət dayandıqdan sonra məlumatların avtomatik bərpası, HTTPS üzərindən qovşaqlar arasında təhlükəsiz və səmərəli əlaqə, bir sıra qaydalara əsaslanan münaqişələrin avtomatik idarə edilməsi və s. kimi bir çox işi təkbaşına yerinə yetirən unikal alətdir. SymmetricDS təkrarlayır. istənilən verilənlər bazası arasında, buna görə də platformalar arasında miqrasiya, təkmilləşdirmə, paylama, filtrləmə və məlumatların transformasiyası daxil olmaqla, müxtəlif ssenarilər üçün istifadə edilə bilər.

Nümunə məmura əsaslanır sürətli bələdçi SymmetricDS tərəfindən. IN istifadəçi kitabçası SymmetricDS ilə təkrarlamanın qurulmasında iştirak edən müxtəlif anlayışları ətraflı təsvir edir.

Mənbə: www.habr.com

Добавить комментарий