PostgreSQL සහ Pacemaker මත පදනම් වූ අසාර්ථක පොකුරු ආකෘති නිර්මාණය

හැඳින්වීම

කලකට පෙර මට ෆේල්වර් පොකුරක් සංවර්ධනය කිරීමේ කාර්යය භාර දෙන ලදී PostgreSQL, එක් නගරයක් තුළ ඔප්ටිකල් ෆයිබර් මගින් සම්බන්ධිත දත්ත මධ්‍යස්ථාන කිහිපයක ක්‍රියාත්මක වන අතර, එක් දත්ත මධ්‍යස්ථානයක අසාර්ථකත්වයට (උදාහරණයක් ලෙස, කළු වීම) ඔරොත්තු දීමේ හැකියාව ඇත. වැරදි ඉවසීම සඳහා වගකිව යුතු මෘදුකාංගය ලෙස, මම තෝරා ගත්තෙමි පේස්මේකර්මක්නිසාද යත්, අසාර්ථක පොකුරු නිර්මාණය කිරීම සඳහා RedHat වෙතින් ලැබෙන නිල විසඳුම මෙයයි. RedHat ඒ සඳහා සහය ලබා දෙන නිසාත්, මෙම විසඳුම විශ්වීය (මොඩියුලර්) නිසාත් එය හොඳයි. එහි සහාය ඇතිව, සම්මත මොඩියුල භාවිතා කිරීම හෝ විශේෂිත අවශ්‍යතා සඳහා ඒවා නිර්මාණය කිරීම, PostgreSQL පමණක් නොව, වෙනත් සේවාවන්හි දෝෂ ඉවසීම සහතික කිරීමට හැකි වනු ඇත.

මෙම තීරණය සාධාරණ ප්‍රශ්නයක් මතු කළේය: අසාර්ථක පොකුරක් කෙතරම් වැරදි ඉවසන්නේද? මෙය විමර්ශනය කිරීම සඳහා, මම පොකුරු නෝඩ් වල විවිධ අසාර්ථකත්වයන් අනුකරණය කරන, සේවාව ප්‍රතිසාධනය වන තෙක් බලා සිටින, අසාර්ථක වූ නෝඩය ප්‍රතිසාධනය කරන සහ ලූපයක් තුළ පරීක්ෂණ දිගටම කරගෙන යන පරීක්ෂණ බංකුවක් නිර්මාණය කළෙමි. මෙම ව්‍යාපෘතිය මුලින් හැඳින්වූයේ hapgsql ලෙසිනි, නමුත් කාලයත් සමඟ මට එක ස්වර අක්ෂරයක් පමණක් තිබූ නම එපා විය. එමනිසා, මම දෝෂ ඉවසන දත්ත සමුදායන් ඇමතීමට පටන් ගතිමි (සහ පාවෙන IP ඒවා වෙත යොමු කරයි) ක්රෝගන් (සියලු වැදගත් අවයව අනුපිටපත් කර ඇති පරිගණක ක්‍රීඩාවක චරිතයක්) සහ නෝඩ්, පොකුරු සහ ව්‍යාපෘතියම වේ tuchanka (ක්රෝගන් ජීවත් වන ග්රහලෝකය).

දැන් කළමනාකාරිත්වය අවසර දී ඇත MIT බලපත්‍රය යටතේ විවෘත මූලාශ්‍ර ප්‍රජාවට ව්‍යාපෘතිය විවෘත කරන්න. README ඉක්මනින් ඉංග්‍රීසි භාෂාවට පරිවර්තනය වනු ඇත (ප්‍රධාන පාරිභෝගිකයින් Pacemaker සහ PostgreSQL සංවර්ධකයින් වනු ඇතැයි අපේක්ෂා කරන නිසා), සහ README හි පැරණි රුසියානු අනුවාදය (අර්ධ වශයෙන්) මෙම ලිපියේ ස්වරූපයෙන් ඉදිරිපත් කිරීමට මම තීරණය කළෙමි.

PostgreSQL සහ Pacemaker මත පදනම් වූ අසාර්ථක පොකුරු ආකෘති නිර්මාණය

අථත්‍ය යන්ත්‍ර මත පොකුරු යොදවා ඇත VirtualBox. අථත්‍ය යන්ත්‍ර 12ක් (සම්පූර්ණයෙන් 36GiB) යොදවනු ඇත, ඒවා දෝෂ-ඉවසන පොකුරු 4ක් (විවිධ විකල්ප) සාදයි. පළමු පොකුරු දෙක විවිධ දත්ත මධ්‍යස්ථානවල පිහිටා ඇති PostgreSQL සේවාදායකයන් දෙකකින් සහ පොදු සේවාදායකයකින් සමන්විත වේ. සාක්ෂි දරයි c ගණපූර්ණ උපාංගය (තුන්වන දත්ත මධ්‍යස්ථානයක ලාභ අතථ්‍ය යන්ත්‍රයක සත්කාරකත්වය දරනු ලැබේ), එය අවිනිශ්චිතතාවය විසඳයි 50% / 50%, ඔබේ ඡන්දය එක් පක්ෂයකට ලබා දීම. දත්ත මධ්‍යස්ථාන තුනක තුන්වන පොකුර: එක් ස්වාමියා, වහලුන් දෙදෙනෙකු, නැත ගණපූර්ණ උපාංගය. සිව්වන පොකුර PostgreSQL සේවාදායකයන් හතරකින් සමන්විත වන අතර, එක් දත්ත මධ්‍යස්ථානයකට දෙකක්: එක් ප්‍රධානියා, ඉතිරි අනුරූ සහ භාවිතා කරයි. සාක්ෂි දරයි c ගණපූර්ණ උපාංගය. සිව්වැන්න සේවාදායකයන් දෙකක හෝ එක් දත්ත මධ්‍යස්ථානයක අසාර්ථකත්වයට ඔරොත්තු දිය හැකිය. අවශ්‍ය නම් මෙම විසඳුම අනුරූ විශාල සංඛ්‍යාවකට පරිමාණය කළ හැක.

