සෑම සාර්ථක ව්යාපාරික යෙදුමක්ම පාහේ ඉක්මනින් හෝ පසුව තිරස් පරිමාණය අවශ්ය වන අදියරකට ඇතුල් වේ. බොහෝ අවස්ථාවන්හීදී, ඔබට සරලව නව අවස්ථාවක් ආරම්භ කර බර සාමාන්යය අඩු කළ හැකිය. නමුත් විවිධ නෝඩ් එකිනෙක ගැන දැනගෙන වැඩ බර ප්රවේශමෙන් බෙදා හරින බවට සහතික විය යුතු සුළු සුළු අවස්ථා ද ඇත.
එය ඉතා වාසනාවන්ත විය අර්ලං, අපි එහි ප්රසන්න වාක්ය ඛණ්ඩය සහ ඒ වටා උද්දීපනය සඳහා තෝරා ගත්, පළමු පන්තියක් ඇත
විවිධ නෝඩ් වල ක්රියාවලි අතර මෙන්ම සබැඳි සහ මොනිටර අතර පණිවිඩය විනිවිද යාමකි […]
ප්රායෝගිකව, සෑම දෙයක්ම ටිකක් සංකීර්ණයි. බෙදාහරින ලදී අර්ලං "කන්ටේනරය" යන්නෙන් නැව්ගත කිරීම සඳහා විශාල යකඩ පෙට්ටියක් අදහස් කරන විට සංවර්ධනය කරන ලදී, සහ "ඩොකර්" යනු ලෝන්ග්ෂෝර්මන් සඳහා සමාන පදයකි. තුල IP4 බොහෝ භාවිත නොකළ ලිපින තිබුණි, සාමාන්යයෙන් මීයන් කේබලය හරහා හපන නිසා ජාල බිඳවැටීම් ඇති වූ අතර නිෂ්පාදන පද්ධතියේ සාමාන්ය කාලය දශක කිහිපයකින් මනිනු ලැබීය.
දැන් අපි සියල්ලෝම ඇදහිය නොහැකි තරම් ස්වයංපෝෂිත, ඇසුරුම් කර, බෙදා හරිනු ලැබේ අර්ලං විශාල අහඹු බවේ මූලධර්මය මත ගතික IP ලිපින ලබා දෙන පරිසරයක, සහ උපලේඛකයාගේ වම් විලුඹේ අභිමතය පරිදි නෝඩ් දිස්විය හැකි අතර අතුරුදහන් විය හැකිය. බෙදා හරින සෑම ව්යාපෘතියකම බොයිලර් ප්ලේට් කේත ගොඩවල් වළක්වා ගැනීමට අර්ලං, සතුරු පරිසරයට එරෙහිව සටන් කිරීමට, උපකාර අවශ්ය වේ.
අදහස් දැක්වීම්: තිබෙන බව මම දනිමි libcluster
අවශ්යතා
මට පුද්ගලිකව අවශ්ය වූයේ පොකුරු කළමනාකරණය භාර ගන්නා සහ පහත ගුණාංග ඇති පුස්තකාලයකි.
- දෘඪ-කේතගත නෝඩ් ලැයිස්තුවක් සහ සේවා හරහා ගතික සොයාගැනීම් යන දෙකම සමඟ විනිවිද පෙනෙන වැඩ අර්ලං;
- සෑම ස්ථලක වෙනසක් සඳහාම සම්පූර්ණ ක්රියාකාරී ආපසු කැඳවීම (එහි නෝඩ්, මෙහි නෝඩ්, ජාල අස්ථාවරත්වය, බෙදීම්);
- දිගු සහ කෙටි නම් සහිත පොකුරක් දියත් කිරීම සඳහා විනිවිද පෙනෙන අතුරුමුහුණත
:nonode@nohost
; - යටිතල පහසුකම් කේතය ලිවීමෙන් තොරව, ඩොකර් සහාය කොටුවෙන් පිටත.
දෙවැන්නෙන් අදහස් කරන්නේ මම යෙදුම දේශීයව පරීක්ෂා කිරීමෙන් පසුව බවයි :nonode@nohost
, හෝ භාවිතා කරමින් කෘතිමව බෙදා හරින ලද පරිසරයක test_cluster_task
docker-compose up --scale my_app=3
සහ එය කිසිදු කේත වෙනසක් නොමැතිව docker හි අවස්ථා තුනක් ක්රියාත්මක කරන්නේ කෙසේදැයි බලන්න. මට වැනි යැපෙන යෙදුම් ද අවශ්යයි mnesia
- ස්ථාන විද්යාව වෙනස් වූ විට, තිරය පිටුපස ඔවුන් යෙදුමෙන් කිසිදු අමතර පහරක් නොමැතිව පොකුරු සජීවීව නැවත ගොඩනඟයි.
Cloister පොකුරකට ආධාරකයේ සිට කෝපි සෑදීම දක්වා සෑම දෙයක්ම කළ හැකි පුස්තකාලයක් වීමට අදහස් කළේ නැත. එය රිදී උණ්ඩයක් නොවන අතර එය හැකි සෑම අවස්ථාවකම ආවරණය කිරීම හෝ න්යායාචාර්යවරුන් යන අර්ථයෙන් ශාස්ත්රීය වශයෙන් සම්පූර්ණ විසඳුමක් වීම නොවේ. CS මෙම පදයට ඇතුළත් කර ඇත. මෙම පුස්තකාලය ඉතා පැහැදිලි අරමුණක් ඉටු කිරීමට නිර්මාණය කර ඇත, නමුත් එහි විශාල නොවන කාර්යය පරිපූර්ණ ලෙස කරන්න. මෙම ඉලක්කය වනුයේ දේශීය සංවර්ධන පරිසරය සහ සතුරු බහාලුම්වලින් පිරුණු බෙදා හරින ලද ප්රත්යාස්ථ පරිසරයක් අතර පූර්ණ විනිවිදභාවයක් ලබා දීමයි.
තෝරාගත් ප්රවේශය
Cloister උසස් පරිශීලකයින්ට කෙලින්ම ක්රියාත්මක කිරීමෙන් පොකුරු එකලස් කිරීම සහ නඩත්තු කිරීම අතින් ක්රියා කළ හැකි වුවද, යෙදුමක් ලෙස ධාවනය කිරීමට අදහස් කෙරේ. Cloister.Manager
ඉලක්ක යෙදුමේ අධීක්ෂක ගසෙහි.
යෙදුමක් ලෙස ධාවනය කරන විට, පුස්තකාලය රඳා පවතී config
, එය පහත මූලික අගයන් කියවයි:
config :cloister,
otp_app: :my_app,
sentry: :"cloister.local", # or ~w|n1@foo n2@bar|a
consensus: 3, # number of nodes to consider
# the cluster is up
listener: MyApp.Listener # listener to be called when
# the ring has changed
ඉහත පරාමිතීන් වචනාර්ථයෙන් පහත සඳහන් දේ අදහස් කරයි: Cloister OTP යෙදුම සඳහා භාවිතා වේ :my_app
, භාවිතා කරයි erlang සේවා සොයාගැනීම නෝඩ් සම්බන්ධ කිරීමට, අවම වශයෙන් තුනක්, සහ MyApp.Listener
මොඩියුලය (ක්රියාත්මක කිරීම @behaviour Cloister.Listener
මෙම වින්යාසය සමඟ, යෙදුම Cloister වනු ඇත MyApp.Listener.on_state_change/2
%Cloister.Monitor{status: :up}
, එහි තේරුම: "හෙලෝ, පොකුර එකලස් කර ඇත."
බොහෝ අවස්ථාවලදී, ස්ථාපනය consensus: 3
ප්රශස්ත වන්නේ අපි තවත් නෝඩ් සම්බන්ධ කිරීමට බලාපොරොත්තු වුවද, ආපසු කැඳවීම සිදු වන බැවිනි status: :rehashing
→ status: :up
අලුතින් එකතු කරන ලද හෝ ඉවත් කරන ලද ඕනෑම නෝඩයක.
සංවර්ධන මාදිලියෙන් ආරම්භ කරන විට, ඔබ විසින් සකස් කළ යුතුය consensus: 1
и Cloister ඔහු දකින විට පොකුරු එකලස් කිරීම සඳහා බලා සිටීම සතුටින් මග හරිනු ඇත :nonode@nohost
, හෝ :node@host
, හෝ :[email protected]
- නෝඩය වින්යාස කර ඇති ආකාරය අනුව (:none | :shortnames | :longnames
).
බෙදා හරින ලද යෙදුම් කළමනාකරණය
රික්තකයක නොමැති බෙදා හරින ලද යෙදුම් සාමාන්යයෙන් බෙදා හරින ලද පරායත්තයන් ඇතුළත් වේ mnesia
. එකම ඇමතුමකින් ඔවුන්ගේ ප්රතිසංවිධානය හැසිරවීමට අපට පහසු වේ on_state_change/2
. මෙන්න, උදාහරණයක් ලෙස, නැවත සකස් කරන්නේ කෙසේද යන්න පිළිබඳ සවිස්තරාත්මක විස්තරයකි mnesia
පියාසර කරන විට
භාවිතා කිරීමේ ප්රධාන වාසිය Cloister ස්ථල විද්යාව වෙනස් කිරීමෙන් පසු පොකුර නැවත ගොඩනැගීමට අවශ්ය සියලුම මෙහෙයුම් එය සිදු කරයි කබාය යට. අපි IP ලිපින සහ ඒ නිසා නෝඩ් නම් කලින් දැන සිටියත්, ඒවා ගතිකව පවරා/වෙනස් කර තිබේද යන්න නොසලකා, සියලුම නෝඩ් සම්බන්ධ කර ඇති, දැනටමත් සකස් කර ඇති බෙදා හරින ලද පරිසරයක යෙදුම සරලව ක්රියාත්මක වේ. මෙයට විශේෂ ඩොකර් වින්යාස සැකසුම් අවශ්ය නොවන අතර යෙදුම් සංවර්ධකයෙකුගේ දෘෂ්ටි කෝණයෙන්, බෙදා හරින ලද පරිසරයක ධාවනය කිරීම හෝ දේශීය එකක ධාවනය අතර වෙනසක් නොමැත. :nonode@nohost
. ඔබට මේ ගැන වැඩිදුර කියවිය හැකිය
අභිරුචි ක්රියාත්මක කිරීමක් හරහා ස්ථල විද්යාත්මක වෙනස්කම් සංකීර්ණ ලෙස හැසිරවීම කළ හැකි වුවද MyApp.Listener
, මෙම පුස්තකාල සීමාවන් සහ වින්යාස පක්ෂග්රාහීත්වය ක්රියාත්මක කිරීමේ මූලික ගල බව ඔප්පු වන අන්ත අවස්ථා සෑම විටම තිබිය හැක. කමක් නෑ උඩින් ගන්න libcluster
, එය වඩාත් පොදු අරමුණකි, නැතහොත් පහත මට්ටමේ පොකුර ඔබම හසුරුවන්න. මෙම කේත පුස්තකාලයේ පරමාර්ථය වන්නේ හැකි සෑම අවස්ථාවක්ම ආවරණය කිරීම නොව, අනවශ්ය වේදනාවක් සහ කරදරකාරී පිටපත්-පේස්ට් නොමැතිව වඩාත් පොදු අවස්ථාව භාවිතා කිරීමයි.
සටහන: මුල් පිටපතේ මෙම අවස්ථාවේදී “Happy clustering!” යන වාක්ය ඛණ්ඩය තිබී ඇති අතර, මම පරිවර්තනය කරන Yandex (මට ශබ්දකෝෂ හරහා යාමට අවශ්ය නැත) මට “Happy clustering!” යන විකල්පය ලබා දුන්නේය. විශේෂයෙන්ම වත්මන් භූ දේශපාලනික තත්ත්වය අනුව මීට වඩා හොඳ පරිවර්තනයක් ගැන සිතීම සමහරවිට කළ නොහැක්කකි.
මූලාශ්රය: www.habr.com