БСспростойная миграция RabbitMQ Π² Kubernetes

БСспростойная миграция RabbitMQ Π² Kubernetes

RabbitMQ – написанный Π½Π° языкС Erlang Π±Ρ€ΠΎΠΊΠ΅Ρ€ сообщСний, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ отказоустойчивый кластСр с ΠΏΠΎΠ»Π½ΠΎΠΉ Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΠ΅ΠΉ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° нСсколько ΡƒΠ·Π»ΠΎΠ², Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΡƒΠ·Π΅Π» ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ запросы Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈ запись. ИмСя Π² production-эксплуатации мноТСство кластСров Kubernetes, ΠΌΡ‹ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌ большоС количСство инсталляций RabbitMQ ΠΈ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»ΠΈΡΡŒ с Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ кластСра Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π±Π΅Π· простоя.

Данная опСрация Π±Ρ‹Π»Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° Π½Π°ΠΌ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ Π² Π΄Π²ΡƒΡ… случаях:

  1. ΠŸΠ΅Ρ€Π΅Π½ΠΎΡ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· кластСра RabbitMQ, находящСгося Π½Π΅ Π² Kubernetes, Π² Π½ΠΎΠ²Ρ‹ΠΉ β€” ΡƒΠΆΠ΅ Β«ΠΊΡƒΠ±Π΅Ρ€Π½Π΅Ρ‚Π΅Π·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉΒ» (Ρ‚.Π΅. Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ Π² pod’ах K8s) β€” кластСр.
  2. ΠœΠΈΠ³Ρ€Π°Ρ†ΠΈΡ RabbitMQ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Kubernetes ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ namespace Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли ΠΊΠΎΠ½Ρ‚ΡƒΡ€Ρ‹ Ρ€Π°Π·Π³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Ρ‹ пространствами ΠΈΠΌΡ‘Π½, Ρ‚ΠΎ для пСрСноса инфраструктуры ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚ΡƒΡ€Π° Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ).

ΠŸΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌΡ‹ΠΉ Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ Ρ€Π΅Ρ†Π΅ΠΏΡ‚ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ Π½Π° ситуации (Π½ΠΎ вовсС Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ ΠΈΠΌΠΈ), Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΅ΡΡ‚ΡŒ старый кластСр RabbitMQ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠ· 3 ΡƒΠ·Π»ΠΎΠ²), находящийся Π»ΠΈΠ±ΠΎ ΡƒΠΆΠ΅ Π² K8s, Π»ΠΈΠ±ΠΎ Π½Π° ΠΊΠ°ΠΊΠΈΡ…-Ρ‚ΠΎ старых сСрвСрах. Π‘ Π½ΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ€Π°Π·ΠΌΠ΅Ρ‰Ρ‘Π½Π½ΠΎΠ΅ Π² Kubernetes (ΡƒΠΆΠ΅ Ρ‚Π°ΠΌ ΠΈΠ»ΠΈ Π² пСрспСктивС):

БСспростойная миграция RabbitMQ Π² Kubernetes

… ΠΈ ΠΏΠ΅Ρ€Π΅Π΄ Π½Π°ΠΌΠΈ стоит Π·Π°Π΄Π°Ρ‡Π° Π΅Π³ΠΎ ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ Π² Π½ΠΎΠ²Ρ‹ΠΉ production Π² Kubernetes.

Π‘Π½Π°Ρ‡Π°Π»Π° Π±ΡƒΠ΄Π΅Ρ‚ описан ΠΎΠ±Ρ‰ΠΈΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ самой ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ, Π° ΡƒΠΆΠ΅ послС этого β€” тСхничСскиС Π΄Π΅Ρ‚Π°Π»ΠΈ ΠΏΠΎ Π΅Ρ‘ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

