PostgreSQL और MySQL के बीच क्रॉस प्रतिकृति

PostgreSQL और MySQL के बीच क्रॉस प्रतिकृति

मैं PostgreSQL और MySQL के बीच क्रॉस-प्रतिकृति, साथ ही दो डेटाबेस सर्वरों के बीच क्रॉस-प्रतिकृति स्थापित करने के तरीकों की रूपरेखा तैयार करूंगा। आमतौर पर, क्रॉस-प्रतिकृति डेटाबेस को सजातीय कहा जाता है, और यह एक आरडीबीएमएस सर्वर से दूसरे में जाने का एक सुविधाजनक तरीका है।

PostgreSQL और MySQL डेटाबेस को आम तौर पर रिलेशनल माना जाता है, लेकिन अतिरिक्त एक्सटेंशन के साथ वे NoSQL क्षमताएं प्रदान करते हैं। यहां हम संबंधपरक DBMS परिप्रेक्ष्य से PostgreSQL और MySQL के बीच प्रतिकृति पर चर्चा करेंगे।

हम संपूर्ण आंतरिक कामकाज का वर्णन नहीं करेंगे, केवल बुनियादी सिद्धांतों का वर्णन करेंगे ताकि आपको डेटाबेस सर्वर, फायदे, सीमाओं और उपयोग के मामलों के बीच प्रतिकृति को कॉन्फ़िगर करने का विचार मिल सके।

आमतौर पर, दो समान डेटाबेस सर्वरों के बीच प्रतिकृति या तो बाइनरी मोड में या मास्टर (उर्फ प्रकाशक, मास्टर, या सक्रिय) और स्लेव (ग्राहक, स्टैंडबाय, या निष्क्रिय) के बीच प्रश्नों का उपयोग करके की जाती है। प्रतिकृति का उद्देश्य दास पक्ष पर मास्टर डेटाबेस की वास्तविक समय की प्रतिलिपि प्रदान करना है। इस मामले में, डेटा को मास्टर से स्लेव में, यानी सक्रिय से निष्क्रिय में स्थानांतरित किया जाता है, क्योंकि प्रतिकृति केवल एक दिशा में की जाती है। लेकिन आप दो डेटाबेस के बीच दोनों दिशाओं में प्रतिकृति सेट कर सकते हैं, ताकि डेटा को सक्रिय-सक्रिय कॉन्फ़िगरेशन में स्लेव से मास्टर में स्थानांतरित किया जा सके। कैस्केडिंग प्रतिकृति सहित यह सब, दो या दो से अधिक समान डेटाबेस सर्वरों के बीच संभव है। सक्रिय-सक्रिय या सक्रिय-निष्क्रिय कॉन्फ़िगरेशन आवश्यकता, प्रारंभिक कॉन्फ़िगरेशन में ऐसी क्षमताओं की उपलब्धता या बाहरी कॉन्फ़िगरेशन समाधानों के उपयोग और मौजूदा ट्रेड-ऑफ़ पर निर्भर करता है।

वर्णित कॉन्फ़िगरेशन विभिन्न डेटाबेस सर्वरों के बीच संभव है। सर्वर को किसी अन्य डेटाबेस सर्वर से प्रतिकृति डेटा स्वीकार करने के लिए कॉन्फ़िगर किया जा सकता है और फिर भी प्रतिकृति डेटा के वास्तविक समय स्नैपशॉट को बनाए रखा जा सकता है। MySQL और PostgreSQL इनमें से अधिकांश कॉन्फ़िगरेशन इन-हाउस या तृतीय-पक्ष एक्सटेंशन के माध्यम से पेश करते हैं, जिसमें बाइनरी लॉग विधियां, डिस्क लॉकिंग और स्टेटमेंट- और पंक्ति-आधारित विधियां शामिल हैं।

एक डेटाबेस सर्वर से दूसरे डेटाबेस सर्वर पर एक बार माइग्रेशन के लिए MySQL और PostgreSQL के बीच क्रॉस प्रतिकृति की आवश्यकता होती है। ये डेटाबेस अलग-अलग प्रोटोकॉल का उपयोग करते हैं, इसलिए इन्हें सीधे लिंक करना संभव नहीं है। डेटा एक्सचेंज स्थापित करने के लिए, आप बाहरी ओपन सोर्स टूल का उपयोग कर सकते हैं, उदाहरण के लिए pg_chameleon।

