MySQL 8.0 के लिए Percona सर्वर आउट-ऑफ-द-बॉक्स उच्च उपलब्धता के लिए कई क्लस्टरिंग समाधान प्रदान करता है:
- एकल मास्टर:
- एसिंक्रोनस प्रतिकृति
- अर्ध तुल्यकालिक प्रतिकृति
- मल्टी-मास्टर:
- समूह प्रतिकृति
- InnoDB क्लस्टर (MySQL राउटर, MySQL शेल और Percona सर्वर का समूह प्रतिकृति के साथ संयोजन)
सबसे लोकप्रिय, युद्ध-परीक्षण, और अत्यधिक स्केलेबल समाधान, निश्चित रूप से, अतुल्यकालिक प्रतिकृति है। इस ब्लॉग पोस्ट में, हम विशेष रूप से उच्च उपलब्धता के लिए एक Percona सर्वर प्रतिकृति सेटअप को परिनियोजित करने जा रहे हैं। यहां वर्णित निर्देश CentOS 7 पर आधारित हैं।
पेरकोना सर्वर स्थापित करना
उच्च उपलब्धता के लिए, हमें एक साधारण मास्टर-स्लेव प्रतिकृति सेटअप में कम से कम दो नोड्स की आवश्यकता होती है:
- db1 - मास्टर (192.168.0.61)
- db2 - गुलाम (192.168.0.62)
इस खंड में वर्णित चरणों को सभी डेटाबेस नोड्स (db1 और db2) पर निष्पादित किया जाना चाहिए। हम Percona रिपॉजिटरी पैकेज को स्थापित करके शुरू करेंगे:
$ yum -y install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
इस बिंदु पर नवीनतम स्थिर संस्करण MySQL 8.0 के लिए Percona सर्वर है, लेकिन डिफ़ॉल्ट रूप से, रिपॉजिटरी पैकेज केवल संस्करण 5.7 तक कॉन्फ़िगर किया गया है। पेरकोना-रिलीज़ पैकेज में एक स्क्रिप्ट है जो नए उत्पादों के लिए अतिरिक्त रिपॉजिटरी को सक्षम कर सकती है। चलिए उस स्क्रिप्ट को चलाते हैं और 8.0 रिपॉजिटरी को सक्षम करते हैं:
$ percona-release setup ps80
फिर नवीनतम Percona सर्वर और Percona Xtrabackup स्थापित करें:
$ yum -y install percona-server-server percona-xtrabackup-80
इस समय, आपको MySQL 8.0.21 के लिए एक Percona सर्वर स्थापित करना चाहिए। सभी निर्भरता पैकेज साझा-संगत, साझा और क्लाइंट पैकेज की तरह स्थापित किए जाएंगे। फिर हम स्टार्टअप पर MySQL सेवा को सक्षम कर सकते हैं और सेवा शुरू कर सकते हैं:
$ systemctl enable mysql
$ systemctl start mysql
पहले स्टार्टअप के दौरान एक नया रूट पासवर्ड जेनरेट होगा। हमें पहले रूट पासवर्ड जानकारी को MySQL त्रुटि लॉग से प्राप्त करने की आवश्यकता है (RHEL-आधारित सिस्टम में डिफ़ॉल्ट /var/log/mysqld.log है):
$ cat /var/log/mysqld.log | grep temporary
2020-11-06T04:53:07.402040Z 6 [Note] [MY-010454] [Server] A temporary password is generated for [email protected]: o%(_M>t1)R-P
जैसा कि आप देख सकते हैं कि जनरेट किया गया पासवर्ड "o%(_M>t1)R-P" है। अगला, हमें MySQL सर्वर इंस्टॉलेशन को सुरक्षित करने के लिए पोस्ट-इंस्टॉलेशन कार्य करने की आवश्यकता है। निम्न आदेश चलाएँ:
$ mysql_secure_installation
Securing the MySQL server deployment.
Enter password for user root:
The existing password for the user account root has expired. Please set a new password.
New password:
Re-enter new password:
The 'validate_password' component is installed on the server.
The subsequent steps will run with the existing configuration
of the component.
Using existing password for root.
Estimated strength of the password: 100
Change the password for root ? ((Press y|Y for Yes, any other key for No) : y
New password:
Re-enter new password:
Estimated strength of the password: 100
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.
Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.
Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Success.
By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
- Dropping test database...
Success.
- Removing privileges on test database...
Success.
Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.
All done!
उत्पन्न रूट पासवर्ड पहले रूट लॉगिन के तुरंत बाद समाप्त हो जाएगा। उपरोक्त सहायक स्क्रिप्ट हमें एक नया MySQL रूट पासवर्ड कॉन्फ़िगर करने, रूट के लिए दूरस्थ लॉगिन अक्षम करने, परीक्षण डेटाबेस और अनाम उपयोगकर्ताओं को हटाने और विशेषाधिकार तालिका को पुनः लोड करने में मदद करती है।
अब हम Percona Server 8.0 के लिए उच्च उपलब्धता सुविधा को कॉन्फ़िगर करने के लिए तैयार हैं।
अर्द्ध तुल्यकालिक प्रतिकृति
सेमी सिंक्रोनस प्रतिकृति एसिंक्रोनस और पूरी तरह से सिंक्रोनस प्रतिकृति के बीच आती है। स्रोत तब तक प्रतीक्षा करता है जब तक कि कम से कम एक प्रतिकृति प्राप्त नहीं हो जाती और घटनाओं को लॉग नहीं किया जाता है, और फिर लेनदेन करता है। स्रोत सभी प्रतिकृतियों की प्राप्ति की स्वीकृति की प्रतीक्षा नहीं करता है, और इसके लिए प्रतिकृतियों से केवल एक पावती की आवश्यकता होती है, न कि यह कि घटनाओं को पूरी तरह से निष्पादित किया गया है और प्रतिकृति पक्ष पर प्रतिबद्ध है। इसलिए, सेमी सिंक्रोनस प्रतिकृति इस बात की गारंटी देती है कि यदि स्रोत क्रैश हो जाता है, तो उसके द्वारा किए गए सभी लेन-देन कम से कम एक प्रतिकृति को प्रेषित कर दिए गए हैं।
सर्वोत्तम प्रतिकृति अखंडता के लिए, अर्ध-तुल्यकालिक प्रतिकृति चुनें। इसे कॉन्फ़िगर करने के लिए, पहले नोड पर, db1 (192.168.0.61), /etc/my.cnf के अंदर निम्नलिखित पंक्तियाँ जोड़ें (यह [mysqld] अनुभाग के अंतर्गत होनी चाहिए):
# Compatibility
default-authentication-plugin = mysql_native_password
# Replication
server_id = 61 # must be distinct on all nodes in the cluster
binlog_format = ROW
log_bin = binlog
log_slave_updates = 1
gtid_mode = ON
enforce_gtid_consistency = 1
binlog_expire_logs_seconds = 604800 # 7 days
sync_binlog = 1
report_host = 192.168.0.61 # IP address of this host
read_only = OFF # Set ON on slave
super_read_only = OFF # Set ON on slave
# Replication safety
master_info_repository = TABLE
relay_log_info_repository = TABLE
relay_log_recovery = ON
# Semi-sync
plugin_load_add = rpl_semi_sync_master=semisync_master.so
plugin_load_add = rpl_semi_sync_slave=semisync_slave.so
rpl_semi_sync_master_enabled = ON
rpl_semi_sync_master_timeout = 1000
rpl_semi_sync_slave_enabled = ON
दूसरे नोड पर, db2 (192.168.0.62), /etc/my.cnf के अंदर निम्नलिखित पंक्तियां जोड़ें (यह [mysqld] अनुभाग के अंतर्गत होनी चाहिए):
# Compatibility
default-authentication-plugin = mysql_native_password
# Replication
server_id = 62 # must be distinct on all nodes in the cluster
binlog_format = ROW
log_bin = binlog
log_slave_updates = 1
gtid_mode = ON
enforce_gtid_consistency = 1
binlog_expire_logs_seconds = 604800 # 7 days
sync_binlog = 1
report_host = 192.168.0.62 # IP address of this host
read_only = ON # Set ON on slave
super_read_only = ON # Set ON on slave
# Replication safety
master_info_repository = TABLE
relay_log_info_repository = TABLE
relay_log_recovery = ON
# Semi-sync
plugin_load_add = rpl_semi_sync_master=semisync_master.so
plugin_load_add = rpl_semi_sync_slave=semisync_slave.so
rpl_semi_sync_master_enabled = ON
rpl_semi_sync_master_timeout = 1000
rpl_semi_sync_slave_enabled = ON
फिर हम "प्रतिकृति लिंक सेट करना" में वर्णित प्रतिकृति लिंक को और नीचे सेट करने के लिए आगे बढ़ सकते हैं।
अतुल्यकालिक प्रतिकृति
अतुल्यकालिक प्रतिकृति के लिए, बस सभी अर्ध-तुल्यकालिक प्रतिकृति संबंधित विकल्पों को हटा दें और हमें अच्छा होना चाहिए। पहले नोड पर, db1 (192.168.0.61), /etc/my.cnf के अंदर निम्नलिखित पंक्तियाँ जोड़ें (यह [mysqld] अनुभाग के अंतर्गत होनी चाहिए):
# Compatibility
default-authentication-plugin = mysql_native_password
# Replication
server_id = 61 # must be distinct on all nodes in the cluster
binlog_format = ROW
log_bin = binlog
log_slave_updates = 1
gtid_mode = ON
enforce_gtid_consistency = 1
binlog_expire_logs_seconds = 604800 # 7 days
sync_binlog = 1
report_host = 192.168.0.61 # IP address of this host
read_only = OFF # Set ON on slave
super_read_only = OFF # Set ON on slave
# Replication safety
master_info_repository = TABLE
relay_log_info_repository = TABLE
relay_log_recovery = ON
दूसरे नोड पर, db2 (192.168.0.62), /etc/my.cnf के अंदर निम्नलिखित पंक्तियां जोड़ें (यह [mysqld] अनुभाग के अंतर्गत होनी चाहिए):
# Compatibility
default-authentication-plugin = mysql_native_password
# Replication
server_id = 62 # must be distinct on all nodes in the cluster
binlog_format = ROW
log_bin = binlog
log_slave_updates = 1
gtid_mode = ON
enforce_gtid_consistency = 1
binlog_expire_logs_seconds = 604800 # 7 days
sync_binlog = 1
report_host = 192.168.0.62 # IP address of this host
read_only = ON # Set ON on slave
super_read_only = ON # Set ON on slave
# Replication safety
master_info_repository = TABLE
relay_log_info_repository = TABLE
relay_log_recovery = ON
फिर हम नीचे "प्रतिकृति लिंक सेट करना" में वर्णित प्रतिकृति लिंक को सेट करने के लिए आगे बढ़ सकते हैं।
प्रतिकृति लिंक सेट करना
मास्टर (डीबी1) पर, एक गुलाम उपयोगकर्ता बनाएं और उपयोगकर्ता को इस नेटवर्क के तहत सभी मेजबानों से कनेक्ट करने की अनुमति दें (% वाइल्डकार्ड का उपयोग करके):
mysql> CREATE USER 'slave'@'192.168.0.%' IDENTIFIED WITH mysql_native_password BY '[email protected]&9';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave'@'192.168.0.%';
दास (db2) पर, बाइनरी लॉग को रीसेट करें, प्रतिकृति क्रेडेंशियल कॉन्फ़िगर करें और प्रतिकृति प्रक्रिया प्रारंभ करें:
mysql> RESET MASTER;
mysql> CHANGE MASTER TO MASTER_HOST = '192.168.0.61', MASTER_USER = 'slave', MASTER_PASSWORD = '[email protected]&9', MASTER_AUTO_POSITION = 1;
mysql> START SLAVE;
प्रतिकृति स्थिति जांचें:
mysql> SHOW SLAVE STATUS\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.0.61
Master_User: slave
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: binlog.000008
Read_Master_Log_Pos: 912
Relay_Log_File: db2-relay-bin.000007
Relay_Log_Pos: 1081
Relay_Master_Log_File: binlog.000008
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 912
Relay_Log_Space: 1500
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 66
Master_UUID: f60cf793-1feb-11eb-af72-5254008afee6
Master_Info_File: mysql.slave_master_info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set: f60cf793-1feb-11eb-af72-5254008afee6:5-7
Executed_Gtid_Set: f60cf793-1feb-11eb-af72-5254008afee6:1-7
Auto_Position: 1
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
Master_public_key_path:
Get_master_public_key: 0
Network_Namespace:
यह निर्धारित करने के लिए कि क्या प्रतिकृति सही तरीके से कॉन्फ़िगर की गई है और दास मास्टर के साथ पकड़ा गया है, निम्नलिखित महत्वपूर्ण स्थिति पर ध्यान दें:
- Slave_IO_Running:हाँ
- Slave_SQL_Running:हाँ
- Seconds_Behind_Master:0
यदि सेमी-सिंक्रोनस प्रतिकृति सक्षम है, तो आपको मास्टर पर निम्न आउटपुट प्राप्त करना चाहिए:
mysql> SHOW STATUS LIKE '%semi%status';
+-----------------------------+-------+
| Variable_name | Value |
+-----------------------------+-------+
| Rpl_semi_sync_master_status | ON |
| Rpl_semi_sync_slave_status | OFF |
+-----------------------------+-------+
गुलाम पर रहते हुए, स्थिति इस प्रकार है:
mysql> SHOW STATUS LIKE '%semi%status';
+-----------------------------+-------+
| Variable_name | Value |
+-----------------------------+-------+
| Rpl_semi_sync_master_status | OFF |
| Rpl_semi_sync_slave_status | ON |
+-----------------------------+-------+
एसिंक्रोनस प्रतिकृति के लिए, उपरोक्त क्वेरी कुछ भी नहीं लौटाएगी (खाली सेट), क्योंकि सेमी-सिंक्रोनस प्रतिकृति प्लगइन्स सक्षम नहीं हैं। एक प्रतिकृति सेट में, एसिंक्रोनस और सेमी-सिंक्रोनस प्रतिकृति के साथ प्रतिकृति होस्ट करने वाले दासों का मिश्रण होना संभव है।
ClusterControl का उपयोग करके MySQL के लिए Percona सर्वर परिनियोजित करना
ClusterControl के साथ मास्टर-स्लेव Percona सर्वर प्रतिकृति को परिनियोजित करना व्यावहारिक रूप से आसान है, और डिफ़ॉल्ट रूप से, ClusterControl प्रतिकृति परिनियोजन को एक अतुल्यकालिक प्रतिकृति के साथ कॉन्फ़िगर करेगा। बस उन नोड्स को तैयार करें जिन्हें आप तैनात करना चाहते हैं, और इस उदाहरण में, हम मास्टर-स्लेव प्रतिकृति के साथ MySQL 8.0 के लिए तीन-नोड Percona सर्वर को तैनात करने जा रहे हैं। ClusterControl के चित्र में आने के साथ, हमें ClusterControl के लिए एक अतिरिक्त नोड की आवश्यकता होती है। इसलिए, हमारा सेटअप इस तरह दिखता है:
- ClusterControl - cc (192.168.0.19)
- मास्टर - db1 (192.168.0.61)
- दास - db2 (192.168.0.62)
- दास - db3 (192.168.0.63)
ClusterControl सर्वर पर, इंस्टॉलर स्क्रिप्ट का उपयोग करके ClusterControl स्थापित करें। रूट के रूप में, निम्नलिखित चलाएँ:
$ wget http://severalnines.com/downloads/cmon/install-cc
$ chmod 755 install-cc
$ ./install-cc
इंस्टॉलेशन के पूरा होने तक निर्देशों का पालन करें। फिर, एक वेब ब्राउज़र खोलें और http://{ClusterControl_IP_address}/clustercontrol पर जाएं और एक डिफ़ॉल्ट व्यवस्थापक उपयोगकर्ता और पासवर्ड बनाएं। इसके बाद, हमें ClusterControl सर्वर से सभी डेटाबेस नोड्स में पासवर्ड रहित SSH सेट करना होगा। मूल उपयोगकर्ता के रूप में, हमें पहले एक SSH कुंजी जनरेट करने की आवश्यकता है:
$ whoami
root
$ ssh-keygen -t rsa # press Enter on all prompts
फिर, बनाई गई SSH सार्वजनिक कुंजी को सभी डेटाबेस नोड्स में कॉपी करें:
$ ssh-copy-id -i ~/.ssh/id_rsa [email protected] # db1
$ ssh-copy-id -i ~/.ssh/id_rsa [email protected] # db2
$ ssh-copy-id -i ~/.ssh/id_rsa [email protected] # db3
अब हम क्लस्टर परिनियोजन प्रारंभ करने के लिए तैयार हैं। ClusterControl -> Deploy -> MySQL प्रतिकृति पर जाएँ और आवश्यक विवरण नीचे निर्दिष्ट करें:
फिर, अगले चरण पर जाने के लिए "जारी रखें" पर क्लिक करें जहां हम कॉन्फ़िगर करते हैं MySQL स्थापना विनिर्देश:
वेंडर के लिए "पेरकोना" और संस्करण के रूप में 8.0 चुनें। बाकी को डिफ़ॉल्ट के रूप में रखें और MySQL रूट पासवर्ड दर्ज करें। होस्ट और टोपोलॉजी कॉन्फ़िगरेशन पर आगे बढ़ने के लिए "जारी रखें" पर क्लिक करें:
डेटाबेस होस्ट का IP पता या होस्टनाम एक-एक करके निर्दिष्ट करें और बनाएं सुनिश्चित करें कि आपको प्रत्येक प्रविष्टि के बाद हरे रंग के टिक आइकन मिलते हैं। यह इंगित करता है कि ClusterControl प्रदान किए गए SSH उपयोगकर्ता और चरण 1 में परिभाषित कुंजी के साथ पासवर्ड रहित SSH के माध्यम से संबंधित होस्ट तक पहुंचने में सक्षम है। परिनियोजन प्रारंभ करने के लिए "तैनाती" बटन पर क्लिक करें।
ClusterControl फिर एक परिनियोजन कार्य को ट्रिगर करता है जहाँ आप ClusterControl पर जाकर परिनियोजन प्रगति की निगरानी कर सकते हैं -> गतिविधि -> नौकरियां -> क्लस्टर बनाएँ -> पूर्ण कार्य विवरण, जैसा कि निम्नलिखित स्क्रीनशॉट में दिखाया गया है:
एक बार प्रक्रिया पूरी हो जाने के बाद, आप देखेंगे कि क्लस्टर डैशबोर्ड में सूचीबद्ध है :
बस। तैनाती अब पूरी हो गई है।