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

क्लस्टर कंट्रोल के साथ गैलेरा क्लस्टर पर रिलीज टेस्ट को तेज करने के लिए ऑटोमेशन का उपयोग करना

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

जाहिर है, आप नहीं चाहते कि यह प्रक्रिया मैनुअल हो - यह आपकी कंपनी की CI/CD प्रक्रियाओं का एक हिस्सा होना चाहिए। आपके पास मौजूद सटीक अनुप्रयोग, परिवेश और प्रक्रियाओं के आधार पर, आप तदर्थ बनाए गए प्रतिकृतियों या प्रतिकृतियों का उपयोग कर सकते हैं जो हमेशा डेटाबेस वातावरण का एक हिस्सा होते हैं।

गैलेरा क्लस्टर जिस तरह से काम करता है वह यह है कि यह एक विशिष्ट तरीके से स्कीमा परिवर्तनों को संभालता है। क्लस्टर में एकल नोड पर एक स्कीमा परिवर्तन निष्पादित करना संभव है, लेकिन यह मुश्किल है, क्योंकि यह सभी संभावित स्कीमा परिवर्तनों का समर्थन नहीं करता है, और कुछ गलत होने पर यह उत्पादन को प्रभावित करेगा। इस तरह के नोड को एसएसटी का उपयोग करके पूरी तरह से पुनर्निर्माण करना होगा, जिसका अर्थ है कि शेष गैलेरा नोड्स में से एक को दाता के रूप में कार्य करना होगा और अपने सभी डेटा को नेटवर्क पर स्थानांतरित करना होगा।

प्रतिलिपि के रूप में कार्य करने वाले प्रतिकृति या यहां तक ​​कि एक संपूर्ण अतिरिक्त गैलेरा क्लस्टर का उपयोग करने के लिए एक विकल्प होगा। जाहिर है, इसे विकास पाइपलाइन में प्लग करने के लिए प्रक्रिया को स्वचालित करना होगा। ऐसा करने के कई तरीके हैं:स्क्रिप्ट या कई बुनियादी ढांचे के ऑर्केस्ट्रेशन टूल जैसे कि Ansible, Chef, Puppet या Salt स्टैक। हम उनका विस्तार से वर्णन नहीं करेंगे, लेकिन हम चाहेंगे कि आप पूरी प्रक्रिया को ठीक से काम करने के लिए आवश्यक कदम दिखाएं, और हम किसी एक टूल में कार्यान्वयन को आप पर छोड़ देंगे।

रिलीज़ परीक्षण स्वचालित करना

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

डेटाबेस में डेटा का प्रावधान होने के बाद, आप उस नोड को अपने प्राथमिक क्लस्टर की प्रतिकृति के रूप में सेट करना चाह सकते हैं। इसके अपने पक्ष और विपक्ष हैं। यदि आप अपने सभी ट्रैफ़िक को स्टैंडअलोन नोड पर फिर से निष्पादित कर सकते हैं, तो यह सही होगा - ऐसे मामले में, प्रतिकृति सेट करने की कोई आवश्यकता नहीं है। कुछ लोड बैलेंसर, जैसे ProxySQL, आपको ट्रैफ़िक को मिरर करने और उसकी कॉपी किसी अन्य स्थान पर भेजने की अनुमति देते हैं। दूसरी ओर, प्रतिकृति अगली सबसे अच्छी चीज है। हां, आप सीधे उस नोड पर लेखन निष्पादित नहीं कर सकते हैं जो आपको यह योजना बनाने के लिए मजबूर करता है कि आप प्रश्नों को फिर से कैसे निष्पादित करेंगे क्योंकि इसका उत्तर देने का सबसे सरल तरीका काम नहीं करेगा। दूसरी ओर, सभी लेखन अंततः SQL थ्रेड के माध्यम से निष्पादित किए जाएंगे, इसलिए आपको केवल यह योजना बनानी होगी कि SELECT क्वेरी से कैसे निपटें।

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

रिलीज़ परीक्षणों के स्वचालन को बेहतर बनाने के लिए ClusterControl का उपयोग करना

