सभी को नमस्कार!
एक बार जब कोई काम नौकरी पर दिखाई देता है - तो कई वर्चुअल मशीनों पर सेंटोस 7.5 के साथ एक कॉन्फ़िगर किया हुआ टेस्ट इनोबीडी क्लस्टर लगता है, आपको इसका अध्ययन करने और कुछ और नोड्स जोड़ने की जरूरत है। आप जैसे चाहें तोड़ और मॉक कर सकते हैं। लुभावना लगता है।
इससे पहले, मुझे इस तरह के क्लस्टर के साथ कोई अनुभव नहीं था, लेकिन Google की मदद करने के लिए।
कुछ अपवादों के साथ, इसमें और यैंडेक्स के सभी लिंक या तो dev.mysql.com पर थे, या हैबर के इस
लेख पर । ऐसा लगता है जैसे दो नोड्स का एक क्लस्टर उस पर कॉन्फ़िगर किया गया था।
खैर, मैंने लेख पढ़ा, मैं नोड्स को जोड़ने की जटिलता और कई विवरणों की कमी से कुछ हैरान था, लेकिन ओह अच्छी तरह से। एक पाप के साथ, मैंने आधे नए नोड में जोड़ा (कुछ कमांड उपयोगी नहीं थे, कुछ आमतौर पर सब कुछ तोड़ दिया), जिसके बाद मैंने नोड्स को पुनरारंभ करने के साथ प्रयोग करना शुरू कर दिया, आदि।
कई दृष्टिकोणों और तंत्रिका कोशिकाओं की अनगिनत मौतों के बाद, क्लस्टर इसे खड़ा नहीं कर सका। एक नोड किसी भी स्थिति में जोड़ा नहीं जाना चाहता था, दूसरा तब लटका हुआ था जब मैंने डेटाबेस तक किसी भी पहुंच की कोशिश की, तीसरे ने कहा कि सब कुछ क्रम में था। मुझे खरोंच से शूटिंग और शुरुआत करनी थी।
एक नया क्लस्टर बनाते समय, दुर्भाग्य से, बहुत सारी समस्याएं और विसंगतियां पैदा हुईं। शायद बिंदु सॉफ्टवेयर संस्करणों में है, मैंने mysql 5.7 की कोशिश की। शायद वितरण में। नतीजतन, मैंने कागज के एक टुकड़े पर सब कुछ करने के विचारहीन प्रयासों को रोक दिया और टाइप करके इसे स्थापित करना शुरू कर दिया। और गूगल।
सुखद शाम और रात के कुछ जोड़े और क्लस्टर इकट्ठा हुए और यहां तक कि उखड़ने से इनकार कर दिया।
उसी समय, इसके निर्माण का तरीका पिछले प्रयासों से बिल्कुल अलग था और मैं इसे साझा करना चाहता था, क्योंकि इंटरनेट पर, मुझे inndoDB क्लस्टर स्थापित करने के लिए अन्य प्रासंगिक विस्तृत समझने योग्य निर्देश नहीं मिले।
तो, हमारे पास नई स्थापित Centos 7.5 न्यूनतम 1804 और सेलाइनक्स और फायरवल्ड विकलांगों के साथ तीन समान आभासी मशीनें हैं:
1.1.1.1
1.1.1.2
1.1.1.3
काम के लिए, मैंने mysql 5.7 का उपयोग किया, इसलिए हम इसका उपयोग करते हैं। चलो 1.1.1.1 से शुरू करते हैं:
1. mysql- सामुदायिक भंडार स्थापित करें:
rpm -i https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm
8 के लिए भंडार को बंद करें, इसे 5.7 पर चालू करें और जांचें - यदि सब कुछ ठीक है, तो mysql स्थापित करें:
yum install yum-utils yum-config-manager --disable mysql80-community yum-config-manager --enable mysql57-community yum repolist yum install mysql-community-server mysql-shell
2. हम इस फॉर्म में /etc/my.cnf लाते हैं:
[mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock symbolic-links=0 log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid bind-address=0.0.0.0 port=3301 # Replication part server_id=1 gtid_mode=ON enforce_gtid_consistency=ON master_info_repository=TABLE relay_log_info_repository=TABLE binlog_checksum=NONE log_slave_updates=ON log_bin=binlog binlog_format=ROW plugin-load = group_replication.so # Group replication part transaction_write_set_extraction=XXHASH64 loose-group_replication_start_on_boot = OFF loose-group_replication_local_address = 1.1.1.1:33011 loose-group_replication_bootstrap_group = OFF report_port = 3301 report_host = 1.1.1.1
यहाँ 3301 बंदरगाह है जिस पर mysql सुनेंगे, और 33011 बंदरगाह है जिस पर नोड्स एक दूसरे के साथ संवाद करते हैं।
3. mysql लॉन्च करें और प्रारंभिक कॉन्फ़िगरेशन करें:
systemctl start mysqld grep 'password' /var/log/mysqld.log mysql_secure_installation
4. खैर, इसे बनाने के लिए एक क्लस्टर, साथ ही साथ एक अलग उपयोगकर्ता बनाएं। यदि आप पहले से ही नोड्स के आईपी पते को जानते हैं, तो आप तुरंत उन्हें आईपीविटेलिस्ट में सूचीबद्ध कर सकते हैं। हम दिखावा करेंगे कि हम 1.1.1.2 के बारे में अभी तक नहीं जानते हैं। और 1.1.1.3:
mysqlsh > \c 127.0.0.1:3301 > dba.configureLocalInstance("127.0.0.1:3301", {mycnfPath: "/etc/my.cnf", clusterAdmin: "cladmin", clusterAdminPassword: "SomePassword!123"}) > \c cladmin@1.1.1.1:3301 > dba.checkInstanceConfiguration() > cl=dba.createCluster('TestCluster', {ipWhitelist: '1.1.1.1'}) > dba.configureLocalInstance() > cl.status()
हो गया! cl.status को कुछ इस तरह आउटपुट करना चाहिए:
{ "clusterName": "TestCluster", "defaultReplicaSet": { "name": "default", "primary": "1.1.1.1:3301", "ssl": "REQUIRED", "status": "OK_NO_TOLERANCE", "statusText": "Cluster is NOT tolerant to any failures.", "topology": { "1.1.1.1:3301": { "address": "1.1.1.1:3301", "mode": "R/W", "readReplicas": {}, "role": "HA", "status": "ONLINE" } } }, "groupInformationSourceMember": "mysql://cladmin@1.1.1.1:3301" }
क्लस्टर बदलते समय, परिवर्तनों को सहेजने के लिए सभी नोड्स पर dba.configureLocalInstance () कमांड को स्थानीय रूप से निष्पादित करना आवश्यक होगा:
WARNING: On instance '1.1.1.1:3301' membership change cannot be persisted since MySQL version 5.7.23 does not support the SET PERSIST command (MySQL version >= 8.0.11 required). Please use the <Dba>.configureLocalInstance command locally to persist the changes.
क्योंकि हम कुछ और नोड्स जोड़ने जा रहे हैं, हम 1.1.1.1 सर्वर के साथ कनेक्शन बंद नहीं करते हैं, यह हमारे लिए काम आएगा।
अब क्लस्टर में 1.1.1.2 नोड जोड़ने की कोशिश करते हैं। ऐसा करने के लिए, हम इस पर सभी समान आदेशों को 3 चरणों तक कार्यान्वित करते हैं, जो कि server_id, ढीले- group_replication_local_address और report_host को बदलना न भूलें।
4. हम 1.1.1.2 को निष्पादित करते हैं:
mysql -p > set GLOBAL group_replication_allow_local_disjoint_gtids_join=ON;
मैंने mysqlsh के माध्यम से इस वैरिएबल को सेट करने की कोशिश की, sql मोड में स्विच किया, लेकिन वहां की क्रियाओं ने mysql में इसे प्रभावित नहीं किया। अगला:
mysqlsh > \c 127.0.0.1:3301 > dba.configureLocalInstance("127.0.0.1:3301", {mycnfPath: "/etc/my.cnf", clusterAdmin: "cladmin", clusterAdminPassword: "SomePassword!123"}) > \c cladmin@1.1.1.2:3301 > dba.checkInstanceConfiguration()
5. पहले नोड 1.1.1.1 पर लौटें। यदि आपने कनेक्शन बंद कर दिया है, तो आप जल्दी से इस तरह क्लस्टर से जुड़ सकते हैं:
mysqlsh --uri cladmin@1.1.1.1:3301 --cluster > \sql > STOP GROUP_REPLICATION; > SET GLOBAL group_replication_ip_whitelist="1.1.1.1,1.1.1.2"; > START GROUP_REPLICATION; > \js > cluster.addInstance('cladmin@1.1.1.2:3301', {ipWhitelist: '1.1.1.1,1.1.1.2'}) > cluster.status()
किसी कारण से, जब ipWhitelist विकल्प के बिना नोड जोड़ते हैं, तो यह स्वचालित रूप से इसके लिए प्रेषित नहीं होता है, इसलिए हम इसे मैन्युअल रूप से निर्दिष्ट करते हैं।
यदि आपका श्वेतसूची शुरू में सभी नोड्स या सबनेट के लिए कॉन्फ़िगर किया गया है, तो sql मोड में कमांड को छोड़ दिया जा सकता है।
कॉन्फ़िगरेशन को बचाने के लिए सभी नोड्स पर dba.configureLocalInstance () को निष्पादित करना न भूलें।
उनके दो नोड के समूह निकले:
{ "clusterName": "TestCluster", "defaultReplicaSet": { "name": "default", "primary": "1.1.1.1:3301", "ssl": "REQUIRED", "status": "OK_NO_TOLERANCE", "statusText": "Cluster is NOT tolerant to any failures.", "topology": { "1.1.1.1:3301": { "address": "1.1.1.1:3301", "mode": "R/W", "readReplicas": {}, "role": "HA", "status": "ONLINE" }, "1.1.1.2:3301": { "address": "1.1.1.2:3301", "mode": "R/O", "readReplicas": {}, "role": "HA", "status": "ONLINE" } } }, "groupInformationSourceMember": "mysql://cladmin@1.1.1.1:3301" }
ठीक है, दो नोड्स का एक क्लस्टर है, लेकिन "क्लस्टर किसी भी विफलता के लिए सहिष्णु नहीं है।" मोड
तीसरा जोड़ें, एल्गोरिथ्म मूल रूप से एक दूसरे को जोड़ने के समान है।
यदि आपको फिर से श्वेतसूची बदलने की आवश्यकता है, तो आपको r / w नोड पर कमांड निष्पादित करने की आवश्यकता है, क्योंकि r / o नोड पर यह कुछ भी करने के लिए नेतृत्व नहीं करता है। इस मामले में, आर / ओ नोड्स गिर जाएंगे और उन्हें एक नए श्वेतसूची में रिपोर्ट करने के साथ-साथ फिर से जुड़ने की आवश्यकता होगी।
हमारे मामले में:
> cluster.rejoinInstance('cladmin@1.1.1.2:3301', {ipWhitelist: '1.1.1.1,1.1.1.2,1.1.1.3'})
खैर, फिर से, विन्यास को बचाने के लिए सभी नोड्स पर dba.configureLocalInstance () निष्पादित करना न भूलें।
तीन नोड्स का एक क्लस्टर इस तरह दिखता है:
{ "clusterName": "TestCluster", "defaultReplicaSet": { "name": "default", "primary": "1.1.1.1:3301", "ssl": "REQUIRED", "status": "OK", "statusText": "Cluster is ONLINE and can tolerate up to ONE failure.", "topology": { "1.1.1.1:3301": { "address": "1.1.1.1:3301", "mode": "R/W", "readReplicas": {}, "role": "HA", "status": "ONLINE" }, "1.1.1.2:3301": { "address": "1.1.1.2:3301", "mode": "R/O", "readReplicas": {}, "role": "HA", "status": "ONLINE" }, "1.1.1.3:3301": { "address": "1.1.1.3:3301", "mode": "R/O", "readReplicas": {}, "role": "HA", "status": "ONLINE" } } }, "groupInformationSourceMember": "mysql://cladmin@1.1.1.1:3301" }
यदि क्लस्टर एक नोड की स्थिति तक गिर गया है, तो इसे /etc/my.cnf में ढीले- group_replication_bootstrap_group = ON पैरामीटर के साथ शुरू करने की आवश्यकता होगी
शुरू करने के बाद, पैरामीटर को फिर से बंद करने की आवश्यकता होगी, अन्यथा यह नोड हमेशा क्लस्टर से अलग हो जाएगा और अपने आप को बनाए रखेगा।
Mysql- राउटर को स्थापित करना
यहाँ अच्छी तरह से वर्णित
है , इसलिए मुझे डुप्लिकेट करने में कोई समझदारी नहीं है।
बस इतना ही, मुझे उम्मीद है कि किसी को मेरा अनुभव उपयोगी लगेगा।
आपका ध्यान के लिए धन्यवाद।