MySQL க்கான ஆர்கெஸ்ட்ரேட்டர்: அது இல்லாமல் நீங்கள் ஏன் ஒரு தவறு-சகிப்புத் திட்டத்தை உருவாக்க முடியாது

எந்தவொரு பெரிய திட்டமும் இரண்டு சேவையகங்களுடன் தொடங்கப்பட்டது. முதலில் ஒரு டிபி சர்வர் இருந்தது, பின்னர் வாசிப்பை அளவிட அடிமைகள் சேர்க்கப்பட்டனர். பின்னர் - நிறுத்து! எஜமானர் ஒருவர், ஆனால் அடிமைகள் பலர் உள்ளனர்; அடிமைகளில் ஒருவர் வெளியேறினால், எல்லாம் சரியாகிவிடும், ஆனால் மாஸ்டர் வெளியேறினால், அது மோசமாக இருக்கும்: வேலையில்லா நேரம், நிர்வாகிகள் சேவையகத்தை உயர்த்த முயற்சிக்கின்றனர். என்ன செய்ய? ஒரு மாஸ்டரை முன்பதிவு செய்யுங்கள். எனது சக ஊழியர் பாவெல் இதைப் பற்றி ஏற்கனவே எழுதியுள்ளார் ஒரு கட்டுரை, நான் அதை மீண்டும் சொல்ல மாட்டேன். அதற்குப் பதிலாக, MySQLக்கு ஆர்கெஸ்ட்ரேட்டர் ஏன் தேவை என்பதை நான் உங்களுக்குச் சொல்கிறேன்!

முக்கிய கேள்வியுடன் ஆரம்பிக்கலாம்: "மாஸ்டர் வெளியேறும்போது குறியீட்டை புதிய இயந்திரத்திற்கு மாற்றுவது எப்படி?"

  • விஐபி (மெய்நிகர் ஐபி) கொண்ட திட்டத்தை நான் மிகவும் விரும்புகிறேன், அதைப் பற்றி கீழே பேசுவோம். இது எளிமையானது மற்றும் வெளிப்படையானது, இருப்பினும் இது வெளிப்படையான வரம்பைக் கொண்டுள்ளது: நாங்கள் முன்பதிவு செய்யும் மாஸ்டர் புதிய இயந்திரத்துடன் L2 பிரிவில் இருக்க வேண்டும், அதாவது இரண்டாவது DC பற்றி நாம் மறந்துவிடலாம். மேலும், ஒரு இணக்கமான வழியில், ஒரு பெரிய L2 தீயது என்ற விதியை நீங்கள் பின்பற்றினால், L2 என்பது ஒரு ரேக்குக்கு மட்டுமே, மற்றும் L3 என்பது ரேக்குகளுக்கு இடையில் உள்ளது, மேலும் அத்தகைய திட்டத்திற்கு இன்னும் அதிகமான கட்டுப்பாடுகள் உள்ளன.
  • நீங்கள் குறியீட்டில் DNS பெயரை எழுதி /etc/hosts மூலம் தீர்க்கலாம். உண்மையில், எந்த தீர்மானமும் இருக்காது. திட்டத்தின் நன்மை: முதல் முறையின் வரம்பு பண்பு இல்லை, அதாவது, குறுக்கு-டிசியை ஒழுங்கமைக்க முடியும். ஆனால் பின்னர் தெளிவான கேள்வி எழுகிறது: பப்பட்-அன்சிபிள் வழியாக /etc/hosts க்கு மாற்றத்தை எவ்வளவு விரைவாக வழங்க முடியும்?
  • நீங்கள் இரண்டாவது முறையை சிறிது மாற்றலாம்: அனைத்து இணைய சேவையகங்களிலும் கேச்சிங் DNS ஐ நிறுவவும், இதன் மூலம் குறியீடு முதன்மை தரவுத்தளத்திற்குச் செல்லும். DNS இல் இந்த உள்ளீட்டிற்கு TTL 60 ஐ அமைக்கலாம். சரியாக செயல்படுத்தினால், முறை நல்லது என்று தெரிகிறது.
  • சேவை கண்டுபிடிப்புடன் கூடிய திட்டம், தூதரகம் மற்றும் பலவற்றைப் பயன்படுத்துவதைக் குறிக்கிறது.
  • ஒரு சுவாரஸ்யமான விருப்பம் ProxySQL. ProxySQL மூலம் MySQL க்கு எல்லா போக்குவரத்தையும் நீங்கள் அனுப்ப வேண்டும்; யார் மாஸ்டர் என்பதை ProxySQL தானே தீர்மானிக்க முடியும். மூலம், இந்த தயாரிப்பைப் பயன்படுத்துவதற்கான விருப்பங்களில் ஒன்றைப் பற்றி நீங்கள் படிக்கலாம் கட்டுரை.

