PostgreSQL மற்றும் பேஸ்மேக்கரை அடிப்படையாகக் கொண்ட மாடலிங் ஃபெயில்ஓவர் கிளஸ்டர்கள்

அறிமுகம்

சில காலத்திற்கு முன்பு எனக்கு ஒரு ஃபெயில்ஓவர் கிளஸ்டரை உருவாக்கும் பணி வழங்கப்பட்டது போஸ்ட்கெரே, ஒரு நகரத்திற்குள் ஆப்டிகல் ஃபைபர் மூலம் இணைக்கப்பட்ட பல தரவு மையங்களில் இயங்குகிறது மற்றும் ஒரு தரவு மையத்தின் தோல்வியை (உதாரணமாக, இருட்டடிப்பு) தாங்கும் திறன் கொண்டது. தவறு சகிப்புத்தன்மைக்கு பொறுப்பான மென்பொருளாக, நான் தேர்ந்தெடுத்தேன் இதயமுடுக்கிஏனெனில் இது ஃபெயில்ஓவர் கிளஸ்டர்களை உருவாக்குவதற்கான RedHat இன் அதிகாரப்பூர்வ தீர்வாகும். RedHat அதற்கான ஆதரவை வழங்குவதால் இது நல்லது, மேலும் இந்த தீர்வு உலகளாவியது (மட்டு). அதன் உதவியுடன், PostgreSQL இன் தவறு சகிப்புத்தன்மையை உறுதி செய்ய முடியும், ஆனால் மற்ற சேவைகள், நிலையான தொகுதிகளைப் பயன்படுத்துதல் அல்லது குறிப்பிட்ட தேவைகளுக்காக அவற்றை உருவாக்குதல்.

இந்த முடிவானது ஒரு நியாயமான கேள்வியை எழுப்பியது: ஒரு ஃபெயில்ஓவர் கிளஸ்டர் எவ்வளவு தவறுகளை பொறுத்துக்கொள்ளும்? இதை விசாரிக்க, நான் ஒரு சோதனை பெஞ்சை உருவாக்கினேன், இது கிளஸ்டர் முனைகளில் பல்வேறு தோல்விகளை உருவகப்படுத்துகிறது, சேவையை மீட்டெடுக்க காத்திருக்கிறது, தோல்வியுற்ற முனையை மீட்டெடுக்கிறது மற்றும் ஒரு சுழற்சியில் சோதனையைத் தொடர்கிறது. இந்த திட்டம் முதலில் hapgsql என்று அழைக்கப்பட்டது, ஆனால் காலப்போக்கில் ஒரே ஒரு உயிரெழுத்து கொண்ட பெயரால் நான் சலித்துவிட்டேன். எனவே, நான் தவறு-சகிப்புத்தன்மை கொண்ட தரவுத்தளங்களை அழைக்க ஆரம்பித்தேன் (மற்றும் மிதக்கும் IP அவற்றை சுட்டிக்காட்டுகிறது) க்ரோகன் (அனைத்து முக்கிய உறுப்புகளும் நகலெடுக்கப்பட்ட கணினி விளையாட்டின் பாத்திரம்), மற்றும் முனைகள், கொத்துகள் மற்றும் திட்டமே துச்சாங்கா (குரோகன்கள் வாழும் கிரகம்).

தற்போது நிர்வாகம் அனுமதித்துள்ளது MIT உரிமத்தின் கீழ் திறந்த மூல சமூகத்திற்கு திட்டத்தை திறக்கவும். README விரைவில் ஆங்கிலத்தில் மொழிபெயர்க்கப்படும் (ஏனெனில் முக்கிய நுகர்வோர் பேஸ்மேக்கர் மற்றும் PostgreSQL டெவலப்பர்களாக இருப்பார்கள் என்று எதிர்பார்க்கப்படுகிறது), மேலும் README இன் பழைய ரஷ்ய பதிப்பை (ஓரளவு) இந்த கட்டுரையின் வடிவத்தில் வழங்க முடிவு செய்தேன்.

PostgreSQL மற்றும் பேஸ்மேக்கரை அடிப்படையாகக் கொண்ட மாடலிங் ஃபெயில்ஓவர் கிளஸ்டர்கள்

மெய்நிகர் கணினிகளில் கிளஸ்டர்கள் பயன்படுத்தப்படுகின்றன கற்பனையாக்கப்பெட்டியை. மொத்தம் 12 மெய்நிகர் இயந்திரங்கள் (மொத்தம் 36GiB) வரிசைப்படுத்தப்படும், அவை 4 தவறுகளை பொறுத்துக்கொள்ளும் கிளஸ்டர்களை (வெவ்வேறு விருப்பங்கள்) உருவாக்குகின்றன. முதல் இரண்டு கிளஸ்டர்கள் இரண்டு PostgreSQL சேவையகங்களைக் கொண்டிருக்கின்றன, அவை வெவ்வேறு தரவு மையங்களில் அமைந்துள்ளன, மேலும் ஒரு பொதுவான சேவையகம் சாட்சி c கோரம் சாதனம் (மூன்றாவது தரவு மையத்தில் மலிவான மெய்நிகர் கணினியில் வழங்கப்படுகிறது), இது நிச்சயமற்ற தன்மையை தீர்க்கிறது 50% / 50%, உங்கள் வாக்குகளை ஒரு கட்சிக்கு வழங்குங்கள். மூன்று தரவு மையங்களில் மூன்றாவது கிளஸ்டர்: ஒரு மாஸ்டர், இரண்டு அடிமைகள், எண் கோரம் சாதனம். நான்காவது கிளஸ்டர் நான்கு PostgreSQL சேவையகங்களைக் கொண்டுள்ளது, ஒரு தரவு மையத்திற்கு இரண்டு: ஒரு மாஸ்டர், மீதமுள்ள பிரதிகள், மேலும் பயன்படுத்துகிறது சாட்சி c கோரம் சாதனம். நான்காவது இரண்டு சேவையகங்கள் அல்லது ஒரு தரவு மையத்தின் தோல்வியைத் தாங்கும். தேவைப்பட்டால் இந்த தீர்வை அதிக எண்ணிக்கையிலான பிரதிகளுக்கு அளவிடலாம்.

