Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

एक अतुल्यकालिक दास से MySQL गैलेरा क्लस्टर को कैसे पुनर्प्राप्त करें

परिचय

गैलेरा क्लस्टर चलाते समय, एक या एक से अधिक अतुल्यकालिक दासों को एक ही या एक अलग डेटासेंटर में जोड़ना एक आम बात है। यह हमें कम आरटीओ के साथ और कम परिचालन लागत के साथ एक आकस्मिक योजना प्रदान करता है। हमारे क्लस्टर में एक अप्राप्य समस्या के मामले में, हम इसे जल्दी से विफल कर सकते हैं ताकि एप्लिकेशन के पास डेटा तक पहुंच जारी रह सके।

इस प्रकार के सेटअप का उपयोग करते समय, हम पिछले बैकअप से अपने क्लस्टर का पुनर्निर्माण नहीं कर सकते। चूँकि async स्लेव अब सत्य का नया स्रोत है, इसलिए हमें इससे क्लस्टर को फिर से बनाने की आवश्यकता है।

इसका मतलब यह नहीं है कि हमारे पास इसे करने का केवल एक ही तरीका है, शायद इससे भी बेहतर तरीका है! इस पोस्ट के अंत में टिप्पणी अनुभाग में हमें अपने सुझाव देने के लिए स्वतंत्र महसूस करें।

टोपोलॉजी

ClusterControl टोपोलॉजी ऑनलाइन देखें

ऊपर, हम गैलेरा क्लस्टर और एक एसिंक्रोनस प्रतिकृति/दास के साथ एक नमूना टोपोलॉजी देख सकते हैं।

डेटाबेस आरेख 1

आगे हम देखेंगे कि हम अपने क्लस्टर को फिर से कैसे बना सकते हैं, गुलाम से शुरू करके, कुछ इस तरह खोजने के मामले में:

डेटाबेस आरेख 2 ClusterControl टोपोलॉजी ऑफलाइन देखें

यदि हम पिछली छवि को देखते हैं, तो हम देख सकते हैं कि हमारे 3 गैलेरा नोड्स नीचे हैं। हमारा दास गैलेरा मास्टर से कनेक्ट करने में सक्षम नहीं है, लेकिन यह "अप एंड रनिंग" स्थिति में है।

गुलाम को बढ़ावा देना

जैसा कि हमारा दास ठीक से काम कर रहा है, हम इसे मास्टर करने के लिए बढ़ावा दे सकते हैं और हमारे अनुप्रयोगों को इसके लिए इंगित कर सकते हैं। इसके लिए, हमें अपने स्लेव में रीड-ओनली पैरामीटर को अक्षम करना होगा और स्लेव कॉन्फ़िगरेशन को रीसेट करना होगा।

हमारे गुलाम में (mysql1):

mysql> SET GLOBAL read_only=0;
Query OK, 0 rows affected (0.00 sec)
mysql> STOP SLAVE;
Query OK, 0 rows affected (0.00 sec)
mysql> RESET SLAVE;
Query OK, 0 rows affected (0.18 sec)

नया क्लस्टर बनाएं

अगला, हमारे विफल क्लस्टर की वसूली शुरू करने के लिए, हम एक नया गैलेरा क्लस्टर बनाएंगे। यह ClusterControl ClusterControl के माध्यम से आसानी से किया जा सकता है, कृपया इस ब्लॉग में और नीचे स्क्रॉल करके देखें कि कैसे।

एक बार जब हम अपना नया गैलेरा क्लस्टर तैनात कर लेते हैं, तो हमारे पास निम्न जैसा कुछ होगा:

डेटाबेस आरेख 3

प्रतिकृति

हमें यह सुनिश्चित करना चाहिए कि हमारे पास प्रतिकृति पैरामीटर कॉन्फ़िगर किए गए हैं।

गैलेरा नोड्स के लिए (galera1, galera2, galera3):

server_id=<ID>         # Different value in each node
binlog_format=ROW
log_bin = /var/lib/mysql-binlog/binlog
log_slave_updates = ON
gtid_mode = ON
enforce_gtid_consistency = true
relay_log = relay-bin
expire_logs_days = 7

मास्टर नोड (mysql1) के लिए:

server_id=<ID>         # Different value in each node
binlog_format=ROW
log_bin=binlog
log_slave_updates=1
gtid_mode=ON
enforce_gtid_consistency=1
relay_log=relay-bin
expire_logs_days=7
read_only=ON
sync_binlog=1
report_host=<HOSTNAME or IP>    # Local server

हमारे नए दास (galera1) के लिए हमारे नए मास्टर (mysql1) से जुड़ने के लिए, हमें अपने मास्टर में प्रतिकृति अनुमतियों के साथ एक उपयोगकर्ता बनाना होगा।

हमारे नए मास्टर (mysql1) में:

mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY 'slave_password';

नोट:हम "%" को गैलेरा क्लस्टर नोड के आईपी के साथ बदल सकते हैं जो हमारा गुलाम होगा, हमारे उदाहरण में, galera1।

बैकअप