නිවැරදි කාල සේවාව ntpd වැරදි ඉවසීම සඳහා ද නැවත සකස් කර ඇත, නමුත් එය ක්‍රමයම භාවිතා කරයි ntpd (අනාථ මාදිලිය) හවුල් සේවාදායකය සාක්ෂි දරයි මධ්‍යම NTP සේවාදායකයක් ලෙස ක්‍රියා කරයි, එහි කාලය සියලු පොකුරු වෙත බෙදාහරින අතර එමඟින් සියලුම සේවාදායකයන් එකිනෙක සමමුහුර්ත කරයි. නම් සාක්ෂි දරයි අසමත් වීම හෝ හුදකලා වේ, එවිට එක් පොකුරු සේවාදායකයක් (පොකුර තුළ) එහි කාලය බෙදා හැරීමට පටන් ගනී. සහායක හැඹිලිගත කිරීම HTTP ප්‍රොක්සි දක්වා ද ඉහල නැංවීය සාක්ෂි දරයි, එහි ආධාරයෙන්, අනෙකුත් අතථ්‍ය යන්ත්‍රවලට Yum ගබඩා වෙත ප්‍රවේශය ඇත. යථාර්ථයේ දී, නිවැරදි වේලාව සහ ප්‍රොක්සි වැනි සේවාවන් බොහෝ විට කැප වූ සේවාදායකයන් මත සත්කාරකත්වය සපයනු ඇත, නමුත් කුටියේ ඒවා සත්කාරකත්වය සපයනු ලැබේ සාක්ෂි දරයි අතථ්‍ය යන්ත්‍ර ගණන සහ ඉඩ ඉතිරි කර ගැනීමට පමණි.

අනුවාද

v0. VirtualBox 7 මත CentOS 11 සහ PostgreSQL 6.1 සමඟ ක්‍රියා කරයි.

පොකුරු ව්යුහය

සියලුම පොකුරු සැලසුම් කර ඇත්තේ බහු දත්ත මධ්‍යස්ථානවල ස්ථානගත කිරීමට, එක් පැතලි ජාලයකට ඒකාබද්ධ වන අතර තනි දත්ත මධ්‍යස්ථානයක අසාර්ථකත්වයට හෝ ජාල හුදකලාවට ඔරොත්තු දිය යුතුය. ඒක තමයි නොහැකි ය එරෙහිව ආරක්ෂාව සඳහා භාවිතා කරන්න බෙදුණු මොළය සම්මත පේස්මේකර් තාක්ෂණය ලෙස හැඳින්වේ ස්ටෝනිත් (Shoot The Other Node In The Head) හෝ කඩු හරඹය. එහි සාරය: පොකුරේ ඇති නෝඩ් කිසියම් නෝඩයක යමක් වැරදියි කියා සැක කිරීමට පටන් ගනී නම්, එය ප්‍රතිචාර නොදක්වන්නේ නම් හෝ වැරදි ලෙස හැසිරෙන්නේ නම්, ඔවුන් එය “බාහිර” උපාංග හරහා බලහත්කාරයෙන් අක්‍රිය කරයි, උදාහරණයක් ලෙස, IPMI හෝ UPS පාලන කාඩ්පතක්. . නමුත් මෙය ක්‍රියාත්මක වන්නේ එක් අසාර්ථක අවස්ථාවකදී, IPMI හෝ UPS සේවාදායකය දිගටම ක්‍රියාත්මක වන අවස්ථාවන්හිදී පමණි. සම්පූර්ණ දත්ත මධ්‍යස්ථානය අසමත් වූ විට (උදාහරණයක් ලෙස, බලය අහිමි වන විට) වඩාත් ව්‍යසනකාරී අසාර්ථකත්වයකින් ආරක්ෂා වීමට අපි මෙහිදී සැලසුම් කරමු. සහ එවැනි ප්රතික්ෂේප කිරීමත් සමග, සෑම දෙයක්ම ස්ටෝනිත්-උපකරණ (IPMI, UPS, ආදිය) ද ක්රියා නොකරනු ඇත.

ඒ වෙනුවට, පද්ධතිය ගණපූරණය පිළිබඳ අදහස මත පදනම් වේ. සියලුම නෝඩ් වලට කටහඬක් ඇති අතර, වැඩ කළ හැක්කේ සියලුම නෝඩ් වලින් අඩකට වඩා දැකිය හැකි ඒවාට පමණි. මෙම "අර්ධ + 1" ප්රමාණය හැඳින්වේ ගණපූරණය. ගණපූරණය ළඟා වී නොමැති නම්, නෝඩය එය ජාල හුදකලාවේ ඇති බව තීරණය කරන අතර එහි සම්පත් අක්‍රිය කළ යුතුය, i.e. මේ එයයි බෙදීම්-මොළයේ ආරක්ෂාව. මෙම හැසිරීම සඳහා වගකිව යුතු මෘදුකාංගය ක්රියා නොකරන්නේ නම්, උදාහරණයක් ලෙස, IPMI මත පදනම් වූ මුර බල්ලෙකුට වැඩ කිරීමට සිදුවනු ඇත.

නෝඩ් ගණන ඉරට්ටේ නම් (දත්ත මධ්‍යස්ථාන දෙකක පොකුරක්), එවිට ඊනියා අවිනිශ්චිතතාවය ඇති විය හැක. 50% / 50% (පනස්-පනහ) ජාල හුදකලා කිරීම පොකුර හරියටම අඩකින් බෙදූ විට. එබැවින්, නෝඩ් ඉරට්ටේ සංඛ්යාවක් සඳහා, අපි එකතු කරමු ගණපූර්ණ උපාංගය තෙවන දත්ත මධ්‍යස්ථානයක ලාභම අතථ්‍ය යන්ත්‍රය මත දියත් කළ හැකි අනවශ්‍ය ඩීමන් වේ. ඔහු තම ඡන්දය එක් කොටසකට (ඔහු දකින) ලබා දෙන අතර එමඟින් 50%/50% අවිනිශ්චිතතාවය විසඳයි. ගණපූර්ණ උපාංගය දියත් කරන සේවාදායකය මම නම් කළෙමි සාක්ෂි දරයි (refmgr වෙතින් පාරිභාෂිතය, මම එයට කැමති විය).