துல்லியமான நேர சேவை என்டிபிடி தவறு சகிப்புத்தன்மைக்காகவும் மறுகட்டமைக்கப்பட்டது, ஆனால் அது முறையையே பயன்படுத்துகிறது ntpd (அனாதை முறை) பகிரப்பட்ட சர்வர் சாட்சி மத்திய NTP சேவையகமாக செயல்படுகிறது, அதன் நேரத்தை அனைத்து கிளஸ்டர்களுக்கும் விநியோகிக்கிறது, இதன் மூலம் அனைத்து சேவையகங்களையும் ஒன்றோடொன்று ஒத்திசைக்கிறது. என்றால் சாட்சி தோல்வியுற்றால் அல்லது தனிமைப்படுத்தப்பட்டால், கிளஸ்டர் சேவையகங்களில் ஒன்று (கிளஸ்டருக்குள்) அதன் நேரத்தை விநியோகிக்கத் தொடங்கும். துணை கேச்சிங் HTTP ப்ராக்ஸி வரை உயர்த்தப்பட்டது சாட்சி, அதன் உதவியுடன், பிற மெய்நிகர் இயந்திரங்கள் Yum களஞ்சியங்களை அணுகலாம். உண்மையில், துல்லியமான நேரம் மற்றும் ப்ராக்ஸிகள் போன்ற சேவைகள் பெரும்பாலும் பிரத்யேக சர்வர்களில் ஹோஸ்ட் செய்யப்படும், ஆனால் சாவடியில் அவை ஹோஸ்ட் செய்யப்படுகின்றன. சாட்சி மெய்நிகர் இயந்திரங்கள் மற்றும் இடத்தை சேமிக்க மட்டுமே.

பதிப்புகள்

v0. VirtualBox 7 இல் CentOS 11 மற்றும் PostgreSQL 6.1 உடன் வேலை செய்கிறது.

கிளஸ்டர் அமைப்பு

அனைத்து க்ளஸ்டர்களும் பல தரவு மையங்களில் அமைந்திருக்கும் வகையில் வடிவமைக்கப்பட்டுள்ளன, ஒரு பிளாட் நெட்வொர்க்கில் இணைக்கப்பட்டு, ஒரு தரவு மையத்தின் தோல்வி அல்லது நெட்வொர்க் தனிமைப்படுத்தலைத் தாங்க வேண்டும். அதனால் தான் சாத்தியமற்றது எதிராக பாதுகாப்பு பயன்படுத்த பிளவு-மூளை நிலையான இதயமுடுக்கி தொழில்நுட்பம் என்று அழைக்கப்படுகிறது ஸ்டோனித் (ஷூட் தி அதர் நோட் இன் தி ஹெட்) அல்லது ஃபென்சிங். அதன் சாராம்சம்: க்ளஸ்டரில் உள்ள கணுக்கள் ஏதேனும் ஒரு முனையில் ஏதோ தவறு இருப்பதாக சந்தேகிக்கத் தொடங்கினால், அது பதிலளிக்கவில்லை அல்லது தவறாக நடந்துகொள்கிறது, பின்னர் அவர்கள் அதை "வெளிப்புற" சாதனங்கள் மூலம் வலுக்கட்டாயமாக அணைக்கிறார்கள், எடுத்துக்காட்டாக, ஐபிஎம்ஐ அல்லது யுபிஎஸ் கட்டுப்பாட்டு அட்டை . ஆனால் ஒரு முறை தோல்வியுற்றால், ஐபிஎம்ஐ அல்லது யுபிஎஸ் சர்வர் தொடர்ந்து செயல்படும் சந்தர்ப்பங்களில் மட்டுமே இது செயல்படும். முழு தரவு மையமும் தோல்வியடையும் போது (உதாரணமாக, சக்தியை இழக்கும்போது) மிகவும் பேரழிவுகரமான தோல்வியிலிருந்து பாதுகாக்க இங்கே நாங்கள் திட்டமிட்டுள்ளோம். அத்தகைய மறுப்புடன், எல்லாம் ஸ்டோனித்சாதனங்களும் (IPMI, UPS போன்றவை) வேலை செய்யாது.

மாறாக, அமைப்பு கோரம் என்ற கருத்தை அடிப்படையாகக் கொண்டது. எல்லா முனைகளிலும் ஒரு குரல் உள்ளது, மேலும் அனைத்து முனைகளிலும் பாதிக்கும் மேலானவை மட்டுமே வேலை செய்ய முடியும். இந்த அளவு "அரை + 1" என்று அழைக்கப்படுகிறது கோரம். கோரம் அடையவில்லை என்றால், அது பிணைய தனிமைப்படுத்தலில் இருப்பதாக கணு தீர்மானிக்கிறது மற்றும் அதன் ஆதாரங்களை அணைக்க வேண்டும், அதாவது. இதுதான் அது பிளவு-மூளை பாதுகாப்பு. இந்த நடத்தைக்கு காரணமான மென்பொருள் வேலை செய்யவில்லை என்றால், IPMI ஐ அடிப்படையாகக் கொண்ட ஒரு கண்காணிப்புக் குழு வேலை செய்ய வேண்டும்.

முனைகளின் எண்ணிக்கை சமமாக இருந்தால் (இரண்டு தரவு மையங்களில் ஒரு கிளஸ்டர்), பின்னர் நிச்சயமற்ற தன்மை என்று அழைக்கப்படும் 50% / 50% (பாதிக்கு பாதி) நெட்வொர்க் தனிமைப்படுத்தல் கிளஸ்டரை சரியாக பாதியாக பிரிக்கும் போது. எனவே, சம எண்ணிக்கையிலான முனைகளுக்கு, நாங்கள் சேர்க்கிறோம் கோரம் சாதனம் மூன்றாவது தரவு மையத்தில் மலிவான மெய்நிகர் கணினியில் தொடங்கக்கூடிய ஒரு கோரப்படாத டீமான். அவர் தனது வாக்குகளை ஒரு பிரிவில் (அவர் பார்க்கிறார்) கொடுக்கிறார், அதன் மூலம் 50%/50% நிச்சயமற்ற தன்மையைத் தீர்க்கிறார். கோரம் சாதனம் தொடங்கப்படும் சேவையகத்திற்கு நான் பெயரிட்டேன் சாட்சி (repmgr இலிருந்து சொற்கள், எனக்கு பிடித்திருந்தது).