यदि हमारे पास यह नहीं है, तो हमें अपने मास्टर (mysql1) का एक सुसंगत बैकअप बनाना होगा और इसे अपने नए गैलेरा क्लस्टर में लोड करना होगा। इसके लिए हम XtraBackup टूल या mysqldump का उपयोग कर सकते हैं। आइए दोनों विकल्पों को देखें।

हमारे उदाहरण में हम परीक्षण के लिए उपलब्ध शकीला डेटाबेस का उपयोग करते हैं।

अतिरिक्त बैकअप टूल

हम नए मास्टर (mysql1) में बैकअप जेनरेट करते हैं। हमारे मामले में हम इसे स्थानीय निर्देशिका/रूट/बैकअप में भेजते हैं:

$ innobackupex /root/backup/

हमें संदेश प्राप्त करना चाहिए:

180705 22:08:14 completed OK!

हम बैकअप को कंप्रेस करते हैं और उस नोड को भेजते हैं जो हमारा गुलाम होगा (galera1):

$ cd /root/backup
$ tar zcvf 2018-07-05_22-08-07.tar.gz 2018-07-05_22-08-07
$ scp /root/backup/2018-07-05_22-08-07.tar.gz galera1:/root/backup/

galera1 में, बैकअप निकालें:

$ tar zxvf /root/backup/2018-07-05_22-08-07.tar.gz

हम क्लस्टर को रोकते हैं (यदि यह शुरू हो गया है)। इसके लिए हम 3 नोड्स की mysql सेवाओं को रोकते हैं:

$ service mysql stop

Galera1 में, हम mysql की डेटा निर्देशिका का नाम बदलते हैं और बैकअप लोड करते हैं:

$ mv /var/lib/mysql /var/lib/mysql.bak
$ innobackupex --copy-back /root/backup/2018-07-05_22-08-07

हमें संदेश प्राप्त करना चाहिए:

180705 23:00:01 completed OK!

हम डेटा निर्देशिका पर सही अनुमतियाँ प्रदान करते हैं:

$ chown -R mysql.mysql /var/lib/mysql

फिर हमें क्लस्टर को इनिशियलाइज़ करना होगा।

एक बार पहला नोड शुरू होने के बाद, हमें शेष नोड्स के लिए MySQL सेवा शुरू करनी चाहिए, grastate.dat फ़ाइल की किसी भी पिछली प्रतिलिपि को हटा देना चाहिए, और फिर सत्यापित करें कि हमारा डेटा अपडेट किया गया है।

$ rm /var/lib/mysql/grastate.dat
$ service mysql start

नोट:सत्यापित करें कि XtraBackup द्वारा उपयोग किया गया उपयोगकर्ता हमारे आरंभिक नोड में बनाया गया है, और प्रत्येक नोड में समान है।

mysqldump

सामान्य तौर पर, हम इसे mysqldump के साथ करने की अनुशंसा नहीं करते हैं, क्योंकि यह बड़ी मात्रा में डेटा के साथ काफी धीमा हो सकता है। लेकिन यह कार्य करने का एक विकल्प है।

हम नए मास्टर (mysql1) में बैकअप जेनरेट करते हैं:

$ mysqldump -uroot -p --single-transaction --skip-add-locks --triggers --routines --events --databases sakila > /root/backup/sakila_dump.sql

हम इसे कंप्रेस करते हैं और इसे अपने स्लेव नोड (galera1) को भेजते हैं:

$ gzip /root/backup/sakila_dump.sql
$ scp /root/backup/sakila_dump.sql.gz galera1:/root/backup/

हम डंप को galera1 में लोड करते हैं।

$ gunzip /root/backup/sakila_dump.sql.gz
$ mysql -p < /root/backup/sakila_dump.sql

जब galera1 में डंप लोड किया जाता है, तो हमें grastate.dat फ़ाइल को हटाते हुए, शेष नोड्स पर MySQL सेवा को पुनरारंभ करना होगा, और सत्यापित करना होगा कि हमारे पास हमारा डेटा अपडेट है।

$ rm /var/lib/mysql/grastate.dat
$ service mysql start

प्रतिकृति स्लेव प्रारंभ करें

चाहे हम जो भी विकल्प चुनें, XtraBackup या mysqldump, अगर सब कुछ ठीक रहा, तो इस चरण में हम पहले से ही नोड में प्रतिकृति चालू कर सकते हैं जो हमारा दास (galera1) होगा।

$ mysql> CHANGE MASTER TO MASTER_HOST = 'mysql1', MASTER_PORT = 3306, MASTER_USER = 'slave_user', MASTER_PASSWORD = 'slave_password', MASTER_AUTO_POSITION = 1;
$ mysql> START SLAVE;

हम सत्यापित करते हैं कि दास काम कर रहा है:

mysql> SHOW SLAVE STATUS\G
       Slave_IO_Running: Yes
       Slave_SQL_Running: Yes

इस बिंदु पर, हमारे पास निम्न जैसा कुछ है:

डेटाबेस आरेख 4

NewGalera1 के अप टू डेट होने के बाद, हम एप्लिकेशन को अपने नए गैलेरा क्लस्टर में फिर से इंगित कर सकते हैं, और एसिंक्रोनस प्रतिकृति को फिर से कॉन्फ़िगर कर सकते हैं।

