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

उपलब्धता समूह कनेक्टिविटी को कॉन्फ़िगर करना

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

मैं इस पोस्ट में आपके ऑलवेजऑन वातावरण को स्थापित करने के विवरण में नहीं जाऊंगा, लेकिन कुछ अतिरिक्त मदद के लिए मेरा सुझाव है कि आप हारून बर्ट्रेंड की पोस्ट पर एक नज़र डालें, "समस्या निवारण ऑल्वेज़ऑन - कभी-कभी इसमें कई सेट नज़र आते हैं।" एक बार जब आपका परिवेश कॉन्फ़िगर हो जाता है, तो डेटाबेस कनेक्टिविटी प्रदान करने का अगला चरण SQL प्रबंधन स्टूडियो या T-SQL का उपयोग करके एक उपलब्धता समूह श्रोता बनाना है:

ALTER AVAILABILITY GROUP [GroupName] 
  ADD LISTENER N'ListenerName' 
  (WITH IP ((N'10.x.x.x', N'255.255.255.0')), PORT=1433);
AG श्रोता कनेक्शन स्ट्रिंग्स

आपका वर्चुअल नेटवर्क नाम (वीएनएन) डीएनएस में पंजीकृत है और हमेशा SQL सर्वर इंस्टेंस के स्वामित्व में होता है जहां प्राथमिक प्रतिकृति रहती है। एजी श्रोता को कॉन्फ़िगर करते समय आपूर्ति किए गए सभी आईपी पते एक ही वर्चुअल नेटवर्क नाम के तहत डीएनएस में पंजीकृत हैं।

अपना AG लिसनर बनाने के बाद, आपको यह सुनिश्चित करना होगा कि आपके क्लाइंट कनेक्ट हो सकें। आपका एप्लिकेशन कनेक्शन उसी तरह से काम करता है जैसे वह हमेशा होता है, हालांकि, आपके कनेक्शन स्ट्रिंग में एक विशिष्ट सर्वर की ओर इशारा करने के बजाय, आप एजी श्रोता की ओर इशारा करते हैं।

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

Server=tcp:MyAgListener,1433;Database=Db1;IntegratedSecurity=SSPI; MultiSubnetFailover=True

जब कोई विफलता होती है, तो क्लाइंट कनेक्शन रीसेट हो जाते हैं, और AG श्रोता का स्वामित्व SQL सर्वर आवृत्ति पर चला जाता है जो प्राथमिक प्रतिकृति भूमिका लेता है। VNN समापन बिंदु तब नए IP पते और नए प्राथमिक प्रतिकृति उदाहरण के TCP पोर्ट से जुड़ा होता है। क्लाइंट के आधार पर, एजी से एक स्वचालित पुन:कनेक्ट होगा, या उपयोगकर्ता को प्रभावित एप्लिकेशन या कनेक्शन को मैन्युअल रूप से पुनरारंभ करना पड़ सकता है।

आवेदन आशय

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

आपके द्वितीयक प्रतिकृतियों को केवल-पढ़ने के लिए पहुँच प्रदान करने के लिए, ApplicationIntent कनेक्शन स्ट्रिंग पैरामीटर का उपयोग किया जाता है। SQL सर्वर एंडपॉइंट्स की एक वैकल्पिक रीड-ओनली रूटिंग सूची को प्रत्येक प्रतिकृति पर कॉन्फ़िगर किया जा सकता है। इस सूची का उपयोग क्लाइंट कनेक्शन अनुरोधों को पुनर्निर्देशित करने के लिए किया जाता है जो ApplicationIntent=ReadOnly पैरामीटर का उपयोग पहले उपलब्ध माध्यमिक प्रतिकृति पर करते हैं जिसे उपयुक्त एप्लिकेशन इंटेंट फ़िल्टर के साथ कॉन्फ़िगर किया गया है।

Server=tcp:MyAgListener,1433;Database=Db1;IntegratedSecurity=SSPI; MultiSubnetFailover=True;ApplicationIntent=ReadOnly;
एप्लिकेशन इंटेंट फ़िल्टरिंग

आपके उपलब्धता समूह से कनेक्ट होने वाले क्लाइंट से एप्लिकेशन इंटेंट को सुविधाजनक बनाने के लिए, समूह में प्रत्येक SQL सर्वर इंस्टेंस को उपयुक्त एप्लिकेशन इंटेंट फ़िल्टर के साथ कॉन्फ़िगर किया जाना चाहिए। फ़िल्टर निर्धारित करता है कि प्रत्येक प्रतिकृति किस प्रकार के कनेक्शन स्वीकार करेगी।

एक प्राथमिक प्रतिकृति जिसे "सभी कनेक्शनों को अनुमति दें" की प्राथमिक भूमिका में कनेक्शन रखने के लिए कॉन्फ़िगर किया गया है, एजी श्रोता के माध्यम से किए गए किसी भी कनेक्शन को स्वीकार करेगा। "पढ़ने/लिखने के कनेक्शन की अनुमति दें" के रूप में कॉन्फ़िगर की गई प्राथमिक प्रतिकृति किसी भी कनेक्शन को अस्वीकार कर देगी जो "ApplicationIntent=ReadOnly" निर्दिष्ट करता है।

