БСспрСкорна ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΡ˜Π° Π½Π° RabbitMQ Π²ΠΎ Kubernetes

БСспрСкорна ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΡ˜Π° Π½Π° RabbitMQ Π²ΠΎ Kubernetes

RabbitMQ Π΅ Π±Ρ€ΠΎΠΊΠ΅Ρ€ Π·Π° ΠΏΠΎΡ€Π°ΠΊΠΈ напишан Π²ΠΎ Erlang кој Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡƒΠ²Π° Π΄Π° ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°Ρ‚Π΅ кластСр Π·Π° Ρ„Π°Π»ΠΈΠ²Π΅Ρ€ со цСлосна Ρ€Π΅ΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π½ΠΈΠ· повСќС јазли, ΠΊΠ°Π΄Π΅ ΡˆΡ‚ΠΎ сСкој јазол ΠΌΠΎΠΆΠ΅ Π΄Π° опслуТува Π±Π°Ρ€Π°ΡšΠ° Π·Π° Ρ‡ΠΈΡ‚Π°ΡšΠ΅ ΠΈ Π·Π°ΠΏΠΈΡˆΡƒΠ²Π°ΡšΠ΅. Имајќи ΠΌΠ½ΠΎΠ³Ρƒ Kubernetes кластСри Π²ΠΎ производствСна ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ˜Π°, ΠΏΠΎΠ΄Π΄Ρ€ΠΆΡƒΠ²Π°ΠΌΠ΅ Π³ΠΎΠ»Π΅ΠΌ Π±Ρ€ΠΎΡ˜ Π½Π° RabbitMQ инсталации ΠΈ сС соочивмС со ΠΏΠΎΡ‚Ρ€Π΅Π±Π°Ρ‚Π° Π΄Π° ΠΌΠΈΠ³Ρ€ΠΈΡ€Π°ΠΌΠ΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΎΠ΄ Π΅Π΄Π΅Π½ кластСр Π²ΠΎ Π΄Ρ€ΡƒΠ³ Π±Π΅Π· ΠΏΡ€Π΅ΠΊΠΈΠ½ΠΈ.

Оваа ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ˜Π° Π½ΠΈ Ρ‚Ρ€Π΅Π±Π°ΡˆΠ΅ Π²ΠΎ Π½Π°Ρ˜ΠΌΠ°Π»ΠΊΡƒ Π΄Π²Π° случаи:

  1. ΠŸΡ€Π΅Π½Π΅ΡΡƒΠ²Π°ΡšΠ΅ ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΎΠ΄ кластСр RabbitMQ ΡˆΡ‚ΠΎ Π½Π΅ Π΅ Π»ΠΎΡ†ΠΈΡ€Π°Π½ Π²ΠΎ Kubernetes Π²ΠΎ Π½ΠΎΠ² - вСќС β€žΠΊΡƒΠ±Π΅Ρ€Π½Π΅Ρ‚ΠΈΠ·ΠΈΡ€Π°Π½β€œ (Ρ‚.Π΅. Ρ€Π°Π±ΠΎΡ‚ΠΈ Π²ΠΎ K8s pods) - кластСр.
  2. ΠœΠΈΠ³Ρ€Π°Ρ†ΠΈΡ˜Π° Π½Π° RabbitMQ Π²ΠΎ Kubernetes ΠΎΠ΄ Π΅Π΄Π΅Π½ имСнски простор Π²ΠΎ Π΄Ρ€ΡƒΠ³ (Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π°ΠΊΠΎ ΠΊΠΎΠ»Π°Ρ‚Π° сС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈ со имСнски простори, ΠΏΠΎΡ‚ΠΎΠ° Π·Π° прСнос Π½Π° инфраструктура ΠΎΠ΄ Π΅Π΄Π½ΠΎ ΠΊΠΎΠ»ΠΎ Π²ΠΎ Π΄Ρ€ΡƒΠ³ΠΎ).

