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

MySQL InnoDB क्लस्टर 8.0 - एक पूर्ण परिनियोजन वॉक-थ्रू:भाग एक

MySQL InnoDB क्लस्टर में 3 घटक होते हैं:

  • MySQL Group Replication (डेटाबेस सर्वर का एक समूह जो गलती सहनशीलता के साथ एक दूसरे को दोहराता है)।
  • MySQL राउटर (स्वस्थ डेटाबेस नोड्स के लिए क्वेरी राउटर)
  • MySQL शेल (सहायक, क्लाइंट, कॉन्फ़िगरेशन टूल)

इस पूर्वाभ्यास के पहले भाग में, हम एक MySQL InnoDB क्लस्टर को परिनियोजित करने जा रहे हैं। ऑनलाइन कई व्यावहारिक ट्यूटोरियल उपलब्ध हैं, लेकिन इस वॉकथ्रू में एक ही स्थान पर क्लस्टर को स्थापित करने और चलाने के लिए सभी आवश्यक चरणों/आदेशों को शामिल किया गया है। हम इस ब्लॉग पोस्ट के दूसरे भाग में MySQL InnoDB क्लस्टर के साथ काम करते समय निगरानी, ​​​​प्रबंधन और स्केलिंग संचालन के साथ-साथ कुछ गोचा को कवर करेंगे।

निम्नलिखित आरेख हमारे परिनियोजन के बाद की वास्तुकला को दर्शाता है:

हम कुल 4 नोड तैनात करने जा रहे हैं; एक तीन-नोड MySQL समूह प्रतिकृति और एक MySQL राउटर नोड अनुप्रयोग सर्वर के भीतर सह-स्थित है। सभी सर्वर उबंटू 18.04 बायोनिक पर चल रहे हैं।

MySQL स्थापित करना

सभी डेटाबेस नोड्स db1, db2 और db3 पर निम्न चरणों का पालन किया जाना चाहिए।

सबसे पहले, हमें कुछ होस्ट मैपिंग करनी होगी। यह महत्वपूर्ण है यदि आप InnoDB क्लस्टर में होस्ट पहचानकर्ता के रूप में होस्टनाम का उपयोग करना चाहते हैं और यह करने का अनुशंसित तरीका है। सभी मेजबानों को निम्नलिखित के रूप में / etc / मेजबानों के रूप में मैप करें:

$ vi /etc/hosts
192.168.10.40   router apps
192.168.10.41   db1 db1.local
192.168.10.42   db2 db2.local
192.168.10.43   db3 db3.local
127.0.0.1       localhost localhost.localdomain

AppArmor को रोकें और अक्षम करें:

$ service apparmor stop
$ service apparmor teardown
$ systemctl disable apparmor

https://repo.mysql.com/apt/ubuntu/pool/mysql-apt-config/m/mysql-apt-config/ पर MySQL उबंटू रिपॉजिटरी वेबसाइट से नवीनतम एपीटी कॉन्फिग रिपॉजिटरी डाउनलोड करें। . इस लेखन के समय, नवीनतम दिनांक 15-अक्टूबर-2019 है जो कि mysql-apt-config_0.8.14-1_all.deb है:

$ wget https://repo.mysql.com/apt/ubuntu/pool/mysql-apt-config/m/mysql-apt-config/mysql-apt-config_0.8.14-1_all.deb

पैकेज स्थापित करें और इसे "mysql-8.0" के लिए कॉन्फ़िगर करें:

$ dpkg -i mysql-apt-config_0.8.14-1_all.deb

GPG कुंजी स्थापित करें:

$ apt-key adv --recv-keys --keyserver ha.pool.sks-keyservers.net 5072E1F5

रेपोलिस्ट को अपडेट करें:

$ apt-get update

पायथन और उसके बाद MySQL सर्वर और MySQL शेल स्थापित करें:

$ apt-get -y install mysql-server mysql-shell

आपको निम्नलिखित विन्यास विजार्ड के साथ प्रस्तुत किया जाएगा:

  1. रूट पासवर्ड सेट करें - MySQL रूट उपयोगकर्ता के लिए एक मजबूत पासवर्ड निर्दिष्ट करें।
  2. प्रमाणीकरण विधि सेट करें - "विरासत प्रमाणीकरण विधि का उपयोग करें (MySQL 5.x संगतता बनाए रखें)" चुनें

