እንከን የለሽ RabbitMQ ወደ ኩበርኔትስ ፍልሰት

እንከን የለሽ RabbitMQ ወደ ኩበርኔትስ ፍልሰት

RabbitMQ በኤርላንግ የተጻፈ የመልእክት ደላላ ሲሆን እያንዳንዱ መስቀለኛ መንገድ የማንበብ እና የመፃፍ ጥያቄዎችን የሚያገለግልበት ሙሉ የውሂብ ማባዛት ያለው የተሳካ ክላስተር እንዲያደራጁ የሚያስችልዎ ነው። በምርት ስራ ላይ ብዙ የኩበርኔትስ ክላስተር ስላለን፣ ብዙ ቁጥር ያላቸውን የ RabbitMQ ጭነቶች እንደግፋለን እና ያለማቋረጥ ውሂብ ከአንድ ክላስተር ወደ ሌላ የመሸጋገር አስፈላጊነት አጋጥሞናል።

ይህንን ክዋኔ ቢያንስ በሁለት አጋጣሚዎች እንፈልጋለን።

  1. መረጃን ከ RabbitMQ ክላስተር በኩበርኔትስ ውስጥ ከሌለው ወደ አዲስ - አስቀድሞ "kubernetized" (ማለትም በK8s pods ውስጥ የሚሰራ) - ክላስተር ማስተላለፍ።
  2. የ RabbitMQ ፍልሰት በኩበርኔትስ ውስጥ ከአንድ የስም ቦታ ወደ ሌላ (ለምሳሌ ወረዳዎች በስም ቦታዎች የተገደቡ ከሆነ፣ ከዚያም መሠረተ ልማትን ከአንድ ወረዳ ወደ ሌላ ለማስተላለፍ)።

በአንቀጹ ውስጥ የቀረበው የምግብ አዘገጃጀት በሁኔታዎች ላይ ያተኮረ ነው (ነገር ግን በእነሱ ብቻ የተገደበ አይደለም) አሮጌው RabbitMQ ክላስተር (ለምሳሌ ፣ የ 3 አንጓዎች) ፣ ቀድሞውኑ በ K8s ውስጥ ወይም በአንዳንድ የቆዩ አገልጋዮች ላይ ይገኛል። በ Kubernetes ላይ የተስተናገደ መተግበሪያ (ቀድሞውኑ አለ ወይም ወደፊት) ከእሱ ጋር ይሰራል፡

እንከን የለሽ RabbitMQ ወደ ኩበርኔትስ ፍልሰት

... እና ወደ ኩበርኔትስ ወደ አዲሱ ምርት የመሸጋገር ስራ ገጥሞናል።

በመጀመሪያ ደረጃ, የፍልሰት አጠቃላይ አቀራረብ ራሱ ይገለጻል, እና ከዚያ በኋላ የአተገባበሩ ቴክኒካዊ ዝርዝሮች ይገለፃሉ.

የፍልሰት ስልተ ቀመር

ከማንኛውም እርምጃ በፊት የመጀመሪያው ፣ የመጀመሪያ ደረጃ ፣ ከፍተኛ ተገኝነት ሁነታ በአሮጌው RabbitMQ ጭነት ውስጥ መንቃቱን ማረጋገጥ ነው።HA). ምክንያቱ ግልጽ ነው - ምንም ውሂብ ማጣት አንፈልግም. ይህንን ቼክ ለመፈጸም ወደ RabbitMQ የአስተዳዳሪ ፓነል መሄድ ይችላሉ እና በአስተዳዳሪ → ፖሊሲዎች ትር ውስጥ እሴቱ መዘጋጀቱን ያረጋግጡ ha-mode: all:

እንከን የለሽ RabbitMQ ወደ ኩበርኔትስ ፍልሰት

ቀጣዩ ደረጃ አዲስ የ RabbitMQ ክላስተር በ Kubernetes pods (በእኛ ሁኔታ, ለምሳሌ, 3 ኖዶችን ያካተተ, ግን ቁጥራቸው የተለየ ሊሆን ይችላል) ማሳደግ ነው.