Π Π΅Ρ†Π΅ΠΏΡ‚ΠΎΡ‚ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ Π²ΠΎ ΡΡ‚Π°Ρ‚ΠΈΡ˜Π°Ρ‚Π° Π΅ фокусиран Π½Π° ситуации (Π½ΠΎ Π²ΠΎΠΎΠΏΡˆΡ‚ΠΎ Π½Π΅ Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ Π½Π° Π½ΠΈΠ²) Π²ΠΎ ΠΊΠΎΠΈ постои стар кластСр RabbitMQ (Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΠ΄ 3 јазли), Π»ΠΎΡ†ΠΈΡ€Π°Π½ ΠΈΠ»ΠΈ вСќС Π²ΠΎ K8s ΠΈΠ»ΠΈ Π½Π° Π½Π΅ΠΊΠΎΠΈ стари сСрвСри. ΠΠΏΠ»ΠΈΠΊΠ°Ρ†ΠΈΡ˜Π° хостирана Π½Π° Kubernetes (вСќС Ρ‚Π°ΠΌΡƒ ΠΈΠ»ΠΈ Π²ΠΎ ΠΈΠ΄Π½ΠΈΠ½Π°) Ρ€Π°Π±ΠΎΡ‚ΠΈ со Π½Π΅Π°:

БСспрСкорна ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΡ˜Π° Π½Π° RabbitMQ Π²ΠΎ 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 (Π·Π° ΠΎΠ½ΠΈΠ΅ ΠΊΠΎΠΈ сС Ρ™ΡƒΠ±ΠΎΠΏΠΈΡ‚Π½ΠΈ: Π·Π±ΠΎΡ€ΡƒΠ²Π°ΠΌΠ΅ Π·Π° Π΄ΠΎΠ΄Π°Ρ‚ΠΎΠΊ-ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π·Π° ΠΊΠΎΠΈ Π½ΠΈΠ΅ Π½Π΅ΠΎΠ΄Π°ΠΌΠ½Π° ΠΊΠ°ΠΆΠ°). ΠŸΠΎΠ΄ΠΎΠ»Ρƒ ќС ΠΏΡ€Π΅Π·Π΅Π½Ρ‚ΠΈΡ€Π°ΠΌΠ΅ ΠΏΠΎΠ΅Π΄ΠΈΠ½Π΅Ρ‡Π½ΠΈ упатства ΡˆΡ‚ΠΎ сСкој ΠΌΠΎΠΆΠ΅ Π΄Π° Π³ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈ Π½Π° своитС инсталации Π·Π° Π΄Π° Π³ΠΎ испроба ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΎΡ‚ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π° Π΄Π΅Π»ΠΎ.

АјдС Π΄Π° сС ΠΎΠ±ΠΈΠ΄Π΅ΠΌΠ΅ Π²ΠΎ пракса

Π‘Π°Ρ€Π°ΡšΠ°

Π”Π΅Ρ‚Π°Π»ΠΈΡ‚Π΅ сС ΠΌΠ½ΠΎΠ³Ρƒ Сдноставни:

  1. ΠšΠ»Π°ΡΡ‚Π΅Ρ€ΠΎΡ‚ Kubernetes (ќС Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΈ minikube);
  2. RabbitMQ кластСр (ΠΌΠΎΠΆΠ΅ Π΄Π° сС распорСди Π½Π° Π³ΠΎΠ» ΠΌΠ΅Ρ‚Π°Π» ΠΈ Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ ΠΊΠ°ΠΊΠΎ ΠΎΠ±ΠΈΡ‡Π΅Π½ кластСр Π²ΠΎ Kubernetes ΠΎΠ΄ ΠΎΡ„ΠΈΡ†ΠΈΡ˜Π°Π»Π½Π°Ρ‚Π° Ρ‚Π°Π±Π΅Π»Π° Helm).

Π—Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΡ‚ ΠΏΠΎΠ΄ΠΎΠ»Ρƒ, Π³ΠΎ распорСдив RMQ Π½Π° Kubernetes ΠΈ Π³ΠΎ Π½Π°Ρ€Π΅ΠΊΠΎΠ² 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. 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 (ΠΊΠ°ΠΊΠΎ Π³ΠΎ ΠΏΠΎΠ΄Π³ΠΎΡ‚Π²ΡƒΠ²Π°ΠΌΠ΅ овој DBMS Π²Π½Π°Ρ‚Ρ€Π΅ Π²ΠΎ Kubernetes). Π’ΠΈΠ΅ ќС Π±ΠΈΠ΄Π°Ρ‚ објавСни Π²ΠΎ Π½Π°Ρ€Π΅Π΄Π½ΠΈΡ‚Π΅ мСсСци.

PPS

ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ˜Ρ‚Π΅ ΠΈ Π½Π° Π½Π°ΡˆΠΈΠΎΡ‚ Π±Π»ΠΎΠ³:

Π˜Π·Π²ΠΎΡ€: www.habr.com

Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€