इस बिंदु पर MySQL को स्थापित किया जाना चाहिए था। इसके साथ सत्यापित करें:

$ systemctl status mysql

सुनिश्चित करें कि आपको "सक्रिय (चल रही)" स्थिति मिलती है।

InnoDB क्लस्टर के लिए सर्वर तैयार करना

सभी डेटाबेस नोड्स db1, db2 और db3 पर निम्न चरणों का पालन किया जाना चाहिए।

समूह प्रतिकृति का समर्थन करने के लिए MySQL सर्वर को कॉन्फ़िगर करें। ऐसा करने का सबसे आसान और अनुशंसित तरीका नए MySQL शेल का उपयोग करना है:

$ mysqlsh

स्थानीय रूट उपयोगकर्ता के रूप में प्रमाणित करें और नीचे दिए गए उदाहरण में दिखाए गए अनुसार कॉन्फ़िगरेशन विज़ार्ड का पालन करें:

MySQL  JS > dba.configureLocalInstance("[email protected]:3306");

एक बार प्रमाणित होने के बाद, आपको निम्नलिखित जैसे कई प्रश्न मिलने चाहिए:

निम्नलिखित उत्तरों के साथ उन प्रश्नों के उत्तर:

  • 2 चुनें - न्यूनतम आवश्यक अनुदान के साथ InnoDB क्लस्टर के लिए एक नया व्यवस्थापक खाता बनाएं
  • खाता का नाम:[email protected]%
  • पासवर्ड:mys3cret&&
  • पासवर्ड की पुष्टि करें:mys3cret&&
  • क्या आप आवश्यक कॉन्फ़िगरेशन परिवर्तन करना चाहते हैं?:y
  • क्या आप इंस्टेंस को कॉन्फ़िगर करने के बाद फिर से शुरू करना चाहते हैं?:y

उपरोक्त सभी डेटाबेस नोड्स पर दोहराना न भूलें। इस बिंदु पर, MySQL डेमॉन को सभी IP पतों को सुनना चाहिए और समूह प्रतिकृति सक्षम है। अब हम क्लस्टर बनाने के लिए आगे बढ़ सकते हैं।

क्लस्टर बनाना

अब हम एक क्लस्टर बनाने के लिए तैयार हैं। Db1 पर, MySQL शेल से क्लस्टर एडमिन के रूप में कनेक्ट करें:

MySQL|JS> shell.connect('[email protected]:3306');
Creating a session to '[email protected]:3306'
Please provide the password for '[email protected]:3306': ***********
Save password for '[email protected]:3306'? [Y]es/[N]o/Ne[v]er (default No): Y
Fetching schema names for autocompletion... Press ^C to stop.
Your MySQL connection id is 9
Server version: 8.0.18 MySQL Community Server - GPL
No default schema selected; type \use <schema> to set one.
<ClassicSession:[email protected]:3306>

आपको [email protected] के रूप में कनेक्ट होना चाहिए (आप '>' से पहले प्रॉम्प्ट स्ट्रिंग को देखकर बता सकते हैं)। अब हम एक नया क्लस्टर बना सकते हैं:

MySQL|db1:3306 ssl|JS> cluster = dba.createCluster('my_innodb_cluster');

क्लस्टर स्थिति जांचें:

MySQL|db1:3306 ssl|JS> cluster.status()
{
    "clusterName": "my_innodb_cluster",
    "defaultReplicaSet": {
        "name": "default",
        "primary": "db1:3306",
        "ssl": "REQUIRED",
        "status": "OK_NO_TOLERANCE",
        "statusText": "Cluster is NOT tolerant to any failures.",
        "topology": {
            "db1:3306": {
                "address": "db1:3306",
                "mode": "R/W",
                "readReplicas": {},
                "replicationLag": null,
                "role": "HA",
                "status": "ONLINE",
                "version": "8.0.18"
            }
        },
        "topologyMode": "Single-Primary"
    },
    "groupInformationSourceMember": "db1:3306"
}

इस समय, केवल db1 ही क्लस्टर का हिस्सा है। डिफ़ॉल्ट टोपोलॉजी मोड एकल-प्राथमिक है, प्रतिकृति सेट अवधारणा के समान जहां एक समय में केवल एक नोड एक लेखक होता है। क्लस्टर में शेष नोड पाठक होंगे।

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