ClusterControl सुविधाओं के एक सेट के साथ आता है जिसका उपयोग रिलीज परीक्षणों को स्वचालित करने में आपकी सहायता के लिए किया जा सकता है। आइए देखें कि यह क्या प्रदान करता है। इसे स्पष्ट करने के लिए, हम जो सुविधाएँ दिखाने जा रहे हैं, वे कुछ तरीकों से उपलब्ध हैं। यूआई का उपयोग करने का सबसे आसान तरीका है, लेकिन यह अनावश्यक है कि आप क्या करना चाहते हैं यदि आपके दिमाग में स्वचालन है। इसे करने के दो और तरीके हैं:कमांड लाइन इंटरफेस टू क्लस्टरकंट्रोल और आरपीसी एपीआई। दोनों ही मामलों में, नौकरियों को बाहरी स्क्रिप्ट से ट्रिगर किया जा सकता है, जिससे आप उन्हें अपनी मौजूदा CI/CD प्रक्रियाओं में प्लग कर सकते हैं। इससे आपका काफी समय भी बचेगा, क्योंकि क्लस्टर को तैनात करना मैन्युअल रूप से सेट करने के बजाय केवल एक कमांड को निष्पादित करने का मामला हो सकता है।

परीक्षण क्लस्टर परिनियोजित करना

सबसे पहले और सबसे महत्वपूर्ण, ClusterControl एक नए क्लस्टर को परिनियोजित करने और मौजूदा डेटाबेस से डेटा के साथ प्रावधान करने के विकल्प के साथ आता है। यह सुविधा अकेले आपको स्टेजिंग सर्वर के प्रावधान को आसानी से लागू करने की अनुमति देती है।

जैसा कि आप देख सकते हैं, जब तक आपके पास एक बैकअप बना हुआ है, तब तक आप एक नया क्लस्टर बना सकते हैं और बैकअप से डेटा का उपयोग करके इसे प्रोविज़न कर सकते हैं:

जैसा कि हम देख सकते हैं, क्या होगा इसका एक त्वरित सारांश है। यदि आप जारी रखें पर क्लिक करते हैं, तो आप आगे बढ़ेंगे।

अगले चरण के रूप में, आपको SSH कनेक्टिविटी को परिभाषित करना चाहिए - ClusterControl के नोड्स को परिनियोजित करने में सक्षम होने से पहले इसे जगह में होना चाहिए।

आखिरकार, आपको क्लस्टर में उपयोग किए जाने वाले नोड्स के विक्रेता, संस्करण और होस्टनाम (अन्य के बीच) चुनना होगा। बस इतना ही।

सीएलआई कमांड जो एक ही काम को पूरा करती है वह इस तरह दिखता है:

s9s cluster --create --cluster-type=galera --nodes="10.0.0.156;10.0.0.157;10.0.0.158" --vendor=percona --cluster-name=PXC --provider-version=8.0 --os-user=root --os-key-file=/root/.ssh/id_rsa --backup-id=6

ट्रैफ़िक को मिरर करने के लिए ProxySQL को कॉन्फ़िगर करना

यदि हमारे पास एक क्लस्टर तैनात है, तो हम यह सत्यापित करने के लिए उत्पादन ट्रैफ़िक भेजना चाह सकते हैं कि नया स्कीमा मौजूदा ट्रैफ़िक को कैसे संभालता है। ऐसा करने का एक तरीका ProxySQL का उपयोग करना है।

प्रक्रिया आसान है। सबसे पहले, आपको प्रॉक्सीएसक्यूएल में नोड्स जोड़ना चाहिए। उन्हें एक अलग होस्टग्रुप से संबंधित होना चाहिए जो अभी उपयोग में नहीं है। सुनिश्चित करें कि ProxySQL मॉनिटर उपयोगकर्ता उन तक पहुंच पाएगा।