வளங்களை இடத்திலிருந்து இடத்திற்கு நகர்த்தலாம், எடுத்துக்காட்டாக, தவறான சேவையகங்களிலிருந்து ஆரோக்கியமானவைக்கு அல்லது கணினி நிர்வாகிகளின் கட்டளையின்படி. வாடிக்கையாளர்கள் தங்களுக்குத் தேவையான ஆதாரங்கள் எங்கு உள்ளன (எங்கே இணைப்பது?) மிதக்கும் ஐபி (மிதவை ஐபி) இவை இதயமுடுக்கி முனைகளைச் சுற்றி நகரக்கூடிய IPகள் (எல்லாமே ஒரு தட்டையான நெட்வொர்க்கில் உள்ளது). அவை ஒவ்வொன்றும் ஒரு வளத்தை (சேவை) அடையாளப்படுத்துகின்றன, மேலும் இந்த சேவைக்கான அணுகலைப் பெற நீங்கள் இணைக்க வேண்டிய இடத்தில் இருக்கும் (எங்கள் விஷயத்தில், ஒரு தரவுத்தளம்).

துச்சங்கா1 (சுருக்கத்துடன் கூடிய சுற்று)

அமைப்பு

PostgreSQL மற்றும் பேஸ்மேக்கரை அடிப்படையாகக் கொண்ட மாடலிங் ஃபெயில்ஓவர் கிளஸ்டர்கள்

குறைந்த சுமையுடன் கூடிய பல சிறிய தரவுத்தளங்கள் எங்களிடம் உள்ளன, அதற்காக பிரத்யேக அடிமை சேவையகத்தை ஹாட் ஸ்டான்ட்பை பயன்முறையில் படிக்க மட்டும் பரிவர்த்தனைகளுக்குப் பராமரிப்பது லாபமற்றது (இதுபோன்ற வளங்களை வீணாக்க வேண்டிய அவசியமில்லை).

ஒவ்வொரு தரவு மையத்திற்கும் ஒரு சர்வர் உள்ளது. ஒவ்வொரு சேவையகத்திற்கும் இரண்டு PostgreSQL நிகழ்வுகள் உள்ளன (PostgreSQL சொற்களஞ்சியத்தில் அவை கிளஸ்டர்கள் என்று அழைக்கப்படுகின்றன, ஆனால் குழப்பத்தைத் தவிர்க்க நான் அவற்றை நிகழ்வுகள் என்று அழைப்பேன் (மற்ற தரவுத்தளங்களுடன் ஒப்பிடுவதன் மூலம்), மேலும் நான் பேஸ்மேக்கர் கிளஸ்டர்கள் கிளஸ்டர்களை மட்டுமே அழைப்பேன்). ஒரு நிகழ்வு முதன்மை பயன்முறையில் இயங்குகிறது, மேலும் அது மட்டுமே சேவைகளை வழங்குகிறது (ஃப்ளோட் ஐபி மட்டுமே அதற்கு வழிவகுக்கிறது). இரண்டாவது நிகழ்வு இரண்டாவது தரவு மையத்திற்கு அடிமையாக செயல்படுகிறது, மேலும் அதன் மாஸ்டர் தோல்வியுற்றால் மட்டுமே சேவைகளை வழங்கும். பெரும்பாலான நேரங்களில் இரண்டில் ஒரு நிகழ்வு மட்டுமே (மாஸ்டர்) சேவைகளை வழங்கும் (கோரிக்கைகளை நிறைவேற்றும்), அனைத்து சேவையக வளங்களும் முதன்மைக்கு உகந்ததாக இருக்கும் (பகிர்வு_பஃபர்ஸ் கேச் போன்றவற்றுக்கு நினைவகம் ஒதுக்கப்படுகிறது), ஆனால் இரண்டாவது நிகழ்வு தரவு மையங்களில் ஒன்று தோல்வியுற்றால் போதுமான ஆதாரங்கள் உள்ளன ( கோப்பு முறைமை கேச் மூலம் துணை உகந்த செயல்பாட்டிற்கு என்றாலும்). க்ளஸ்டரின் இயல்பான செயல்பாட்டின் போது அடிமை சேவைகளை வழங்குவதில்லை (படிக்க மட்டும் கோரிக்கைகளைச் செய்யாது), அதனால் அதே கணினியில் எஜமானருடன் வளங்களுக்காக போர் இல்லை.

இரண்டு முனைகளின் விஷயத்தில், ஒத்திசைவற்ற நகலெடுப்பால் மட்டுமே தவறு சகிப்புத்தன்மை சாத்தியமாகும், ஏனெனில் ஒத்திசைவான நகலெடுப்புடன், அடிமையின் தோல்வி எஜமானரின் நிறுத்தத்திற்கு வழிவகுக்கும்.

சாட்சி தவறுதல்

PostgreSQL மற்றும் பேஸ்மேக்கரை அடிப்படையாகக் கொண்ட மாடலிங் ஃபெயில்ஓவர் கிளஸ்டர்கள்

சாட்சி கொடுக்கத் தவறியது (கோரம் சாதனம்) நான் துச்சாங்கா1 கிளஸ்டருக்கு மட்டுமே பரிசீலிப்பேன், மற்ற எல்லாவற்றிலும் இது ஒரே கதையாக இருக்கும். சாட்சி தோல்வியுற்றால், கிளஸ்டர் கட்டமைப்பில் எதுவும் மாறாது, எல்லாம் அது செய்ததைப் போலவே தொடர்ந்து செயல்படும். ஆனால் கோரம் 2 இல் 3 ஆகிவிடும், எனவே அடுத்தடுத்த தோல்விகள் கிளஸ்டருக்கு ஆபத்தானதாக இருக்கும். அதை இன்னும் அவசரமாக சரி செய்ய வேண்டும்.

துச்சாங்க1 மறுப்பு

PostgreSQL மற்றும் பேஸ்மேக்கரை அடிப்படையாகக் கொண்ட மாடலிங் ஃபெயில்ஓவர் கிளஸ்டர்கள்

Tuchanka1 க்கான தரவு மையங்களில் ஒன்றின் தோல்வி. இந்த வழக்கில் சாட்சி இரண்டாவது தரவு மையத்தில் இரண்டாவது முனைக்கு தனது வாக்கைச் செலுத்துகிறது. அங்கு, முன்னாள் அடிமை ஒரு எஜமானராக மாறுகிறார், இதன் விளைவாக, இரண்டு எஜமானர்களும் ஒரே சேவையகத்தில் வேலை செய்கிறார்கள், மேலும் அவர்களின் மிதவை ஐபிகள் இரண்டும் அவர்களை சுட்டிக்காட்டுகின்றன.

