RabbitMQ හි Kubernetes වෙත බාධාවකින් තොරව සංක්‍රමණය වීම

RabbitMQ හි Kubernetes වෙත බාධාවකින් තොරව සංක්‍රමණය වීම

RabbitMQ යනු Erlang හි ලියා ඇති පණිවිඩ තැරැව්කරුවෙකු වන අතර එය ඔබට බහු නෝඩ් හරහා සම්පූර්ණ දත්ත අනුකරණයක් සහිත අසාර්ථක පොකුරක් සංවිධානය කිරීමට ඉඩ සලසයි, එහිදී සෑම නෝඩයකටම ඉල්ලීම් කියවීමට සහ ලිවීමට සේවය කළ හැකිය. නිෂ්පාදන ක්‍රියාකාරිත්වයේ බොහෝ Kubernetes පොකුරු තිබීම, අපි RabbitMQ ස්ථාපනයන් විශාල සංඛ්‍යාවකට සහය දක්වන අතර අක්‍රිය කාලයකින් තොරව එක් පොකුරකින් තවත් පොකුරකට දත්ත සංක්‍රමණය කිරීමේ අවශ්‍යතාවයට මුහුණ දෙන්නෙමු.

අපට අවම වශයෙන් අවස්ථා දෙකකදී මෙම මෙහෙයුම අවශ්‍ය විය:

  1. Kubernetes හි පිහිටා නොමැති RabbitMQ පොකුරකින් දත්ත - දැනටමත් "kubernetized" (එනම් K8s කරල් වල ක්‍රියාත්මක වන) - පොකුරකට මාරු කිරීම.
  2. Kubernetes තුළ RabbitMQ සංක්‍රමණය එක් නාම අවකාශයකින් තවත් නාම අවකාශයකට (උදාහරණයක් ලෙස, පරිපථ නාම අවකාශ වලින් සීමා කර ඇත්නම්, යටිතල පහසුකම් එක් පරිපථයකින් තවත් පරිපථයකට මාරු කිරීම සඳහා).

ලිපියේ යෝජනා කර ඇති වට්ටෝරුව දැනටමත් K3s හෝ සමහර පැරණි සේවාදායකයන් මත පිහිටා ඇති පැරණි RabbitMQ පොකුරක් (උදාහරණයක් ලෙස, නෝඩ් 8 කින්) ඇති තත්වයන් (නමුත් ඒවාට සීමා නොවේ) අවධානය යොමු කර ඇත. Kubernetes හි සත්කාරකත්වය දරන යෙදුමක් (දැනටමත් එහි හෝ අනාගතයේදී) එය සමඟ ක්‍රියා කරයි:

RabbitMQ හි Kubernetes වෙත බාධාවකින් තොරව සංක්‍රමණය වීම

සහ අපි එය Kubernetes හි නව නිෂ්පාදනයට සංක්‍රමණය කිරීමේ කාර්යයට මුහුණ දී සිටිමු.

පළමුව, සංක්රමණය සඳහාම පොදු ප්රවේශය විස්තර කරනු ලබන අතර, ඉන් පසුව එය ක්රියාත්මක කිරීමේ තාක්ෂණික විස්තර විස්තර කරනු ඇත.

සංක්‍රමණ ඇල්ගොරිතම

ඕනෑම ක්‍රියාවකට පෙර පළමු, ප්‍රාථමික, අදියර වන්නේ පැරණි RabbitMQ ස්ථාපනය තුළ ඉහළ උපයෝජ්‍යතා මාදිලිය සක්‍රීය කර ඇත්ද යන්න පරීක්ෂා කිරීමයි (HA) හේතුව පැහැදිලිය - අපට කිසිදු දත්තයක් නැති කර ගැනීමට අවශ්‍ය නැත. මෙම චෙක්පත සිදු කිරීම සඳහා, ඔබට RabbitMQ පරිපාලක පැනලය වෙත ගොස් පරිපාලක → ප්‍රතිපත්ති පටිත්තෙහි අගය සකසා ඇති බවට සහතික කර ගත හැක. ha-mode: all:

RabbitMQ හි Kubernetes වෙත බාධාවකින් තොරව සංක්‍රමණය වීම

මීලඟ පියවර වන්නේ Kubernetes කරල් වල නව RabbitMQ පොකුරක් ඉහළ නැංවීමයි (අපගේ නඩුවේදී, උදාහරණයක් ලෙස, නෝඩ් 3 කින් සමන්විත වේ, නමුත් ඒවායේ අංකය වෙනස් විය හැක).

මෙයින් පසු, අපි පැරණි සහ නව RabbitMQ පොකුරු ඒකාබද්ධ කර, තනි පොකුරක් (නෝඩ් 6 කින්) ලබා ගනිමු:

RabbitMQ හි Kubernetes වෙත බාධාවකින් තොරව සංක්‍රමණය වීම

පැරණි සහ නව RabbitMQ පොකුරු අතර දත්ත සමමුහුර්ත කිරීමේ ක්රියාවලිය ආරම්භ වේ. පොකුරේ ඇති සියලුම නෝඩ් අතර සියලුම දත්ත සමමුහුර්ත කළ පසු, අපට නව පොකුර භාවිතා කිරීමට යෙදුම මාරු කළ හැකිය:

RabbitMQ හි Kubernetes වෙත බාධාවකින් තොරව සංක්‍රමණය වීම

මෙම මෙහෙයුම් වලින් පසුව, RabbitMQ පොකුරෙන් පැරණි නෝඩ් ඉවත් කිරීමට ප්රමාණවත් වන අතර, චලනය සම්පූර්ණ ලෙස සැලකිය හැකිය:

RabbitMQ හි Kubernetes වෙත බාධාවකින් තොරව සංක්‍රමණය වීම

නිෂ්පාදනයේදී අපි මෙම යෝජනා ක්රමය බොහෝ වාරයක් භාවිතා කර ඇත. කෙසේ වෙතත්, අපගේ පහසුව සඳහා, අපි බහු Kubernetes පොකුරු හරහා සම්මත RMQ වින්‍යාසයන් බෙදා හරින විශේෂිත පද්ධතියක් තුළ එය ක්‍රියාත්මක කළෙමු. (කුතුහලයෙන් සිටින අය සඳහා: අපි කතා කරන්නේ addon-operatorඅපි ගැන මෑතකදී කිව්වා). යෝජිත විසඳුම ක්‍රියාවෙන් අත්හදා බැලීමට ඕනෑම කෙනෙකුට ඔවුන්ගේ ස්ථාපනයන් සඳහා යෙදිය හැකි තනි උපදෙස් අපි පහත ඉදිරිපත් කරන්නෙමු.

අපි එය ප්රායෝගිකව උත්සාහ කරමු

අවශ්යතා

විස්තර ඉතා සරල ය:

  1. Kubernetes පොකුර (minikube ද වැඩ කරනු ඇත);
  2. RabbitMQ පොකුර (හිස් ලෝහ මත යෙදවිය හැකි අතර, නිල හෙල්ම් ප්‍රස්ථාරයෙන් Kubernetes හි සාමාන්‍ය පොකුරක් මෙන් සෑදිය හැක).

පහත උදාහරණය සඳහා, මම කුබර්නෙටස් වෙත RMQ යොදවා එය ඇමතුවෙමි rmq-old.

ස්ථාවරය සූදානම් කිරීම

1. හෙල්ම් ප්‍රස්ථාරය බාගත කර එය ටිකක් සංස්කරණය කරන්න:

helm fetch --untar stable/rabbitmq-ha

පහසුව සඳහා, අපි මුරපදයක් සකස් කරමු, ErlangCookie සහ දේශපාලනය කරන්න ha-allඑබැවින් පෙරනිමියෙන් RMQ පොකුරේ සියලුම නෝඩ් අතර පෝලිම් සමමුහුර්ත වේ:

rabbitmqPassword: guest
rabbitmqErlangCookie: mae9joopaol7aiVu3eechei2waiGa2we
definitions:
policies: |-
  {
    "name": "ha-all",
    "pattern": ".*",
    "vhost": "/",
    "definition": {
      "ha-mode": "all",
      "ha-sync-mode": "automatic",
      "ha-sync-batch-size": 81920
    }
  }

2. ප්‍රස්ථාරය ස්ථාපනය කරන්න:

helm install . --name rmq-old --namespace rmq-old

3. RabbitMQ පරිපාලක පැනලය වෙත ගොස් නව පෝලිමක් සාදා පණිවිඩ කිහිපයක් එක් කරන්න. සංක්‍රමණයෙන් පසු සියලුම දත්ත සංරක්ෂණය කර ඇති බවත් අපට කිසිවක් නැති වී නැති බවත් සහතික කර ගත හැකි වන පරිදි ඒවා අවශ්‍ය වනු ඇත:

RabbitMQ හි Kubernetes වෙත බාධාවකින් තොරව සංක්‍රමණය වීම

පරීක්ෂණ බංකුව සූදානම්: අපට මාරු කළ යුතු දත්ත සහිත "පැරණි" RabbitMQ ඇත.

RabbitMQ පොකුරක් සංක්‍රමණය කිරීම

1. පළමුව, අපි නව RabbitMQ යොදවමු මිතුරා සමඟ නාම අවකාශය එකම ErlangCookie සහ පරිශීලකයා සඳහා මුරපදය. මෙය සිදු කිරීම සඳහා, අපි ඉහත විස්තර කර ඇති මෙහෙයුම් සිදු කරන්නෙමු, RMQ ස්ථාපනය සඳහා අවසාන විධානය පහත පරිදි වෙනස් කරන්න:

helm install . --name rmq-new --namespace rmq-new

2. දැන් ඔබට නව පොකුර පැරණි එක සමඟ ඒකාබද්ධ කළ යුතුය. මෙය සිදු කිරීම සඳහා, එක් එක් කරල් වෙත යන්න නව RabbitMQ සහ විධාන ක්‍රියාත්මක කරන්න:

export OLD_RMQ=rabbit@rmq-old-rabbitmq-ha-0.rmq-old-rabbitmq-ha-discovery.rmq-old.svc.cluster.local && 
  rabbitmqctl stop_app && 
  rabbitmqctl join_cluster $OLD_RMQ && 
  rabbitmqctl start_app

විචල්‍යයක OLD_RMQ එක් නෝඩ් එකක ලිපිනය හමු වේ පැරණි RMQ පොකුර.

මෙම විධානයන් වත්මන් නෝඩය නවත්වනු ඇත නව RMQ පොකුර, එය පැරණි පොකුරට අමුණන්න සහ එය නැවත දියත් කරන්න.

3. නෝඩ් 6 ක RMQ පොකුර සූදානම්:

RabbitMQ හි Kubernetes වෙත බාධාවකින් තොරව සංක්‍රමණය වීම

සියලුම නෝඩ් අතර පණිවිඩ සමමුහුර්ත වන තෙක් ඔබ රැඳී සිටිය යුතුය. පණිවිඩ සමමුහුර්ත කිරීමේ කාලය පොකුර යොදවා ඇති දෘඩාංගයේ ධාරිතාව සහ පණිවිඩ ගණන මත රඳා පවතින බව අනුමාන කිරීම අපහසු නැත. විස්තර කරන ලද තත්වය තුළ, ඒවායින් 10 ක් පමණක් ඇත, එබැවින් දත්ත ක්ෂණිකව සමමුහුර්ත කර ඇත, නමුත් ප්රමාණවත් තරම් විශාල පණිවිඩ සංඛ්යාවක් සමඟ, සමමුහුර්තකරණය පැය ගණනක් පැවතිය හැකිය.

එබැවින්, සමමුහුර්ත කිරීමේ තත්ත්වය:

RabbitMQ හි Kubernetes වෙත බාධාවකින් තොරව සංක්‍රමණය වීම

