Мен PostgreSQL жана MySQL ортосундагы кайчылаш репликацияны, ошондой эле эки маалымат базасы серверинин ортосунда кайчылаш репликацияны орнотуу ыкмаларын айтып берем. Адатта, кайчылаш репликацияланган маалымат базалары бир тектүү деп аталат жана бул RDBMS серверинен экинчисине өтүүнүн ыңгайлуу ыкмасы.
PostgreSQL жана MySQL маалымат базалары көбүнчө реляциялык деп эсептелет, бирок кошумча кеңейтүүлөр менен алар NoSQL мүмкүнчүлүктөрүн сунуштайт. Бул жерде биз PostgreSQL жана MySQL ортосундагы репликацияны реляциялык DBMS көз карашынан талкуулайбыз.
Биз бүт ички иштерди сүрөттөбөйбүз, жөн гана негизги принциптерди, андыктан сиз маалымат базасынын серверлери, артыкчылыктары, чектөөлөрү жана колдонуу учурлары ортосунда репликацияны конфигурациялоо жөнүндө түшүнүк аласыз.
Эреже катары, эки бирдей маалымат базасы серверинин ортосундагы репликация бинардык режимде же мастер (жарыялоочу, башкы же активдүү) менен кулдун (абонент, күтүү же пассивдүү) ортосундагы сурамдарды колдонуу менен жүзөгө ашырылат. Репликациялоонун максаты - кул тараптагы башкы маалымат базасынын реалдуу убакыт режиминде көчүрмөсүн берүү. Мында маалыматтар кожоюндан кулга, башкача айтканда активдүүдөн пассивдүүгө өтөт, анткени репликация бир багытта гана жүргүзүлөт. Бирок сиз эки маалымат базасынын ортосунда эки багытта репликацияны орното аласыз, андыктан маалыматтар кулдан мастерге активдүү-активдүү конфигурацияда өткөрүлөт. Мунун баары, анын ичинде каскаддык репликация, эки же андан көп окшош маалыматтар базасынын серверлеринин ортосунда мүмкүн.Активдүү-активдүү же активдүү-пассивдүү конфигурация муктаждыктарга, баштапкы конфигурацияда мындай мүмкүнчүлүктөрдүн болушуна же тышкы конфигурация чечимдерин колдонууга жана учурдагы компромисстерге көз каранды.
Сүрөттөлгөн конфигурация ар кандай маалымат базасы серверлеринин ортосунда мүмкүн. Серверди башка маалымат базасы серверинен репликацияланган маалыматтарды кабыл алуу үчүн конфигурациялоого болот жана дагы эле репликацияланган маалыматтардын реалдуу убакыт режиминде сүрөттөрүн сактап турат. MySQL жана PostgreSQL бул конфигурациялардын көбүн үй ичинде же үчүнчү тараптын кеңейтүүлөрү аркылуу сунуштайт, анын ичинде бинардык журнал ыкмалары, дискти кулпулоо жана билдирүү жана сапка негизделген ыкмалар.
MySQL менен PostgreSQL ортосундагы кайчылаш репликация бир маалымат базасынын серверинен экинчисине бир жолку көчүү үчүн керек. Бул маалымат базалары ар кандай протоколдорду колдонушат, ошондуктан аларды түз байланыштыруу мүмкүн эмес. Маалымат алмашууну орнотуу үчүн сиз тышкы ачык булак куралын колдоно аласыз, мисалы pg_chameleon.
pg_chameleon деген эмне
pg_chameleon – Python 3те MySQLден PostgreSQLге репликациялоо системасы. Ал Pythonдо да ачык булактуу mysql-репликация китепканасын колдонот. Катар сүрөттөр MySQL таблицаларынан чыгарылып, PostgreSQL маалымат базасында JSONB объектилери катары сакталат, андан кийин pl/pgsql функциясы аркылуу шифрленет жана PostgreSQL маалымат базасында кайра чыгарылат.
pg_chameleon өзгөчөлүктөрү
Бир эле кластерден бир нече MySQL схемалары бирден көп конфигурацияда бир максаттуу PostgreSQL маалымат базасына репликацияланышы мүмкүн
Булак менен максаттуу схемалардын аталыштары бирдей болушу мүмкүн эмес.
Репликация маалыматтарын каскаддуу MySQL репликасынан алууга болот.
Кайталай албаган же каталарды чыгара албаган таблицалар чыгарылбайт.
Ар бир репликация функциясы демондор тарабынан башкарылат.
YAML негизиндеги параметрлер жана конфигурация файлдары аркылуу башкаруу.
мисал
Host
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 ийгиликтүү орнотулгандан кийин, сиз виртуалдык чөйрөнү түзүү жана активдештирүү сыяктуу калган талаптарды аткарышыңыз керек. Кошумча, пип модулу акыркы версияга жаңыртылган жана 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 (хамелеон – бул буйрук) деп, pg_chameleon'ду иштетүү жана демейки каталогдорду жана конфигурация файлдарын түзүү үчүн set_configuration_files аргументи менен чакырабыз.
(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 таблицаны камтыйт. Аны жүктөп алса болот
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 маалымат базасына бир нече жазууларды киргизип, демондорду жаңыртуу жана PostgreSQL маалымат базасына жазуулар менен таблицаны репликациялоо үчүн pg_chameleon ичиндеги sync_tables аргументин чакырабыз.
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 жана Pull ыкмаларын колдонуу менен эки тараптуу репликация.
Маалыматтарды өткөрүү коопсуз жана аз өткөрүү жөндөмдүүлүгү тармактары аркылуу мүмкүн.
Түйүндөр бузулгандан кийин иштей баштаганда автоматтык түрдө калыбына келтирүү жана чыр-чатакты автоматтык түрдө чечүү.
Булуттагы шайкеш жана күчтүү кеңейтүү API'лери.
мисал
SymmetricDS эки жолдун бири менен конфигурацияланышы мүмкүн:
Башкы (ата-эне) түйүн, ал эки кул (бала) түйүндөр ортосундагы маалыматтардын репликациясын борборлоштурган координациялоочу түйүн жана бала түйүндөрдүн ортосундагы байланыш ата-эне аркылуу гана ишке ашат.
Активдүү түйүн (1-түйүн) ортомчусуз башка активдүү түйүн (2-түйүн) менен репликациялоо үчүн байланыша алат.
Эки вариантта тең маалымат алмашуу Push and Pull аркылуу ишке ашат. Бул мисалда биз активдүү-активдүү конфигурацияны карап чыгабыз. Архитектуранын баарын сүрөттөп берүү өтө көп убакытты талап кылат, андыктан изилдөөңүздү жүргүзүңүз.
SymmetricDS орнотуу абдан жөнөкөй: zip файлынын ачык булак версиясын жүктөп алыңыз
Host
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 түйүнүнүн аталышы
corp-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 синхрондоштуруу үчүн түйүн менен кайда байланышуу керектигин көрсөтөт.
Vm2 хостундагы 2 түйүн дүкөн-001 катары конфигурацияланган, калганы төмөндөгү node.properties файлында көрсөтүлгөн. Түйүн дүкөнү-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 мисалы эки маалымат базасынын серверинин (эки түйүн) ортосунда эки тараптуу репликацияны орнотуу үчүн параметрлерди камтыйт. Төмөнкү кадамдар 1 таблицадан турган мисал схемасын түзүүчү vm000 (corp-4) хостунда аткарылат. Андан кийин symadmin буйругу менен create-sym-таблицаларын иштетүү түйүндөрдүн ортосундагы репликациянын эрежелери жана багыттары сактала турган каталог таблицаларын түзөт. Акырында, үлгү маалыматтар таблицаларга жүктөлөт.
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гө чейин репликациялоо үчүн автоматтык түрдө конфигурацияланган. Эми биз PostgreSQL маалымат базасында vm2 хостунда (дүкөн-001) схеманы түзүп, аны 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_ префикси менен) учурда бир гана corp-000 түйүнүндө жеткиликтүү экенин эске алыңыз, анткени биз дал ушул жерде түзүү-sym-tables буйругун иштетип, репликацияны башкарабыз. Ал эми дүкөн-001 түйүнүндөгү маалымат базасында маалыматтары жок болгону 4 мисал таблица болот.
Баары. Айлана-чөйрө төмөндө көрсөтүлгөндөй эки түйүндө тең сим сервер процесстерин иштетүүгө даяр.
vm1$> cd /usr/local/symmetric-server-3.9.20/bin
vm1$> sym 2>&1 &
Журнал жазуулары SymmetricDS орнотулган каталогдогу журналдар папкасындагы фондо журнал файлына (symmetric.log), ошондой эле стандарттык чыгарууга жөнөтүлөт. Сим серверди азыр түйүн дүкөнү-001де баштоого болот.
vm2$> cd /usr/local/symmetric-server-3.9.20/bin
vm2$> sym 2>&1 &
Эгерде сиз vm2 хостунда сим-сервер процессин иштетсеңиз, ал PostgreSQL маалымат базасында SymmetricDS каталог таблицаларын да түзөт. Эгерде сиз эки түйүндө тең сим-сервер процессин иштетсеңиз, алар corp-000дөн дүкөн-001ге чейин маалыматтарды репликациялоо үчүн бири-бири менен координацияланат. Эгерде бир нече секунддан кийин биз бардык 4 таблицага эки тараптан тең суроо берсек, репликация ийгиликтүү болгонун көрөбүз. Же сиз жүктөөнү төмөнкү буйрук менен corp-001ден түйүн дүкөнүнө-000 жөнөтө аласыз.
vm1$> ./symadmin --engine corp-000 reload-node 001
Бул учурда, Corp-000 түйүнүндөгү MySQL маалымат базасындагы пункт таблицасына жаңы жазуу киргизилет (хост: vm1) жана сиз анын PostgreSQL маалымат базасына репликациясын түйүн дүкөнүнүн-001 (хост: vm2) текшере аласыз. Дайындарды corp-000ден дүкөн-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ден corp-000го жылдыруу үчүн Push операциясын аткаруу үчүн sale_transaction таблицасына жазуу киргизип, репликация ийгиликтүү болгонун текшеребиз.
MySQL жана PostgreSQL маалымат базаларынын ортосундагы мисал таблицаларын эки тараптуу репликациялоо ийгиликтүү орнотулгандыгын көрүп жатабыз. Жаңы колдонуучу таблицалары үчүн репликацияны орнотуу үчүн, бул кадамдарды аткарыңыз: Мисалы, t1 таблицасын түзүп, анын репликация эрежелерин төмөнкүдөй конфигурациялайбыз. Ушундай жол менен биз corp-000дөн дүкөн-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 аткарат. ар кандай маалымат базаларынын ортосунда репликация, ошондуктан, ал көчүрүү, көчүрүү, бөлүштүрүү, чыпкалоо жана платформалар боюнча маалыматтарды трансформациялоо сыяктуу көптөгөн сценарийлер үчүн колдонулушу мүмкүн.
Мисал чиновникке негизделген
Source: www.habr.com