துச்சங்கா2 (கிளாசிக்கல்)

அமைப்பு

PostgreSQL மற்றும் பேஸ்மேக்கரை அடிப்படையாகக் கொண்ட மாடலிங் ஃபெயில்ஓவர் கிளஸ்டர்கள்

இரண்டு முனைகளின் உன்னதமான திட்டம். எஜமானன் ஒன்றில் வேலை செய்கிறான், அடிமை இரண்டாவது வேலை செய்கிறான். இருவரும் கோரிக்கைகளை இயக்க முடியும் (அடிமை படிக்க மட்டுமே), எனவே இருவரும் மிதவை IP மூலம் சுட்டிக்காட்டப்படுகிறார்கள்: krogan2 மாஸ்டர், krogan2s1 அடிமை. எஜமானர் மற்றும் அடிமை இருவருக்கும் தவறு சகிப்புத்தன்மை இருக்கும்.

இரண்டு முனைகளின் விஷயத்தில், தவறு சகிப்புத்தன்மை ஒத்திசைவற்ற நகலெடுப்புடன் மட்டுமே சாத்தியமாகும், ஏனெனில் ஒத்திசைவான நகலெடுப்புடன், அடிமையின் தோல்வி எஜமானரின் நிறுத்தத்திற்கு வழிவகுக்கும்.

துச்சாங்க2 மறுப்பு

PostgreSQL மற்றும் பேஸ்மேக்கரை அடிப்படையாகக் கொண்ட மாடலிங் ஃபெயில்ஓவர் கிளஸ்டர்கள்

தரவு மையங்களில் ஒன்று தோல்வியுற்றால் சாட்சி இரண்டாவது ஒருவருக்கு வாக்கு. ஒரே வேலை செய்யும் தரவு மையத்தில், மாஸ்டர் உயர்த்தப்படுவார், மேலும் இரண்டு மிதவை ஐபிகளும் அதைச் சுட்டிக்காட்டும்: மாஸ்டர் மற்றும் ஸ்லேவ். நிச்சயமாக, மாஸ்டர் மற்றும் ஸ்லேவ் ஃப்ளோட் IP இலிருந்து அனைத்து இணைப்புகள் மற்றும் கோரிக்கைகளை ஒரே நேரத்தில் ஏற்றுக்கொள்ள போதுமான ஆதாரங்கள் (இணைப்பு வரம்புகள், முதலியன) இருக்கும் வகையில் நிகழ்வு கட்டமைக்கப்பட வேண்டும். அதாவது, சாதாரண செயல்பாட்டின் போது அது போதுமான வரம்புகளைக் கொண்டிருக்க வேண்டும்.

துச்சாங்கா4 (பல அடிமைகள்)

அமைப்பு

PostgreSQL மற்றும் பேஸ்மேக்கரை அடிப்படையாகக் கொண்ட மாடலிங் ஃபெயில்ஓவர் கிளஸ்டர்கள்

ஏற்கனவே மற்றொரு தீவிரம். நிறைய படிக்க-மட்டும் கோரிக்கைகளைப் பெறும் தரவுத்தளங்கள் உள்ளன (அதிக சுமை தளத்தின் பொதுவான வழக்கு). துச்சாங்கா4 என்பது அத்தகைய கோரிக்கைகளைக் கையாள மூன்று அல்லது அதற்கு மேற்பட்ட அடிமைகள் இருக்கலாம், ஆனால் இன்னும் அதிகமாக இல்லை. அதிக எண்ணிக்கையிலான அடிமைகளுடன், ஒரு படிநிலை நகலெடுக்கும் அமைப்பைக் கண்டுபிடிப்பது அவசியம். குறைந்தபட்ச வழக்கில் (படத்தில்), இரண்டு தரவு மையங்களில் ஒவ்வொன்றும் இரண்டு சேவையகங்களைக் கொண்டிருக்கும், ஒவ்வொன்றும் PostgreSQL நிகழ்வுடன் இருக்கும்.

இந்த திட்டத்தின் மற்றொரு அம்சம் என்னவென்றால், ஒரு ஒத்திசைவான பிரதியை ஒழுங்கமைப்பது ஏற்கனவே சாத்தியமாகும். இது மாஸ்டரின் அதே தரவு மையத்தில் உள்ள ஒரு பிரதிக்கு பதிலாக, முடிந்தால், மற்றொரு தரவு மையத்திற்கு நகலெடுக்கும் வகையில் கட்டமைக்கப்பட்டுள்ளது. எஜமானரும் ஒவ்வொரு அடிமையும் ஒரு மிதவை ஐபி மூலம் சுட்டிக்காட்டப்படுகிறார்கள். அதிர்ஷ்டவசமாக, அடிமைகளுக்கு இடையில் எப்படியாவது கோரிக்கைகளை சமநிலைப்படுத்துவது அவசியம் sql ப்ராக்ஸி, எடுத்துக்காட்டாக, கிளையன்ட் பக்கத்தில். வெவ்வேறு வகையான வாடிக்கையாளர்களுக்கு வெவ்வேறு வகைகள் தேவைப்படலாம் sql ப்ராக்ஸி, மற்றும் கிளையன்ட் டெவலப்பர்களுக்கு மட்டுமே யாருக்கு எது தேவை என்று தெரியும். இந்தச் செயல்பாட்டை வெளிப்புற டீமான் அல்லது கிளையன்ட் லைப்ரரி (இணைப்புக் குளம்) போன்றவற்றால் செயல்படுத்தலாம். இவை அனைத்தும் தோல்வி தரவுத்தள கிளஸ்டர் (தோல்வி) என்ற தலைப்புக்கு அப்பாற்பட்டவை SQL ப்ராக்ஸி வாடிக்கையாளர் தவறு சகிப்புத்தன்மையுடன் சுதந்திரமாக செயல்படுத்தப்படலாம்).

துச்சாங்க4 மறுப்பு

PostgreSQL மற்றும் பேஸ்மேக்கரை அடிப்படையாகக் கொண்ட மாடலிங் ஃபெயில்ஓவர் கிளஸ்டர்கள்