සම්පත් තැනින් තැනට ගෙන යා හැකිය, නිදසුනක් ලෙස, දෝෂ සහිත සේවාදායකයන් සිට සෞඛ්‍ය සම්පන්න ඒවා වෙත හෝ පද්ධති පරිපාලකයින්ගේ අණ පරිදි. එබැවින් සේවාදායකයින්ට අවශ්‍ය සම්පත් පිහිටා ඇත්තේ කොතැනදැයි දැන ගැනීමට (සම්බන්ධ විය යුත්තේ කොතැනද?), පාවෙන IP (float IP) මේවා Pacemaker හට නෝඩ් වටා ගමන් කළ හැකි IPs (සියල්ල පැතලි ජාලයක ඇත). ඒ සෑම එකක්ම සම්පතක් (සේවාවක්) සංකේතවත් කරන අතර මෙම සේවාවට ප්‍රවේශය ලබා ගැනීම සඳහා ඔබට සම්බන්ධ වීමට අවශ්‍ය තැන පිහිටා ඇත (අපගේ නඩුවේදී, දත්ත සමුදායක්).

Tuchanka1 (සම්පීඩනය සහිත පරිපථය)

ව්යුහය

PostgreSQL සහ Pacemaker මත පදනම් වූ අසාර්ථක පොකුරු ආකෘති නිර්මාණය

අදහස වූයේ අප සතුව අඩු බරක් සහිත කුඩා දත්ත සමුදායන් රාශියක් ඇති අතර, ඒ සඳහා කියවීමට පමණක් ගනුදෙනු සඳහා කැපවූ වහල් සේවාදායකයක් උණුසුම් පොරොත්තු ප්‍රකාරයේ පවත්වාගෙන යාම ලාභ නොලබන බවයි (එවැනි සම්පත් නාස්තියක් අවශ්‍ය නොවේ).

සෑම දත්ත මධ්‍යස්ථානයකම එක් සේවාදායකයක් ඇත. සෑම සේවාදායකයකටම PostgreSQL අවස්ථා දෙකක් ඇත (PostgreSQL පාරිභාෂිතයේ ඒවා පොකුරු ලෙස හැඳින්වේ, නමුත් ව්‍යාකූලත්වය වළක්වා ගැනීම සඳහා මම ඒවා අවස්ථා ලෙස හඳුන්වමි (අනෙකුත් දත්ත සමුදායන් සමඟ සාදෘශ්‍යව) සහ මම Pacemaker පොකුරු පොකුරු පමණක් අමතන්නෙමි). එක් අවස්ථාවක් ප්‍රධාන ප්‍රකාරයේදී ක්‍රියාත්මක වන අතර, එය පමණක් සේවා සපයයි (එයට float IP පමණක් මඟ පෙන්වයි). දෙවන අවස්ථාව දෙවන දත්ත මධ්‍යස්ථානය සඳහා වහලෙකු ලෙස ක්‍රියා කරන අතර, එහි ස්වාමියා අසමත් වුවහොත් පමණක් සේවා සපයනු ඇත. බොහෝ විට අවස්ථා දෙකකින් (මාස්ටර්) එක් අවස්ථාවක් පමණක් සේවා සපයනු ඇති බැවින් (ඉල්ලීම් ඉටු කරයි), සියලුම සේවාදායක සම්පත් මාස්ටර් සඳහා ප්‍රශස්ත කර ඇත (මතකය share_buffers හැඹිලිය සඳහා වෙන් කර ඇත, ආදිය), නමුත් දෙවන අවස්ථාව එක් දත්ත මධ්‍යස්ථානයක් අසාර්ථක වූ විට (ගොනු පද්ධති හැඹිලිය හරහා උපප්‍රශස්ත ක්‍රියාකාරිත්වය සඳහා වුවද) ප්‍රමාණවත් සම්පත් ඇත. එම යන්ත්‍රයේ ස්වාමියා සමඟ සම්පත් සඳහා යුද්ධයක් ඇති නොවන පරිදි, පොකුරේ සාමාන්‍ය ක්‍රියාකාරිත්වය අතරතුර දාසයා සේවා සපයන්නේ නැත (කියවීමට පමණක් ඉල්ලීම් ඉටු නොකරයි).

නෝඩ් දෙකක් සම්බන්ධයෙන්, දෝෂ ඉවසීම කළ හැක්කේ අසමමුහුර්ත අනුකරණයෙන් පමණි, මන්ද සමමුහුර්ත අනුවර්තනය සමඟ, වහලෙකුගේ අසාර්ථකත්වය ස්වාමියාගේ නැවතුමට හේතු වේ.

සාක්ෂි දීමට අපොහොසත් වීම

PostgreSQL සහ Pacemaker මත පදනම් වූ අසාර්ථක පොකුරු ආකෘති නිර්මාණය

සාක්ෂි දීමට අපොහොසත් වීම (ගණපූර්ණ උපාංගය) මම Tuchanka1 පොකුර සඳහා පමණක් සලකා බලමි, අනෙක් සියල්ල සමඟ එය එකම කතාව වනු ඇත. සාක්ෂිය අසමත් වුවහොත්, පොකුරු ව්‍යුහයේ කිසිවක් වෙනස් නොවනු ඇත, සෑම දෙයක්ම එය කළ ආකාරයටම දිගටම ක්‍රියාත්මක වනු ඇත. නමුත් ගණපූරණය 2න් 3ක් බවට පත්වන අතර, එම නිසා පසුකාලීනව සිදුවන කිසියම් අසාර්ථක වීමක් පොකුරට මාරාන්තික වනු ඇත. එය තවමත් කඩිනමින් නිවැරදි කිරීමට සිදුවනු ඇත.

Tuchanka1 ප්රතික්ෂේප කිරීම

PostgreSQL සහ Pacemaker මත පදනම් වූ අසාර්ථක පොකුරු ආකෘති නිර්මාණය

Tuchanka1 සඳහා දත්ත මධ්‍යස්ථාන වලින් එකක අසමත් වීම. මේ අවස්ථාවේ දී සාක්ෂි දරයි දෙවන දත්ත මධ්‍යස්ථානයක දෙවන නෝඩයකට ඡන්දය ප්‍රකාශ කරයි. එහිදී, හිටපු දාසයා ස්වාමියෙකු බවට පත් වේ, එහි ප්‍රතිඵලයක් ලෙස, ස්වාමිවරුන් දෙදෙනාම එකම සේවාදායකයක වැඩ කරන අතර ඔවුන්ගේ පාවෙන IP දෙකම ඔවුන් වෙත යොමු කරයි.