Алгоритм ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ, ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ, этап ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠ°ΠΊΠΈΠΌΠΈ-Π»ΠΈΠ±ΠΎ дСйствиями β€” ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°, Ρ‡Ρ‚ΠΎ Π² старой инсталляции RabbitMQ Π²ΠΊΠ»ΡŽΡ‡Ρ‘Π½ Ρ€Π΅ΠΆΠΈΠΌ высокой доступности (HA). ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Π° β€” ΠΌΡ‹ вСдь Π½Π΅ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΏΠΎΡ‚Π΅Ρ€ΡΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ Π΄Π°Π½Π½Ρ‹Ρ…. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚ΡŒ эту ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΉΡ‚ΠΈ Π² Π°Π΄ΠΌΠΈΠ½ΠΊΡƒ RabbitMQ ΠΈ Π²ΠΎ Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ Admin β†’ Policies ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ установлСно Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ha-mode: all:

БСспростойная миграция RabbitMQ Π² Kubernetes

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ шаг β€” ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π΅ΠΌ Π½ΠΎΠ²Ρ‹ΠΉ кластСр RabbitMQ Π² pod’ах Kubernetes (Π² нашСм случаС, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, состоящий ΠΈΠ· 3 ΡƒΠ·Π»ΠΎΠ², Π½ΠΎ ΠΈΡ… число ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌ).

ПослС этого ΠΌΡ‹ объСдиняСм старый ΠΈ Π½ΠΎΠ²Ρ‹ΠΉ кластСры RabbitMQ, получая СдинствСнный кластСр (ΠΈΠ· 6 ΡƒΠ·Π»ΠΎΠ²):

БСспростойная миграция RabbitMQ Π² Kubernetes

Π˜Π½ΠΈΡ†ΠΈΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ процСсс синхронизации Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ старым ΠΈ Π½ΠΎΠ²Ρ‹ΠΌ кластСрами RabbitMQ. ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ всС Π΄Π°Π½Π½Ρ‹Π΅ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ всСми ΡƒΠ·Π»Π°ΠΌΠΈ Π² кластСрС, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° использованиС Π½ΠΎΠ²ΠΎΠ³ΠΎ кластСра:

БСспростойная миграция RabbitMQ Π² Kubernetes

ПослС этих ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ достаточно вывСсти ΠΈΠ· кластСра RabbitMQ старыС ΡƒΠ·Π»Ρ‹, ΠΈ ΠΏΠ΅Ρ€Π΅Π΅Π·Π΄ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π·Π°Π²Π΅Ρ€ΡˆΡ‘Π½Π½Ρ‹ΠΌ:

БСспростойная миграция RabbitMQ Π² Kubernetes

Π­Ρ‚Ρƒ схСму ΠΌΡ‹ Π½Π΅ΠΎΠ΄Π½ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ примСняли Ρƒ нас Π² production. Однако для собствСнного удобства Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ Π΅Ρ‘ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… спСциализированной систСмы, Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡŽΡ‰Π΅ΠΉ Ρ‚ΠΈΠΏΠΎΠ²Ρ‹Π΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ RMQ Π½Π° мноТСствах кластСров Kubernetes (для Ρ‚Π΅Ρ…, ΠΊΠΎΠΌΡƒ Π»ΡŽΠ±ΠΎΠΏΡ‹Ρ‚Π½ΠΎ: Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Ρ‘Ρ‚ ΠΏΡ€ΠΎ addon-operator, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΌΡ‹ совсСм Π½Π΅Π΄Π°Π²Π½ΠΎ рассказывали). НиТС Π±ΡƒΠ΄ΡƒΡ‚ прСдставлСны ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ взятыС инструкции, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π° своих инсталляциях, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π² дСйствии.

ΠŸΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅

ВрСбования

Π Π΅ΠΊΠ²ΠΈΠ·ΠΈΡ‚Ρ‹ ΠΎΡ‡Π΅Π½ΡŒ просты:

  1. ΠšΠ»Π°ΡΡ‚Π΅Ρ€ Kubernetes (ΠΏΠΎΠ΄ΠΎΠΉΠ΄Π΅Ρ‚ ΠΈ minikube);
  2. ΠšΠ»Π°ΡΡ‚Π΅Ρ€ RabbitMQ (ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ Π½Π° bare metal, ΠΈ сдСлан ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ кластСр Π² Kubernetes ΠΈΠ· ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ Helm-Ρ‡Π°Ρ€Ρ‚Π°).