ஒரு தரவு மையம் (அதாவது, இரண்டு சேவையகங்கள்) தோல்வியுற்றால், சாட்சி இரண்டாவது வாக்களிக்கிறார். இதன் விளைவாக, இரண்டாவது தரவு மையத்தில் இரண்டு சேவையகங்கள் இயங்குகின்றன: ஒன்று மாஸ்டரை இயக்குகிறது, மேலும் மாஸ்டர் ஃப்ளோட் ஐபி புள்ளிகளை (வாசிப்பு-எழுது கோரிக்கைகளைப் பெறுவதற்காக) இரண்டாவது சேவையகத்தில் ஒத்திசைவான நகலெடுப்புடன் இயங்கும் அடிமை உள்ளது, மேலும் அடிமை மிதவை ஐபிகளில் ஒன்று அதைச் சுட்டிக்காட்டுகிறது (படிக்க-மட்டும் கோரிக்கைகளுக்கு).

கவனிக்க வேண்டிய முதல் விஷயம் என்னவென்றால், அனைத்து அடிமை மிதவை ஐபிகளும் தொழிலாளர்களாக இருக்காது, ஆனால் ஒருவர் மட்டுமே. அதனுடன் சரியாக வேலை செய்ய அது அவசியம் sql ப்ராக்ஸி அனைத்து கோரிக்கைகளையும் மீதமுள்ள ஒரே ஃப்ளோட் ஐபிக்கு திருப்பிவிடப்பட்டது; மற்றும் என்றால் sql ப்ராக்ஸி இல்லை, பின்னர் நீங்கள் இணைப்பு URL இல் காற்புள்ளிகளால் பிரிக்கப்பட்ட அனைத்து மிதவை IP ஸ்லேவ்களையும் பட்டியலிடலாம். இந்த வழக்கில், உடன் libpq இணைப்பு முதல் வேலை செய்யும் ஐபியுடன் இருக்கும், இது தானியங்கி சோதனை அமைப்பில் செய்யப்படுகிறது. ஒருவேளை மற்ற நூலகங்களில், எடுத்துக்காட்டாக, ஜேடிபிசி, இது வேலை செய்யாது மற்றும் அவசியம் sql ப்ராக்ஸி. அடிமைகளுக்கான ஃப்ளோட் ஐபிகள் ஒரு சர்வரில் ஒரே நேரத்தில் உருவாக்கப்படுவது தடைசெய்யப்பட்டிருப்பதால், அவற்றில் பல இயங்கினால் அடிமைச் சேவையகங்களிடையே சமமாக விநியோகிக்கப்படும்.

இரண்டாவது: தரவு மையம் தோல்வியுற்றாலும், ஒத்திசைவான பிரதிகள் பராமரிக்கப்படும். இரண்டாம் நிலை தோல்வி ஏற்பட்டாலும், அதாவது, மீதமுள்ள தரவு மையத்தில் உள்ள இரண்டு சேவையகங்களில் ஒன்று தோல்வியுற்றாலும், கிளஸ்டர், சேவைகளை வழங்குவதை நிறுத்தினாலும், உறுதிப்பாட்டை உறுதிப்படுத்திய அனைத்து பரிவர்த்தனைகள் பற்றிய தகவலையும் தக்க வைத்துக் கொள்ளும். (இரண்டாம் நிலை தோல்வி ஏற்பட்டால் இழப்புத் தகவல் இருக்காது).

Tuchanka3 (3 தரவு மையங்கள்)

அமைப்பு

PostgreSQL மற்றும் பேஸ்மேக்கரை அடிப்படையாகக் கொண்ட மாடலிங் ஃபெயில்ஓவர் கிளஸ்டர்கள்

இது மூன்று முழுமையாக செயல்படும் தரவு மையங்கள் இருக்கும் சூழ்நிலைக்கான ஒரு கிளஸ்டர் ஆகும், ஒவ்வொன்றும் முழுமையாக செயல்படும் தரவுத்தள சேவையகத்தைக் கொண்டுள்ளது. இந்த வழக்கில் கோரம் சாதனம் தேவையில்லை. ஒரு தரவு மையத்தில் ஒரு மாஸ்டர் பணியாற்றுகிறார், மற்ற இரண்டில் அடிமைகள் பணியாற்றுகிறார்கள். நகலெடுப்பது ஒத்திசைவானது, ANY என டைப் செய்யவும் (slave1, slave2), அதாவது, வாடிக்கையாளர் உறுதிமொழியை ஏற்றுக்கொண்டதாக முதலில் பதிலளிக்கும் போது, ​​வாடிக்கையாளர் உறுதிமொழியைப் பெறுவார். எஜமானருக்கு ஒரு மிதவை ஐபி மற்றும் அடிமைகளுக்கு இரண்டு ஆதாரங்கள் குறிக்கப்படுகின்றன. Tuchanka4 போலல்லாமல், மூன்று மிதவை IPகளும் தவறு-சகிப்புத்தன்மை கொண்டவை. படிக்க மட்டுமேயான SQL வினவல்களை சமன் செய்ய நீங்கள் பயன்படுத்தலாம் sql ப்ராக்ஸி (தனி தவறு சகிப்புத்தன்மையுடன்), அல்லது ஒரு ஸ்லேவ் ஃப்ளோட் ஐபியை பாதி வாடிக்கையாளர்களுக்கு ஒதுக்கவும், மற்ற பாதியை இரண்டாவது நபருக்கு ஒதுக்கவும்.

துச்சாங்க3 மறுப்பு

PostgreSQL மற்றும் பேஸ்மேக்கரை அடிப்படையாகக் கொண்ட மாடலிங் ஃபெயில்ஓவர் கிளஸ்டர்கள்

தரவு மையங்களில் ஒன்று தோல்வியுற்றால், இரண்டு இருக்கும். ஒன்றில், மாஸ்டரிடமிருந்து மாஸ்டர் மற்றும் ஃப்ளோட் ஐபி உயர்த்தப்பட்டது, இரண்டாவதாக - ஸ்லேவ் மற்றும் ஸ்லேவ் ஃப்ளோட் ஐபிகள் (இரண்டு ஸ்லேவ் ஃப்ளோட் ஐபிகளிலிருந்தும் அனைத்து இணைப்புகளையும் ஏற்க, இந்த நிகழ்வில் இரட்டை ஆதாரங்கள் இருக்க வேண்டும்). எஜமானர்களுக்கும் அடிமைகளுக்கும் இடையே ஒத்திசைவான பிரதிபலிப்பு. மேலும், இரண்டு தரவு மையங்கள் அழிக்கப்பட்டால் (அவை ஒரே நேரத்தில் அழிக்கப்படாவிட்டால்) உறுதியான மற்றும் உறுதிப்படுத்தப்பட்ட பரிவர்த்தனைகள் பற்றிய தகவல்களை (தகவல் இழப்பு ஏற்படாது) கிளஸ்டர் சேமிக்கும்.