Tuchanka2 (සම්භාව්‍ය)

ව්යුහය

PostgreSQL සහ Pacemaker මත පදනම් වූ අසාර්ථක පොකුරු ආකෘති නිර්මාණය

නෝඩ් දෙකක සම්භාව්ය යෝජනා ක්රමය. ස්වාමියා එකක් මත වැඩ කරයි, දාසයා දෙවැන්නා මත වැඩ කරයි. දෙදෙනාටම ඉල්ලීම් ක්‍රියාත්මක කළ හැක (වහලයා කියවා ඇත්තේ පමණි), එබැවින් දෙකම float IP මගින් පෙන්වා දෙනු ලැබේ: krogan2 යනු ස්වාමියා, krogan2s1 යනු වහල් ය. ස්වාමියා සහ දාසයා යන දෙදෙනාටම වැරදි ඉවසීමේ හැකියාව ඇත.

නෝඩ් දෙකක දී, දෝෂ ඉවසීම කළ හැක්කේ අසමමුහුර්ත අනුකරණයෙන් පමණි, මන්ද සමමුහුර්ත අනුකරණය සමඟ, දාසයාගේ අසාර්ථකත්වය ස්වාමියාගේ නැවතුමට හේතු වේ.

Tuchanka2 ප්රතික්ෂේප කිරීම

PostgreSQL සහ Pacemaker මත පදනම් වූ අසාර්ථක පොකුරු ආකෘති නිර්මාණය

එක් දත්ත මධ්‍යස්ථානයක් අසමත් වුවහොත් සාක්ෂි දරයි දෙවැන්නට ඡන්දය දෙයි. එකම ක්‍රියාකාරී දත්ත මධ්‍යස්ථානයේ, මාස්ටර් උත්ථාන කරනු ලබන අතර, පාවෙන IP දෙකම එයට යොමු කරයි: ස්වාමියා සහ වහලා. ඇත්ත වශයෙන්ම, ස්වාමියා සහ වහල් පාවෙන IP වෙතින් සියලුම සම්බන්ධතා සහ ඉල්ලීම් එකවර පිළිගැනීමට ප්‍රමාණවත් සම්පත් (සම්බන්ධතා සීමාවන්, ආදිය) ඇති ආකාරයට එම අවස්ථාව වින්‍යාසගත කළ යුතුය. එනම්, සාමාන්ය ක්රියාකාරීත්වය තුළ එය ප්රමාණවත් සීමාවන් සැපයුමක් තිබිය යුතුය.

Tuchanka4 (බොහෝ වහලුන්)

ව්යුහය

PostgreSQL සහ Pacemaker මත පදනම් වූ අසාර්ථක පොකුරු ආකෘති නිර්මාණය

දැනටමත් තවත් අන්තයක්. කියවීමට පමණක් ඉල්ලීම් රාශියක් ලැබෙන දත්ත සමුදායන් ඇත (අධික පැටවුම් අඩවියක සාමාන්‍ය අවස්ථාවක්). Tuchanka4 යනු එවැනි ඉල්ලීම් හැසිරවීමට වහලුන් තිදෙනෙකු හෝ වැඩි ගණනක් සිටිය හැකි නමුත් තවමත් වැඩි ගණනක් නොමැති තත්වයකි. වහලුන් විශාල සංඛ්‍යාවක් සමඟ, ධූරාවලි අනුකරණ පද්ධතියක් නිර්මාණය කිරීමට අවශ්‍ය වනු ඇත. අවම අවස්ථාවෙහි (පින්තූරයෙහි), සෑම දත්ත මධ්‍යස්ථාන දෙකටම PostgreSQL අවස්ථාවක් සහිත සර්වර් දෙකක් ඇත.

මෙම යෝජනා ක්රමයේ තවත් ලක්ෂණයක් වන්නේ එක් සමමුහුර්ත අනුවර්තනයක් සංවිධානය කිරීමට දැනටමත් හැකි වීමයි. එය ප්‍රධානියා ලෙස එකම දත්ත මධ්‍යස්ථානයේ ඇති අනුරුවකට වඩා, හැකි නම්, වෙනත් දත්ත මධ්‍යස්ථානයකට අනුකරණය කිරීමට වින්‍යාස කර ඇත. ස්වාමියා සහ සෑම වහලෙකුම පාවෙන IP එකකින් පෙන්වා දෙනු ලැබේ. වාසනාවකට මෙන්, වහලුන් අතර කෙසේ හෝ ඉල්ලීම් සමතුලිත කිරීමට අවශ්ය වනු ඇත sql proxy, උදාහරණයක් ලෙස, සේවාදායකයා පැත්තෙන්. විවිධ වර්ගයේ ගනුදෙනුකරුවන්ට විවිධ වර්ග අවශ්‍ය විය හැකිය sql proxy, සහ අවශ්‍ය කාටදැයි දන්නේ සේවාදායක සංවර්ධකයින් පමණි. මෙම ක්‍රියාකාරීත්වය බාහිර ඩීමන් මගින් හෝ සේවාදායක පුස්තකාලයක් (සම්බන්ධතා සංචිතය) ආදිය මගින් ක්‍රියාත්මක කළ හැක. මේ සියල්ල අසාර්ථක දත්ත සමුදා පොකුරක් (failover) යන මාතෘකාවෙන් ඔබ්බට යයි SQL ප්‍රොක්සි සේවාදායකයින්ගේ වැරදි ඉවසීම සමඟ ස්වාධීනව ක්රියාත්මක කළ හැකිය).

Tuchanka4 ප්රතික්ෂේප කිරීම

PostgreSQL සහ Pacemaker මත පදනම් වූ අසාර්ථක පොකුරු ආකෘති නිර්මාණය

