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

समस्या निवारण हमेशा चालू - कभी-कभी इसमें कई तरह की आंखें होती हैं

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

तो आप देख सकते हैं कि 5 स्टैंडअलोन नामित उदाहरण हैं (.\AGDEMO प्रत्येक नोड पर), और फिर दो FCI - एक संभावित मालिकों के साथ VM-AARON-1 और VM-AARON-2 (AGFCI1\AGFCI1 ), और फिर संभावित मालिकों वाला VM-AARON-3, VM-AARON-4 और VM-AARON-5 (AGFCI2\AGFCI2 ) अब, इसे मैन्युअल रूप से आरेखित करने के लिए काफी अधिक जटिल (उस पर बाद में) प्राप्त करना होगा, इसलिए मैं स्पष्ट कारणों से इससे बचने जा रहा हूं। अनिवार्य रूप से आवश्यकता कई प्रकार के AG कॉन्फ़िगरेशन की थी:

  • एक या अधिक स्टैंडअलोन इंस्टेंस पर प्रतिकृति के साथ FCI पर प्राथमिक
  • एक एफसीआई पर प्राथमिक एक अलग एफसीआई पर एक प्रतिकृति के साथ
  • एक या अधिक FCI पर प्रतिकृति के साथ स्टैंडअलोन इंस्टेंस पर प्राथमिक
  • एक या अधिक स्टैंडअलोन इंस्टेंस पर प्रतिकृति के साथ एक स्टैंडअलोन इंस्टेंस पर प्राथमिक
  • एक स्टैंडअलोन इंस्टेंस और FCI दोनों पर प्रतिकृतियों के साथ एक स्टैंडअलोन इंस्टेंस पर प्राथमिक

और फिर सिंक्रोनस बनाम एसिंक्रोनस कमिटमेंट, मैनुअल बनाम ऑटोमैटिक फेलओवर, और रीड-ओनली सेकेंडरी के संयोजन (जहां संभव हो)। कुछ तकनीकी सीमाएं हैं जो यहां संभव क्रमपरिवर्तन को सीमित कर सकती हैं, उदाहरण के लिए:

  • किसी FCI पर मौजूद किसी भी प्रतिकृति के साथ मैन्युअल विफलता आवश्यक है
  • कोई भी WSFC नोड होस्ट नहीं कर सकता है - या यहां तक ​​​​कि संभावित मालिक भी नहीं हो सकता है - कई उदाहरणों, चाहे स्टैंडअलोन या क्लस्टर, जो एक ही उपलब्धता समूह में शामिल हैं। आपको यह त्रुटि संदेश मिलता है:उपलब्धता समूह 'MyGroup' में प्रतिकृति बनाने, शामिल होने या जोड़ने में विफल, क्योंकि नोड 'VM-AARON-1' प्रतिकृति 'AGFCI1\AGFCI1' और 'VM-AARON-1\ दोनों के लिए एक संभावित स्वामी है। एग्डेमो'। यदि एक प्रतिकृति फ़ेलओवर क्लस्टर आवृत्ति है, तो इसके संभावित स्वामियों से ओवरलैप किए गए नोड को निकालें और पुन:प्रयास करें। (माइक्रोसॉफ्ट एसक्यूएल सर्वर, त्रुटि:19405)

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

बाधा #1

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

द्वितीयक प्रतिकृति पर डेटाबेस फ़ाइल स्थान की संगतता की जाँच के परिणामस्वरूप त्रुटि हुई। (Microsoft.SqlServer.Management.HadrTasks)

निम्न फ़ोल्डर स्थान सर्वर आवृत्ति पर मौजूद नहीं है जो द्वितीयक प्रतिकृति VM-AARON-1\AGDEMO को होस्ट करता है:

P:\MSSQL11.AGFCI2\MSSQL\DATA;
(Microsoft.SqlServer.Management.HadrTasks)

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

दुर्भाग्य से, चोट के अपमान को जोड़ने के लिए, विज़ार्ड आपको इसे स्क्रिप्ट करने की अनुमति नहीं देता है। आप सत्यापन त्रुटि से आगे नहीं बढ़ सकते हैं और कोई Script नहीं है बटन:

तो इसका मतलब है कि आपको इसे स्वयं कोड करने की आवश्यकता है (चूंकि डीडीएल आपके लिए कोई "सहायक" सत्यापन नहीं करता है)। यदि आपके पास अन्य उदाहरण हैं जहां समान पथ मौजूद हैं, तो आप उसी विज़ार्ड का अनुसरण करके, सत्यापन स्क्रीन को पार करके और फिर Script पर क्लिक करके ऐसा कर सकते हैं। Finish . के बजाय , और सर्वर का नाम बदलें और WITH MOVE . के साथ जोड़ें प्रारंभिक पुनर्स्थापना के लिए विकल्प। या आप बस अपना खुद का खरोंच से लिख सकते हैं, कुछ इस तरह (स्क्रिप्ट मानती है कि आपके पास पहले से ही समापन बिंदु और अनुमतियाँ कॉन्फ़िगर हैं, और सभी उदाहरणों में उपलब्धता समूह सुविधा सक्षम है):

-- SQLCMD मोड का उपयोग करें और :CONNECT कमांड्स को अनकम्मेंट करें-- या बस दो सेगमेंट को अलग-अलग चलाएं/कनेक्शन बदलें--:कनेक्ट सर्वर1 क्रिएट एवेलेबिलिटी ग्रुप [ग्रुपनाम] के साथ (AUTOMATED_BACKUP_PREFERENCE =SECONDARY) फॉर डेटाबेस [डेटाबेस1] -- , ... प्रतिकृति चालू -- प्राथमिक:N'Server1' के साथ (ENDPOINT_URL =N'TCP://सर्वर1:5022', FAILOVER_MODE =MANUAL, AVAILABILITY_MODE =ASYNCHRONOUS_COMMIT, BACKUP_PRIORITY =50, SECONDARY_ROLE(ALLOW_CONNECTION)), - - सेकेंडरी:N'Server2' के साथ (ENDPOINT_URL =N'TCP://Server2:5022', FAILOVER_MODE =MANUAL, AVAILABILITY_MODE =ASYNCHRONOUS_COMMIT, BACKUP_PRIORITY =50, SECONDARY_ROLE(ALLOW_CONNECTIONS =NO)); वैकल्पिक उपलब्धता समूह [समूह का नाम] श्रोता जोड़ें N'ListenerName' (IP के साथ ((N'10.x.x.x', N'255.255.255.0')), PORT=1433); बैकअप डेटाबेस डेटाबेस1 से डिस्क ='\\Server1\Share\db1.bak' INIT के साथ, COPY_ONLY, COMPRESSION; बैकअप लॉग डेटाबेस1 से डिस्क ='\\Server1\Share\db1.trn' INIT, COMPRESSION के साथ; -- :Connect Server2ALTER AVAILABILITY GROUP [GroupName] JOIN; DISK से DATABASE Database1 को पुनर्स्थापित करें ='\\Server1\Share\db1.bak' रिप्लेस के साथ, NORECOVERY, NOUNLOAD, 'data_file_name' को 'P:\path\file.mdf' पर ले जाएँ, 'log_file_name' को 'P:\path' पर ले जाएँ \file.ldf'; DISK से लॉग डेटाबेस1 को पुनर्स्थापित करें ='\\Server1\Share\db1.trn' NORECOVERY के साथ, NOUNLOAD; ALTER DATABASE Database1 SET HADR AVAILABILITY GROUP =[GroupName];

बाधा #2

यदि आपके पास एक ही सर्वर पर कई इंस्टेंस हैं, तो आप पा सकते हैं कि दोनों इंस्टेंसेस पोर्ट 5022 को उनके डेटाबेस मिररिंग एंडपॉइंट के लिए साझा नहीं कर सकते हैं (जो कि वही एंडपॉइंट है जो उपलब्धता समूहों द्वारा उपयोग किया जाता है)। इसका मतलब है कि आपको उपलब्ध पोर्ट पर सेट करने के लिए एंडपॉइंट को छोड़ना और फिर से बनाना होगा।

DROP ENDPOINT [Hadr_endpoint];GO CREATE ENDPOINT [Hadr_endpoint] STATE =DATABASE_MIRRORING (ROLE =ALL) के लिए TCP (LISTENER_PORT =5023) के रूप में शुरू हुआ;

