डीबीए के रूप में, हम आम तौर पर अपने ग्राहकों से शिकायत करते हैं कि वर्तमान उत्पादन सर्वर सर्वर पर लोड रखने में सक्षम नहीं है और क्या लोड माध्यमिक सर्वर के साथ संतुलित हो सकता है। लॉग शिपिंग में रीड-ओनली डेटाबेस के साथ DR सर्वर में डेटाबेस और ऑलवेज ऑन अवेलेबिलिटी ग्रुप में सेकेंडरी SQL सर्वर रेप्लिका के साथ यह संभव है। ऑलवेज ऑन ग्रुप्स का सबसे बड़ा फायदा यह है कि यह हमें किसी भी संख्या में डेटाबेस के लिए ग्रुप लेवल HA सेट करने की अनुमति देता है और हम चार सेकेंडरी रेप्लिका बना सकते हैं और यह क्लस्टरिंग, लॉग शिपिंग और डेटाबेस मिररिंग का एक संयोजन है जहां डेटा ट्रांसमिशन है अधिक लचीला और कार्यात्मक।
ऑलवेज ऑन रीडेबल सेकेंडरी रेप्लिका में रीड-ओनली रूटिंग नामक विशेष रीड-ओनली कनेक्शन अनुरोधों को संभालने की सुविधा है। आम तौर पर, डिफ़ॉल्ट रूप से, पढ़ने और पढ़ने के इरादे दोनों को प्राथमिक प्रतिकृति के लिए निर्देशित किया जाता है और द्वितीयक प्रतिकृतियों के लिए कुछ भी अभिप्रेत नहीं है। अब, द्वितीयक प्रतिकृतियों का उपयोग न केवल बैकअप, डीबीसीसी और रिपोर्टिंग उद्देश्यों के लिए किया जा सकता है, बल्कि भविष्य में एप्लिकेशन कनेक्शन स्ट्रिंग में उनके एप्लिकेशन इंटेंट के रूप में 'रीडऑनली' का उपयोग करके भी पूछताछ की जा सकती है।
विंडोज फेलओवर क्लस्टर में हमारे पास तीन प्रतिकृतियां SQL1, SQL2 और SQL3 हैं। प्रत्येक नोड में एक स्टैंडअलोन SQL सर्वर 2012 इंस्टेंस है जो ऑलवेज ऑन एजी के साथ स्थापित और कॉन्फ़िगर किया गया है। हम हमेशा "CODELIS" नाम के AG ग्रुप में श्रोता नाम "CODELIS" के साथ होते हैं
निम्न स्क्रीनशॉट में, SQL1 एक प्राथमिक प्रतिकृति है, SQL2 एक द्वितीयक प्रतिकृति है, SQL3 एक द्वितीयक प्रतिकृति है।
हमेशा उपलब्धता समूहों पर रीड-ओनली रूटिंग सूची को कैसे कॉन्फ़िगर करें
चरण1:
श्रोता नाम या आईपी का उपयोग करके उपलब्धता समूह से कनेक्शन किए जाते हैं। अब, एक उपलब्धता समूह के लिए कई श्रोता बनाने के लिए, कृपया नीचे दी गई प्रक्रिया का पालन करें।
उपलब्धता समूह के लिए श्रोता को मैन्युअल रूप से बनाने या कॉन्फ़िगर करने के लिए
- ऑब्जेक्ट एक्सप्लोरर के तहत, उस इंस्टेंस से कनेक्ट करें जिसमें उपलब्धता समूह की प्राथमिक प्रतिकृति है।
- AON समूह का विस्तार करें और उपलब्धता समूह पर क्लिक करें जिसके लिए हम श्रोता को मैन्युअल रूप से कॉन्फ़िगर करने और आगे बढ़ने का प्रयास कर रहे हैं।
- उपलब्धता समूह श्रोताओं के नोड पर राइट-क्लिक करें और नया श्रोता आदेश चुनें। यह श्रोता को कॉन्फ़िगर करने के लिए एक नया डायलॉग बॉक्स खोलता है।
- उपलब्धता समूह श्रोताओं के नोड का विस्तार करके और उसके बाद श्रोताओं पर राइट-क्लिक करके और गुणों का चयन करके मौजूदा श्रोता के पोर्ट नंबर को बदला जा सकता है।
- अब, नया पोर्ट नंबर दर्ज करें और ठीक क्लिक करें।
नीचे दी गई DMV को क्वेरी करके ऑलवेज ऑन प्रतिकृति के लिए कॉन्फ़िगर किए गए श्रोता नाम की पहचान करें।
AV.name AS AVGName, AVGLis.dns_name AS श्रोता नाम, AVGLis.ip_configuration_string_from_cluster AS श्रोता चुनें।निम्नलिखित स्क्रीनशॉट में, AG समूह का नाम CODEAG है और AG श्रोता IP CODELIS है।
चरण 2:
केवल-पढ़ने के लिए रूटिंग को कॉन्फ़िगर करने के लिए, हमें केवल-पढ़ने के लिए माध्यमिक प्रतिकृतियों के लिए केवल-पढ़ने के कनेक्शन की अनुमति देने के लिए प्रतिकृतियों को पढ़ने के इरादे से कॉन्फ़िगर करने की आवश्यकता है।
- उस उदाहरण से कनेक्ट करें जिसमें प्राथमिक प्रतिकृति है।
- AON उच्च उपलब्धता नोड, फिर AG समूह नोड का विस्तार करें।
- एजी समूह पर क्लिक करें जिसकी प्रतिकृति बदली जानी चाहिए।
- प्रतिलिपि पर राइट-क्लिक करें और प्राथमिक और माध्यमिक भूमिकाओं के लिए कनेक्शन एक्सेस को बदलने के लिए गुणों का चयन करें।
माध्यमिक भूमिका का पठनीय माध्यमिक ड्रॉप सूची से एक नया मूल्य है।
केवल पढ़ने के इरादे
यह विकल्प इस प्रतिकृति के द्वितीयक डेटाबेस को पढ़ने की अनुमति देता है। केवल पढ़ने के लिए कनेक्शन की अनुमति है।
हां
यह विकल्प केवल पढ़ने की अनुमति देता है लेकिन द्वितीयक प्रतिकृति के लिए सभी कनेक्शनों की अनुमति है।
नहीं
यह सेकेंडरी रेप्लिका से सभी यूजर कनेक्शन को रोक देता है और आपको पढ़ने की अनुमति भी नहीं देता है।
पठनीय द्वितीयक गुणों को केवल पढ़ने के इरादे . पर सेट करें
निम्नलिखित स्क्रीनशॉट में, प्रत्येक माध्यमिक प्रतिकृति के पठनीय माध्यमिक गुण केवल पढ़ने के इरादे पर सेट हैं।
चरण 3:
प्रत्येक पठनीय द्वितीयक प्रतिकृति को केवल-पढ़ने के लिए रूटिंग URL असाइन किया जा सकता है जिसका उपयोग रीड-इंटेंट कनेक्शन अनुरोधों को एक विशिष्ट पठनीय माध्यमिक प्रतिकृति के लिए रूट करने के लिए किया जाएगा।
हमारे उपलब्धता समूह में सभी प्रतिकृतियों के लिए केवल-पढ़ने के लिए रूटिंग URL निर्दिष्ट करने के लिए T-SQL का उपयोग करें।
उपलब्धता समूह बदलें [CODEAG]प्रतिलिपि को 'SQL1' पर संशोधित करें (SECONDARY_ROLE (ALLOW_CONNECTIONS =READ_ONLY)); वैकल्पिक उपलब्धता समूह [CODEAG] REPLICA ONN'SQL1' TCROONLE के साथ संशोधित करें:// (SECONDARY_URL1 =NRADOUT_REPLICA WITH (SECONDARY_URL) (SECONDARY_ROLE) .abc.com:17999')); वैकल्पिक उपलब्धता समूह [CODEAG] 'SQL2' पर प्रतिकृति को संशोधित करें (SECONDARY_ROLE (ALLOW_CONNECTIONS =READ_ONLY)); वैकल्पिक उपलब्धता समूह N'TCP://SQL2.abc.com:17999')); वैकल्पिक उपलब्धता समूह [CODEAG]प्रतिलिपि को 'SQL3' पर संशोधित करें (SECONDARY_ROLE (ALLOW_CONNECTIONS =READ_ONLY)); ' WITH(SECONDARY_ROLE (READ_ONLY_ROUTING_URL =N'TCP://SQL3.abc.com:17999'));चरण 4:
जिस प्रतिकृति को हम केवल पढ़ने के लिए रूटिंग के रूप में चिह्नित कर रहे हैं, जब वह प्राथमिक प्रतिकृति है, तो केवल-पढ़ने के लिए रूटिंग सूची निर्दिष्ट करने की आवश्यकता होती है और यह तभी प्रभावी होता है जब स्थानीय प्रतिकृति प्राथमिक भूमिका के तहत चल रही हो।
उपलब्धता समूह बदलें [CODEAG]'SQL1' पर प्रतिकृति को संशोधित करें (PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('SQL2','SQL3')) के साथ); उपलब्धता समूह को बदलें =('SQL2','SQL1'))); वैकल्पिक उपलब्धता समूह [CODEAG]'SQL2' पर प्रतिकृति को संशोधित करें (PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('SQL3','SQL1')) के साथ);उपरोक्त स्क्रिप्ट में, उदाहरण जब SQL1 प्राथमिक प्रतिकृति है, केवल पढ़ने के इरादे से कार्यभार को पठनीय माध्यमिक प्रतिकृतियों पर पुनर्निर्देशित किया जाएगा; क्रमशः SQL2 और SQL3:इसी तरह, यदि SQL3 प्राथमिक प्रतिकृति है, तो केवल पढ़ने के इरादे से कार्यभार को पठनीय माध्यमिक प्रतिकृतियों पर पुनर्निर्देशित किया जाएगा; क्रमशः SQL2 और SQL1।
केवल-पढ़ने के लिए निर्देशित यातायात को पहली उपलब्ध प्रतिकृति तक भेजा जाएगा जब तक कि यह पहुंच योग्य न हो, यह यातायात को रूटिंग सूची में अगली उपलब्ध प्रतिकृति पर निर्देशित करेगा। जब आपके पास एक से अधिक प्रतिकृति हों, तो SQL सर्वर 2012 और 2014 तक प्रतिकृतियों के बीच लोड साझा करना संभव नहीं है। लेकिन, SQL सर्वर 2016 आपको केवल-पढ़ने के लिए प्रतिकृतियों के बीच लोड को संतुलित करने की अनुमति देता है।
उदाहरण:
वैकल्पिक उपलब्धता समूह [CODEAG]'SQL2' पर प्रतिकृति को संशोधित करें (PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=(('SQL3', 'SQL1'), 'SQL2')) के साथ);यह रूटिंग सूची व्यवहार SQL3 और SQL1 के बीच 'लोड बैलेंस' रीड-ओनली कनेक्शन है। ऊपर, हमारे पास रूटिंग सूची में दो एम्बेडेड सूचियाँ हैं:
सूची 1:'एसक्यूएल3', 'एसक्यूएल1'
सूची 2:'एसक्यूएल2'
पहली सूची में प्रतिकृतियों के लिए मार्ग। SQL3 और SQL1 केवल-पढ़ने के लिए कनेक्शन के लिए सुलभ हैं। पहला इनकमिंग रीड-ओनली कनेक्शन SQL3 को रूट किया जाएगा, दूसरा रीड-ओनली कनेक्शन SQL1 को रूट किया जाएगा, तीसरा रीड-ओनली कनेक्शन SQL3 को रूट किया जाएगा, चौथा रीड-ओनली कनेक्शन SQL1 पर रूट किया जाएगा, और इसी तरह, पहली सूची में दो प्रतिकृतियों के बीच केवल-पढ़ने के लिए कनेक्शन के 'राउंड-रॉबिन' वितरण के साथ।
यदि कोई प्रतिकृति अनुपलब्ध हो जाती है, तो पहली सूची में शेष प्रतिकृतियों के साथ रूटिंग जारी रहेगी। यदि SQL3 या SQL1 केवल-पढ़ने के लिए कनेक्शन के लिए अप्राप्य हो जाता है, तो केवल-पढ़ने के लिए कनेक्शन केवल पहली सूची में केवल-पढ़ने योग्य प्रतिकृतियों के लिए रूट किए जाएंगे। उदाहरण के लिए, यदि SQL3 एक सिंक्रनाइज़ स्थिति में नहीं है या ALLOW_CONNECTIONS को NO पर सेट किया गया है, तो सभी रीड-ओनली कनेक्शन SQL1 पर रूट किए जाएंगे। जब तक सर्वरों में से एक केवल-पढ़ने के लिए कनेक्शन के लिए उपलब्ध है, कोई भी रीड-ओनली कनेक्शन SQL2 पर रूट नहीं किया जाएगा।
यदि पहली सूची में सभी प्रतिकृतियां पहुंच योग्य नहीं हैं, तो अगली सूची में प्रतिकृतियों के लिए मार्ग। यदि SQL3 और SQL1 केवल-पढ़ने के लिए कनेक्शन के लिए दुर्गम हो जाते हैं, तो सभी रीड-ओनली कनेक्शन केवल प्रतिकृतियों की अगली सूची में रूट किए जाएंगे, जो इस मामले में SQL2 है।
यदि कोई प्रतिरूप उपलब्ध हो तो पहली सूची में रूटिंग फिर से शुरू करें। सूची में उच्च प्राथमिकता वाली माध्यमिक प्रतिकृतियां केवल-पढ़ने के लिए कनेक्शन के लिए सुलभ हो जाती हैं, भविष्य में केवल-पढ़ने के लिए कनेक्शन उपयुक्त के रूप में उनसे जुड़ जाएंगे।
SQL सर्वर 2016 में, आप केवल-पढ़ने के लिए प्रतिकृतियों के एक सेट में लोड-बैलेंसिंग को कॉन्फ़िगर कर सकते हैं।
चरण 5:
sys.availability_read_only_routing_lists DMV, जो हमेशा उपलब्धता समूह में प्रत्येक उपलब्धता समूह प्रतिकृति की केवल-पढ़ने के लिए रूटिंग सूची देता है।
SELECT AVGSrc.replica_server_name AS SourceReplica , AVGRepl.replica_server_name AS ReadOnlyReplica, AVGRepl.read_only_routing_url AS RoutingURL, AVGRL.routing_priority AS RoutingPriorityFROM sys.availability_read_only_routing_lists AVGRLINNER JOIN sys.availability_replicas AVGSrc ON AVGRL.replica_id =AVGSrc.replica_idINNER JOIN sys.availability_replicas AVGRepl ON AVGRL.read_only_replica_id =AVGRepl.replica_idINNER शामिल हों sys.availability_groups AV पर AV.group_id =AVGSrc.group_idORDER BY SourceReplicaनिम्न स्क्रीनशॉट में, परिणाम रूटिंग URL और रूटिंग प्राथमिकता दिखाता है।
चरण 6:
SQLCMD का उपयोग करके केवल-पढ़ने के लिए रूटिंग का परीक्षण करने के लिए, -K रीडऑनली पैरामीटर का उपयोग करें जो रूटिंग सूची के अनुसार द्वितीयक प्रतिकृति प्राप्त करने वाले रीड कनेक्शन को दिखाता है।
निम्नलिखित स्क्रीनशॉट में, द्वितीयक प्रतिकृति रीड कनेक्शन यानी… SQL2 को स्वीकार कर रही है।
चरण 7:
उपलब्धता समूह को विफल करें और केवल-पढ़ने के लिए रूटिंग का परीक्षण करें।
- ऑब्जेक्ट एक्सप्लोरर में, एक सर्वर इंस्टेंस से कनेक्ट करें जो उपलब्धता समूह की द्वितीयक प्रतिकृति को होस्ट करता है जिसे विफल होने की आवश्यकता है। सर्वर ट्री का विस्तार करें।
- ऑलवेजऑन उच्च उपलब्धता नोड और उपलब्धता समूह नोड का विस्तार करें।
- विफल होने के लिए उपलब्धता समूह पर राइट-क्लिक करें, और फ़ेलओवर चुनें।
अब, SQL2 प्राथमिक प्रतिकृति बन जाता है और कनेक्शन SQL1 द्वारा नियंत्रित किए जाते हैं।
कनेक्शन स्ट्रिंग सिंटैक्स जो एप्लिकेशन को उपयोग करना चाहिए वह SQL सर्वर प्रदाता पर निर्भर करेगा।
यदि यह SQL सर्वर के लिए .Net Framework डेटा प्रदाता 4.0.2 है, तो सिंटैक्स निम्नानुसार होगा:
सर्वर=tcp:MyAgListener,portnumber;डेटाबेस=SQL1;एकीकृत सुरक्षा=SSPI;ApplicationIntent=ReadOnly;MultiSubnetFailover=True
निष्कर्ष:
कार्यभार को कम करने के लिए, यह केवल-पढ़ने के लिए रूटिंग सबसे अच्छा विकल्प है। SharePoint में होस्ट की गई SQL सर्वर रिपोर्टिंग सेवाओं या रिपोर्ट सर्वर के नेटिव मोड इंस्टॉलेशन से जुड़ा एक एप्लिकेशन रीड-ओनली इंटेंट का उपयोग कर सकता है जो प्राथमिक नोड्स पर विशिष्ट अवरोधन, मेमोरी और CPU उपयोग से बचा जाता है।