Для описанного Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° я Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΠ» RMQ Π² Kubernetes ΠΈ Π½Π°Π·Π²Π°Π» Π΅Π³ΠΎ 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 Π² Kubernetes

ВСстовый стСнд Π³ΠΎΡ‚ΠΎΠ²: Ρƒ нас Π΅ΡΡ‚ΡŒ «старый» RabbitMQ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ пСрСнСсти.

ΠœΠΈΠ³Ρ€Π°Ρ†ΠΈΡ кластСра RabbitMQ

1. Для Π½Π°Ρ‡Π°Π»Π° Ρ€Π°Π·Π²Π΅Ρ€Π½Ρ‘ΠΌ Π½ΠΎΠ²Ρ‹ΠΉ RabbitMQ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ пространствС ΠΈΠΌΡ‘Π½ с Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΆΠ΅ ErlangCookie ΠΈ ΠΏΠ°Ρ€ΠΎΠ»Π΅ΠΌ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Для этого ΠΏΡ€ΠΎΠ΄Π΅Π»Π°Π΅ΠΌ описанныС Π²Ρ‹ΡˆΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ² ΠΊΠΎΠ½Π΅Ρ‡Π½ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ΠΏΠΎ установкС RMQ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ:

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

2. Π’Π΅ΠΏΠ΅Ρ€ΡŒ трСбуСтся ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ кластСр со старым. Для этого Π·Π°Ρ…ΠΎΠ΄ΠΈΠΌ Π² ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· pod’ов Π½ΠΎΠ²ΠΎΠ³ΠΎ 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. ΠšΠ»Π°ΡΡ‚Π΅Ρ€ RMQ ΠΈΠ· 6 ΡƒΠ·Π»ΠΎΠ² Π³ΠΎΡ‚ΠΎΠ²:

БСспростойная миграция RabbitMQ Π² Kubernetes

НСобходимо ΠΏΠΎΠ΄ΠΎΠΆΠ΄Π°Ρ‚ΡŒ, ΠΏΠΎΠΊΠ° сообщСния ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ всСми ΡƒΠ·Π»Π°ΠΌΠΈ. НСтрудно Π΄ΠΎΠ³Π°Π΄Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ врСмя синхронизации сообщСний зависит ΠΎΡ‚ мощностСй ΠΆΠ΅Π»Π΅Π·Π°, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ€Π°Π·Π²Ρ‘Ρ€Π½ΡƒΡ‚ кластСр, ΠΈ ΠΎΡ‚ количСства сообщСний. Π’ описываСмом сцСнарии ΠΈΡ… всСго 10, поэтому Π΄Π°Π½Π½Ρ‹Π΅ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π»ΠΈΡΡŒ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎ, Π½ΠΎ ΠΏΡ€ΠΈ достаточно Π±ΠΎΠ»ΡŒΡˆΠΈΡ… количСствС сообщСний синхронизация ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π»ΠΈΡ‚ΡŒΡΡ часами.

Π˜Ρ‚Π°ΠΊ, статус синхронизации:

БСспростойная миграция RabbitMQ Π² Kubernetes

Π—Π΄Π΅ΡΡŒ +5 ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ сообщСния ΡƒΠΆΠ΅ находятся Π΅Ρ‰Ρ‘ Π½Π° 5 ΡƒΠ·Π»Π°Ρ… (ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΡƒΠΊΠ°Π·Π°Π½ Π² ΠΏΠΎΠ»Π΅ Node). Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, синхронизация ΠΏΡ€ΠΎΡˆΠ»Π° ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ.

4. ΠžΡΡ‚Π°Π΅Ρ‚ΡΡ лишь ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ адрСс RMQ Π½Π° Π½ΠΎΠ²Ρ‹ΠΉ кластСр (ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ дСйствия здСсь зависят ΠΎΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ Π²Π°ΠΌΠΈ тСхнологичСского стСка ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ спСцифики прилоТСния), послС Ρ‡Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΡ€ΠΎΡ‰Π°Ρ‚ΡŒΡΡ со старым.