pg_गिरगिट क्या है

pg_chameleon Python 3 में MySQL से PostgreSQL तक एक प्रतिकृति प्रणाली है। यह Python में भी ओपन सोर्स mysql-प्रतिकृति लाइब्रेरी का उपयोग करता है। पंक्ति छवियों को MySQL तालिकाओं से निकाला जाता है और PostgreSQL डेटाबेस में JSONB ऑब्जेक्ट के रूप में संग्रहीत किया जाता है, और फिर pl/pgsql फ़ंक्शन द्वारा डिक्रिप्ट किया जाता है और PostgreSQL डेटाबेस में पुन: प्रस्तुत किया जाता है।

pg_गिरगिट की विशेषताएं

एक ही क्लस्टर से एकाधिक MySQL स्कीमा को एक-से-अनेक कॉन्फ़िगरेशन में एकल लक्ष्य PostgreSQL डेटाबेस में दोहराया जा सकता है
स्रोत और लक्ष्य स्कीमा नाम समान नहीं हो सकते।
प्रतिकृति डेटा को कैस्केड MySQL प्रतिकृति से पुनर्प्राप्त किया जा सकता है।
वे तालिकाएँ जो दोहराई नहीं जा सकतीं या त्रुटियाँ उत्पन्न नहीं कर सकतीं, उन्हें बाहर रखा गया है।
प्रत्येक प्रतिकृति फ़ंक्शन को डेमॉन द्वारा नियंत्रित किया जाता है।
YAML-आधारित पैरामीटर और कॉन्फ़िगरेशन फ़ाइलों के माध्यम से नियंत्रण।

उदाहरण

मेज़बान
vm1
vm2

ओएस संस्करण
सेंटओएस लिनक्स 7.6 x86_64
सेंटओएस लिनक्स 7.5 x86_64

डीबी सर्वर संस्करण
MySQL 5.7.26
PostgreSQL 10.5

डीबी पोर्ट
3306
5433

आईपी ​​एड्रेस
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 को सक्षम करने और डिफ़ॉल्ट निर्देशिका और कॉन्फ़िगरेशन फ़ाइलें बनाने के लिए 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) को बूलियन मान में परिवर्तित करता है। अगले अनुभाग में, हम लक्ष्य डेटाबेस से कनेक्शन विवरण निर्दिष्ट करते हैं। हमारे मामले में, यह एक PostgreSQL डेटाबेस है, जिसे pg_conn नामित किया गया है। अंतिम अनुभाग में, हम स्रोत डेटा को इंगित करते हैं, अर्थात, स्रोत डेटाबेस के कनेक्शन पैरामीटर, स्रोत और लक्ष्य डेटाबेस के बीच मैपिंग योजना, तालिकाएँ जिन्हें छोड़ने की आवश्यकता होती है, प्रतीक्षा समय, मेमोरी, पैकेज का आकार। ध्यान दें कि "स्रोत" बहुवचन है, जिसका अर्थ है कि हम कई-से-एक कॉन्फ़िगरेशन सेट करने के लिए एक ही लक्ष्य डेटाबेस में एकाधिक स्रोत डेटाबेस जोड़ सकते हैं।

उदाहरण डेटाबेस वर्ल्ड_x में पंक्तियों के साथ 4 तालिकाएँ हैं जिन्हें MySQL समुदाय उदाहरण के रूप में प्रस्तुत करता है। इसे डाउनलोड किया जा सकता है यहां. नमूना डेटाबेस पंक्तियों को बनाने और आयात करने के निर्देशों के साथ टार और संपीड़ित संग्रह के रूप में आता है।