එක් දත්ත මධ්‍යස්ථානයක් (එනම්, සේවාදායක දෙකක්) අසමත් වුවහොත්, සාක්ෂිකරුවන් දෙවැන්න සඳහා ඡන්දය දෙයි. එහි ප්‍රතිඵලයක් වශයෙන්, දෙවන දත්ත මධ්‍යස්ථානයේ සේවාදායකයන් දෙකක් ක්‍රියාත්මක වේ: එකක් මාස්ටර් එකක් ධාවනය කරයි, සහ ප්‍රධාන පාවෙන IP එය වෙත යොමු කරයි (කියවීමට-ලිවීමේ ඉල්ලීම් ලැබීම සඳහා); සහ දෙවන සේවාදායකයේ සමමුහුර්ත ප්‍රතිනිර්මාණය සමඟ ක්‍රියාත්මක වන වහලෙකු සිටින අතර, වහල් පාවෙන IP වලින් එකක් එයට යොමු කරයි (කියවීමට පමණක් ඉල්ලීම් සඳහා).

සැලකිල්ලට ගත යුතු පළමු දෙය නම් සියලුම වහල් පාවෙන IP කම්කරුවන් නොවන නමුත් එක් අයෙකු පමණක් බවයි. එය සමඟ නිවැරදිව වැඩ කිරීමට එය අවශ්ය වනු ඇත sql proxy සියලුම ඉල්ලීම් ඉතිරිව ඇති එකම පාවෙන IP වෙත හරවා යවන ලදී; සහ නම් sql proxy නැත, එවිට ඔබට සම්බන්ධතා URL හි කොමාවෙන් වෙන් කරන ලද සියලුම පාවෙන IP වහල් ලැයිස්තුගත කළ හැක. මෙම අවස්ථාවේ දී, සමඟ libpq සම්බන්ධතාවය පළමු වැඩ කරන IP වෙත වනු ඇත, මෙය ස්වයංක්රීය පරීක්ෂණ පද්ධතිය තුළ සිදු කෙරේ. සමහර විට වෙනත් පුස්තකාලවල, උදාහරණයක් ලෙස, JDBC, මෙය ක්රියා නොකරනු ඇති අතර අවශ්ය වේ sql proxy. මෙය සිදු කරනු ලබන්නේ වහලුන් සඳහා වන float IP එක සේවාදායකයක් මත එකවර උත්පාදනය කිරීම තහනම් කර ඇති නිසා, ඒවායින් කිහිපයක් ක්‍රියාත්මක වේ නම් වහල් සේවාදායකයන් අතර ඒකාකාරව බෙදා හරිනු ලැබේ.

දෙවනුව: දත්ත මධ්‍යස්ථාන අසාර්ථක වූ විට පවා, සමමුහුර්ත ප්‍රතිනිර්මාණය පවත්වාගෙන යනු ඇත. ද්විතියික අසමත් වීමක් සිදු වුවද, එනම් ඉතිරි දත්ත මධ්‍යස්ථානයේ ඇති සේවාදායකයන් දෙකෙන් එකක් අසමත් වුවද, පොකුර, එය සේවා සැපයීම නවත්වනු ඇතත්, කැපවීම තහවුරු කර ඇති සියලුම කැපවූ ගනුදෙනු පිළිබඳ තොරතුරු තවමත් රඳවා ගනී. (ද්විතීයික අසමත් වීමකදී පාඩු පිළිබඳ තොරතුරු නොමැත).

Tuchanka3 (දත්ත මධ්‍යස්ථාන 3)

ව්යුහය

PostgreSQL සහ Pacemaker මත පදනම් වූ අසාර්ථක පොකුරු ආකෘති නිර්මාණය

මෙය සම්පුර්ණයෙන්ම ක්‍රියාත්මක වන දත්ත මධ්‍යස්ථාන තුනක් පවතින තත්වයක් සඳහා වන පොකුරකි, ඒ සෑම එකක්ම සම්පුර්ණයෙන්ම ක්‍රියාත්මක වන දත්ත සමුදා සේවාදායකයක් ඇත. මේ අවස්ථාවේ දී ගණපූර්ණ උපාංගය අවශ්ය නැහැ. එක් දත්ත මධ්‍යස්ථානයක් ස්වාමියෙකු විසින් සේවය කරන අතර අනෙක් දෙක වහලුන් විසින් සේවය කරනු ලැබේ. අනුකරණය සමමුහුර්ත වේ, ANY (slave1, slave2) ටයිප් කරන්න, එනම්, සේවාදායකයාට ඕනෑම වහලෙකු කැපවීම පිළිගත් බවට ප්‍රථමයෙන් ප්‍රතිචාර දක්වන විට කැපවීම තහවුරු කිරීමක් ලැබෙනු ඇත. ස්වාමියා සඳහා එක් පාවෙන IP එකක් සහ වහලුන් සඳහා දෙකක් මඟින් සම්පත් දක්වනු ලැබේ. Tuchanka4 මෙන් නොව, float IP තුනම දෝෂ ඉවසයි. ඔබට භාවිතා කළ හැකි කියවීමට පමණක් SQL විමසුම් සමතුලිත කිරීමට sql proxy (වෙනම වැරදි ඉවසීමක් සහිතව), නැතහොත් එක් වහල් පාවෙන IP සේවාදායකයින්ගෙන් අඩකට සහ අනෙක් භාගය දෙවැන්නාට පවරන්න.

Tuchanka3 ප්රතික්ෂේප කිරීම

PostgreSQL සහ Pacemaker මත පදනම් වූ අසාර්ථක පොකුරු ආකෘති නිර්මාණය

දත්ත මධ්‍යස්ථානවලින් එකක් අසාර්ථක වුවහොත් දෙකක් ඉතිරි වේ. එකක, ස්වාමියාගෙන් ස්වාමියා සහ පාවෙන IP ඉහළ නංවනු ලැබේ, දෙවනුව - වහල් සහ වහල් යන දෙකම IPs (උදාහරණයට වහල් පාවෙන IP දෙකෙන්ම සියලු සම්බන්ධතා පිළිගැනීමට සම්පත් ද්විත්ව සංචිතයක් තිබිය යුතුය). ස්වාමිවරුන් සහ වහලුන් අතර සමමුහුර්ත අනුකරණය. එසේම, දත්ත මධ්‍යස්ථාන දෙකක් විනාශ කිරීමේදී (ඒවා එකවර විනාශ නොකළහොත්) කැපවූ සහ තහවුරු කරන ලද ගනුදෙනු පිළිබඳ තොරතුරු (තොරතුරු නැතිවීමක් සිදු නොවේ) පොකුර සුරකිනු ඇත.