एक बार यह हो जाने के बाद और आपके पास होस्टग्रुप में आपके सभी (या कुछ) नोड्स कॉन्फ़िगर किए गए हैं, आप क्वेरी नियमों को संपादित कर सकते हैं और मिरर होस्टग्रुप को परिभाषित कर सकते हैं (यह उन्नत विकल्पों में उपलब्ध है)। यदि आप इसे संपूर्ण ट्रैफ़िक के लिए करना चाहते हैं, तो संभवतः आप अपने सभी क्वेरी नियमों को इस प्रकार संपादित करना चाहते हैं। यदि आप केवल SELECT क्वेरीज़ को मिरर करना चाहते हैं, तो आपको उपयुक्त क्वेरी नियमों को संपादित करना चाहिए। ऐसा करने के बाद, आपके स्टेजिंग क्लस्टर को प्रोडक्शन ट्रैफिक मिलना शुरू हो जाना चाहिए।

क्लस्टर को दास के रूप में परिनियोजित करना

जैसा कि हमने पहले चर्चा की, एक वैकल्पिक समाधान एक नया क्लस्टर बनाना होगा जो मौजूदा सेटअप की प्रतिकृति के रूप में कार्य करेगा। इस तरह के दृष्टिकोण के साथ हम प्रतिकृति का उपयोग करके सभी लेखन स्वचालित रूप से परीक्षण कर सकते हैं। हमारे द्वारा ऊपर वर्णित दृष्टिकोण का उपयोग करके चयनों का परीक्षण किया जा सकता है - ProxySQL के माध्यम से मिररिंग।

एक गुलाम क्लस्टर की तैनाती बहुत सरल है।

क्रिएट स्लेव क्लस्टर जॉब चुनें।

आपको यह तय करना होगा कि आप प्रतिकृति सेट कैसे करना चाहते हैं। आप सभी डेटा को मास्टर से नए नोड्स में स्थानांतरित कर सकते हैं।

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

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

यूआई का वैकल्पिक समाधान आरपीसी के माध्यम से इसे पूरा करना है।

{
  "command": "create_cluster",
  "job_data": {
    "cluster_name": "",
    "cluster_type": "galera",
    "company_id": null,
    "config_template": "my.cnf.80-pxc",
    "data_center": 0,
    "datadir": "/var/lib/mysql",
    "db_password": "pass",
    "db_user": "root",
    "disable_firewall": true,
    "disable_selinux": true,
    "enable_mysql_uninstall": true,
    "generate_token": true,
    "install_software": true,
    "port": "3306",
    "remote_cluster_id": 6,
    "software_package": "",
    "ssh_keyfile": "/root/.ssh/id_rsa",
    "ssh_port": "22",
    "ssh_user": "root",
    "sudo_password": "",
    "type": "mysql",
    "user_id": 5,
    "vendor": "percona",
    "version": "8.0",
    "nodes": [
      {
        "hostname": "10.0.0.155",
        "hostname_data": "10.0.0.155",
        "hostname_internal": "",
        "port": "3306"
      },
      {
        "hostname": "10.0.0.159",
        "hostname_data": "10.0.0.159",
        "hostname_internal": "",
        "port": "3306"
      },
      {
        "hostname": "10.0.0.160",
        "hostname_data": "10.0.0.160",
        "hostname_internal": "",
        "port": "3306"
      }
    ],
    "with_tags": []
  }
}

आगे बढ़ना

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

https://docs.severalnines.com/docs/clustercontrol/developer-guide/cmon-rpc/

https://docs.severalnines.com/docs/clustercontrol/user-guide-cli/

हमें उम्मीद है कि आपको यह छोटा ब्लॉग जानकारीपूर्ण और उपयोगी लगा होगा। यदि आपके पास अपने परिवेश में ClusterControl को एकीकृत करने से संबंधित कोई प्रश्न हैं, तो कृपया हमसे संपर्क करें, और हम आपकी सहायता करने की पूरी कोशिश करेंगे।


  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. अमान्य सिंटैक्स त्रुटि प्रकार =हाइबरनेट द्वारा उत्पन्न डीडीएल में MyISAM

  4. mysqli का उपयोग करके डेटा सम्मिलित करना

  5. MySQL में धीमी क्वेरी लॉग को कैसे सक्षम करें