इस ब्लॉग का उद्देश्य PostgreSQL और MySQL के बीच क्रॉस प्रतिकृति के अवलोकन की व्याख्या करना और दो डेटाबेस सर्वरों के बीच क्रॉस प्रतिकृति को कॉन्फ़िगर करने के तरीकों पर चर्चा करना है। परंपरागत रूप से, क्रॉस प्रतिकृति सेटअप में शामिल डेटाबेस को विषम डेटाबेस कहा जाता है, जो एक RDBMS सर्वर से दूसरे सर्वर पर जाने के लिए एक अच्छा तरीका है।
PostgreSQL और MySQL दोनों डेटाबेस पारंपरिक रूप से RDBMS डेटाबेस हैं, लेकिन वे दोनों दुनिया के सर्वश्रेष्ठ होने के लिए अतिरिक्त एक्सटेंशन के साथ NoSQL क्षमता भी प्रदान करते हैं। यह लेख RDBMS के दृष्टिकोण से PostgreSQL और MySQL के बीच प्रतिकृति की चर्चा पर केंद्रित है।
प्रतिकृति के आंतरिक के बारे में एक विस्तृत व्याख्या इस ब्लॉग के दायरे में नहीं है, हालांकि, दर्शकों को यह समझने के लिए कुछ मूलभूत तत्वों पर चर्चा की जाएगी कि डेटाबेस सर्वर, फायदे, सीमाओं और शायद कुछ ज्ञात उपयोग मामलों के बीच प्रतिकृति को कैसे कॉन्फ़िगर किया गया है।पी>
दो समान डेटाबेस सर्वरों के बीच सामान्य प्रतिकृति में या तो मास्टर नोड (अन्यथा प्रकाशक, प्राथमिक या सक्रिय कहा जाता है) और एक दास नोड (ग्राहक, स्टैंडबाय या निष्क्रिय) के बीच बाइनरी मोड या क्वेरी मोड में प्राप्त किया जाता है। प्रतिकृति का उद्देश्य दास पक्ष पर मास्टर डेटाबेस की वास्तविक समय की प्रतिलिपि प्रदान करना है, जहां डेटा को मास्टर से दास में स्थानांतरित किया जाता है, जिससे एक सक्रिय-निष्क्रिय सेटअप बनता है क्योंकि प्रतिकृति केवल एक तरह से होने के लिए कॉन्फ़िगर की जाती है। दूसरी ओर, दो डेटाबेस के बीच प्रतिकृति को दोनों तरीकों से कॉन्फ़िगर किया जा सकता है ताकि डेटा को दास से वापस मास्टर में स्थानांतरित किया जा सके, एक सक्रिय-सक्रिय कॉन्फ़िगरेशन स्थापित किया जा सके। यह सब दो या दो से अधिक समान डेटाबेस सर्वरों के बीच कॉन्फ़िगर किया जा सकता है जिसमें एक कैस्केडिंग प्रतिकृति भी शामिल हो सकती है। सक्रिय-सक्रिय या सक्रिय-निष्क्रिय का विन्यास वास्तव में व्यावसायिक आवश्यकता, मूल विन्यास के भीतर ऐसी सुविधाओं की उपलब्धता या व्यापार-बंदों को कॉन्फ़िगर और लागू करने के लिए बाहरी समाधानों का उपयोग करने पर निर्भर करता है।
उपर्युक्त कॉन्फ़िगरेशन को विविध डेटाबेस सर्वरों के साथ पूरा किया जा सकता है, जिसमें एक डेटाबेस सर्वर को दूसरे पूरी तरह से अलग डेटाबेस सर्वर से प्रतिकृति डेटा को स्वीकार करने के लिए कॉन्फ़िगर किया जा सकता है और फिर भी डेटा की प्रतिकृति के वास्तविक समय स्नैपशॉट को बनाए रखा जा सकता है। MySQL और PostgreSQL दोनों डेटाबेस सर्वर ऊपर चर्चा की गई अधिकांश कॉन्फ़िगरेशन को या तो अपने स्वयं के जन्म में या बाइनरी लॉग विधि, डिस्क ब्लॉक विधि, कथन आधारित और पंक्ति आधारित विधियों सहित तृतीय पक्ष एक्सटेंशन की सहायता से प्रदान करते हैं।
MySQL और PostgreSQL के बीच एक क्रॉस प्रतिकृति को कॉन्फ़िगर करने की आवश्यकता वास्तव में एक डेटाबेस सर्वर से दूसरे डेटाबेस सर्वर से दूर जाने के लिए एक बार माइग्रेशन प्रयास के परिणामस्वरूप आती है। चूंकि दोनों डेटाबेस अलग-अलग प्रोटोकॉल का उपयोग करते हैं इसलिए वे एक दूसरे से सीधे बात नहीं कर सकते हैं। उस संचार प्रवाह को प्राप्त करने के लिए, एक बाहरी खुला स्रोत उपकरण है जैसे कि pg_chameleon।
pg_गिरगिट की पृष्ठभूमि
pg_chameleon Python 3 में विकसित एक MySQL से PostgreSQL प्रतिकृति प्रणाली है। यह एक ओपन सोर्स लाइब्रेरी का उपयोग करता है जिसे mysql-replication कहा जाता है जिसे पायथन का उपयोग करके भी विकसित किया गया है। कार्यक्षमता में MySQL तालिकाओं की पंक्ति छवियों को खींचना और उन्हें JSONB ऑब्जेक्ट के रूप में एक PostgreSQL डेटाबेस में संग्रहीत करना शामिल है, जिसे आगे pl/pgsql फ़ंक्शन द्वारा डिकोड किया जाता है और PostgreSQL डेटाबेस के विरुद्ध उन परिवर्तनों को फिर से चलाया जाता है।
pg_गिरगिट की विशेषताएं
- एक ही क्लस्टर से कई MySQL स्कीमा को एकल लक्ष्य PostgreSQL डेटाबेस में दोहराया जा सकता है, जिससे कई-से-एक प्रतिकृति सेटअप बनता है
- स्रोत और लक्ष्य स्कीमा नाम गैर-समान हो सकते हैं
- प्रतिकृति डेटा MySQL कैस्केडिंग प्रतिकृति से खींचा जा सकता है
- तालिकाएं जो त्रुटियों को दोहराने या उत्पन्न करने में विफल रहती हैं, उन्हें बाहर रखा गया है
- प्रत्येक प्रतिकृति कार्यक्षमता को डेमॉन की सहायता से प्रबंधित किया जाता है
- YAML निर्माण पर आधारित पैरामीटर और कॉन्फ़िगरेशन फ़ाइलों की सहायता से नियंत्रित
डेमो
होस्ट | vm1 | vm2 |
---|---|---|
OS संस्करण | CentOS Linux रिलीज़ 7.6 x86_64 | CentOS Linux रिलीज़ 7.5 x86_64 |
संस्करण के साथ डेटाबेस सर्वर | MySQL 5.7.26 | PostgreSQL 10.5 |
डेटाबेस पोर्ट | 3306 | 5433 |
आईपी पता | 192.168.56.102 | 192.168.56.106 |
आरंभ करने के लिए, pg_chameleon को स्थापित करने के लिए आवश्यक सभी पूर्वापेक्षाओं के साथ सेटअप तैयार करें। इस डेमो में पायथन 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 कॉन्फ़िगरेशन फ़ाइल में एक "वैश्विक सेटिंग्स" अनुभाग होता है जो लॉक फ़ाइल स्थान, लॉगिंग स्थान और अवधारण अवधि आदि जैसे विवरणों को नियंत्रित करता है। इसके बाद वाला अनुभाग "टाइप ओवरराइड" अनुभाग है जो ओवरराइड करने के लिए नियमों का एक सेट है। प्रतिकृति के दौरान प्रकार। एक नमूना प्रकार ओवरराइड नियम डिफ़ॉल्ट रूप से उपयोग किया जाता है जो एक छोटे से (1) को एक बूलियन मान में परिवर्तित करता है। अगला खंड गंतव्य डेटाबेस कनेक्शन विवरण अनुभाग है जो हमारे मामले में एक PostgreSQL डेटाबेस है, जिसे "pg_conn" द्वारा दर्शाया गया है। अंतिम खंड स्रोत अनुभाग है जिसमें स्रोत डेटाबेस कनेक्शन सेटिंग्स, स्रोत और गंतव्य के बीच स्कीमा मैपिंग, टाइमआउट, मेमोरी और बैच आकार सेटिंग्स सहित किसी भी तालिका को छोड़ने के सभी विवरण हैं। "स्रोत" पर ध्यान दें, जो दर्शाता है कि एक से अधिक प्रतिकृति सेटअप बनाने के लिए एक ही गंतव्य के लिए कई स्रोत हो सकते हैं।
इस डेमो में एक "world_x" डेटाबेस का उपयोग किया जाता है जो नमूना पंक्तियों वाला 4 टेबल वाला एक नमूना डेटाबेस है, जिसे MySQL समुदाय डेमो उद्देश्यों के लिए प्रदान करता है, और इसे यहां से डाउनलोड किया जा सकता है। नमूना डेटाबेस इसे बनाने और उसमें पंक्तियों को आयात करने के निर्देशों के साथ एक टार और संपीड़ित संग्रह के रूप में आता है।
एक समर्पित उपयोगकर्ता को 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' तर्क के साथ देखा जा सकता है।
$> chameleon show_status --source mysql
OUTPUT:
Source id Source name Type Status Consistent Read lag Last read Replay lag Last replay
----------- ------------- ------ -------- ------------ ---------- ----------- ------------ -------------
1 mysql mysql running No N/A N/A
== Schema mappings ==
Origin schema Destination schema
--------------- --------------------
world_x pgworld_x
== Replica status ==
--------------------- ---
Tables not replicated 0
Tables replicated 4
All tables 4
Last maintenance N/A
Next maintenance N/A
Replayed rows
Replayed DDL
Skipped rows
--------------------- ---
$> chameleon show_errors --config default
output: There are no errors in the log
जैसा कि पहले चर्चा की गई थी कि प्रत्येक प्रतिकृति कार्यक्षमता को डेमॉन की मदद से प्रबंधित किया जाता है, जिसे नीचे प्रदर्शित लिनक्स "पीएस" कमांड का उपयोग करके प्रक्रिया तालिका को क्वेरी करके देखा जा सकता है।
$> ps -ef|grep chameleon
root 763 1 0 19:20 ? 00:00:00 /u01/media/mysql_samp_dbs/world_x-db/venv/bin/python3.6 /u01/media/mysq l_samp_dbs/world_x-db/venv/bin/chameleon start_replica --config default --source mysql
root 764 763 0 19:20 ? 00:00:01 /u01/media/mysql_samp_dbs/world_x-db/venv/bin/python3.6 /u01/media/mysq l_samp_dbs/world_x-db/venv/bin/chameleon start_replica --config default --source mysql
root 765 763 0 19:20 ? 00:00:00 /u01/media/mysql_samp_dbs/world_x-db/venv/bin/python3.6 /u01/media/mysq l_samp_dbs/world_x-db/venv/bin/chameleon start_replica --config default --source mysql
कोई भी प्रतिकृति सेटअप तब तक पूरा नहीं होता जब तक कि इसे "वास्तविक समय लागू" परीक्षण में नहीं डाला जाता है, जिसे नीचे के रूप में सिम्युलेटेड किया गया है। इसमें एक तालिका बनाना और 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_गिरगिट का उपयोग करने के लाभ
- सेटअप में आसान और कम जटिल कॉन्फ़िगरेशन
- दर्द रहित समस्या निवारण और विसंगति का पता लगाने में आसान त्रुटि आउटपुट के साथ
- इनिशियलाइज़ेशन के बाद अतिरिक्त एडहॉक टेबल को किसी अन्य कॉन्फ़िगरेशन में बदलाव किए बिना, प्रतिकृति में जोड़ा जा सकता है
- एक गंतव्य डेटाबेस के लिए कई स्रोतों को कॉन्फ़िगर किया जा सकता है, जो एक या अधिक MySQL डेटाबेस से डेटा को एक PostgreSQL डेटाबेस में मर्ज करने के लिए समेकन परियोजनाओं में उपयोगी है
- चयनित तालिकाओं को दोहराने से छोड़ा जा सकता है
pg_गिरगिट का उपयोग करने के नुकसान
- केवल MySQL 5.5 से मूल डेटाबेस के रूप में समर्थित और गंतव्य डेटाबेस के लिए PostgreSQL 9.5 आगे
- प्रत्येक तालिका में प्राथमिक या अद्वितीय कुंजी होना आवश्यक है, अन्यथा, तालिकाएं init_replica प्रक्रिया के दौरान प्रारंभ हो जाती हैं लेकिन वे दोहराने में विफल हो जाएंगी
- एकतरफा प्रतिकृति, यानी MySQL से PostgreSQL। जिससे इसका उपयोग केवल एक सक्रिय-निष्क्रिय सेटअप तक सीमित हो जाता है
- स्रोत डेटाबेस केवल एक MySQL डेटाबेस हो सकता है जबकि PostgreSQL डेटाबेस के लिए समर्थन अतिरिक्त सीमाओं के साथ प्रयोगात्मक है (अधिक जानने के लिए यहां क्लिक करें)
pg_गिरगिट सारांश
pg_chameleon द्वारा प्रस्तुत प्रतिकृति दृष्टिकोण MySQL के PostgreSQL के डेटाबेस माइग्रेशन के अनुकूल है। हालांकि, वन-वे प्रतिकृति की महत्वपूर्ण सीमाओं में से एक डेटाबेस पेशेवरों को माइग्रेशन के अलावा किसी अन्य चीज़ के लिए इसे अपनाने के लिए हतोत्साहित कर सकता है। यूनिडायरेक्शनल प्रतिकृति की इस कमी को सिमेट्रिकडीएस नामक एक अन्य ओपन सोर्स टूल का उपयोग करके संबोधित किया जा सकता है।
उपयोगिता का अधिक विस्तार से अध्ययन करने के लिए, कृपया यहां आधिकारिक दस्तावेज देखें। कमांड लाइन संदर्भ यहां से प्राप्त किया जा सकता है।
आज श्वेतपत्र डाउनलोड करें क्लस्टरकंट्रोल के साथ पोस्टग्रेएसक्यूएल प्रबंधन और स्वचालन इस बारे में जानें कि पोस्टग्रेएसक्यूएल को तैनात करने, मॉनिटर करने, प्रबंधित करने और स्केल करने के लिए आपको क्या जानना चाहिए। श्वेतपत्र डाउनलोड करेंSymetricDS का अवलोकन
SymmetricDS एक ओपन सोर्स टूल है जो Oracle, MongoDB, PostgreSQL, MySQL, SQL Server, MariaDB, DB2, Sybase, Greenplum, Informix, H2 जैसे डेटाबेस सर्वरों की लोकप्रिय सूची से किसी भी डेटाबेस को किसी भी अन्य डेटाबेस में दोहराने में सक्षम है। फायरबर्ड और अन्य क्लाउड आधारित डेटाबेस इंस्टेंस जैसे रेडशिफ्ट और एज़्योर आदि। कुछ पेशकशों में डेटाबेस और फ़ाइल सिंक्रोनाइज़ेशन, मल्टी-मास्टर प्रतिकृति, फ़िल्टर्ड सिंक्रोनाइज़ेशन और ट्रांसफ़ॉर्मेशन शामिल हैं। टूल को जावा का उपयोग करके विकसित किया गया है, जिसके लिए JRE या JDK के मानक संस्करण (संस्करण 8.0 या ऊपर) की आवश्यकता होती है। कार्यक्षमता में स्रोत डेटाबेस पर ट्रिगर द्वारा कैप्चर किए जा रहे डेटा परिवर्तन शामिल हैं और इसे आउटगोइंग बैचों के रूप में भाग लेने वाले गंतव्य डेटाबेस में रूट करना शामिल है
SymetricDS की विशेषताएं
- प्लेटफ़ॉर्म स्वतंत्र, जिसका अर्थ है कि दो या दो से अधिक भिन्न डेटाबेस एक दूसरे के साथ संचार कर सकते हैं, कोई भी डेटाबेस किसी भी अन्य डेटाबेस से
- रिलेशनल डेटाबेस परिवर्तन डेटा कैप्चर का उपयोग करके सिंक्रनाइज़ेशन प्राप्त करते हैं जबकि फ़ाइल सिस्टम आधारित सिस्टम फ़ाइल सिंक्रनाइज़ेशन का उपयोग करते हैं
- पुश और पुल पद्धति का उपयोग करके द्वि-दिशात्मक प्रतिकृति, जो निर्धारित नियमों के आधार पर पूरी की जाती है
- डेटा स्थानांतरण सुरक्षित और कम बैंडविड्थ नेटवर्क पर भी हो सकता है
- दुर्घटनाग्रस्त नोड की बहाली के दौरान स्वचालित पुनर्प्राप्ति और स्वचालित विरोध समाधान
- क्लाउड तैयार है और इसमें शक्तिशाली एक्सटेंशन API शामिल हैं
डेमो
SymmetricDS को दो विकल्पों में से एक में कॉन्फ़िगर किया जा सकता है:
- एक मास्टर (पैरेंट) नोड जो दो स्लेव (चाइल्ड) नोड्स के बीच एक केंद्रीकृत मध्यस्थ समन्वय डेटा प्रतिकृति के रूप में कार्य करता है, जिसमें दो चाइल्ड नोड्स के बीच संचार केवल माता-पिता के माध्यम से हो सकता है।
- एक सक्रिय नोड (नोड1) बिना किसी बिचौलिए के दूसरे सक्रिय नोड (नोड2) को और उससे दोहरा सकता है।
दोनों विकल्पों में, नोड्स के बीच संचार "पुश" और "पुल" घटनाओं के माध्यम से होता है। इस डेमो में, दो नोड्स के बीच एक सक्रिय-सक्रिय कॉन्फ़िगरेशन को समझाया जाएगा। पूर्ण वास्तुकला संपूर्ण हो सकती है, इसलिए पाठकों को सिमेट्रिकडीएस के आंतरिक के बारे में अधिक जानने के लिए यहां उपलब्ध उपयोगकर्ता मार्गदर्शिका की जांच करने के लिए प्रोत्साहित किया जाता है।
SymmetricDS को इंस्टाल करना उतना ही सरल है जितना कि ज़िप फ़ाइल के ओपन सोर्स संस्करण को यहाँ से डाउनलोड करना और इसे सुविधाजनक स्थान पर निकालना। इस डेमो में स्थापित स्थान और SymmetricDS के संस्करण का विवरण नीचे दी गई तालिका के अनुसार है, साथ ही डेटाबेस संस्करण, लिनक्स संस्करण, आईपी पते और दोनों भाग लेने वाले नोड्स के लिए संचार पोर्ट से संबंधित अन्य विवरण हैं।
होस्ट | vm1 | vm2 |
---|---|---|
OS संस्करण | CentOS Linux रिलीज़ 7.6 x86_64 | CentOS Linux रिलीज़ 7.6 x86_64 |
डेटाबेस सर्वर संस्करण | MySQL 5.7.26 | PostgreSQL 10.5 |
डेटाबेस पोर्ट | 3306 | 5832 |
आईपी पता | 192.168.1.107 | 192.168.1.112 |
SymetricDS संस्करण | SymetricDS 3.9 | SymetricDS 3.9 |
SymmetricDS इंस्टाल लोकेशन | /usr/स्थानीय/सममित-सर्वर-3.9.20 | /usr/स्थानीय/सममित-सर्वर-3.9.20 |
SymetricDS नोड नाम | कॉर्प-000 | स्टोर-001 |
इस मामले में इंस्टॉल होम "/usr/लोकल/सिमेट्रिक-सर्वर-3.9.20" है, जो सिमेट्रिकडीएस की होम डायरेक्टरी होगी, जिसमें कई अन्य उप-निर्देशिकाएं और फाइलें शामिल हैं। दो उप-निर्देशिकाएँ जो अब महत्वपूर्ण हैं, वे हैं "नमूने" और "इंजन"। नमूना निर्देशिका में त्वरित डेमो शुरू करने के लिए नमूना 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" के रूप में कॉन्फ़िगर किया गया है, बाकी विवरण नोड.प्रॉपर्टी फ़ाइल में कॉन्फ़िगर किया गया है, जैसा कि नीचे दिखाया गया है। "स्टोर-001" नोड प्रतिकृति के लिए डेटाबेस के रूप में "pgdb_replica" के साथ एक PostgreSQL डेटाबेस चलाता है। "पंजीकरण.यूआरएल" होस्ट "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 के पूर्व-कॉन्फ़िगर किए गए डिफ़ॉल्ट डेमो में दो डेटाबेस सर्वर (दो नोड्स) के बीच द्वि-दिशात्मक प्रतिकृति सेट करने के लिए सेटिंग्स शामिल हैं। नीचे दिए गए चरणों को होस्ट vm1 (कॉर्प-000) पर निष्पादित किया गया है, जो 4 टेबल वाले एक नमूना स्कीमा बनाएगा। इसके अलावा, "सिमडमिन" कमांड के साथ "क्रिएट-सिम-टेबल्स" का निष्पादन कैटलॉग टेबल बनाएगा जो नोड्स के बीच प्रतिकृति के नियमों और दिशा को संग्रहीत और नियंत्रित करता है। अंत में, डेमो टेबल को नमूना डेटा के साथ लोड किया जाता है।
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 (store-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_" के साथ टेबल) इस समय केवल corp-000 नोड में उपलब्ध हैं, क्योंकि यही वह जगह है जहां "क्रिएट-सिम-टेबल" कमांड निष्पादित किया गया था, जो जगह होगी प्रतिकृति को नियंत्रित और प्रबंधित करने के लिए। इसके अलावा, store-001 नोड डेटाबेस में केवल 4 डेमो टेबल होंगे जिनमें कोई डेटा नहीं होगा।
जैसा कि नीचे दिखाया गया है, पर्यावरण अब दोनों नोड्स पर "sym" सर्वर प्रक्रिया शुरू करने के लिए तैयार है।
vm1$> cd /usr/local/symmetric-server-3.9.20/bin
vm1$> sym 2>&1 &
लॉग प्रविष्टियाँ दोनों एक पृष्ठभूमि लॉग फ़ाइल (सममित.लॉग) को SymmetricDS स्थापना स्थान के साथ-साथ मानक आउटपुट में लॉग निर्देशिका के अंतर्गत भेजी जाती हैं। "sym" सर्वर को अब store-001 नोड पर शुरू किया जा सकता है।
vm2$> cd /usr/local/symmetric-server-3.9.20/bin
vm2$> sym 2>&1 &
होस्ट vm2 पर "sym" सर्वर प्रक्रिया का स्टार्टअप PostgreSQL डेटाबेस में भी SymmetricDS कैटलॉग टेबल बनाएगा। दोनों नोड्स पर "सिम" सर्वर प्रक्रिया के स्टार्टअप से उन्हें कॉर्प-000 से स्टोर-001 में डेटा को दोहराने के लिए एक-दूसरे के साथ समन्वय स्थापित करने में मदद मिलेगी। कुछ सेकंड के बाद, सभी चार तालिकाओं को दोनों ओर से क्वेरी करने से सफल प्रतिकृति परिणाम दिखाई देंगे। वैकल्पिक रूप से, नीचे दिए गए आदेश के साथ corp-000 से store-001 नोड पर एक प्रारंभिक लोड भी भेजा जा सकता है।
vm1$> ./symadmin --engine corp-000 reload-node 001
इस बिंदु पर, corp-000 नोड (होस्ट:vm1) पर MySQL डेटाबेस में "आइटम" तालिका में एक नया रिकॉर्ड डाला जाता है और इसे स्टोर-001 नोड (होस्ट:vm2) पर PostgreSQL डेटाबेस में सफलतापूर्वक दोहराया जा सकता है। ) यह कॉर्प-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)
store-001 से corp-000 तक डेटा की "पुश" घटना को "sale_transaction" तालिका में एक रिकॉर्ड डालने और इसे दोहराने की पुष्टि करके प्राप्त किया जा सकता है।
pgdb_replica=# insert into "sale_transaction" ("tran_id", "store_id", "workstation", "day", "seq") values (1000, '001', '3', '2007-11-01', 100);
vm1$> [[email protected] ~]# mysql -uroot -p'admin123' -D replica_db -e "select * from sale_transaction";
+---------+----------+-------------+------------+-----+
| tran_id | store_id | workstation | day | seq |
+---------+----------+-------------+------------+-----+
| 900 | 001 | 3 | 2012-12-01 | 90 |
| 1000 | 001 | 3 | 2007-11-01 | 100 |
| 2000 | 002 | 2 | 2007-11-01 | 200 |
+---------+----------+-------------+------------+-----+
यह एक 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)
इसके बाद, कॉन्फ़िगरेशन को "सिंक-ट्रिगर" तर्क के साथ सिमडमिन कमांड को लागू करके एक नई तालिका जोड़ने के स्कीमा परिवर्तन के बारे में सूचित किया जाता है जो तालिका परिभाषाओं से मेल खाने के लिए ट्रिगर्स को फिर से बनाएगा। इसके बाद, स्टोर-001 नोड में स्कीमा परिवर्तन भेजने के लिए "भेजें-स्कीमा" निष्पादित करें, जिसके बाद "t1" तालिका की प्रतिकृति सफलतापूर्वक कॉन्फ़िगर की जाएगी।
vm1$> ./symadmin -e corp-000 --node=001 sync-triggers
vm1$> ./symadmin send-schema -e corp-000 --node=001 t1
SymetricDS का उपयोग करने के लाभ
- 3-नोड या 2-नोड सेटअप बनाने के लिए पैरामीटर फ़ाइलों के पूर्व-कॉन्फ़िगर सेट सहित सहज स्थापना और कॉन्फ़िगरेशन
- क्रॉस प्लेटफ़ॉर्म डेटाबेस सक्षम और सर्वर, लैपटॉप और मोबाइल उपकरणों सहित प्लेटफ़ॉर्म स्वतंत्र
- किसी भी डेटाबेस को किसी भी अन्य डेटाबेस से दोहराएं, चाहे वह ऑन-प्रिमाइसेस, WAN या क्लाउड हो
- डेटा को निर्बाध रूप से दोहराने के लिए कई हज़ार डेटाबेस में कुछ डेटाबेस को बेहतर ढंग से संभालने में सक्षम
- सॉफ्टवेयर का एक व्यावसायिक संस्करण एक उत्कृष्ट समर्थन पैकेज के साथ GUI संचालित प्रबंधन कंसोल प्रदान करता है
SymetricDS के उपयोग के नुकसान
- मैन्युअल कमांड लाइन कॉन्फ़िगरेशन में कैटलॉग तालिकाओं को लोड करने के लिए SQL कथनों के माध्यम से नियमों और प्रतिकृति की दिशा को परिभाषित करना शामिल हो सकता है, जिसे प्रबंधित करना असुविधाजनक हो सकता है
- प्रतिकृति के लिए बड़ी संख्या में तालिकाओं को स्थापित करना एक संपूर्ण प्रयास होगा, जब तक कि नियमों और प्रतिकृति की दिशा को परिभाषित करने वाले SQL कथनों को उत्पन्न करने के लिए किसी प्रकार की स्क्रिप्टिंग का उपयोग नहीं किया जाता है
- लॉग फ़ाइल को अव्यवस्थित करने वाली बहुत सारी लॉगिंग जानकारी, जिससे लॉगफ़ाइल को डिस्क को भरने की अनुमति नहीं देने के लिए आवधिक लॉगफ़ाइल रखरखाव की आवश्यकता होती है
SymmetricDS सारांश
संबंधित संसाधन MySQL प्रतिकृति के लिए ClusterControl PostgreSQL के लिए ClusterControl PostgreSQL के लिए डेटा स्टोर की तुलना करना - MVCC बनाम InnoDBSymmetricDS डेटा को दोहराने और फ़ाइल सिंक्रनाइज़ेशन प्राप्त करने के लिए कई हज़ार नोड्स के लिए 2 नोड्स, 3 नोड्स और इतने पर द्वि-दिशात्मक प्रतिकृति स्थापित करने की क्षमता प्रदान करता है। यह एक अनूठा उपकरण है जो कई स्व-उपचार रखरखाव कार्य करता है जैसे नोड में डाउनटाइम की विस्तारित अवधि के बाद डेटा की स्वचालित पुनर्प्राप्ति, HTTPS की सहायता से नोड्स के बीच सुरक्षित और कुशल संचार और सेट नियमों के आधार पर स्वचालित संघर्ष प्रबंधन , etc. The essential feature of replicating any database to any other database makes SymmetricDS ready to be deployed for a number of use cases including migration, version and patch upgrade, distribution, filtering and transformation of data across diverse platforms.
The demo was created by referring to the official quick-start tutorial of SymmetricDS which can be accessed from here. The user guide can be found here, which provides a detailed account of various concepts involved in a SymmetricDS replication setup.