MySQL और PostgreSQL डेटाबेस में, एक विशेष उपयोगकर्ता समान नाम usr_replus के साथ बनाया जाता है। 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 पक्ष पर, एक db_replication डेटाबेस बनाया गया है जो MySQL डेटाबेस से परिवर्तन स्वीकार करेगा। PostgreSQL में उपयोगकर्ता usr_replika स्वचालित रूप से दो स्कीमा, pgworld_x और sch_chameleon के स्वामी के रूप में कॉन्फ़िगर किया गया है, जिसमें क्रमशः वास्तविक प्रतिकृति तालिकाएँ और प्रतिकृति निर्देशिका तालिकाएँ शामिल हैं। क्रिएट_रेप्लिका_स्कीमा तर्क स्वचालित कॉन्फ़िगरेशन के लिए ज़िम्मेदार है, जैसा कि आप नीचे देखेंगे।

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_replus_schema तर्क PostgreSQL डेटाबेस में एक डिफ़ॉल्ट स्कीमा (sch_chameleon) और एक प्रतिकृति स्कीमा (pgworld_x) बनाता है। Add_source तर्क कॉन्फ़िगरेशन फ़ाइल (default.yml) को पढ़कर कॉन्फ़िगरेशन में एक स्रोत डेटाबेस जोड़ता है, और हमारे मामले में यह mysql है, और init_replika कॉन्फ़िगरेशन फ़ाइल में पैरामीटर के आधार पर कॉन्फ़िगरेशन को प्रारंभ करता है।

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

इन तीन कमांडों का आउटपुट स्पष्ट रूप से इंगित करता है कि उन्हें सफलतापूर्वक निष्पादित किया गया था। किसी भी क्रैश या सिंटैक्स त्रुटियों की सूचना समस्या को ठीक करने के संकेत के साथ सरल, स्पष्ट संदेशों में दी जाती है।

अंत में, हम प्रारंभ_रेप्लिका का उपयोग करके प्रतिकृति शुरू करते हैं और एक सफलता संदेश प्राप्त करते हैं।

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

प्रतिकृति स्थिति के बारे में show_status तर्क का उपयोग करके पूछताछ की जा सकती है, और त्रुटियों को show_errors तर्क का उपयोग करके देखा जा सकता है।

परिणाम।

जैसा कि हमने पहले ही कहा, प्रत्येक प्रतिकृति फ़ंक्शन डेमॉन द्वारा नियंत्रित होता है। उन्हें देखने के लिए, हम लिनक्स पीएस कमांड के साथ प्रक्रिया तालिका को क्वेरी करते हैं, जैसा कि नीचे दिखाया गया है।

परिणाम।

प्रतिकृति को तब तक कॉन्फ़िगर नहीं माना जाता जब तक हम वास्तविक समय में इसका परीक्षण नहीं करते, जैसा कि नीचे दिखाया गया है। हम एक तालिका बनाते हैं, 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_replika प्रक्रिया के दौरान प्रारंभ किया जाता है लेकिन दोहराया नहीं जाता है।
एकतरफ़ा प्रतिकृति - केवल MySQL से PostgreSQL तक। इसलिए, यह केवल "सक्रिय-निष्क्रिय" सर्किट के लिए उपयुक्त है।
स्रोत केवल एक MySQL डेटाबेस हो सकता है, और एक स्रोत के रूप में PostgreSQL डेटाबेस के लिए समर्थन केवल प्रयोगात्मक और सीमाओं के साथ है (और जानें) यहां)

pg_गिरगिट के लिए परिणाम

किसी डेटाबेस को MySQL से PostgreSQL में स्थानांतरित करने के लिए pg_chameleon में प्रतिकृति विधि बहुत अच्छी है। महत्वपूर्ण नकारात्मक पक्ष यह है कि प्रतिकृति केवल एक-तरफ़ा है, इसलिए डेटाबेस पेशेवर माइग्रेशन के अलावा किसी अन्य चीज़ के लिए इसका उपयोग करना नहीं चाहेंगे। लेकिन एक-तरफ़ा प्रतिकृति की समस्या को एक अन्य ओपन सोर्स टूल - सिमेट्रिकडीएस से हल किया जा सकता है।

आधिकारिक दस्तावेज़ में और पढ़ें यहां. कमांड लाइन सहायता मिल सकती है यहां.

सिमेट्रिकडीएस का अवलोकन