ஆர்கெஸ்ட்ரேட்டரின் ஆசிரியர், கிதுப்பில் பணிபுரிந்தார், முதலில் விஐபியுடன் முதல் திட்டத்தை செயல்படுத்தினார், பின்னர் அதை தூதரகத்துடன் ஒரு திட்டமாக மாற்றினார்.

வழக்கமான உள்கட்டமைப்பு தளவமைப்பு:

MySQL க்கான ஆர்கெஸ்ட்ரேட்டர்: அது இல்லாமல் நீங்கள் ஏன் ஒரு தவறு-சகிப்புத் திட்டத்தை உருவாக்க முடியாது
கணக்கில் எடுத்துக்கொள்ள வேண்டிய வெளிப்படையான சூழ்நிலைகளை நான் உடனடியாக விவரிக்கிறேன்:

  • விஐபி முகவரி எந்த சர்வரிலும் உள்ள கட்டமைப்பில் பதிவு செய்யப்படக்கூடாது. ஒரு சூழ்நிலையை கற்பனை செய்வோம்: மாஸ்டர் மறுதொடக்கம் செய்தார், அது ஏற்றப்படும்போது, ​​​​ஆர்கெஸ்ட்ரேட்டர் தோல்வி பயன்முறையில் சென்று அடிமைகளில் ஒருவரை மாஸ்டர் ஆக்கினார்; பின்னர் பழைய மாஸ்டர் உயர்ந்தார், இப்போது விஐபி இரண்டு கார்களில் இருக்கிறார். இது மோசம்.
  • ஆர்கெஸ்ட்ரேட்டருக்கு, பழைய மாஸ்டர் மற்றும் புதிய மாஸ்டரை அழைப்பதற்கான ஸ்கிரிப்டை நீங்கள் எழுத வேண்டும். பழைய மாஸ்டரில் இஃப்டவுனையும், புதிய மாஸ்டரில் - ifup vipஐயும் இயக்க வேண்டும். இந்த ஸ்கிரிப்ட்டில் தோல்வியுற்றால், பழைய மாஸ்டர்ஸ் ஸ்விட்ச்சில் உள்ள போர்ட், ஸ்பிலிட்பிரைனைத் தவிர்க்க வெறுமனே அணைக்கப்படும்.
  • ஆர்கெஸ்ட்ரேட்டர் உங்கள் ஸ்கிரிப்டை முதலில் விஐபியை அகற்றி/அல்லது ஸ்விட்சில் உள்ள போர்ட்டை அணைத்துவிட்டு, புதிய மாஸ்டரில் விஐபி ரைசிங் ஸ்கிரிப்ட் என்று அழைத்த பிறகு, ஆர்பிங் கட்டளையைப் பயன்படுத்தி, புதிய விஐபி இப்போது உள்ளது என்பதை அனைவருக்கும் தெரிவிக்க மறக்காதீர்கள். இங்கே.
  • அனைத்து அடிமைகளும் read_only=1ஐப் பெற்றிருக்க வேண்டும், மேலும் அடிமையை எஜமானராக உயர்த்தியவுடன், அது read_only=0 என இருக்க வேண்டும்.
  • இதற்காக நாம் தேர்ந்தெடுத்த எந்த அடிமையும் எஜமானராக முடியும் என்பதை மறந்துவிடாதீர்கள் (ஆர்கெஸ்ட்ரேட்டருக்கு முழு விருப்பமான வழிமுறை உள்ளது எந்த சூழ்நிலையிலும் தேர்ந்தெடுக்கப்படக்கூடாது மாஸ்டர்). அடிமை எஜமானானால், அடிமையின் சுமை அதன் மீது இருக்கும் மற்றும் எஜமானரின் சுமை சேர்க்கப்படும், இது கணக்கில் எடுத்துக்கொள்ளப்பட வேண்டும்.