ከዚህ በኋላ፣ አሮጌውን እና አዲሱን የ RabbitMQ ስብስቦችን እናዋህዳለን፣ አንድ ዘለላ (ከ6 አንጓዎች) እናገኛለን፡

እንከን የለሽ RabbitMQ ወደ ኩበርኔትስ ፍልሰት

በአሮጌው እና በአዲሱ የ RabbitMQ ስብስቦች መካከል የውሂብ ማመሳሰል ሂደት ተጀምሯል። አንዴ ሁሉም ውሂብ በክላስተር ውስጥ ባሉ ሁሉም አንጓዎች መካከል ከተመሳሰለ አዲሱን ክላስተር ለመጠቀም መተግበሪያውን መቀየር እንችላለን፡-

እንከን የለሽ RabbitMQ ወደ ኩበርኔትስ ፍልሰት

ከነዚህ ክዋኔዎች በኋላ የድሮውን አንጓዎች ከ RabbitMQ ክላስተር ማስወገድ በቂ ነው፣ እና እንቅስቃሴው እንደተጠናቀቀ ሊቆጠር ይችላል።

እንከን የለሽ RabbitMQ ወደ ኩበርኔትስ ፍልሰት

ይህንን እቅድ በምርት ውስጥ ብዙ ጊዜ ተጠቅመናል። ነገር ግን፣ ለራሳችን ምቾት፣ መደበኛ የRMQ ውቅሮችን በበርካታ የኩበርኔትስ ስብስቦች ላይ በሚያሰራጭ ልዩ ስርዓት ውስጥ ተግባራዊ አድርገነዋል። (ለማወቅ ለሚፈልጉ፡ እየተነጋገርን ያለነው addon-operatorስለእኛ በቅርቡ እንደተነገረው). ከዚህ በታች በተግባር የቀረበውን መፍትሄ ለመሞከር ማንኛውም ሰው በእቃዎቻቸው ላይ ማመልከት የሚችለውን የግለሰብ መመሪያዎችን እናቀርባለን።

በተግባር እንሞክር

መስፈርቶች

ዝርዝሮቹ በጣም ቀላል ናቸው፡-

  1. የኩበርኔትስ ክላስተር (ሚኒኩቤ እንዲሁ ይሰራል);
  2. RabbitMQ ክላስተር (በባዶ ብረት ላይ ሊሰማራ ይችላል፣ እና ከኦፊሴላዊው Helm ገበታ በኩበርኔትስ ውስጥ እንደ መደበኛ ክላስተር የተሰራ)።

ከታች ላለው ምሳሌ፣ RMQ ን ወደ ኩበርኔትስ አሰማርኩ እና ደወልኩ። rmq-old.

የቁም ዝግጅት

1. የ Helm ገበታውን ያውርዱ እና ትንሽ ያርትዑት፡-

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 ወደ ኩበርኔትስ ፍልሰት

የሙከራው አግዳሚ ወንበር ዝግጁ ነው፡ ማስተላለፍ የሚያስፈልገው ውሂብ ያለው "አሮጌ" 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 ወደ ኩበርኔትስ ፍልሰት

መልእክቶች በሁሉም አንጓዎች መካከል እስኪመሳሰሉ ድረስ መጠበቅ አለብዎት። የመልእክት ማመሳሰል ጊዜ ክላስተር በተዘረጋበት ሃርድዌር አቅም እና በመልእክቶች ብዛት ላይ የተመሰረተ ነው ብሎ ለመገመት አስቸጋሪ አይደለም። በተገለፀው ሁኔታ ውስጥ 10 የሚሆኑት ብቻ ናቸው ፣ ስለሆነም ውሂቡ ወዲያውኑ ተመሳስሏል ፣ ግን በበቂ ሁኔታ ብዛት ያላቸው መልዕክቶች ፣ ማመሳሰል ለሰዓታት ሊቆይ ይችላል።

