अमेज़ॅन रूट 53 और साइट अपटाइम

वीरांगना
पिछले 3 हफ्तों में, मुझे कई बार अपनी होस्टिंग के काम में रुकावटों का अनुभव करना पड़ा है, क्योंकि मैं उच्च ट्रैफ़िक के साथ एक परियोजना का संचालन कर रहा हूं, यहां तक ​​कि एक छोटी डाउनटाइम साइट से कॉल की संख्या को भी प्रभावित करती है।
उसी समय, सब कुछ बहुत बेहतर हो सकता है यदि मानक पृष्ठ "सर्वर नहीं मिला" के बजाय, साइट की शैली में एक स्क्रीनसेवर को पाठ के साथ लटकाएं "साइट अस्थायी रूप से अनुपलब्ध है, कॉल या एक अनुरोध छोड़ दें।"
जल्दी से ए रिकॉर्ड बदलने के लिए अमेज़ॅन की डीएनएस सेवा का उपयोग करने का निर्णय लिया गया था।



अमेज़न रूट 53 का विवरण

यह एक विश्वसनीय डीएनएस सेवा है, जिसमें रिकॉर्ड्स को संपादित करने, जोड़ने और हटाने के लिए काफी सुविधाजनक एपीआई है।
पहले मिलियन अनुरोधों के लिए सेवा की लागत $ 1 प्रति माह + $ 0.50 है और बाद के प्रत्येक मिलियन अनुरोधों के लिए $ 0.25 है।
कुछ मामलों में एक गंभीर असुविधा भुगतान पद्धति है - आप केवल प्लास्टिक कार्ड के साथ सेवा के लिए भुगतान कर सकते हैं, लेकिन एक तरीका है, उदाहरण के लिए, आप qiwi से वर्चुअल वीज़ा कार्ड का उपयोग कर सकते हैं।
सेवा के लिए पंजीकरण और भुगतान के बाद, हमें आईडी और कुंजी की एक जोड़ी मिलती है, जिसे बाद में एपीआई में प्राधिकरण के लिए उपयोग किया जाता है।

कुकिंग डोमेन

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

एक होस्टिंग चुनें

मेरे मामले में, बैकअप सर्वर जितना संभव हो उतना सस्ता होना चाहिए और इसमें निम्न कार्य होने चाहिए:

विकल्प गीनो पर गिर गया, यह एकमात्र होस्टिंग है जिसे मैंने पाया है कि आप PHP को छोड़ने के बिना डेटाबेस का समर्थन करने से मना कर सकते हैं। कीमत प्रति माह 75 रूबल निकली।
मुख्य होस्टिंग क्लोडो है , हालांकि इससे कोई फर्क नहीं पड़ता।

हमने मुख्य होस्टिंग की स्थापना की

हम किसी भी स्थिति में साइट के प्रदर्शन में रुचि रखते हैं, जिसका अर्थ है कि यदि डेटाबेस फ्रीज या अपाचे है तो आपको ए-रिकॉर्ड भी बदलना होगा। परीक्षण के लिए, हम सर्वर के आईपी पते द्वारा सुलभ एक छोटी सी PHP स्क्रिप्ट बनाएँगे।
  1. $link = mysql_connect ( 'localhost' , 'root' , 'password' ) or die ( '0' ) ; $result = mysql_query ( 'SELECT VERSION();' ) ; if ( ! $result ) die ( '0' ) ; mysql_close ( $link ) ; echo 'OK!' ;
  2. $link = mysql_connect ( 'localhost' , 'root' , 'password' ) or die ( '0' ) ; $result = mysql_query ( 'SELECT VERSION();' ) ; if ( ! $result ) die ( '0' ) ; mysql_close ( $link ) ; echo 'OK!' ;
  3. $link = mysql_connect ( 'localhost' , 'root' , 'password' ) or die ( '0' ) ; $result = mysql_query ( 'SELECT VERSION();' ) ; if ( ! $result ) die ( '0' ) ; mysql_close ( $link ) ; echo 'OK!' ;
  4. $link = mysql_connect ( 'localhost' , 'root' , 'password' ) or die ( '0' ) ; $result = mysql_query ( 'SELECT VERSION();' ) ; if ( ! $result ) die ( '0' ) ; mysql_close ( $link ) ; echo 'OK!' ;
  5. $link = mysql_connect ( 'localhost' , 'root' , 'password' ) or die ( '0' ) ; $result = mysql_query ( 'SELECT VERSION();' ) ; if ( ! $result ) die ( '0' ) ; mysql_close ( $link ) ; echo 'OK!' ;
  6. $link = mysql_connect ( 'localhost' , 'root' , 'password' ) or die ( '0' ) ; $result = mysql_query ( 'SELECT VERSION();' ) ; if ( ! $result ) die ( '0' ) ; mysql_close ( $link ) ; echo 'OK!' ;