अब दूसरा नोड जोड़ें, db2 और डिफ़ॉल्ट पुनर्प्राप्ति विधि "क्लोन" स्वीकार करें:

MySQL|db1:3306 ssl|JS> cluster.addInstance('[email protected]:3306');

निम्न स्क्रीनशॉट उपरोक्त आदेश को निष्पादित करने के बाद डीबी 2 की प्रारंभिक प्रगति दिखाता है। सिंकिंग ऑपरेशन MySQL द्वारा स्वचालित रूप से किया जाता है:

क्लस्टर और db2 स्थिति जांचें:

MySQL|db1:3306 ssl|JS> cluster.status()
{
    "clusterName": "my_innodb_cluster",
    "defaultReplicaSet": {
        "name": "default",
        "primary": "db1:3306",
        "ssl": "REQUIRED",
        "status": "OK_NO_TOLERANCE",
        "statusText": "Cluster is NOT tolerant to any failures.",
        "topology": {
            "db1:3306": {
                "address": "db1:3306",
                "mode": "R/W",
                "readReplicas": {},
                "replicationLag": null,
                "role": "HA",
                "status": "ONLINE",
                "version": "8.0.18"
            },
            "db2:3306": {
                "address": "db2:3306",
                "mode": "R/O",
                "readReplicas": {},
                "replicationLag": null,
                "role": "HA",
                "status": "ONLINE",
                "version": "8.0.18"
            }
        },
        "topologyMode": "Single-Primary"
    },
    "groupInformationSourceMember": "db1:3306"
}

इस समय, हमारे पास क्लस्टर में दो नोड हैं, db1 और db2। स्टेटस टेक्स्ट वैल्यू के तहत आगे की व्याख्या के साथ स्थिति अभी भी OK_NO_TOLERANCE दिखा रही है। जैसा कि ऊपर कहा गया है, MySQL समूह प्रतिकृति को दोष सहिष्णुता के लिए क्लस्टर में कम से कम 3 नोड्स की आवश्यकता होती है। इसलिए हमें आगे दिखाए गए अनुसार तीसरा नोड जोड़ना होगा।

अंतिम नोड, db3 जोड़ें और db2 के समान डिफ़ॉल्ट पुनर्प्राप्ति विधि, "क्लोन" को स्वीकार करें:

MySQL|db1:3306 ssl|JS> cluster.addInstance('[email protected]:3306');

निम्न स्क्रीनशॉट उपरोक्त आदेश को निष्पादित करने के बाद डीबी 3 की प्रारंभिक प्रगति दिखाता है। सिंकिंग ऑपरेशन MySQL द्वारा स्वचालित रूप से किया जाता है:

क्लस्टर और db3 स्थिति जांचें:

MySQL|db1:3306 ssl|JS> cluster.status()
{
    "clusterName": "my_innodb_cluster",
    "defaultReplicaSet": {
        "name": "default",
        "primary": "db1:3306",
        "ssl": "REQUIRED",
        "status": "OK",
        "statusText": "Cluster is ONLINE and can tolerate up to ONE failure.",
        "topology": {
            "db1:3306": {
                "address": "db1:3306",
                "mode": "R/W",
                "readReplicas": {},
                "replicationLag": null,
                "role": "HA",
                "status": "ONLINE",
                "version": "8.0.18"
            },
            "db2:3306": {
                "address": "db2:3306",
                "mode": "R/O",
                "readReplicas": {},
                "replicationLag": null,
                "role": "HA",
                "status": "ONLINE",
                "version": "8.0.18"
            },
            "db3:3306": {
                "address": "db3:3306",
                "mode": "R/O",
                "readReplicas": {},
                "replicationLag": null,
                "role": "HA",
                "status": "ONLINE",
                "version": "8.0.18"
            }
        },
        "topologyMode": "Single-Primary"
    },
    "groupInformationSourceMember": "db1:3306"
}

अब क्लस्टर अच्छा दिखता है, जहां स्थिति ठीक है और क्लस्टर एक समय में एक विफलता नोड तक सहन कर सकता है। प्राथमिक नोड db1 है जहां यह "प्राथमिक" दिखाता है:"db1:3306" और "मोड":"R/W", जबकि अन्य नोड "R/O" स्थिति में हैं। यदि आप आरओ नोड्स पर केवल read_only और super_read_only मानों की जांच करते हैं, तो दोनों सही दिखाई दे रहे हैं।