ClusterControl

जैसा कि हमने पहले उल्लेख किया है, क्लस्टरकंट्रोल के साथ हम ऊपर बताए गए कई कार्यों को कुछ साधारण क्लिकों में कर सकते हैं। इसमें नोड्स और क्लस्टर दोनों के लिए स्वचालित पुनर्प्राप्ति विकल्प भी हैं। आइए देखते हैं कुछ ऐसे कार्य जिनमें यह सहायता कर सकता है।

ClusterControl परिनियोजन 1

परिनियोजन करने के लिए, बस "डेटाबेस क्लस्टर परिनियोजित करें" विकल्प चुनें और दिखाई देने वाले निर्देशों का पालन करें।

ClusterControl परिनियोजन 2

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

ClusterControl परिनियोजन 3

SSH एक्सेस जानकारी सेट करने के बाद, हमें अपने क्लस्टर में नोड्स को परिभाषित करना चाहिए। हम यह भी निर्दिष्ट कर सकते हैं कि किस भंडार का उपयोग करना है। हमें अपने सर्वर को उस क्लस्टर में जोड़ना होगा जिसे हम बनाने जा रहे हैं।

हम ClusterControl गतिविधि मॉनिटर से अपने नए क्लस्टर के निर्माण की स्थिति की निगरानी कर सकते हैं।

साथ ही, हम उन्हीं चरणों का पालन करते हुए अपने वर्तमान क्लस्टर या डेटाबेस का आयात कर सकते हैं। इस मामले में, ClusterControl डेटाबेस सॉफ़्टवेयर स्थापित नहीं करेगा, क्योंकि पहले से ही एक डेटाबेस चल रहा है।

ClusterControl Add Replication Salve

एक प्रतिकृति दास जोड़ने के लिए, आपको क्लस्टर क्रियाओं पर क्लिक करना होगा, प्रतिकृति दास जोड़ें का चयन करना होगा, और नए सर्वर की एसएसएच एक्सेस जानकारी जोड़ना होगा। इस क्रिया के लिए आवश्यक कॉन्फ़िगरेशन करने के लिए ClusterControl सर्वर से कनेक्ट होगा।

ClusterControl बाइनरी लॉगिंग सक्षम करें

एक या एक से अधिक गैलेरा नोड्स को मास्टर सर्वर में बदलने के लिए (जैसा कि बिनलॉग बनाने के अर्थ में), आप नोड क्रियाओं पर जा सकते हैं और बाइनरी लॉगिंग सक्षम करें का चयन कर सकते हैं।

ClusterControl बैकअप

बैकअप को XtraBackup (पूर्ण या वृद्धिशील) और mysqldump के साथ कॉन्फ़िगर किया जा सकता है, और आपके पास अन्य विकल्प हैं जैसे क्लाउड पर बैकअप अपलोड करना, एन्क्रिप्शन, कम्प्रेशन, शेड्यूल और बहुत कुछ।

ClusterControl पुनर्स्थापित करें

बैकअप को पुनर्स्थापित करने के लिए, बैकअप टैब पर जाएं और पुनर्स्थापना विकल्प चुनें, फिर आप चुनें कि आप किस सर्वर को पुनर्स्थापित करना चाहते हैं।

ClusterControl बदलें प्रतिकृति मास्टर

यदि आपके पास एक दास है और आप मास्टर को बदलना चाहते हैं, या प्रतिकृति का पुनर्निर्माण करना चाहते हैं, तो आप नोड क्रियाओं पर जा सकते हैं और विकल्प का चयन कर सकते हैं।

निष्कर्ष

जैसा कि हम देख सकते हैं, हमारे पास अपने लक्ष्य को प्राप्त करने के कई तरीके हैं, कुछ अधिक जटिल, अन्य अधिक उपयोगकर्ता के अनुकूल, लेकिन उनमें से किसी के साथ आप एक अतुल्यकालिक दास से एक क्लस्टर को फिर से बना सकते हैं। Xtrabackup बड़े डेटा वॉल्यूम के लिए तेजी से पुनर्स्थापित करेगा। ऑपरेटर त्रुटि से बचाव के लिए (जैसे, एक गलत DROP TABLE), आप विलंबित स्लेव का भी उपयोग कर सकते हैं ताकि आपके पास कथन को प्रचारित करने से रोकने के लिए समय हो।

हमें उम्मीद है कि यह जानकारी उपयोगी है, और आपको इसे उत्पादन में कभी भी उपयोग नहीं करना पड़ेगा;)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL और MariaDB ProxySQL के साथ संतुलन लोड करें

  2. मैं PHP 7 में MySQLi एक्सटेंशन को कैसे सक्षम कर सकता हूं?

  3. लगातार x दिनों के लिए जाँच करें - डेटाबेस में दिए गए टाइमस्टैम्प

  4. डेटाबेस, टेबल, कॉलम के संयोजन को कैसे बदलें?

  5. MySQL रूट पासवर्ड बदलें और रीसेट करें