डेटाबेस के साथ समस्याओं के मामले में, स्क्रिप्ट 0 वापस आ जाएगी, अगर सर्वर काम नहीं करता है या अपाचे जमा नहीं करता है, तो स्क्रिप्ट कुछ भी नहीं देगी, यदि सफल हो, तो संदेश "ओके!" प्रेषित किया जाएगा।
यह प्राथमिक सर्वर का सेटअप पूरा करता है।

डुप्लिकेट होस्टिंग कॉन्फ़िगर करें

रूट 53 एपीआई के साथ काम करने के लिए, मैंने रेडीमेड पीएचपी क्लास रूट 53 का उपयोग किया।
  1. परिभाषित ( 'MASTER_HOST' , 'xxx.xxx.xxx.xxx' ) ; // मुख्य सर्वर का आईपी पता
  2. परिभाषित ( 'SLAVE_HOST' , 'xxx.xxx.xxx.xxx' ) ; // अतिरिक्त सर्वर का आईपी पता
  3. परिभाषित ( 'ACCESS_KEY' , 'my_key' ) ; // एपीआई तक पहुंचने की कुंजी
  4. परिभाषित ( 'SECRET_KEY' , 'my_pass' ) ; // एपीआई तक पहुंचने के लिए पासवर्ड
  5. परिभाषित ( 'ZONE_ID' , '/ hostzone / my_zone_id' ) ; // ज़ोन आईडी (interstate53.com के लिए एक डोमेन जोड़ने के बाद देखा जा सकता है)
  6. 'r53.php' शामिल करें ;
  7. $ मार्ग = नया मार्ग 53 ( ACCESS_KEY , SECRET_KEY ) ;
  8. $ ns = $ मार्ग -> listResourceRecordSets ( ZONE_ID ) ; // तुरंत डोमेन के लिए ns रिकॉर्ड के मान प्राप्त करें
  9. समारोह परीक्षण ( ) {
  10. कोशिश करो {
  11. $ जवाब = file_get_contents ( 'http: //' MASTER_HOST '/' ) ;
  12. अगर ( $ जवाब == 'ठीक है!' ) // मुख्य सर्वर से प्रतिक्रिया की जाँच करें
  13. सच लौटना ;
  14. अन्यथा
  15. झूठे लौटना ;
  16. } पकड़ ( अपवाद $ ई ) {
  17. झूठे लौटना ;
  18. }
  19. }
  20. समारोह अद्यतन ( $ गिरफ्तार ) {
  21. अंतर्राष्ट्रीय $ मार्ग ;
  22. यदि ( गणना ( $ गिरफ्तारी ) > 0 )
  23. {
  24. $ मार्ग -> changeResourceRecordSets ( ZONE_ID , $ arr ) ; // एन एस रिकॉर्ड अपडेट करें
  25. }
  26. }
  27. फ़ंक्शन चेंज ( $ नाम , $ ttl , $ from_ip , $ to_ip ) { // फ़ंक्शन एक सरणी उत्पन्न करता है जिसमें एक प्रविष्टि पुराने को हटा देती है और दूसरा नया जोड़ता है
  28. वापसी ऐरे (
  29. "
  30. <बदलें>
  31. <Action> DELETE </ Action>
  32. <ResourceRecordSet>
  33. <नाम> $ नाम </ Name>
  34. <टाइप> ए </ टाइप>
  35. <टीटीएल> $ टीटीएल </ टीटीएल>
  36. <ResourceRecords>
  37. <ResourceRecord>
  38. <मान> $ from_ip </ मूल्य>
  39. </ ResourceRecord>
  40. </ ResourceRecords>
  41. </ ResourceRecordSet>
  42. </ बदलें>
  43. " ,
  44. "
  45. <बदलें>
  46. <Action> क्रिएट </ Action>
  47. <ResourceRecordSet>
  48. <नाम> $ नाम </ Name>
  49. <टाइप> ए </ टाइप>
  50. <टीटीएल> $ टीटीएल </ टीटीएल>
  51. <ResourceRecords>
  52. <ResourceRecord>
  53. <Value> $ to_ip </ value >
  54. </ ResourceRecord>
  55. </ ResourceRecords>
  56. </ ResourceRecordSet>
  57. </ बदलें>
  58. "
  59. ) ;
  60. }
  61. $ परिवर्तन = ऐरे ( ) ;
  62. अगर ( परीक्षण ( ) ) {
  63. अगर ( परीक्षण ( ) ) { // 2 बार विश्वसनीयता के लिए जाँच करें
  64. foreach ( $ ns [ 'ResourceRecordSets' ] $ रिकॉर्ड के रूप में ) {
  65. अगर ( $ रिकॉर्ड [ 'टाइप' ] == 'ए' और& $ रिकॉर्ड [ ' रिसोर्सकार्ड ' ] [ '0' ] == MASTER_HOST ) {
  66. $ परिवर्तन = array_merge ( $ परिवर्तन , changeIP ( $ रिकॉर्ड [ 'नाम' ] , $ रिकॉर्ड [ 'TTL' ] , MASTER_HOST , SLAVE_HOST ) ;
  67. }
  68. }
  69. अद्यतन ( $ परिवर्तन ) ;
  70. निकास ( 0 ) ;
  71. }
  72. }
  73. foreach ( $ ns [ 'ResourceRecordSets' ] $ रिकॉर्ड के रूप में ) {
  74. अगर ( $ रिकॉर्ड [ 'टाइप' ] == 'ए' और& $ रिकॉर्ड [ ' रिसोर्सकार्ड ' ] [ '0' ] == SLAVE_HOST ) {
  75. $ परिवर्तन = array_merge ( $ परिवर्तन , changeIP ( $ रिकॉर्ड [ 'नाम' ] , $ रिकॉर्ड [ 'TTL' ] , SLAVE_HOST , MASTER_HOST ) ;
  76. }
  77. }
  78. अद्यतन ( $ परिवर्तन ) ;
  79. निकास ( 0 ) ;


मैं कोड को थोड़ा क्रम में संक्षेप में प्रस्तुत करता हूं: हम जवाब के लिए सर्वर की जांच करते हैं "ठीक है!" विश्वसनीयता के लिए 2 बार, यदि उत्तर सही नहीं है, तो हम रिकॉर्ड बदलते हैं, यदि उत्तर सही है, तो हम रिकॉर्ड को वापस कर देते हैं।

यह क्रोन को कॉन्फ़िगर करने के लिए बनी हुई है

गीनो में, यह काफी सरलता से किया जाता है, हम परिणामी स्क्रिप्ट को परीक्षण डोमेन mydomain.jino.ru के फ़ोल्डर में फेंक देते हैं, "शेड्यूल किए गए कार्य" में "नया कार्य" पर क्लिक करें, फिर खेतों में भरें:
असाइनमेंट: कर्ल-एस mydomain.jino.ru/route53/core.php > / dev / null
टिप्पणी:
मिनट, घंटे, दिन, महीने, सप्ताह के दिन: *
हमारी स्क्रिप्ट को हर मिनट निष्पादित किया जाएगा। इसका मतलब यह है कि साइट का अधिकतम डाउनटाइम सबसे खराब परिदृश्य में 2 मिनट 29 सेकंड और सबसे कम 30 सेकंड (टीटीएल ए रिकॉर्ड के आधार पर) होगा।

परिणाम

आदर्श रूप से, निश्चित रूप से, आपको अतिरिक्त होस्टिंग पर साइट की एक प्रति रखनी चाहिए - संपर्कों के साथ एक स्प्लैश स्क्रीन और "सर्वर काम नहीं कर रहा है" शिलालेख कुछ लोगों को डरा सकता है। लेकिन इस विधि को भी अस्तित्व का अधिकार है।

Source: https://habr.com/ru/post/In122238/


All Articles