Π‘Π΅Π·ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½Π° миграция Π½Π° RabbitMQ към Kubernetes

Π‘Π΅Π·ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½Π° миграция Π½Π° RabbitMQ към Kubernetes

RabbitMQ Π΅ Π±Ρ€ΠΎΠΊΠ΅Ρ€ Π½Π° ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡ, написан Π½Π° Erlang, ΠΊΠΎΠΉΡ‚ΠΎ Π²ΠΈ позволява Π΄Π° ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°Ρ‚Π΅ отказоустойчив ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ с пълна рСпликация Π½Π° Π΄Π°Π½Π½ΠΈ Π² мноТСство възли, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ всСки възСл ΠΌΠΎΠΆΠ΅ Π΄Π° обслуТва заявки Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅ ΠΈ запис. Имайки ΠΌΠ½ΠΎΠ³ΠΎ Kubernetes ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ΠΈ Π² производствСна опСрация, Π½ΠΈΠ΅ ΠΏΠΎΠ΄Π΄ΡŠΡ€ΠΆΠ°ΠΌΠ΅ голям Π±Ρ€ΠΎΠΉ RabbitMQ инсталации ΠΈ бяхмС ΠΈΠ·ΠΏΡ€Π°Π²Π΅Π½ΠΈ ΠΏΡ€Π΅Π΄ нСобходимостта Π΄Π° ΠΌΠΈΠ³Ρ€ΠΈΡ€Π°ΠΌΠ΅ Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ Π΅Π΄ΠΈΠ½ ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ Π² Π΄Ρ€ΡƒΠ³ Π±Π΅Π· прСстой.

Π˜ΠΌΠ°Ρ…ΠΌΠ΅ Π½ΡƒΠΆΠ΄Π° ΠΎΡ‚ Ρ‚Π°Π·ΠΈ опСрация Π² ΠΏΠΎΠ½Π΅ Π΄Π²Π° случая:

  1. ΠŸΡ€Π΅Ρ…Π²ΡŠΡ€Π»ΡΠ½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ RabbitMQ ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€, ΠΊΠΎΠΉΡ‚ΠΎ Π½Π΅ сС Π½Π°ΠΌΠΈΡ€Π° Π² Kubernetes, към Π½ΠΎΠ² – Π²Π΅Ρ‡Π΅ β€žkubernetizedβ€œ (Ρ‚.Π΅. Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰ Π² K8s pods) – ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€.
  2. ΠœΠΈΠ³Ρ€Π°Ρ†ΠΈΡ Π½Π° RabbitMQ Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° Kubernetes ΠΎΡ‚ Π΅Π΄Π½ΠΎ пространство Π½Π° ΠΈΠΌΠ΅Π½Π° Π² Π΄Ρ€ΡƒΠ³ΠΎ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π°ΠΊΠΎ Π²Π΅Ρ€ΠΈΠ³ΠΈΡ‚Π΅ са Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈ ΠΎΡ‚ пространства Π½Π° ΠΈΠΌΠ΅Π½Π°, Ρ‚ΠΎΠ³Π°Π²Π° Π·Π° ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»ΡΠ½Π΅ Π½Π° инфраструктура ΠΎΡ‚ Π΅Π΄Π½Π° Π²Π΅Ρ€ΠΈΠ³Π° Π² Π΄Ρ€ΡƒΠ³Π°).

Π Π΅Ρ†Π΅ΠΏΡ‚Π°Ρ‚Π°, ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π° Π² статията, Π΅ фокусирана Π²ΡŠΡ€Ρ…Ρƒ ситуации (Π½ΠΎ ΠΈΠ·ΠΎΠ±Ρ‰ΠΎ Π½Π΅ сС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π°Π²Π° Π΄ΠΎ тях), Π² ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠΌΠ° стар RabbitMQ ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΡ‚ 3 възСла), Ρ€Π°Π·ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ ΠΈΠ»ΠΈ Π²Π΅Ρ‡Π΅ Π² K8s, ΠΈΠ»ΠΈ Π½Π° някои стари ΡΡŠΡ€Π²ΡŠΡ€ΠΈ. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, хоствано Π½Π° Kubernetes (Π²Π΅Ρ‡Π΅ Ρ‚Π°ΠΌ ΠΈΠ»ΠΈ Π² Π±ΡŠΠ΄Π΅Ρ‰Π΅), Ρ€Π°Π±ΠΎΡ‚ΠΈ с Π½Π΅Π³ΠΎ:

Π‘Π΅Π·ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½Π° миграция Π½Π° RabbitMQ към Kubernetes

... ΠΈ Π½ΠΈΠ΅ смС ΠΈΠ·ΠΏΡ€Π°Π²Π΅Π½ΠΈ ΠΏΡ€Π΅Π΄ Π·Π°Π΄Π°Ρ‡Π°Ρ‚Π° Π΄Π° Π³ΠΎ ΠΌΠΈΠ³Ρ€ΠΈΡ€Π°ΠΌΠ΅ към Π½ΠΎΠ²Π°Ρ‚Π° продукция Π² Kubernetes.