SymmetricDS एक खुला स्रोत उपकरण है जो किसी भी डेटाबेस को किसी अन्य सामान्य डेटाबेस में दोहराता है: Oracle, MongoDB, PostgreSQL, MySQL, SQL Server, MariaDB, DB2, Sybase, Greenplum, Informix, H2, Firebird और अन्य क्लाउड डेटाबेस उदाहरण, जैसे Redshift, और Azure, आदि उपलब्ध सुविधाएँ: डेटाबेस और फ़ाइल सिंक्रोनाइज़ेशन, मल्टी-मास्टर डेटाबेस प्रतिकृति, फ़िल्टर्ड सिंक्रोनाइज़ेशन, परिवर्तन और अन्य। यह एक जावा टूल है और इसके लिए JRE या JDK (संस्करण 8.0 या उच्चतर) की मानक रिलीज़ की आवश्यकता होती है। यहां, स्रोत डेटाबेस में ट्रिगर्स में डेटा परिवर्तन को रिकॉर्ड किया जा सकता है और बैचों के रूप में उपयुक्त लक्ष्य डेटाबेस में भेजा जा सकता है।

सिमेट्रिकडीएस विशेषताएं

उपकरण प्लेटफ़ॉर्म स्वतंत्र है, जिसका अर्थ है कि दो या दो से अधिक भिन्न डेटाबेस डेटा का आदान-प्रदान कर सकते हैं।
रिलेशनल डेटाबेस को डेटा परिवर्तन रिकॉर्ड का उपयोग करके सिंक्रनाइज़ किया जाता है, जबकि फ़ाइल सिस्टम-आधारित डेटाबेस फ़ाइल सिंक्रनाइज़ेशन का उपयोग करते हैं।
नियमों के एक सेट के आधार पर पुश और पुल विधियों का उपयोग करके दो-तरफ़ा प्रतिकृति।
सुरक्षित और कम बैंडविड्थ नेटवर्क पर डेटा ट्रांसफर संभव है।
विफलता के बाद नोड्स का संचालन फिर से शुरू होने पर स्वचालित पुनर्प्राप्ति और स्वचालित संघर्ष समाधान।
क्लाउड संगत और शक्तिशाली एक्सटेंशन एपीआई।

उदाहरण

SymmetricDS को दो तरीकों में से एक में कॉन्फ़िगर किया जा सकता है:
एक मास्टर (पैरेंट) नोड जो दो स्लेव (चाइल्ड) नोड्स के बीच डेटा प्रतिकृति को केंद्रीय रूप से समन्वयित करता है, और चाइल्ड नोड्स के बीच संचार केवल पैरेंट के माध्यम से होता है।
एक सक्रिय नोड (नोड 1) किसी मध्यस्थ के बिना किसी अन्य सक्रिय नोड (नोड 2) के साथ प्रतिकृति के लिए संचार कर सकता है।

दोनों विकल्पों में डेटा एक्सचेंज पुश और पुल का उपयोग करके होता है। इस उदाहरण में हम एक सक्रिय-सक्रिय कॉन्फ़िगरेशन पर विचार करेंगे। संपूर्ण वास्तुकला का वर्णन करने में बहुत लंबा समय लगेगा, इसलिए अपना शोध करें। नेतृत्वSymmetricDS डिवाइस के बारे में अधिक जानने के लिए।

SymmetricDS इंस्टॉल करना बहुत सरल है: ज़िप फ़ाइल का ओपन सोर्स संस्करण डाउनलोड करें अत: और जहां चाहो निकाल लो. नीचे दी गई तालिका इस उदाहरण में सिमेट्रिकडीएस के इंस्टॉलेशन स्थान और संस्करण के साथ-साथ डेटाबेस संस्करण, लिनक्स संस्करण, आईपी पते और दोनों नोड्स के पोर्ट के बारे में जानकारी प्रदान करती है।

मेज़बान
vm1
vm2

ओएस संस्करण
सेंटओएस लिनक्स 7.6 x86_64
सेंटओएस लिनक्स 7.6 x86_64

डीबी सर्वर संस्करण
MySQL 5.7.26
PostgreSQL 10.5

डीबी पोर्ट
3306
5832

आईपी ​​एड्रेस
192.168.1.107
192.168.1.112

सिमेट्रिकडीएस संस्करण
सिमेट्रिकडीएस 3.9
सिमेट्रिकडीएस 3.9

SymmetricDS स्थापना पथ
/usr/स्थानीय/सममित-सर्वर-3.9.20
/usr/स्थानीय/सममित-सर्वर-3.9.20