உங்களிடம் ஆர்கெஸ்ட்ரேட்டர் இல்லையென்றால் உங்களுக்கு ஏன் ஆர்கெஸ்ட்ரேட்டர் தேவை?

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

ஆர்கெஸ்ட்ரேட்டர் இடைமுகம்:

MySQL க்கான ஆர்கெஸ்ட்ரேட்டர்: அது இல்லாமல் நீங்கள் ஏன் ஒரு தவறு-சகிப்புத் திட்டத்தை உருவாக்க முடியாது
GTID பிழை என்றால் என்ன?

ஆர்கெஸ்ட்ரேட்டர் வேலை செய்ய இரண்டு முக்கிய தேவைகள் உள்ளன:

  • MySQL கிளஸ்டரில் உள்ள அனைத்து கணினிகளிலும் போலி GTID இயக்கப்பட்டிருப்பது அவசியம்; எங்களிடம் GTID இயக்கப்பட்டுள்ளது.
  • எல்லா இடங்களிலும் ஒரு வகை binlogs இருப்பது அவசியம், நீங்கள் அறிக்கையைப் பயன்படுத்தலாம். எங்களிடம் ஒரு உள்ளமைவு இருந்தது, அதில் எஜமானர் மற்றும் பெரும்பாலான அடிமைகள் வரிசையைக் கொண்டிருந்தனர், மேலும் இருவர் வரலாற்று ரீதியாக கலப்பு பயன்முறையில் இருந்தனர். இதன் விளைவாக, ஆர்கெஸ்ட்ரேட்டர் இந்த அடிமைகளை புதிய எஜமானருடன் இணைக்க விரும்பவில்லை.

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

எனவே, எஜமானரிடம் இல்லாத பரிவர்த்தனைகள் அடிமை மீது இருப்பதை GTID பிழையின் மூலம் ஆர்கெஸ்ட்ரேட்டர் உங்களுக்குக் காட்டுகிறது. இது ஏன் நடக்கிறது?

  • Read_only=1 ஸ்லேவில் இயக்கப்படவில்லை, யாரோ ஒருவர் இணைக்கப்பட்டு தரவை மாற்றுவதற்கான கோரிக்கையை நிறைவு செய்தார்.
  • Super_read_only=1 ஸ்லேவில் இயக்கப்படவில்லை, பின்னர் நிர்வாகி, சர்வரை குழப்பிவிட்டு, உள்ளே சென்று கோரிக்கையை நிறைவேற்றினார்.
  • முந்தைய இரண்டு புள்ளிகளையும் நீங்கள் கணக்கில் எடுத்துக் கொண்டால், இன்னும் ஒரு தந்திரம் உள்ளது: MySQL இல், பின்லாக்குகளைப் பறிப்பதற்கான கோரிக்கையும் பின்லாக்கிற்குச் செல்கிறது, எனவே முதல் பறிப்பில், மாஸ்டர் மற்றும் அனைத்து அடிமைகளிலும் ஒரு GTID பிழை தோன்றும். இதை எப்படி தவிர்ப்பது? பெரோனா-5.7.25-28 binlog_skip_flush_commands=1 அமைப்பை அறிமுகப்படுத்தியது, இது பின்லாக்களில் ஃப்ளஷ் எழுதுவதைத் தடை செய்கிறது. mysql.com இணையதளத்தில் நிறுவப்பட்ட ஒன்று உள்ளது பிழை.

மேலே உள்ள அனைத்தையும் சுருக்கமாகக் கூறுகிறேன். ஆர்கெஸ்ட்ரேட்டரை ஃபெயில்ஓவர் பயன்முறையில் பயன்படுத்த விரும்பவில்லை என்றால், அதை கண்காணிப்பு பயன்முறையில் வைக்கவும். MySQL இயந்திரங்களின் தொடர்புகளின் வரைபடமும், ஒவ்வொரு இயந்திரத்திலும் எந்த வகையான பிரதிபலிப்பு உள்ளது, அடிமைகள் பின்தங்கியிருக்கிறார்களா, மற்றும் மிக முக்கியமாக, அவர்கள் எஜமானருடன் எவ்வளவு இணக்கமாக இருக்கிறார்கள் என்பது பற்றிய காட்சித் தகவல்களும் உங்கள் கண்களுக்கு முன்பாக எப்போதும் இருக்கும்!