ΠŸΡŠΡ€Π²ΠΎ Ρ‰Π΅ бъдС описан общият ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ към самата миграция, Π° слСд Ρ‚ΠΎΠ²Π° Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ описани тСхничСскитС подробности Π·Π° Π½Π΅ΠΉΠ½ΠΎΡ‚ΠΎ изпълнСниС.

ΠΠ»Π³ΠΎΡ€ΠΈΡ‚ΡŠΠΌ Π·Π° миграция

ΠŸΡŠΡ€Π²ΠΈΡΡ‚, ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»Π΅Π½ Π΅Ρ‚Π°ΠΏ ΠΏΡ€Π΅Π΄ΠΈ всяко дСйствиС Π΅ Π΄Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚Π΅ Π΄Π°Π»ΠΈ Ρ€Π΅ΠΆΠΈΠΌΡŠΡ‚ Π½Π° висока наличност Π΅ Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½ Π² старата инсталация Π½Π° RabbitMQ (HA). ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π°Ρ‚Π° Π΅ ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Π° - Π½Π΅ искамС Π΄Π° Π³ΡƒΠ±ΠΈΠΌ Π΄Π°Π½Π½ΠΈ. Π—Π° Π΄Π° ΠΈΠ·Π²ΡŠΡ€ΡˆΠΈΡ‚Π΅ Ρ‚Π°Π·ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΎΡ‚ΠΈΠ΄Π΅Ρ‚Π΅ Π² административния ΠΏΠ°Π½Π΅Π» Π½Π° RabbitMQ ΠΈ Π² Ρ€Π°Π·Π΄Π΅Π»Π° АдминистриранС β†’ ΠŸΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ сС ΡƒΠ²Π΅Ρ€Π΅Ρ‚Π΅, Ρ‡Π΅ стойността Π΅ Π·Π°Π΄Π°Π΄Π΅Π½Π° ha-mode: all:

Π‘Π΅Π·ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½Π° миграция Π½Π° RabbitMQ към Kubernetes

Π‘Π»Π΅Π΄Π²Π°Ρ‰Π°Ρ‚Π° ΡΡ‚ΡŠΠΏΠΊΠ° Π΅ Π΄Π° ΡΡŠΠ·Π΄Π°Π΄Π΅Ρ‚Π΅ Π½ΠΎΠ² RabbitMQ ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ Π² Kubernetes pods (Π² β€‹β€‹Π½Π°ΡˆΠΈΡ случай, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡΡŠΡΡ‚ΠΎΡΡ‰ сС ΠΎΡ‚ 3 възСла, Π½ΠΎ тСхният Π±Ρ€ΠΎΠΉ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π΅Π½).

Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° обСдинявамС старитС ΠΈ Π½ΠΎΠ²ΠΈΡ‚Π΅ RabbitMQ ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ΠΈ, ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π°ΠΉΠΊΠΈ Π΅Π΄ΠΈΠ½ ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ (ΠΎΡ‚ 6 възСла):

Π‘Π΅Π·ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½Π° миграция Π½Π° RabbitMQ към Kubernetes

Π‘Ρ‚Π°Ρ€Ρ‚ΠΈΡ€Π° ΠΏΡ€ΠΎΡ†Π΅ΡΡŠΡ‚ Π½Π° синхронизиранС Π½Π° Π΄Π°Π½Π½ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ стария ΠΈ новия RabbitMQ ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€. Π‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ всички Π΄Π°Π½Π½ΠΈ сС синхронизират ΠΌΠ΅ΠΆΠ΄Ρƒ всички възли Π² ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π°, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΏΡ€Π΅Π²ΠΊΠ»ΡŽΡ‡ΠΈΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° новия ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€:

Π‘Π΅Π·ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½Π° миграция Π½Π° RabbitMQ към Kubernetes

Π‘Π»Π΅Π΄ Ρ‚Π΅Π·ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π΅ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ Π΄Π° ΠΏΡ€Π΅ΠΌΠ°Ρ…Π½Π΅Ρ‚Π΅ старитС възли ΠΎΡ‚ ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€Π° RabbitMQ ΠΈ прСмСстванСто ΠΌΠΎΠΆΠ΅ Π΄Π° сС счита Π·Π° Π·Π°Π²ΡŠΡ€ΡˆΠ΅Π½ΠΎ:

Π‘Π΅Π·ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½Π° миграция Π½Π° RabbitMQ към Kubernetes