එය +5 එයින් අදහස් වන්නේ පණිවිඩ දැනටමත් ඇත වැඩිපුර නෝඩ් 5 ක් මත (ක්ෂේත්‍රයේ දක්වා ඇති දේ හැර Node) මේ අනුව, සමමුහුර්තකරණය සාර්ථක විය.

4. ඉතිරිව ඇත්තේ යෙදුමේ ඇති RMQ ලිපිනය නව පොකුරට මාරු කිරීම පමණි (මෙහි නිශ්චිත ක්‍රියා ඔබ භාවිතා කරන තාක්‍ෂණ තොගය සහ වෙනත් යෙදුම් විශේෂතා මත රඳා පවතී), ඉන්පසු ඔබට පැරණි එකට සමු දිය හැකිය.

අවසාන මෙහෙයුම සඳහා (එනම් දැනටමත් после යෙදුම නව පොකුරකට මාරු කිරීම) එක් එක් නෝඩ් වෙත යන්න පැරණි පොකුරු කර විධාන ක්‍රියාත්මක කරන්න:

rabbitmqctl stop_app
rabbitmqctl reset

පැරණි නෝඩ් ගැන පොකුරට "අමතක වී ඇත": ඔබට පැරණි RMQ මකා දැමිය හැකිය, එම අවස්ථාවේදී චලනය සම්පූර්ණ වනු ඇත.

අදහස් දැක්වීම්: ඔබ සහතික සමඟ RMQ භාවිතා කරන්නේ නම්, කිසිවක් මූලික වශයෙන් වෙනස් නොවේ - චලනය කිරීමේ ක්රියාවලිය හරියටම සිදු කරනු ලැබේ.

සොයා ගැනීම්

අපට RabbitMQ සංක්‍රමණය වීමට හෝ නව පොකුරකට යාමට අවශ්‍ය වූ විට විස්තර කරන ලද යෝජනා ක්‍රමය සෑම අවස්ථාවකම පාහේ සුදුසු වේ.

අපගේ නඩුවේදී, දුෂ්කරතා ඇති වූයේ එක් වරක් පමණි, බොහෝ ස්ථාන වලින් RMQ වෙත ප්‍රවේශ වූ විට, සහ RMQ ලිපිනය සෑම තැනකම අලුත් එකක් වෙත වෙනස් කිරීමට අපට අවස්ථාව නොලැබුණි. ඉන්පසුව පවතින සේවාවන් සහ ඇතුල්වීම් යටතට වැටෙන පරිදි එම ලේබල් සමඟම අපි නව RMQ එකක් දියත් කළ අතර, පොඩ් එක දියත් කරන විට අපි අතින් ලේබල් හසුරුවා, ඉල්ලීම් නොවැටෙන පරිදි ආරම්භයේදීම ඒවා ඉවත් කළෙමු. හිස් RMQ, සහ පණිවිඩ සමමුහුර්ත කිරීමෙන් පසු ඒවා නැවත එකතු කිරීම.

වෙනස් වූ වින්‍යාසයක් සහිත නව අනුවාදයකට RabbitMQ යාවත්කාලීන කිරීමේදී අපි එකම උපාය මාර්ගය භාවිතා කළෙමු - සියල්ල ඔරලෝසුවක් මෙන් ක්‍රියා කරයි.

ප්රාදේශීය සභා

මෙම ද්‍රව්‍යයේ තාර්කික අඛණ්ඩ පැවැත්මක් ලෙස, අපි MongoDB (දෘඪාංග සේවාදායකයකින් Kubernetes වෙත සංක්‍රමණය වීම) සහ MySQL (අපි Kubernetes තුළ මෙම DBMS සකස් කරන ආකාරය) පිළිබඳ ලිපි සකස් කරමින් සිටිමු. ඒවා ඉදිරි මාසවලදී ප්‍රකාශයට පත් කෙරේ.

පීපීඑස්

අපගේ බ්ලොග් අඩවියේ ද කියවන්න:

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

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