கோப்பு அமைப்பு மற்றும் வரிசைப்படுத்தல் பற்றிய விரிவான விளக்கத்தை சேர்க்க வேண்டாம் என்று முடிவு செய்தேன். விளையாட விரும்பும் எவரும் அதை README இல் படிக்கலாம். நான் தானியங்கு சோதனையின் விளக்கத்தை மட்டுமே வழங்குகிறேன்.

தானியங்கி சோதனை அமைப்பு

பல்வேறு தவறுகளை உருவகப்படுத்துவதன் மூலம் கிளஸ்டர்களின் தவறு சகிப்புத்தன்மையை சோதிக்க, ஒரு தானியங்கி சோதனை அமைப்பு உருவாக்கப்பட்டது. ஸ்கிரிப்ட் மூலம் தொடங்கப்பட்டது test/failure. நீங்கள் சோதிக்க விரும்பும் கிளஸ்டர்களின் எண்ணிக்கையை ஸ்கிரிப்ட் அளவுருக்களாக எடுத்துக் கொள்ளலாம். உதாரணமாக இந்த கட்டளை:

test/failure 2 3

இரண்டாவது மற்றும் மூன்றாவது கிளஸ்டரை மட்டுமே சோதிக்கும். அளவுருக்கள் குறிப்பிடப்படவில்லை என்றால், அனைத்து கிளஸ்டர்களும் சோதிக்கப்படும். அனைத்து க்ளஸ்டர்களும் இணையாக சோதிக்கப்பட்டு, முடிவு tmux பேனலில் காட்டப்படும். Tmux ஒரு பிரத்யேக tmux சேவையகத்தைப் பயன்படுத்துகிறது, எனவே ஸ்கிரிப்டை இயல்புநிலை tmux இல் இருந்து இயக்கலாம், இதன் விளைவாக உள்ளமைக்கப்பட்ட tmux. டெர்மினலை பெரிய சாளரத்திலும் சிறிய எழுத்துருவிலும் பயன்படுத்த பரிந்துரைக்கிறேன். சோதனை தொடங்கும் முன், ஸ்கிரிப்ட் முடிவடையும் நேரத்தில் அனைத்து மெய்நிகர் இயந்திரங்களும் மீண்டும் ஒரு ஸ்னாப்ஷாட்டுக்கு உருட்டப்படும். setup.

PostgreSQL மற்றும் பேஸ்மேக்கரை அடிப்படையாகக் கொண்ட மாடலிங் ஃபெயில்ஓவர் கிளஸ்டர்கள்

சோதனை செய்யப்படும் க்ளஸ்டர்களின் எண்ணிக்கைக்கு ஏற்ப டெர்மினல் நெடுவரிசைகளாக பிரிக்கப்பட்டுள்ளது; இயல்பாக (ஸ்கிரீன்ஷாட்டில்) நான்கு உள்ளன. Tuchanka2 உதாரணத்தைப் பயன்படுத்தி நெடுவரிசைகளின் உள்ளடக்கங்களை விவரிக்கிறேன். ஸ்கிரீன்ஷாட்டில் உள்ள பேனல்கள் எண்ணப்பட்டுள்ளன:

  1. சோதனை புள்ளிவிவரங்கள் இங்கே காட்டப்படும். நெடுவரிசைகள்:
    • தோல்வி - பிழையைப் பின்பற்றும் சோதனையின் பெயர் (ஸ்கிரிப்டில் செயல்பாடு).
    • எதிர்வினை - வினாடிகளில் எண்கணித சராசரி நேரம், இதன் போது கிளஸ்டர் அதன் செயல்பாட்டை மீட்டெடுத்தது. இது ஸ்கிரிப்ட்டின் தொடக்கத்திலிருந்து ஒரு பிழையைப் பின்பற்றி அதன் செயல்பாட்டை மீட்டெடுக்கும் மற்றும் தொடர்ந்து சேவைகளை வழங்கும் தருணம் வரை அளவிடப்படுகிறது. நேரம் மிகவும் குறுகியதாக இருந்தால், எடுத்துக்காட்டாக, ஆறு வினாடிகள் (இது பல அடிமைகள் (துச்சாங்கா 3 மற்றும் துச்சங்கா 4) கொண்ட கிளஸ்டர்களில் நடக்கிறது), இதன் பொருள் ஒத்திசைவற்ற அடிமை மீது தவறு இருந்தது மற்றும் செயல்திறனை எந்த வகையிலும் பாதிக்கவில்லை; இல்லை கிளஸ்டர் நிலை சுவிட்சுகள்.
    • விலகல் - மதிப்பின் பரவலை (துல்லியம்) காட்டுகிறது எதிர்வினை நிலையான விலகல் முறையைப் பயன்படுத்துதல்.
    • எண்ண - இந்த சோதனை எத்தனை முறை செய்யப்பட்டது.
  2. க்ளஸ்டர் தற்போது என்ன செய்கிறது என்பதை மதிப்பீடு செய்ய ஒரு குறுகிய பதிவு உங்களை அனுமதிக்கிறது. மறு செய்கை (சோதனை) எண், நேர முத்திரை மற்றும் செயல்பாட்டின் பெயர் காட்டப்படும். அதிக நேரம் (> 5 நிமிடங்கள்) ஓடுவது சிக்கலைக் குறிக்கிறது.
  3. இதயம் (இதயம்) - தற்போதைய நேரம். செயல்திறன் காட்சி மதிப்பீட்டிற்கு முதுநிலை தற்போதைய நேரம் ஃப்ளோட் ஐபி மாஸ்டரைப் பயன்படுத்தி அதன் அட்டவணையில் தொடர்ந்து எழுதப்படுகிறது. வெற்றியடைந்தால், இந்த பேனலில் முடிவு காட்டப்படும்.
  4. அடிக்க (துடிப்பு) - "தற்போதைய நேரம்", இது முன்பு ஸ்கிரிப்ட் மூலம் பதிவு செய்யப்பட்டது இதயம் தேர்ச்சி பெற, இப்போது படிக்கவும் அடிமை அதன் மிதவை ஐபி வழியாக. அடிமை மற்றும் நகலெடுப்பின் செயல்திறனை பார்வைக்கு மதிப்பிட உங்களை அனுமதிக்கிறது. Tuchanka1 இல் மிதவை IP உடன் அடிமைகள் இல்லை (சேவைகளை வழங்கும் அடிமைகள் இல்லை), ஆனால் இரண்டு நிகழ்வுகள் (DBs) உள்ளன, எனவே அது இங்கே காட்டப்படாது. அடிக்கமற்றும் இதயம் இரண்டாவது நிகழ்வு.
  5. பயன்பாட்டைப் பயன்படுத்தி கிளஸ்டர் ஆரோக்கியத்தை கண்காணித்தல் pcs mon. கட்டமைப்பு, முனைகளில் வளங்களின் விநியோகம் மற்றும் பிற பயனுள்ள தகவல்களைக் காட்டுகிறது.
  6. கிளஸ்டரில் உள்ள ஒவ்வொரு மெய்நிகர் கணினியிலிருந்தும் கணினி கண்காணிப்பு இங்கே காட்டப்படும். கிளஸ்டரில் எத்தனை மெய்நிகர் இயந்திரங்கள் உள்ளன என்பதைப் பொறுத்து பல பேனல்கள் இருக்கலாம். இரண்டு வரைபடங்கள் CPU சுமை (மெய்நிகர் இயந்திரங்களில் இரண்டு செயலிகள் உள்ளன), மெய்நிகர் இயந்திரத்தின் பெயர், கணினி சுமை (சராசரியாக 5, 10 மற்றும் 15 நிமிடங்களுக்கு மேல் இருப்பதால் சுமை சராசரி எனப் பெயரிடப்பட்டது), தரவு மற்றும் நினைவக ஒதுக்கீட்டைச் செயலாக்குகிறது.
  7. ஸ்கிரிப்ட் சோதனையின் தடயம். செயலிழப்பு ஏற்பட்டால் - செயல்பாட்டின் திடீர் குறுக்கீடு அல்லது முடிவற்ற காத்திருப்பு சுழற்சி - இந்த நடத்தைக்கான காரணத்தை இங்கே காணலாம்.