ගොනු ව්‍යුහය සහ යෙදවීම පිළිබඳ සවිස්තරාත්මක විස්තරයක් ඇතුළත් නොකිරීමට මම තීරණය කළෙමි. සෙල්ලම් කිරීමට කැමති ඕනෑම කෙනෙකුට README හි ඒ සියල්ල කියවිය හැක. මම සපයන්නේ ස්වයංක්‍රීය පරීක්ෂණ පිළිබඳ විස්තරයක් පමණි.

ස්වයංක්‍රීය පරීක්ෂණ පද්ධතිය

විවිධ දෝෂ අනුකරණය කිරීමෙන් පොකුරු වල දෝෂ ඉවසීම පරීක්ෂා කිරීම සඳහා ස්වයංක්‍රීය පරීක්ෂණ පද්ධතියක් නිර්මාණය කර ඇත. තිර රචනය මගින් දියත් කරන ලදී test/failure. ඔබට පරීක්ෂා කිරීමට අවශ්‍ය පොකුරු සංඛ්‍යාව ස්ක්‍රිප්ටයට පරාමිති ලෙස ගත හැක. උදාහරණයක් ලෙස මෙම විධානය:

test/failure 2 3

දෙවන සහ තෙවන පොකුරු පමණක් පරීක්ෂා කරනු ඇත. පරාමිතීන් නියම කර නොමැති නම්, සියලුම පොකුරු පරීක්ෂා කරනු ලැබේ. සියලුම පොකුරු සමාන්තරව පරීක්ෂා කරනු ලබන අතර, ප්රතිඵලය tmux පැනලයේ දර්ශනය වේ. Tmux විසින් කැපවූ tmux සේවාදායකයක් භාවිතා කරයි, එබැවින් ස්ක්‍රිප්ට් පෙරනිමි tmux යටතේ සිට ක්‍රියාත්මක කළ හැක, එහි ප්‍රතිඵලයක් ලෙස කැදලි tmux වේ. විශාල කවුළුවක සහ කුඩා අකුරු සහිත ටර්මිනලය භාවිතා කිරීමට මම නිර්දේශ කරමි. පරීක්ෂා කිරීම ආරම්භ කිරීමට පෙර, සියලුම අතථ්‍ය යන්ත්‍ර ස්ක්‍රිප්ට් සම්පූර්ණ කරන අවස්ථාවේදී ස්නැප්ෂොට් එකකට පෙරළේ. setup.

PostgreSQL සහ Pacemaker මත පදනම් වූ අසාර්ථක පොකුරු ආකෘති නිර්මාණය

පරීක්ෂා කරන ලද පොකුරු ගණන අනුව පර්යන්තය තීරු වලට බෙදා ඇත; පෙරනිමියෙන් (තිර පිටුවේ) හතරක් ඇත. මම Tuchanka2 උදාහරණය භාවිතා කරමින් තීරු වල අන්තර්ගතය විස්තර කරමි. තිර රුවෙහි ඇති පැනල් අංක කර ඇත:

  1. පරීක්ෂණ සංඛ්‍යාලේඛන මෙහි දැක්වේ. තීරු:
    • අසාර්ථකයි - දෝෂය අනුකරණය කරන පරීක්ෂණයේ නම (ස්ක්රිප්ට් එකේ කාර්යය).
    • ප්රතික්රියාව - පොකුර එහි ක්‍රියාකාරීත්වය ප්‍රකෘතිමත් වූ තත්පර වල අංක ගණිත සාමාන්‍ය කාලය. එය දෝශයක් අනුකරණය කරමින් ස්ක්‍රිප්ට් ආරම්භයේ සිට පොකුර එහි ක්‍රියාකාරීත්වය යථා තත්ත්වයට පත් කර සේවා සැපයීම දිගටම කරගෙන යාමට හැකි වන මොහොත දක්වා මනිනු ලැබේ. කාලය ඉතා කෙටි නම්, උදාහරණයක් ලෙස, තත්පර හයක් (මෙය සිදු වන්නේ වහලුන් කිහිප දෙනෙකු සිටින පොකුරු වල (Tuchanka3 සහ Tuchanka4)), මෙයින් අදහස් කරන්නේ දෝෂය අසමමුහුර්ත දාසයා මත වූ අතර කාර්ය සාධනයට කිසිදු ආකාරයකින් බල නොපායි; නැත පොකුරු රාජ්ය ස්විචයන්.
    • අපගමනය - අගය පැතිරීම (නිරවද්‍යතාව) පෙන්වයි ප්රතික්රියාව සම්මත අපගමනය ක්රමය භාවිතා කිරීම.
    • ගණන් කරන්න - මෙම පරීක්ෂණය කොපමණ වාරයක් සිදු කර ඇත.
  2. කෙටි ලඝු-සටහනක් මඟින් පොකුර දැනට කරන්නේ කුමක්ද යන්න තක්සේරු කිරීමට ඔබට ඉඩ සලසයි. මෙහෙයුමේ පුනරාවර්තන (පරීක්ෂණ) අංකය, වේලා මුද්රාව සහ නම දර්ශනය වේ. ඉතා දිගු (> විනාඩි 5) ධාවනය ගැටලුවක් පෙන්නුම් කරයි.
  3. හදවත (හදවත) - වත්මන් කාලය. කාර්ය සාධනය පිළිබඳ දෘශ්ය තක්සේරුව සඳහා ස්වාමිවරුන් වත්මන් වේලාව නිරන්තරයෙන් එහි වගුව වෙත float IP master භාවිතයෙන් ලියා ඇත. සාර්ථක නම්, ප්‍රතිඵලය මෙම පැනලයේ පෙන්වයි.
  4. පරාජය විය (ස්පන්දනය) - “වත්මන් වේලාව”, එය කලින් ස්ක්‍රිප්ට් මගින් පටිගත කරන ලදී හදවත ප්‍රගුණ කිරීමට, දැන් කියවන්න වහලෙක් එහි float IP හරහා. වහලාගේ කාර්ය සාධනය සහ අනුකරණය දෘශ්‍ය ලෙස තක්සේරු කිරීමට ඔබට ඉඩ සලසයි. Tuchanka1 හි float IP සහිත වහලුන් නොමැත (සේවා සපයන වහලුන් නොමැත), නමුත් අවස්ථා දෙකක් (DBs) ඇත, එබැවින් එය මෙහි පෙන්වනු නොලැබේ. පරාජය වියහා හදවත දෙවන අවස්ථාව.
  5. උපයෝගිතා භාවිතයෙන් පොකුරු සෞඛ්යය නිරීක්ෂණය කිරීම pcs mon. ව්යුහය, නෝඩ් හරහා සම්පත් බෙදා හැරීම සහ අනෙකුත් ප්රයෝජනවත් තොරතුරු පෙන්වයි.
  6. පොකුරේ ඇති සෑම අතථ්‍ය යන්ත්‍රයකින්ම පද්ධති අධීක්ෂණය මෙහි ප්‍රදර්ශනය කෙරේ. පොකුරේ අථත්‍ය යන්ත්‍ර කීයක් තිබේද යන්න මත එවැනි පැනල් තවත් තිබිය හැක. ප්රස්තාර දෙකක් CPU භාරය (අථත්‍ය යන්ත්‍රවල ප්‍රොසෙසර දෙකක් ඇත), අතථ්‍ය යන්ත්‍ර නාමය, පද්ධති පැටවීම (මිනිත්තු 5, 10 සහ 15 ට වඩා සාමාන්‍ය අගයක් ගන්නා බැවින් පැටවීමේ සාමාන්‍යය ලෙස නම් කර ඇත), දත්ත සහ මතකය වෙන් කිරීම සැකසීම.
  7. පරීක්ෂණ සිදු කරන ස්ක්‍රිප්ටයේ ලුහුබැඳීම. අක්රිය වීමකදී - මෙහෙයුමේ හදිසි බාධාවක් හෝ නිමක් නැති පොරොත්තු චක්රයක් - මෙන්න ඔබට මෙම හැසිරීම සඳහා හේතුව දැකිය හැකිය.