НиС смС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π»ΠΈ Ρ‚Π°Π·ΠΈ схСма ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡŠΡ‚ΠΈ Π² производството. Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‚ΠΎΠ²Π°, Π·Π° нашС собствСно удобство, Π½ΠΈΠ΅ Π³ΠΎ Π²Π½Π΅Π΄Ρ€ΠΈΡ…ΠΌΠ΅ Π² Ρ€Π°ΠΌΠΊΠΈΡ‚Π΅ Π½Π° спСциализирана систСма, която разпространява стандартни RMQ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Π² мноТСство Kubernetes ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ΠΈ (Π·Π° Π»ΡŽΠ±ΠΎΠΏΠΈΡ‚Π½ΠΈΡ‚Π΅: Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ Π·Π° addon-ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π·Π° ΠΊΠΎΠΈΡ‚ΠΎ Π½ΠΈΠ΅ съвсСм наскоро ΠΊΠ°Π·Π°). По-Π΄ΠΎΠ»Ρƒ Ρ‰Π΅ прСдставим ΠΈΠ½Π΄ΠΈΠ²ΠΈΠ΄ΡƒΠ°Π»Π½ΠΈ инструкции, ΠΊΠΎΠΈΡ‚ΠΎ всСки ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈ Π½Π° своитС инсталации, Π·Π° Π΄Π° ΠΈΠ·ΠΏΡ€ΠΎΠ±Π²Π° ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎΡ‚ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π² дСйствиС.

НСка Π΄Π° Π³ΠΎ ΠΎΠΏΠΈΡ‚Π°ΠΌΠ΅ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°

Изисквания

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΡΡ‚ΠΈΡ‚Π΅ са ΠΌΠ½ΠΎΠ³ΠΎ прости:

  1. Kubernetes ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ (minikube ΡΡŠΡ‰ΠΎ Ρ‰Π΅ Ρ€Π°Π±ΠΎΡ‚ΠΈ);
  2. RabbitMQ ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ (ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Ρ€Π°Π·Π³ΡŠΡ€Π½Π°Ρ‚ Π½Π° Π³ΠΎΠ» ΠΌΠ΅Ρ‚Π°Π» ΠΈ Π½Π°ΠΏΡ€Π°Π²Π΅Π½ ΠΊΠ°Ρ‚ΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ Π² 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. Π‘Π΅Π³Π° трябва Π΄Π° ΠΎΠ±Π΅Π΄ΠΈΠ½ΠΈΡ‚Π΅ новия ΠΊΠ»ΡŠΡΡ‚Π΅Ρ€ със стария. Π—Π° Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Ρ‚ΠΎΠ²Π°, ΠΎΡ‚ΠΈΠ΄Π΅Ρ‚Π΅ Π΄ΠΎ всяка ΠΎΡ‚ подс Π½ΠΎΠ² 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 Π² ΡΡŠΡ‰ΠΎΡ‚ΠΎ пространство ΠΎΡ‚ ΠΈΠΌΠ΅Π½Π° със ΡΡŠΡ‰ΠΈΡ‚Π΅ Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈ, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π΄Π° ΠΏΠΎΠΏΠ°Π΄Π½Π΅ ΠΏΠΎΠ΄ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ΠΈ услуги ΠΈ Ingresses, Π° ΠΏΡ€ΠΈ стартиранСто Π½Π° pod ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€Π°Ρ…ΠΌΠ΅ Π΅Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΈΡ‚Π΅ Π½Π° Ρ€ΡŠΠΊΠ°, ΠΊΠ°Ρ‚ΠΎ Π³ΠΈ ΠΏΡ€Π΅ΠΌΠ°Ρ…Π½Π°Ρ…ΠΌΠ΅ Π² Π½Π°Ρ‡Π°Π»ΠΎΡ‚ΠΎ, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ заявкитС Π΄Π° Π½Π΅ ΠΏΠ°Π΄Π°Ρ‚ Π²ΡŠΡ€Ρ…Ρƒ ΠΏΡ€Π°Π·Π΅Π½ RMQ ΠΈ добавянСто ΠΈΠΌ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ, слСд ΠΊΠ°Ρ‚ΠΎ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡΡ‚Π° сС синхронизират.

Π˜Π·ΠΏΠΎΠ»Π·Π²Π°Ρ…ΠΌΠ΅ ΡΡŠΡ‰Π°Ρ‚Π° стратСгия, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Ρ…ΠΌΠ΅ RabbitMQ Π΄ΠΎ Π½ΠΎΠ²Π° вСрсия с ΠΏΡ€ΠΎΠΌΠ΅Π½Π΅Π½Π° конфигурация - всичко Ρ€Π°Π±ΠΎΡ‚Π΅ΡˆΠ΅ ΠΊΠ°Ρ‚ΠΎ часовник.

PS

ΠšΠ°Ρ‚ΠΎ Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» подготвямС статии Π·Π° MongoDB (миграция ΠΎΡ‚ Ρ…Π°Ρ€Π΄ΡƒΠ΅Ρ€Π΅Π½ ΡΡŠΡ€Π²ΡŠΡ€ към Kubernetes) ΠΈ MySQL (ΠΊΠ°ΠΊ подготвямС Ρ‚Π°Π·ΠΈ Π‘Π£Π‘Π” Π² Kubernetes). Π’Π΅ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ²Π°Π½ΠΈ ΠΏΡ€Π΅Π· слСдващитС мСсСци.

PPS

ΠŸΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ ΡΡŠΡ‰ΠΎ Π² нашия Π±Π»ΠΎΠ³:

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

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€