சோதனை இரண்டு நிலைகளில் மேற்கொள்ளப்படுகிறது. முதலில், ஸ்கிரிப்ட் அனைத்து வகையான சோதனைகளிலும் செல்கிறது, இந்த சோதனையைப் பயன்படுத்துவதற்கு ஒரு மெய்நிகர் இயந்திரத்தைத் தோராயமாகத் தேர்ந்தெடுக்கிறது. பின்னர் முடிவில்லாத சோதனை சுழற்சி செய்யப்படுகிறது, மெய்நிகர் இயந்திரங்கள் மற்றும் தவறு ஒவ்வொரு முறையும் தோராயமாக தேர்ந்தெடுக்கப்படும். சோதனை ஸ்கிரிப்ட் (கீழே உள்ள பேனல்) திடீரென நிறுத்தப்படுதல் அல்லது எதற்கும் காத்திருக்கும் முடிவில்லாத சுழற்சி (> 5 நிமிட செயல்பாட்டிற்கான நேரம், இதை ட்ரேஸில் காணலாம்) இந்த கிளஸ்டரில் சில சோதனைகள் தோல்வியடைந்ததைக் குறிக்கிறது.

ஒவ்வொரு சோதனையும் பின்வரும் செயல்பாடுகளைக் கொண்டுள்ளது:

  1. ஒரு பிழையைப் பின்பற்றும் செயல்பாட்டைத் தொடங்கவும்.
  2. தயார்? — கிளஸ்டர் மீட்டமைக்க காத்திருக்கிறது (அனைத்து சேவைகளும் வழங்கப்படும் போது).
  3. கிளஸ்டர் மீட்பு காலக்கெடுவைக் காட்டுகிறது (எதிர்வினை).
  4. சரி - கிளஸ்டர் "பழுது" செய்யப்படுகிறது. அதன் பிறகு அது முழு செயல்பாட்டு நிலைக்குத் திரும்ப வேண்டும் மற்றும் அடுத்த செயலிழப்புக்கு தயாராக இருக்க வேண்டும்.

அவர்கள் என்ன செய்கிறார்கள் என்பதற்கான விளக்கத்துடன் சோதனைகளின் பட்டியல் இங்கே:

  • ஃபோர்க் பாம்ப்: ஃபோர்க் குண்டைப் பயன்படுத்தி "நினைவில் இல்லை" என்பதை உருவாக்குகிறது.
  • வெளிவெளி: ஹார்ட் டிரைவ் நிரம்பியுள்ளது. ஆனால் சோதனையானது குறியீடாக உள்ளது; சோதனையின் போது உருவாக்கப்பட்ட சிறிய சுமையுடன், ஹார்ட் டிரைவ் நிரம்பும்போது PostgreSQL பொதுவாக தோல்வியடையாது.
  • போஸ்ட்கிரெஸ்-கில்: கட்டளையுடன் PostgreSQL ஐக் கொல்லும் killall -KILL postgres.
  • போஸ்ட்கிரெஸ்-நிறுத்து: PostgreSQL கட்டளையை தொங்குகிறது killall -STOP postgres.
  • பவர்ஆஃப்: கட்டளையுடன் மெய்நிகர் இயந்திரத்தை "டி-எனர்ஜைஸ்" செய்கிறது VBoxManage controlvm "виртуалка" poweroff.
  • மீட்டமைக்கவும் : கட்டளையுடன் மெய்நிகர் இயந்திரத்தை ஓவர்லோட் செய்கிறது VBoxManage controlvm "виртуалка" reset.
  • SBD-நிறுத்து: கட்டளையுடன் SBD அரக்கனை இடைநிறுத்துகிறது killall -STOP sbd.
  • பணிநிறுத்தம்: SSH வழியாக மெய்நிகர் கணினிக்கு ஒரு கட்டளையை அனுப்புகிறது systemctl poweroff, சிஸ்டம் லாவகமாக மூடப்படும்.
  • இணைப்பை நீக்கு: பிணைய தனிமைப்படுத்தல், கட்டளை VBoxManage controlvm "виртуалка" setlinkstate1 off.