सिमेट्रिकडीएस नोड नाम
निगम-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 ड्राइवर द्वारा नियंत्रित किया जाता है, जो उपरोक्त कनेक्शन स्ट्रिंग और लॉगिन क्रेडेंशियल का उपयोग करता है। हम प्रतिकृति_डीबी डेटाबेस से जुड़ते हैं और स्कीमा निर्माण के दौरान तालिकाएँ बनाई जाएंगी। sync.url दिखाता है कि सिंक्रोनाइज़ेशन के लिए नोड से कहाँ संपर्क करना है।

होस्ट वीएम2 पर नोड 2 को स्टोर-001 के रूप में कॉन्फ़िगर किया गया है और बाकी को नीचे नोड.प्रॉपर्टीज फ़ाइल में निर्दिष्ट किया गया है। नोड स्टोर-001 PostgreSQL डेटाबेस चलाता है और pgdb_replus प्रतिकृति डेटाबेस है। पंजीकरण.यूआरएल होस्ट वीएम2 को होस्ट वीएम1 से संपर्क करने और उससे कॉन्फ़िगरेशन विवरण प्राप्त करने की अनुमति देता है।

$> 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 (corp-000) पर निष्पादित किए जाते हैं, जो 4 तालिकाओं के साथ एक उदाहरण स्कीमा बनाएगा। फिर symadmin कमांड के साथ create-sym-tables चलाने से निर्देशिका तालिकाएँ बनती हैं जहाँ नोड्स के बीच प्रतिकृति के नियम और दिशा संग्रहीत की जाएंगी। अंत में, नमूना डेटा तालिकाओं में लोड किया जाता है।

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 तक दोहराने के लिए स्वचालित रूप से कॉन्फ़िगर किया गया है। अब हम कॉर्प-2 से डेटा प्राप्त करने के लिए इसे तैयार करने के लिए होस्ट vm001 (स्टोर-000) पर PostgreSQL डेटाबेस में एक स्कीमा बनाते हैं।

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 पर उपलब्ध हैं क्योंकि यहीं पर हमने create-sym-tables कमांड चलाया है और प्रतिकृति का प्रबंधन करेंगे। और नोड स्टोर-001 पर डेटाबेस में डेटा के बिना केवल 4 उदाहरण तालिकाएँ होंगी।

सभी। जैसा कि नीचे दिखाया गया है, पर्यावरण दोनों नोड्स पर सिम सर्वर प्रक्रियाओं को चलाने के लिए तैयार है।

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

लॉग प्रविष्टियाँ पृष्ठभूमि लॉग फ़ाइल (symmetric.log) में उस निर्देशिका में लॉग फ़ोल्डर में भेजी जाती हैं जहाँ SymmetricDS स्थापित है, साथ ही मानक आउटपुट पर भी। सिम सर्वर अब नोड स्टोर-001 पर शुरू किया जा सकता है।

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

यदि आप vm2 होस्ट पर सिम सर्वर प्रक्रिया चलाते हैं, तो यह PostgreSQL डेटाबेस में SymmetricDS कैटलॉग टेबल भी बनाएगा। यदि आप दोनों नोड्स पर सिम सर्वर प्रक्रिया चलाते हैं, तो वे कॉर्प-000 से स्टोर-001 तक डेटा को दोहराने के लिए एक-दूसरे के साथ समन्वय करते हैं। यदि कुछ सेकंड के बाद हम दोनों तरफ की सभी 4 तालिकाओं पर क्वेरी करते हैं, तो हम देखेंगे कि प्रतिकृति सफल रही। या आप निम्न आदेश के साथ बूटस्ट्रैप को कॉर्प-001 से नोड स्टोर-000 पर भेज सकते हैं।

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

इस बिंदु पर, नोड कॉर्प-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)

डेटा को स्टोर-001 से कॉर्प-000 तक ले जाने के लिए पुश ऑपरेशन करने के लिए, हम sales_transaction तालिका में एक रिकॉर्ड डालते हैं और सत्यापित करते हैं कि प्रतिकृति सफल है।

परिणाम।