පරීක්ෂණ අදියර දෙකකින් සිදු කෙරේ. පළමුව, ස්ක්‍රිප්ට් සියලු වර්ගවල පරීක්ෂණ හරහා ගමන් කරයි, අහඹු ලෙස මෙම පරීක්ෂණය යෙදිය යුතු අතථ්‍ය යන්ත්‍රයක් තෝරා ගනී. එවිට නිමක් නැති පරීක්ෂණ චක්‍රයක් සිදු කරනු ලැබේ, අථත්‍ය යන්ත්‍ර සහ දෝෂය සෑම විටම අහඹු ලෙස තෝරා ගනු ලැබේ. පරීක්‍ෂණ ස්ක්‍රිප්ට් (පහළ පුවරුව) හදිසියේ අවසන් වීම හෝ යමක් එනතෙක් බලා සිටීමේ නිමක් නැති පුඩුවක් (> එක් මෙහෙයුමක් සඳහා මිනිත්තු 5 ක් ක්‍රියාත්මක කිරීමේ කාලය, මෙය හෝඩුවාවක් තුළ දැකිය හැකිය) මෙම පොකුරේ සමහර පරීක්ෂණ අසාර්ථක වී ඇති බව පෙන්නුම් කරයි.

සෑම පරීක්ෂණයක්ම පහත සඳහන් මෙහෙයුම් වලින් සමන්විත වේ:

  1. දෝෂයක් අනුකරණය කරන ශ්‍රිතයක් දියත් කරන්න.
  2. සූදානම්ද? - පොකුර යථා තත්ත්වයට පත් කිරීමට බලා සිටීම (සියලු සේවා සපයන විට).
  3. පොකුරු ප්‍රතිසාධන කල් ඉකුත්වීම පෙන්වයි (ප්රතික්රියාව).
  4. පිළිතුර - පොකුර "අලුත්වැඩියා කෙරෙමින් පවතී." ඉන් පසු එය සම්පූර්ණ ක්‍රියාකාරී තත්ත්වයකට පැමිණිය යුතු අතර ඊළඟ අක්‍රියතාව සඳහා සූදානම් විය යුතුය.

ඔවුන් කරන දේ පිළිබඳ විස්තරයක් සහිත පරීක්ෂණ ලැයිස්තුවක් මෙන්න:

  • ForkBomb: ගෑරුප්පු බෝම්බයක් භාවිතයෙන් "මතකයෙන් බැහැර" නිර්මාණය කරයි.
  • ඉඩකඩ අවසන්: දෘඪ තැටිය පිරී ඇත. නමුත් පරීක්ෂණය තරමක් සංකේතාත්මක ය; පරීක්ෂා කිරීමේදී නිර්මාණය වන සුළු බරක් සමඟ, දෘඪ තැටිය පිරී ඇති විට PostgreSQL සාමාන්යයෙන් අසමත් නොවේ.
  • Postgres-KILL: විධානය සමඟ PostgreSQL මරා දමයි killall -KILL postgres.
  • Postgres-STOP: PostgreSQL විධානය එල්ලා තබයි killall -STOP postgres.
  • බලය අක්රිය: විධානය සමඟ අතථ්‍ය යන්ත්‍රය “de-energizes” කරයි VBoxManage controlvm "виртуалка" poweroff.
  • නැවත සකසන්න: විධානය සමඟ අථත්‍ය යන්ත්‍රය අධික ලෙස පටවයි VBoxManage controlvm "виртуалка" reset.
  • SBD-STOP: විධානය සමඟ SBD යක්ෂයා අත්හිටුවයි killall -STOP sbd.
  • වසා දමන්න: SSH හරහා අථත්‍ය යන්ත්‍රය වෙත විධානයක් යවයි systemctl poweroff, පද්ධතිය අලංකාර ලෙස වසා දමයි.
  • සබැඳි ඉවත් කරන්න: ජාල හුදකලා කිරීම, විධානය VBoxManage controlvm "виртуалка" setlinkstate1 off.