Для послСднСй ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ (Ρ‚.Π΅. ΡƒΠΆΠ΅ послС ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ прилоТСния Π½Π° Π½ΠΎΠ²Ρ‹ΠΉ кластСр) Π·Π°Ρ…ΠΎΠ΄ΠΈΠΌ Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΡƒΠ·Π΅Π» старого кластСра ΠΈ выполняСм ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

rabbitmqctl stop_app
rabbitmqctl reset

ΠšΠ»Π°ΡΡ‚Π΅Ρ€ Β«Π·Π°Π±Ρ‹Π»Β» ΠΎ старых ΡƒΠ·Π»Π°Ρ…: ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ старый RMQ, Π½Π° Ρ‡Ρ‘ΠΌ ΠΏΠ΅Ρ€Π΅Π΅Π·Π΄ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ RMQ с сСртификатами, Ρ‚ΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΠΎ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ мСняСтся β€” процСсс ΠΏΠ΅Ρ€Π΅Π΅Π·Π΄Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒΡΡ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅.

Π’Ρ‹Π²ΠΎΠ΄Ρ‹

Описанная схСма ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ практичСски для всСх случаСв, ΠΊΠΎΠ³Π΄Π° Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ пСрСнСсти RabbitMQ ΠΈΠ»ΠΈ просто ΠΏΠ΅Ρ€Π΅Π΅Ρ…Π°Ρ‚ΡŒ Π² Π½ΠΎΠ²Ρ‹ΠΉ кластСр.

Π’ нашСм случаС слоТности Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π»ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΊ RMQ ΠΎΠ±Ρ€Π°Ρ‰Π°Π»ΠΈΡΡŒ ΠΈΠ· мноТСства мСст, Π° Ρƒ нас Π½Π΅ Π±Ρ‹Π»ΠΎ возмоТности Π²Π΅Π·Π΄Π΅ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ адрСс RMQ Π½Π° Π½ΠΎΠ²Ρ‹ΠΉ. Π’ΠΎΠ³Π΄Π° ΠΌΡ‹ запускали Π½ΠΎΠ²Ρ‹ΠΉ RMQ Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ пространствС ΠΈΠΌΡ‘Π½ с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ Π»Π΅ΠΉΠ±Π»Π°ΠΌΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ ΠΏΠΎΠΏΠ°Π΄Π°Π» ΠΏΠΎΠ΄ ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ сСрвисы ΠΈ Ingress’ы, Π° ΠΏΡ€ΠΈ запускС pod’а Ρ€ΡƒΠΊΠ°ΠΌΠΈ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ Π»Π΅ΠΉΠ±Π»Π°ΠΌΠΈ, удаляя ΠΈΡ… Π² Π½Π°Ρ‡Π°Π»Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π° пустой RMQ Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Π°Π»ΠΈ запросы, ΠΈ добавляя ΠΈΡ… ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ послС синхронизации сообщСний.

Π’Π°ΠΊΡƒΡŽ ΠΆΠ΅ ΡΡ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡŽ ΠΌΡ‹ примСняли ΠΏΡ€ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ RabbitMQ Π½Π° Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ с ΠΈΠ·ΠΌΠ΅Π½Ρ‘Π½Π½ΠΎΠΉ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠ΅ΠΉ β€” всё Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΎ ΠΊΠ°ΠΊ часы.

P.S.

Π’ качСствС логичСского продолТСния этого ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π° ΠΌΡ‹ Π³ΠΎΡ‚ΠΎΠ²ΠΈΠΌ ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΏΡ€ΠΎ MongoDB (миграция с ΠΆΠ΅Π»Π΅Π·Π½ΠΎΠ³ΠΎ сСрвСра Π² Kubernetes) ΠΈ MySQL (ΠΊΠ°ΠΊ ΠΌΡ‹ Π³ΠΎΡ‚ΠΎΠ²ΠΈΠΌ эту Π‘Π£Π‘Π” Π²Π½ΡƒΡ‚Ρ€ΠΈ Kubernetes). Они Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Ρ‹ Π² блиТайшиС мСсяцы.

P.P.S.

Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅ Π² нашСм Π±Π»ΠΎΠ³Π΅:

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