हम MySQL और PostgreSQL डेटाबेस के बीच उदाहरण तालिकाओं की दो-तरफ़ा प्रतिकृति का सफल सेटअप देखते हैं। नई उपयोगकर्ता तालिकाओं के लिए प्रतिकृति सेट करने के लिए, इन चरणों का पालन करें: उदाहरण के लिए हम तालिका t1 बनाते हैं और उसके प्रतिकृति नियमों को निम्नानुसार कॉन्फ़िगर करते हैं। इस तरह हम केवल कॉर्प-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)

फिर कॉन्फ़िगरेशन को स्कीमा परिवर्तन के बारे में सूचित किया जाता है, अर्थात, सिंक-ट्रिगर तर्क के साथ सिमाडमिन कमांड का उपयोग करके एक नई तालिका को जोड़ना, जो तालिका परिभाषाओं को मैप करने के लिए ट्रिगर्स को फिर से बनाता है। नोड स्टोर-001 में स्कीमा परिवर्तन भेजने के लिए सेंड-स्कीमा निष्पादित किया जाता है, और तालिका टी1 की प्रतिकृति कॉन्फ़िगर की जाती है।

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

सिमेट्रिकडीएस के लाभ

तीन-नोड या दो-नोड सर्किट बनाने के लिए मापदंडों के साथ फाइलों के तैयार सेट सहित आसान स्थापना और कॉन्फ़िगरेशन।
सर्वर, लैपटॉप और मोबाइल डिवाइस सहित क्रॉस-प्लेटफ़ॉर्म डेटाबेस और प्लेटफ़ॉर्म स्वतंत्रता।
किसी भी डेटाबेस को WAN या क्लाउड पर स्थानीय रूप से किसी अन्य डेटाबेस में दोहराएँ।
सुविधाजनक प्रतिकृति के लिए कुछ डेटाबेस या कई हजार डेटाबेस के साथ इष्टतम कार्य की संभावना।
जीयूआई और उत्कृष्ट समर्थन के साथ भुगतान किया गया संस्करण।

सिमेट्रिकडीएस के नुकसान

आपको कैटलॉग तालिकाओं को लोड करने के लिए SQL स्टेटमेंट के माध्यम से कमांड लाइन पर प्रतिकृति के नियमों और दिशा को मैन्युअल रूप से परिभाषित करने की आवश्यकता है, जो असुविधाजनक हो सकता है।
प्रतिकृति के लिए कई तालिकाएँ सेट करना कठिन हो सकता है जब तक कि आप SQL कथन बनाने के लिए स्क्रिप्ट का उपयोग नहीं करते हैं जो प्रतिकृति के नियमों और दिशा को परिभाषित करते हैं।
लॉग में बहुत अधिक जानकारी दर्ज की जा रही है, और कभी-कभी आपको लॉग फ़ाइल को व्यवस्थित करने की आवश्यकता होती है ताकि यह बहुत अधिक स्थान न ले।

सिमेट्रिकडीएस के लिए परिणाम

SymmetricDS आपको फ़ाइलों को दोहराने और सिंक्रनाइज़ करने के लिए दो, तीन या यहां तक ​​कि कई हजार नोड्स के बीच दो-तरफ़ा प्रतिकृति सेट करने की अनुमति देता है। यह एक अनूठा उपकरण है जो स्वतंत्र रूप से कई कार्य करता है, जैसे एक नोड पर डाउनटाइम की लंबी अवधि के बाद स्वचालित डेटा रिकवरी, HTTPS के माध्यम से नोड्स के बीच सुरक्षित और कुशल डेटा विनिमय, नियमों के एक सेट के आधार पर स्वचालित संघर्ष प्रबंधन, आदि। SymmetricDS प्रदर्शन करता है किसी भी डेटाबेस के बीच प्रतिकृति, इसलिए, इसका उपयोग विभिन्न प्रकार के परिदृश्यों के लिए किया जा सकता है, जिसमें माइग्रेशन, माइग्रेशन, वितरण, फ़िल्टरिंग और प्लेटफ़ॉर्म पर डेटा का परिवर्तन शामिल है।

उदाहरण अधिकारी पर आधारित है त्वरित मार्गदर्शिका सिमेट्रिकडीएस द्वारा। में उपयोगकर्ता मैनुअल SymmetricDS के साथ प्रतिकृति स्थापित करने में शामिल विभिन्न अवधारणाओं का विस्तार से वर्णन करता है।

स्रोत: www.habr.com

एक टिप्पणी जोड़ें