සම්මත tmux විධානය "kill-window" භාවිතයෙන් පරීක්ෂණ සම්පූර්ණ කිරීම Ctrl-b &, හෝ "detach-client" විධානය Ctrl-b d: මෙම අවස්ථාවේදී පරීක්ෂණය අවසන් වේ, tmux වසා දමයි, අතථ්‍ය යන්ත්‍ර ක්‍රියා විරහිත වේ.

පරීක්ෂා කිරීමේදී හඳුනාගත් ගැටළු

  • දැන් මුර බල්ලා යක්ෂයා sbd නිරීක්ෂණය කරන ලද ඩීමන් නැවැත්වීමට ක්‍රියා කරයි, නමුත් ඒවා කැටි කිරීම නොවේ. තවද, ප්රතිඵලයක් වශයෙන්, කැටි කිරීමට පමණක් හේතු වන දෝෂ කොරොසින්ක් и පේස්මේකර්, නමුත් එල්ලෙන්නේ නැහැ sbd... චෙක්පත් සඳහා කොරොසින්ක් දැනටමත් ඇත PR#83 (GitHub හි sbd), ත්‍රෙඩ් එකට පිලිගන්නවා ස්වාමියා. පේස්මේකර් සඳහා සමාන දෙයක් ඇති බවට ඔවුන් (PR#83 හි) පොරොන්දු විය, මම එය බලාපොරොත්තු වෙමි Red Hat 8 කරන්නම්. නමුත් එවැනි "අක්‍රියා" සමපේක්ෂන වන අතර ඒවා පහසුවෙන් කෘතිමව අනුකරණය කළ හැකිය, උදාහරණයක් ලෙස, killall -STOP corosync, නමුත් සැබෑ ජීවිතයේදී කවදාවත් හමු නොවේ.

  • У පේස්මේකර් සඳහා අනුවාදයේ CentOS 7 වැරදි ලෙස සකසා ඇත සමමුහුර්ත_කාලය අවසන් у ගණපූර්ණ උපාංගයප්රතිඵලයක් වශයෙන් එක් නෝඩයක් අසමත් වුවහොත්, යම් සම්භාවිතාවක් සහිතව දෙවන නෝඩය ද නැවත ආරම්භ වේ, ස්වාමියා ගමන් කිරීමට නියමිතව තිබුණි. විශාල වීමෙන් සුව වේ සමමුහුර්ත_කාලය අවසන් у ගණපූර්ණ උපාංගය යෙදවීමේදී (ස්ක්‍රිප්ට් එකේ setup/setup1) මෙම සංශෝධනය සංවර්ධකයින් විසින් පිළිගත්තේ නැත පේස්මේකර්, ඒ වෙනුවට ඔවුන් මෙම කාල සීමාව ස්වයංක්‍රීයව ගණනය කෙරෙන ආකාරයට (යම් නිශ්චිත නොවන අනාගතයකදී) යටිතල පහසුකම් ප්‍රතිනිර්මාණය කිරීමට පොරොන්දු විය.

  • දත්ත සමුදා වින්‍යාසය එය නියම කරන්නේ නම් LC_MESSAGES (පෙළ පණිවිඩ) යුනිකෝඩ් භාවිතා කළ හැක, උදා. ru_RU.UTF-8, පසුව ආරම්භයේදී postgres පෙදෙසිය UTF-8 නොවන පරිසරයක, හිස් පරිසරයක කියන්න (මෙහි පේස්මේකර්+pgsqlms(paf) ධාවනය වේ postgres) එවිට ලොගයේ UTF-8 අකුරු වෙනුවට ප්‍රශ්න ලකුණු අඩංගු වේ. මෙම නඩුවේ කුමක් කළ යුතුද යන්න පිළිබඳව PostgreSQL සංවර්ධකයින් එකඟ වී නොමැත. එය පිරිවැය, ඔබ ස්ථාපනය කිරීමට අවශ්ය වේ LC_MESSAGES=en_US.UTF-8 දත්ත සමුදා අවස්ථාවක් වින්‍යාස කිරීමේදී (නිර්මාණය කිරීමේදී).

  • wal_receiver_timeout සකසා ඇත්නම් (පෙරනිමියෙන් එය 60s වේ), එවිට tuchanka3 සහ tuchanka4 පොකුරු වල මාස්ටර් මත PostgreSQL-STOP පරීක්ෂණය අතරතුර අනුකරණය නව මාස්ටර් වෙත නැවත සම්බන්ධ නොවේ. එහි අනුකරණය සමමුහුර්ත වේ, එබැවින් වහලා පමණක් නොව නව ස්වාමියා ද නතර වේ. PostgreSQL වින්‍යාස කිරීමේදී wal_receiver_timeout=0 සැකසීමෙන් ක්‍රියා කරයි.

  • ForkBomb පරීක්ෂණයේදී (මතක පිටාර ගැලීම) විටින් විට මම PostgreSQL හි ප්‍රතිනිර්මාණ කැටි වීම් නිරීක්ෂණය කළෙමි. ForkBomb පසු, සමහර විට වහලුන් නව ස්වාමියා වෙත නැවත සම්බන්ධ නොවිය හැක. මට මෙය හමු වී ඇත්තේ සමමුහුර්ත ප්‍රතිනිර්මාණය හේතුවෙන් ස්වාමියා කැටි වූ tuchanka3 සහ tuchanka4 පොකුරු වල පමණි. බොහෝ වේලාවකට පසු (පැය දෙකක් පමණ) ගැටලුව තනිවම පහව ගියේය. මෙය නිවැරදි කිරීම සඳහා තවත් පර්යේෂණ අවශ්ය වේ. රෝග ලක්ෂණ පෙර දෝෂයට සමාන වන අතර එය වෙනත් හේතුවක් නිසා ඇති වන නමුත් එකම ප්රතිවිපාක ඇත.

ක්‍රෝගන් පින්තූරය උපුටා ගන්නා ලදී විචල්ය කලාව කතුවරයාගේ අවසරය ඇතිව:

PostgreSQL සහ Pacemaker මත පදනම් වූ අසාර්ථක පොකුරු ආකෘති නිර්මාණය

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න