प्रतिकृति SQL डेटाबेस में स्रोत डेटाबेस से डेटा को दूसरे (या एकाधिक वाले) में कॉपी करने की प्रक्रिया है और इसके विपरीत। एक डेटाबेस सर्वर से डेटा लगातार एक या अधिक सर्वरों पर कॉपी किया जाता है। आप प्रतिकृति सर्वर के पूल में अनुरोधों को वितरित और संतुलित करने के लिए प्रतिकृति का उपयोग कर सकते हैं, विफलता प्रदान कर सकते हैं और मारियाडीबी डेटाबेस की उच्च उपलब्धता प्रदान कर सकते हैं। मारियाडीबी (और MySQL) दो प्रकार के डेटाबेस प्रतिकृति का उपयोग करने की अनुमति देता है:मास्टर-मास्टर और मास्टर-दास . इस लेख में हम विचार करेंगे कि Linux CentOS 7 पर दोनों प्रकार के MariaDB प्रतिकृति को कैसे कॉन्फ़िगर किया जाए।
मारियाडीबी स्थापित करना
इससे पहले हमने CentOS 7 पर मारियाडीबी इंस्टॉलेशन की प्रक्रिया का वर्णन करते हुए एक लेख प्रकाशित किया था। आप इसे लिंक के बाद पढ़ सकते हैं:https://woshub.com/mariadb-install-configure-tunning-centos। इसलिए हम स्वयं MariaDB स्थापना पर ध्यान केंद्रित नहीं करेंगे, बल्कि प्रतिकृति को कॉन्फ़िगर करने के तरीके पर आगे बढ़ेंगे।
MariaDB पर सरल मास्टर-मास्टर प्रतिकृति को कॉन्फ़िगर करना
मास्टर-मास्टर प्रतिकृति योजना में, किसी भी MariaDB/MySQL डेटाबेस सर्वर का उपयोग डेटा लिखने या पढ़ने दोनों के लिए किया जा सकता है। प्रतिकृति एक विशेष बिनलॉग फ़ाइल पर आधारित है, एक मास्टर सर्वर डेटाबेस के साथ सभी कार्यों को सहेजता है। एक स्लेव सर्वर मास्टर से जुड़ता है और अपने डेटाबेस में कमांड लागू करता है।
<एच3>1. मारियाडीबी:पहले मास्टर सर्वर का विन्यास (मास्टर-1)निम्न पंक्तियों को my.cnf . में जोड़ें अपने पहले MariaDB सर्वर पर फ़ाइल करें:
#replicationserver_id =1report_host =Masterlog_bin =/var/lib/mysql/mariadb-binlog_bin_index =/var/lib/mysql/mariadb-bin.indexrelay_log =/var/lib/mysql/relay-binrelay_log_index =/var/lib/ mysql/relay-bin.index
service mariadb restart
प्रतिकृति कॉन्फ़िगर करने के लिए एक उपयोगकर्ता बनाएं:
mysql
create user 'test_master'@'%' identified by 'test_master';
grant replication slave on *.* to 'test_master'@'%';
स्लेव जोड़ने के लिए, हमें मास्टर-1 सर्वर से bin_log डेटा प्राप्त करने की आवश्यकता है:
MariaDB [(none)]> show master status;
<एच3>2. मारियाडीबी:दूसरे मास्टर सर्वर का विन्यास (मास्टर-2)
दूसरे MariaDB सर्वर से कनेक्ट करें, my.cnf फ़ाइल खोलें और इसमें निम्न कॉन्फ़िगरेशन जोड़ें:
#replicationserver_id =2report_host =Master2log_bin =/var/lib/mysql/mariadb-binlog_bin_index =/var/lib/mysql/mariadb-bin.indexrelay_log =/var/lib/mysql/relay-binrelay_log_index =/var/lib/ mysql/relay-bin.index
दूसरे सर्वर पर भी एक नया उपयोगकर्ता बनाएँ:
create user 'test_master2'@'%' identified by 'test_master2';
grant replication slave on *.* to 'test_master2'@'%';
Master-2 पर bin_log प्राप्त करें:
MariaDB [(none)]> show master status;
आइए हमारे सॉफ़्टवेयर प्रतिकृति क्लस्टर में मारियाडीबी सर्वर के बीच कनेक्शन को कॉन्फ़िगर करें:
गुलाम बंद करो:
STOP SLAVE;
दूसरे सर्वर में मास्टर-1 जोड़ें:
CHANGE MASTER TO MASTER_HOST='IP_master1', MASTER_USER='test_master', MASTER_PASSWORD='test_master', MASTER_LOG_FILE='mariadb-bin.000002', MASTER_LOG_POS=664;
में बदलें
प्रतिकृति प्रारंभ करें:
START SLAVE;
मास्टर-1 से कनेक्ट करें और उन्हीं चरणों का पालन करें, लेकिन इसके बजाय दूसरे सर्वर के बारे में जानकारी निर्दिष्ट करें:
STOP SLAVE;
CHANGE MASTER TO MASTER_HOST='10.2.10.36', MASTER_USER='test_master2', MASTER_PASSWORD='test_master2', MASTER_LOG_FILE='mariadb-bin.000001', MASTER_LOG_POS=667;
START SLAVE;
दूसरे सर्वर की स्थिति जांचें:
show slave status \G
जैसा कि आप स्क्रीनशॉट में देख सकते हैं, दो सर्वरों के बीच संबंध है, और कोई त्रुटि नहीं होती है।
<एच3>3. मारियाडीबी सर्वर के बीच प्रतिकृति की जांच कैसे करें?फिर यह सुनिश्चित करने के लिए कि दो मारियाडीबी सर्वरों के बीच प्रतिकृति मास्टर+मास्टर में काम करती है, हम मास्टर-1 पर एक नया डेटाबेस बनाएंगे और उसमें एक टेबल बनाएंगे।
MariaDB [(none)]> create database master1;
MariaDB [(none)]> use master1;
MariaDB [master1]> CREATE TABLE hello (
-> AuthorID INT NOT NULL AUTO_INCREMENT,
-> AuthorName VARCHAR(100),
-> PRIMARY KEY(AuthorID)
-> );
सुनिश्चित करें कि यह डेटाबेस स्वचालित रूप से दूसरे मास्टर पर दोहराया गया है और इसमें समान तालिका है:
MariaDB [(none)]> show databases;
MariaDB [(none)]> use master1;
MariaDB [master1]> show tables;
डेटाबेस दूसरे मास्टर पर भी बनाया गया है। पूरे चक्र की जांच करने के लिए, दूसरे मास्टर सर्वर पर मास्टर1 डेटाबेस में एक तालिका बनाएं और जांचें कि क्या यह पहले सर्वर पर दिखाई देता है।
MariaDB [master1]> CREATE TABLE hello_master1 (
-> AuthorID INT NOT NULL AUTO_INCREMENT,
-> AuthorName VARCHAR(100),
-> PRIMARY KEY(AuthorID)
-> );
hello_master1 तालिका को पहले सर्वर पर दोहराया गया है:
MariaDB [master1]> show tables;
जैसा कि आप देख सकते हैं, मास्टर-1 पर नई तालिका दिखाई दी है। प्रतिकृति काम करती है।
MariaDB में मास्टर-स्लेव प्रतिकृति कैसे सेट करें?
मास्टर-स्लेव मारियाडीबी प्रतिकृति मोड में, एक सर्वर दास के रूप में कार्य करता है, और मास्टर सर्वर से डेटा लगातार इसे लिखा जाता है। स्लेव सर्वर पर आपके द्वारा किए गए सभी परिवर्तन मास्टर सर्वर में स्थानांतरित नहीं होंगे। यह डेटाबेस प्रतिकृति प्रकार अधिक लचीला है और अधिक बार उपयोग किया जाता है। इस कॉन्फ़िगरेशन में, आपके पास हमेशा अप-टू-डेट डेटाबेस वाला बैकअप सर्वर होता है, और यदि कोई स्लेव सर्वर विफल हो जाता है, तो मास्टर कोई डेटा नहीं खोएगा। आप अपने प्रोजेक्ट के लिए डेटाबेस लोड भी वितरित कर सकते हैं ताकि ऐप्स आपके स्लेव सर्वर से डेटा पढ़ सकें और डेटा केवल मास्टर सर्वर को लिख सकें। इस प्रकार, आप डेटाबेस को जितनी जल्दी हो सके प्रतिक्रिया देते हैं।
मारियाडीबी डेटाबेस के मास्टर+स्लेव प्रतिकृति को कॉन्फ़िगर करते समय, मास्टर सर्वर (मास्टर1) को ऊपर वर्णित अनुसार कॉन्फ़िगर किया गया है।
दास सर्वर पर जाएं। दास my.cnf फ़ाइल में निम्न कॉन्फ़िगरेशन जोड़ें:
#replicationserver_id =2report_host =slave2log_bin =/var/lib/mysql/mariadb-binlog_bin_index =/var/lib/mysql/mariadb-bin.indexrelay_log =/var/lib/mysql/relay-binrelay_log_index =/var/lib/ mysql/relay-bin.index
मारियाडीबी सेवा को पुनरारंभ करें। पहले सर्वर से bin_log जानकारी प्राप्त करें:
MariaDB [(none)]> show master status;
इन आदेशों को दास सर्वर पर मारियाडब कंसोल में चलाएँ:
MariaDB [(none)]> STOP SLAVE;
MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='IP_master', MASTER_USER='test_master', MASTER_PASSWORD='test_master', MASTER_LOG_FILE='mariadb-bin.000001', MASTER_LOG_POS=664;
में बदलें; MariaDB [(none)]> START SLAVE;
SET GLOBAL read_only = ON;
आपको डेटाबेस मेमोरी डंप भी बनाना होगा और अपने दास सर्वर पर मारियाडीबी को डेटा के प्रारंभिक अपलोड के लिए इसका इस्तेमाल करना होगा।
गुलाम की स्थिति की जांच करने के लिए:SHOW SLAVE STATUS\G;
मास्टर पर डेटाबेस बनाने के लिए:
MariaDB [(none)]> create database master_hello;
सुनिश्चित करें कि डेटाबेस स्लेव सर्वर पर भी बनाया गया है:
MariaDB [(none)]> show databases;
स्लेव सर्वर पर एक डेटाबेस बनाएं और जांचें कि क्या डेटाबेस मास्टर को दोहराया गया है।
जैसा कि आप देख सकते हैं, हमने डेटाबेस बनाया है और यह स्लेव पर मौजूद है। आइए देखें कि क्या यह मास्टर पर दिखाई दिया है। हुआ नहीं है। डेटा को दास से मास्टर तक दोहराया नहीं जाता है।
इसका मतलब है कि मारियाडीबी प्रतिकृति केवल एक दिशा में काम करती है। आइए एक और जाँच करें और master_hello . को हटा दें स्लेव सर्वर से डेटाबेस:
जांचें कि क्या यह मास्टर सर्वर से हटा दिया गया है:
जैसा कि आप देख सकते हैं, यह ठीक है और डेटाबेस मौजूद है।
पीएस:जब आप मारियाडब प्रतिकृति को कॉन्फ़िगर करते हैं, तो आप कुछ नुकसानों में आ सकते हैं, जिनमें से सबसे अधिक बार फ़ायरवॉल के साथ। डिफ़ॉल्ट रूप से, CentOS में फ़ायरवॉल स्थापित होता है, जो MariaDB प्रतिकृति पोर्ट (TCP 3396) को अवरुद्ध करता है। आप या तो iptables का उपयोग करके पोर्ट खोल सकते हैं, या अपने फ़ायरवॉल को अक्षम कर सकते हैं (सबसे अच्छा विकल्प नहीं)।
जिस आईपी पते पर डेटाबेस कनेक्शन की प्रतीक्षा कर रहा है, वह my.cnf में बाइंड-एड्रेस पैरामीटर में निर्दिष्ट है। स्थानीय और बाहरी कनेक्शन की अनुमति देने के लिए, आपको इस लाइन पर टिप्पणी करनी होगी और iptables नियम जोड़ना होगा जो मास्टर से कनेक्शन की अनुमति देता है। /गुलाम आईपी पता 3306 पोर्ट करने के लिए।
iptables -I INPUT -p tcp -s ip_address_slave_server --dport 3306 -j ACCEPT
iptables -I INPUT -p tcp --dport 3306 -j DROP
प्रारंभिक सेटअप के दौरान, मैं इस मुद्दे पर आया था, लेकिन यह आसानी से पता चला है। अगर आप स्लेव स्टेटस चलाते हैं तो SHOW SLAVE STATUS\G
. चेक करें , आपको यह त्रुटि दिखाई देगी:
आप #replication
. में कुछ पैरामीटर जोड़ सकते हैं my.cnf फ़ाइल में ब्लॉक करें। नीचे मैं कुछ उदाहरण और उपयोगी मापदंडों का संक्षिप्त विवरण दूंगा। मैं अन्य कार्यों के कुछ उदाहरण दूंगा जो आपके मारियाडब डेटाबेस प्रतिकृति को कॉन्फ़िगर करते समय सहायक हो सकते हैं।
server_id = 1
- सर्वर आईडी निर्दिष्ट करें, आमतौर पर हम 1 से शुरू करते हैं, लेकिन आप किसी भी संख्या का उपयोग कर सकते हैं जो प्रतिकृति के लिए उपयोग किए गए अन्य सर्वरों से मेल नहीं खाती।
report_host = master
— आमतौर पर आप सर्वर का होस्ट नाम निर्दिष्ट करते हैं, लेकिन आप इसके बजाय उसका आईपी पता दर्ज कर सकते हैं।
log_bin = /var/lib/mysql/mariadb-bin
— अद्यतन लॉग (log_bin) का पथ है।
log_bin_index = /var/lib/mysql/mariadb-bin.index
— आपको यह पता लगाने की अनुमति देता है कि वर्तमान में कौन सा लॉग सक्रिय है और कौन से लॉग पहले उपयोग किए गए थे।
relay_log = /var/lib/mysql/relay-bin
relay_log_index = /var/lib/mysql/relay-bin.index
— प्रतिकृति लॉग हैं।
यदि आप किसी विशिष्ट डेटाबेस या चयनित डेटाबेस की प्रतिकृति को कॉन्फ़िगर करना चाहते हैं, तो निम्न मापदंडों का उपयोग करें:
replicate-do-db = dbname
— यदि आपको एकाधिक डेटाबेस की आवश्यकता है, तो उनके नाम अल्पविराम से अलग करके निर्दिष्ट करें।
कुछ डेटाबेस को प्रतिकृति से बाहर करने के लिए (हमेशा की तरह, सेवा डेटाबेस को प्रतिकृति से बाहर रखा गया है:info_schema, mysql और performance_schema):
binlog-ignore-db = dbname
अपने bin_log के लिए लॉग इतिहास समय निर्धारित करने के लिए:
expire_logs_days = 10
— जहां 10 दिनों की संख्या है जहां लॉग संग्रहीत किए जाएंगे।
साथ ही, यदि आपके मास्टर सर्वर का डेटा किसी भिन्न नाम वाले डेटाबेस में लिखा गया है, तो आप इसे कॉन्फ़िग फ़ाइल में सेट कर सकते हैं:
replicate-rewrite-db=dbmastername->dbslavename
प्रतिकृति विन्यास पूरा हो गया है। मुझे लगता है कि इस लेख का उपयोग करके आप बिना किसी समस्या के मास्टर + मास्टर और मास्टर + स्लेव मोड में मारियाडीबी प्रतिकृति को कॉन्फ़िगर करने में सक्षम होंगे।