நிலையான tmux கட்டளை "kill-window" ஐப் பயன்படுத்தி சோதனையை முடிக்கவும் Ctrl-b &, அல்லது "detach-client" கட்டளை Ctrl-b டி: இந்த கட்டத்தில் சோதனை முடிவடைகிறது, tmux மூடுகிறது, மெய்நிகர் இயந்திரங்கள் அணைக்கப்படும்.

சோதனையின் போது கண்டறியப்பட்ட சிக்கல்கள்

  • இக்கணத்தில் வாட்ச்டாக் பேய் sbd கவனிக்கப்பட்ட டெமான்களை நிறுத்துவதில் வேலை செய்கிறது, ஆனால் அவற்றை உறைய வைக்காது. மற்றும், இதன் விளைவாக, உறைபனிக்கு மட்டுமே வழிவகுக்கும் தவறுகள் கோரோசின்க் и இதயமுடுக்கி, ஆனால் தொங்கவில்லை sbd. காசோலைக்கு கோரோசின்க் ஏற்கனவே உள்ளது PR#83 (GitHub இல் sbd), நூலுக்கு ஏற்கப்பட்டது மாஸ்டர். அவர்கள் (PR#83 இல்) பேஸ்மேக்கருக்கு இதே போன்ற ஏதாவது இருக்கும் என்று உறுதியளித்தனர், நான் நம்புகிறேன் ரெட்ஹாட் 8 செய்வார்கள். ஆனால் அத்தகைய "செயல்பாடுகள்" ஊகமானவை மற்றும் செயற்கையாகப் பயன்படுத்தி எளிதாக உருவகப்படுத்தப்படலாம், எடுத்துக்காட்டாக, killall -STOP corosync, ஆனால் நிஜ வாழ்க்கையில் சந்திப்பதில்லை.

  • У இதயமுடுக்கி க்கான பதிப்பில் CentOS 7 தவறாக அமைக்கப்பட்டது sync_timeout у கோரம் சாதனம், அதன் விளைவாக ஒரு முனை தோல்வியுற்றால், சில நிகழ்தகவுடன் இரண்டாவது முனையும் மீண்டும் துவக்கப்படும், அதற்கு மாஸ்டர் நகர வேண்டும். பெரிதாக்குவதன் மூலம் குணமாகும் sync_timeout у கோரம் சாதனம் வரிசைப்படுத்தலின் போது (ஸ்கிரிப்ட்டில் setup/setup1) இந்த திருத்தம் டெவலப்பர்களால் ஏற்றுக்கொள்ளப்படவில்லை இதயமுடுக்கி, அதற்கு பதிலாக இந்த காலக்கெடு தானாகவே கணக்கிடப்படும் வகையில் (சில குறிப்பிடப்படாத எதிர்காலத்தில்) உள்கட்டமைப்பை மறுவடிவமைப்பதாக அவர்கள் உறுதியளித்தனர்.

  • தரவுத்தள கட்டமைப்பு அதைக் குறிப்பிட்டால் LC_MESSAGES (உரைச் செய்திகள்) யூனிகோடைப் பயன்படுத்தலாம், எ.கா. ru_RU.UTF-8, பின்னர் தொடக்கத்தில் postgres லோகேல் UTF-8 இல்லாத சூழலில், வெற்று சூழலில் (இங்கே இதயமுடுக்கி+pgsqlms(பாஃப்) ஓடுகிறது postgres), பிறகு பதிவில் UTF-8 எழுத்துகளுக்குப் பதிலாக கேள்விக்குறிகள் இருக்கும். இந்த விஷயத்தில் என்ன செய்வது என்பதில் PostgreSQL டெவலப்பர்கள் உடன்படவில்லை. இது செலவாகும், நீங்கள் நிறுவ வேண்டும் LC_MESSAGES=en_US.UTF-8 ஒரு தரவுத்தள நிகழ்வை கட்டமைக்கும் போது (உருவாக்கும்).

  • வால்_ரிசீவர்_டைம்அவுட் அமைக்கப்பட்டால் (இயல்புநிலையாக இது 60கள்), பின்னர் துச்சாங்கா3 மற்றும் துச்சங்கா4 கிளஸ்டர்களில் உள்ள மாஸ்டரில் PostgreSQL-STOP சோதனையின் போது புதிய மாஸ்டருடன் பிரதி மீண்டும் இணைக்கப்படவில்லை. நகலெடுப்பது ஒத்திசைவானது, எனவே அடிமை நிறுத்தப்படுவது மட்டுமல்லாமல், புதிய எஜமானரும் கூட. PostgreSQL ஐ உள்ளமைக்கும் போது wal_receiver_timeout=0 ஐ அமைப்பதன் மூலம் வேலை செய்கிறது.

  • எப்போதாவது நான் ForkBomb சோதனையில் PostgreSQL இல் பிரதிகள் உறைவதைக் கண்டேன் (நினைவகம் வழிதல்). ForkBombக்குப் பிறகு, சில சமயங்களில் அடிமைகள் புதிய மாஸ்டருடன் மீண்டும் இணைக்கப்படாமல் போகலாம். நான் இதை துச்சங்கா3 மற்றும் துச்சங்கா4 கிளஸ்டர்களில் மட்டுமே சந்தித்தேன், அங்கு ஒத்திசைவான பிரதியெடுப்பு காரணமாக மாஸ்டர் உறைந்தார். நீண்ட நாட்களுக்குப் பிறகு (சுமார் இரண்டு மணி நேரம்) பிரச்சனை தானாகவே போய்விட்டது. இதை சரி செய்ய மேலும் ஆராய்ச்சி தேவை. அறிகுறிகள் முந்தைய பிழையைப் போலவே இருக்கின்றன, இது வேறு காரணத்தால் ஏற்படுகிறது, ஆனால் அதே விளைவுகளுடன்.

க்ரோகன் படம் எடுக்கப்பட்டது மாறுபட்ட கலை ஆசிரியரின் அனுமதியுடன்:

PostgreSQL மற்றும் பேஸ்மேக்கரை அடிப்படையாகக் கொண்ட மாடலிங் ஃபெயில்ஓவர் கிளஸ்டர்கள்

ஆதாரம்: www.habr.com

கருத்தைச் சேர்