अब मैं ServerName:5023 . पर समापन बिंदु के साथ एक उदाहरण निर्दिष्ट कर सकता हूं ।

बाधा #3

हालांकि, एक बार ऐसा करने के बाद, जब मैं ऊपर की स्क्रिप्ट में अंतिम चरण पर पहुंचूंगा, ठीक 48 सेकंड के बाद - हर बार - मुझे यह अनुपयोगी त्रुटि संदेश मिलेगा:

संदेश 35250, स्तर 16, राज्य 7, पंक्ति 2
प्राथमिक प्रतिकृति से कनेक्शन सक्रिय नहीं है। कमांड को प्रोसेस नहीं किया जा सकता है।

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

डेटाबेस मिररिंग लॉगिन प्रयास त्रुटि के साथ विफल:'कनेक्शन हैंडशेक विफल। कोई संगत एन्क्रिप्शन एल्गोरिथ्म नहीं है। राज्य 22.'.

डेटाबेस मिररिंग लॉगिन प्रयास त्रुटि के साथ विफल:'कनेक्शन हैंडशेक विफल। एक OS कॉल विफल:(80090303) 0x80090303 (निर्दिष्ट लक्ष्य अज्ञात या पहुंच से बाहर है)। राज्य 66.'.

[5AF5B58D-BBD5-40BB-BE69-08AC50010BE0] आईडी के साथ उपलब्धता प्रतिकृति 'VM-AARON-1\AGDEMO' से कनेक्शन स्थापित करने का प्रयास करते समय एक कनेक्शन टाइमआउट हुआ। या तो नेटवर्किंग या फ़ायरवॉल समस्या मौजूद है, या प्रतिकृति के लिए प्रदान किया गया एंडपॉइंट पता होस्ट सर्वर इंस्टेंस का डेटाबेस मिररिंग एंडपॉइंट नहीं है।

यह पता चला है (और थॉमस स्ट्रिंगर (@SQLife) के लिए धन्यवाद) कि यह समस्या लक्षणों के संयोजन के कारण हो रही थी:(ए) केर्बेरोज सही ढंग से स्थापित नहीं किया गया था, और (बी) हैडर_एंडपॉइंट के लिए एन्क्रिप्शन एल्गोरिदम जिसे मैंने डिफ़ॉल्ट बनाया था RC4 के लिए। यह ठीक होगा यदि सभी स्टैंडअलोन इंस्टेंस भी RC4 का उपयोग कर रहे थे, लेकिन वे नहीं थे। लंबी कहानी छोटी, मैंने फिर से के समापन बिंदुओं को छोड़ दिया और फिर से बनाया , सभी मामलों पर। चूंकि यह एक प्रयोगशाला वातावरण था और मुझे वास्तव में केर्बेरोस समर्थन की आवश्यकता नहीं थी (और क्योंकि मैंने पहले ही इन मुद्दों में पर्याप्त समय लगा दिया था कि मैं केर्बरोस की समस्याओं का भी पीछा नहीं करना चाहता था), मैंने बातचीत का उपयोग करने के लिए सभी समापन बिंदु सेट किए। एईएस:

DROP ENDPOINT [Hadr_endpoint];GO CREATE ENDPOINT [Hadr_endpoint] STATE =DATABASE_MIRRORING के लिए TCP ( LISTENER_PORT =5023 ) के रूप में शुरू ( AUTHENTICATION =WINDOWS NEGOTIATE, ENCRYPTION =REQUIRED ALGORITHM ALL); 

(टेड क्रूगर (@onpnt) ने हाल ही में इसी तरह के मुद्दे के बारे में ब्लॉग किया था।)

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

अब, यह बस थोड़ा सा छेड़खानी है, और यह पूरी तरह से जानबूझकर किया गया है। मैं आने वाले हफ्तों में इस कार्यक्षमता के बारे में और अधिक ब्लॉगिंग करूँगा!

निष्कर्ष

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


  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. VMware पर CPU प्रदर्शन का समस्या निवारण

  3. विस्तारित घटनाओं का उपयोग करके निष्पादन योजना चेतावनियों को कैप्चर करें

  4. विस्मयकारी सूचियाँ स्वयं बनाएं, या GitHub नोटबुक के रूप में

  5. एक रेस्तरां वितरण डेटा मॉडल