हमारा MySQL समूह प्रतिकृति परिनियोजन अब पूर्ण और समन्वयित है।

राउटर परिनियोजित करना

जिस ऐप सर्वर पर हम अपना एप्लिकेशन चलाने जा रहे हैं, सुनिश्चित करें कि होस्ट मैपिंग सही है:

$ vim /etc/hosts
192.168.10.40   router apps
192.168.10.41   db1 db1.local
192.168.10.42   db2 db2.local
192.168.10.43   db3 db3.local
127.0.0.1       localhost localhost.localdomain

AppArmor को रोकें और अक्षम करें:

$ service apparmor stop
$ service apparmor teardown
$ systemctl disable apparmor

फिर MySQL रिपोजिटरी पैकेज स्थापित करें, जैसा कि हमने डेटाबेस इंस्टॉलेशन करते समय किया है:

$ wget https://repo.mysql.com/apt/ubuntu/pool/mysql-apt-config/m/mysql-apt-config/mysql-apt-config_0.8.14-1_all.deb
$ dpkg -i mysql-apt-config_0.8.14-1_all.deb

GPG कुंजी जोड़ें:

$ apt-key adv --recv-keys --keyserver ha.pool.sks-keyservers.net 5072E1F5

रेपो सूची अपडेट करें:

$ apt-get update

MySQL राउटर और क्लाइंट इंस्टॉल करें:

$ apt-get -y install mysql-router mysql-client

MySQL राउटर अब /usr/bin/mysqlrouter के तहत स्थापित है। MySQL राउटर एक MySQL InnoDB क्लस्टर के साथ राउटर ऑपरेशन को स्वचालित रूप से कॉन्फ़िगर करने के लिए बूटस्ट्रैप फ्लैग प्रदान करता है। हमें क्या करना है, स्ट्रिंग यूआरआई को डेटाबेस नोड में से एक को InnoDB क्लस्टर व्यवस्थापक उपयोगकर्ता (क्लस्टरएडमिन) के रूप में निर्दिष्ट करना है।

कॉन्फ़िगरेशन को सरल बनाने के लिए, हम रूट उपयोगकर्ता के रूप में mysqlrouter प्रक्रिया चलाएंगे:

$ mysqlrouter --bootstrap [email protected]:3306 --directory myrouter --user=root

यहां बताया गया है कि हमें क्लस्टरएडमिन उपयोगकर्ता के लिए पासवर्ड निर्दिष्ट करने के बाद क्या प्राप्त करना चाहिए:

बूटस्ट्रैप कमांड हमें /root/myrouter/mysqlrouter.conf पर राउटर कॉन्फ़िगरेशन फ़ाइल उत्पन्न करने में सहायता करेगा। अब हम वर्तमान निर्देशिका से निम्न कमांड के साथ mysqlrouter डेमॉन शुरू कर सकते हैं:

$ myrouter/start.sh

सत्यापित करें कि प्रत्याशित पोर्ट सही ढंग से सुन रहे हैं:

$ netstat -tulpn | grep mysql
tcp        0 0 0.0.0.0:6446            0.0.0.0:* LISTEN   14726/mysqlrouter
tcp        0 0 0.0.0.0:6447            0.0.0.0:* LISTEN   14726/mysqlrouter
tcp        0 0 0.0.0.0:64470           0.0.0.0:* LISTEN   14726/mysqlrouter
tcp        0 0 0.0.0.0:64460           0.0.0.0:* LISTEN   14726/mysqlrouter

अब हमारा एप्लिकेशन पढ़ने/लिखने के लिए पोर्ट 6446 और केवल-पढ़ने के लिए MySQL कनेक्शन के लिए 6447 का उपयोग कर सकता है।

क्लस्टर से कनेक्ट करना

आइए मास्टर नोड पर एक डेटाबेस उपयोगकर्ता बनाएं। Db1 पर, MySQL शेल के माध्यम से MySQL सर्वर से कनेक्ट करें:

$ mysqlsh [email protected]:3306

जावास्क्रिप्ट मोड से SQL मोड में स्विच करें:

MySQL|localhost:3306 ssl|JS> \sql

Switching to SQL mode... Commands end with ;

एक डेटाबेस बनाएं:

MySQL|localhost:3306 ssl|SQL> CREATE DATABASE sbtest;

एक डेटाबेस उपयोगकर्ता बनाएँ:

MySQL|localhost:3306 ssl|SQL> CREATE USER [email protected]'%' IDENTIFIED BY 'password';

उपयोगकर्ता को डेटाबेस प्रदान करें:

MySQL|localhost:3306 ssl|SQL> GRANT ALL PRIVILEGES ON sbtest.* TO [email protected]'%';

अब हमारा डेटाबेस और यूजर तैयार है। आइए कुछ परीक्षण डेटा उत्पन्न करने के लिए sysbench स्थापित करें। ऐप सर्वर पर, करें:

$ apt -y install sysbench mysql-client

अब हम MySQL राउटर के माध्यम से MySQL सर्वर से कनेक्ट करने के लिए ऐप सर्वर पर परीक्षण कर सकते हैं। राइट कनेक्शन के लिए, राउटर होस्ट के पोर्ट 6446 से कनेक्ट करें:

$ mysql -usbtest -p -h192.168.10.40 -P6446 -e 'select user(), @@hostname, @@read_only, @@super_read_only'
+---------------+------------+-------------+-------------------+
| user()        | @@hostname | @@read_only | @@super_read_only |
+---------------+------------+-------------+-------------------+
| [email protected] | db1        | 0           | 0                 |
+---------------+------------+-------------+-------------------+

रीड ओनली कनेक्शन के लिए, राउटर होस्ट के पोर्ट 6447 से कनेक्ट करें:

$ mysql -usbtest -p -h192.168.10.40 -P6447 -e 'select user(), @@hostname, @@read_only, @@super_read_only'
+---------------+------------+-------------+-------------------+
| user()        | @@hostname | @@read_only | @@super_read_only |
+---------------+------------+-------------+-------------------+
| [email protected] | db3        | 1           | 1                 |
+---------------+------------+-------------+-------------------+

अछा लगता है। अब हम sysbench के साथ कुछ परीक्षण डेटा उत्पन्न कर सकते हैं। ऐप सर्वर पर, ऐप सर्वर के पोर्ट 6446 से कनेक्ट करके प्रति टेबल 100,000 पंक्तियों के साथ 20 टेबल जेनरेट करें:

$ sysbench \
/usr/share/sysbench/oltp_common.lua \
--db-driver=mysql \
--mysql-user=sbtest \
--mysql-db=sbtest \
--mysql-password=password \
--mysql-port=6446 \
--mysql-host=192.168.10.40 \
--tables=20 \
--table-size=100000 \
prepare

पोर्ट 6446 पर 300 सेकंड के लिए एक साधारण रीड-राइट टेस्ट करने के लिए दौड़ें:

$ sysbench \
/usr/share/sysbench/oltp_read_write.lua \
--report-interval=2 \
--threads=8 \
--time=300 \
--db-driver=mysql \
--mysql-host=192.168.10.40 \
--mysql-port=6446 \
--mysql-user=sbtest \
--mysql-db=sbtest \
--mysql-password=password \
--tables=20 \
--table-size=100000 \
run

रीड ओनली वर्कलोड के लिए, हम MySQL कनेक्शन को पोर्ट 6447 पर भेज सकते हैं:

$ sysbench \
/usr/share/sysbench/oltp_read_only.lua \
--report-interval=2 \
--threads=1 \
--time=300 \
--db-driver=mysql \
--mysql-host=192.168.10.40 \
--mysql-port=6447 \
--mysql-user=sbtest \
--mysql-db=sbtest \
--mysql-password=password \
--tables=20 \
--table-size=100000 \
run

निष्कर्ष

बस। हमारा MySQL InnoDB क्लस्टर सेटअप अब इसके सभी घटकों के चलने और परीक्षण के साथ पूरा हो गया है। दूसरे भाग में, हम क्लस्टर के प्रबंधन, निगरानी और स्केलिंग संचालन के साथ-साथ MySQL InnoDB क्लस्टर से निपटने के दौरान कई सामान्य समस्याओं के समाधान पर गौर करने जा रहे हैं। बने रहें!


  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 में सिंगल क्वेरी के साथ मल्टीपल काउंट कैसे प्राप्त करें

  2. चर से mysql फ़ील्ड नाम

  3. MySQL केवल एक पंक्ति देता है

  4. mysql-अजगर स्थापित करें (विंडोज़)

  5. MySQL में D.O.B फ़ील्ड से आयु कैसे प्राप्त करें?