प्रतिकृतियां कॉन्फ़िगर करते समय, आपको यह भी परिभाषित करना होगा कि प्रत्येक एक पठनीय माध्यमिक होगा या नहीं। एक प्रतिकृति जिसे "नहीं" के रूप में कॉन्फ़िगर किया गया है, सभी कनेक्शनों को अस्वीकार कर देगी। यह प्रतिकृति केवल आपदा पुनर्प्राप्ति स्थिति में विफलता के लिए उपयोग की जाने वाली मानी जाती है। यदि द्वितीयक प्रतिकृति को "हां" के रूप में कॉन्फ़िगर किया गया है, तो सभी कनेक्शनों की अनुमति होगी, लेकिन केवल पढ़ने के उपयोग के लिए, भले ही "ApplicationIntent=ReadOnly" निर्दिष्ट न हो। अंत में यदि द्वितीयक को "केवल पढ़ने के इरादे" के रूप में कॉन्फ़िगर किया गया है, तो केवल "ApplicationIntent=ReadOnly" निर्दिष्ट करने वाले क्लाइंट को कनेक्ट करने की अनुमति होगी।

केवल पढ़ने के लिए रूटिंग

अब जब हम जानते हैं कि सर्वर इंस्टेंस पर एप्लिकेशन इंटेंट को कैसे कॉन्फ़िगर करना है, और आवश्यक कनेक्शन स्ट्रिंग्स बनाना है, तो हमें उपलब्धता समूह को केवल-पढ़ने के लिए रूटिंग को कॉन्फ़िगर करना होगा। जब आप कनेक्शन स्ट्रिंग का उपयोग करके एजी लिसनर से कनेक्ट करते हैं जैसा कि ऊपर परिभाषित किया गया है, तो श्रोता प्राथमिक प्रतिकृति इंस्टेंस से पूछताछ करता है और यह निर्धारित करता है कि क्या कनेक्शन प्राथमिक (पढ़ने/लिखने) या केवल-पढ़ने के लिए माध्यमिक के लिए बनाया जाना चाहिए। इसे पूरा करने के लिए, प्रत्येक उपलब्धता प्रतिकृति के लिए एक रूटिंग सूची बनाई जानी चाहिए जिसका उपयोग तब किया जाता है जब प्रतिकृति प्राथमिक की भूमिका ग्रहण करती है। सामान्यतया, सूची के अंत में स्थानीय प्रतिकृति URL के साथ प्रत्येक केवल-पढ़ने के लिए द्वितीयक प्रतिकृति के लिए प्रत्येक केवल-पढ़ने के लिए रूटिंग URL को शामिल करना सबसे अच्छा अभ्यास है। रीड-इंटेंट कनेक्शन अनुरोधों को रूटिंग सूची में पहले उपलब्ध पठनीय सेकेंडरी में रूट किया जाता है, सेकेंडरी के बीच कोई लोड बैलेंसिंग नहीं होती है।

सबसे पहले, केवल-पढ़ने के लिए रूटिंग URL प्रदान करने के लिए प्रत्येक प्रतिकृति को संशोधित करें:

ALTER AVAILABILITY GROUP [Group1] MODIFY REPLICA ON N'COMPUTER01' WITH 
  (SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY));
 
ALTER AVAILABILITY GROUP [Group1] MODIFY REPLICA ON N'COMPUTER01' WITH 
  (SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://COMPUTER01.mydomain.com:1433'));
 
ALTER AVAILABILITY GROUP [Group1] MODIFY REPLICA ON N'COMPUTER02' WITH 
(SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY));
 
ALTER AVAILABILITY GROUP [Group1] MODIFY REPLICA ON N'COMPUTER02' WITH 
(SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://COMPUTER02.mydomain.com:1433'));

दूसरा, प्रत्येक प्रतिकृति को केवल-पढ़ने के लिए रूटिंग सूची प्रदान करने के लिए संशोधित करें जब दी गई प्रतिकृति प्राथमिक भूमिका में हो:

ALTER AVAILABILITY GROUP [Group1]  MODIFY REPLICA ON N'COMPUTER01' WITH 
(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('COMPUTER02','COMPUTER01')));
 
ALTER AVAILABILITY GROUP [Group1] MODIFY REPLICA ON N'COMPUTER02' WITH 
(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('COMPUTER01','COMPUTER02')));

रूटिंग यूआरएल "टीसीपी://:" के रूप में होना चाहिए। अपना URL निर्धारित करने में सहायता के लिए, मैट नीरिनक्स द्वारा बनाया गया यह ब्लॉग और स्क्रिप्ट देखें।

निष्कर्ष

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. केस एक्सप्रेशन के डर्टी सीक्रेट्स

  2. संबंधपरक बनाम गैर-रिलेशनल डेटाबेस - भाग 1

  3. अग्रेषित रिकॉर्ड प्रदर्शन समस्या की पहचान करना और उसे ठीक करना

  4. शुरुआती के लिए एसक्यूएल चयन

  5. शुरुआती के लिए SQL ALTER TABLE