ስለዚህ የማመሳሰል ሁኔታ፡-

እንከን የለሽ RabbitMQ ወደ ኩበርኔትስ ፍልሰት

ይህ ነው +5 መልእክቶች ገብተዋል ማለት ነው። ተጨማሪ በ 5 ኖዶች ላይ (በመስክ ላይ ከተጠቀሰው በስተቀር Node). ስለዚህ, ማመሳሰል የተሳካ ነበር.

4. የቀረው በአፕሊኬሽኑ ውስጥ ያለውን የ RMQ አድራሻ ወደ አዲሱ ክላስተር መቀየር ብቻ ነው (እዚህ ላይ ያሉት የተወሰኑ ድርጊቶች እርስዎ በሚጠቀሙት የቴክኖሎጂ ቁልል እና ሌሎች የመተግበሪያ ዝርዝሮች ላይ የተመሰረቱ ናቸው) ከዚያ በኋላ የድሮውን መሰናበት ይችላሉ.

ለመጨረሻው ቀዶ ጥገና (ማለትም ቀድሞውኑ после ማመልከቻውን ወደ አዲስ ክላስተር መቀየር) ወደ እያንዳንዱ መስቀለኛ መንገድ ይሂዱ ያረጀ ክላስተር እና ትእዛዞቹን አስፈጽም

rabbitmqctl stop_app
rabbitmqctl reset

ክላስተር ስለ አሮጌ አንጓዎች "ረስተዋል" የድሮውን RMQ መሰረዝ ይችላሉ, በዚህ ጊዜ እንቅስቃሴው ይጠናቀቃል.

አመለከተ: የምስክር ወረቀቶችን በመጠቀም RMQ ን ከተጠቀሙ, ምንም በመሠረታዊነት አይለወጥም - የመንቀሳቀስ ሂደቱ በትክክል ይከናወናል.

ግኝቶች

RabbitMQን ለመሰደድ ወይም በቀላሉ ወደ አዲስ ክላስተር ለመሸጋገር ስንፈልግ የተገለጸው እቅድ ለሁሉም ማለት ይቻላል ተስማሚ ነው።

በእኛ ሁኔታ፣ RMQ ከበርካታ ቦታዎች ሲደረስ አንድ ጊዜ ብቻ ችግሮች ተፈጠሩ፣ እና የRMQ አድራሻን በየቦታው ወደ አዲስ ለመቀየር እድሉ አልነበረንም። ከዚያም በነባር አገልግሎቶች እና Ingresses ስር እንዲወድቅ አዲስ RMQ በዛው የስም ቦታ በተመሳሳይ መለያ አስጀመርን እና ፖድውን ስናስከፍት መለያዎቹን በእጃችን በማቀነባበር ጥያቄዎቹ ላይ እንዳይወድቁ መጀመሪያ ላይ እናስወግዳቸዋለን። ባዶ RMQ፣ እና መልእክቶቹ ከተመሳሰሉ በኋላ መልሰው ማከል።

RabbitMQ ን ከተለወጠ ውቅረት ጋር ወደ አዲስ ስሪት ስናዘምን ተመሳሳይ ስልት ተጠቀምን - ሁሉም ነገር እንደ ሰዓት ይሰራል።

PS

ለዚህ ቁሳቁስ ምክንያታዊ ቀጣይነት፣ ስለ MongoDB (ከሃርድዌር አገልጋይ ወደ ኩበርኔትስ ፍልሰት) እና MySQL (ይህን DBMS Kubernetes ውስጥ እንዴት እንደምናዘጋጅ) ጽሑፎችን እያዘጋጀን ነው። በሚቀጥሉት ወራት ውስጥ ይታተማሉ.

ፒፒኤስ

በብሎጋችን ላይ ያንብቡ፡-

ምንጭ: hab.com

አስተያየት ያክሉ