தெளிவான கேள்வி: "ஆர்கெஸ்ட்ரேட்டர் எவ்வாறு செயல்பட வேண்டும்?" அவர் தற்போதைய அடிமைகளில் இருந்து ஒரு புதிய எஜமானரைத் தேர்ந்தெடுத்து, பின்னர் அனைத்து அடிமைகளையும் அதனுடன் மீண்டும் இணைக்க வேண்டும் (இதுதான் GTID; நீங்கள் binlog_name மற்றும் binlog_pos உடன் பழைய பொறிமுறையைப் பயன்படுத்தினால், தற்போதைய எஜமானரிடமிருந்து ஒரு அடிமையை புதியதாக மாற்ற வேண்டும். ஒன்று வெறுமனே சாத்தியமற்றது!). நாங்கள் ஆர்கெஸ்ட்ரேட்டரைப் பெறுவதற்கு முன்பு, நான் இதையெல்லாம் கைமுறையாகச் செய்ய வேண்டியிருந்தது. பழைய எஜமானர் ஒரு தரமற்ற அடாப்டெக் கன்ட்ரோலர் காரணமாக தொங்கிக் கொண்டிருந்தார்; அதில் சுமார் 10 அடிமைகள் இருந்தனர். நான் விஐபியை எஜமானரிடமிருந்து அடிமைகளில் ஒருவருக்கு மாற்ற வேண்டும் மற்றும் மற்ற எல்லா அடிமைகளையும் அதனுடன் மீண்டும் இணைக்க வேண்டும். நான் எத்தனை கன்சோல்களைத் திறக்க வேண்டும், ஒரே நேரத்தில் எத்தனை கட்டளைகளை உள்ளிடினேன் ... நான் அதிகாலை 3 மணி வரை காத்திருக்க வேண்டியிருந்தது, இருவரைத் தவிர அனைத்து அடிமைகளிடமிருந்தும் சுமைகளை அகற்றி, இரண்டு எஜமானரின் முதல் இயந்திரத்தை உருவாக்கவும், உடனடியாக இரண்டாவது இயந்திரத்தை இணைக்கவும் அதனுடன், மற்ற எல்லா அடிமைகளையும் புதிய எஜமானனுடன் இணைத்து, சுமையைத் திருப்பி விடுங்கள். மொத்தத்தில், பயங்கரமான...

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

MySQL க்கான ஆர்கெஸ்ட்ரேட்டர்: அது இல்லாமல் நீங்கள் ஏன் ஒரு தவறு-சகிப்புத் திட்டத்தை உருவாக்க முடியாது
படம் செயல்முறையின் நடுப்பகுதியைக் காட்டுகிறது. இது வரை ஏற்கனவே என்ன செய்யப்பட்டுள்ளது? சில அடிமைகளை புதிய மாஸ்டர் ஆக்க விரும்புகிறோம் என்று சொன்னோம், ஆர்கெஸ்ட்ரேட்டர் மற்ற எல்லா அடிமைகளையும் அதனுடன் மீண்டும் இணைக்கத் தொடங்கினார், புதிய மாஸ்டர் ஒரு போக்குவரத்து இயந்திரமாக செயல்படுகிறார். இந்தத் திட்டத்தில், எந்தப் பிழையும் ஏற்படாது, எல்லா அடிமைகளும் வேலை செய்கிறார்கள், ஆர்கெஸ்ட்ரேட்டர் பழைய மாஸ்டரிடமிருந்து விஐபியை அகற்றி, புதியவருக்கு மாற்றுகிறார், read_only=0 ஆக்கி, பழைய மாஸ்டரை மறந்துவிடுகிறார். அனைத்து! எங்கள் சேவையின் வேலையில்லா நேரம் விஐபி பரிமாற்ற நேரமாகும், இது 2-3 வினாடிகள் ஆகும்.

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

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

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