Migrasi lancar saka RabbitMQ menyang Kubernetes

Migrasi lancar saka RabbitMQ menyang Kubernetes

RabbitMQ minangka broker pesen sing ditulis ing Erlang sing ngidini sampeyan ngatur kluster failover kanthi replikasi data lengkap ing pirang-pirang simpul, ing ngendi saben simpul bisa nglayani panjaluk maca lan nulis. Duwe akeh klompok Kubernetes ing operasi produksi, kita ndhukung akeh panginstalan RabbitMQ lan ngadhepi kabutuhan kanggo mindhah data saka siji kluster menyang liyane tanpa downtime.

Kita mbutuhake operasi iki paling ora rong kasus:

  1. Mindhah data saka kluster RabbitMQ sing ora ana ing Kubernetes menyang kluster anyar - wis "kubernetized" (yaiku operasi ing pods K8s).
  2. Migrasi RabbitMQ ing Kubernetes saka siji spasi jeneng menyang liyane (contone, yen sirkuit diwatesi dening spasi jeneng, banjur kanggo mindhah infrastruktur saka siji sirkuit menyang liyane).

Resep sing diusulake ing artikel kasebut fokus ing kahanan (nanging ora diwatesi) sing ana kluster RabbitMQ lawas (contone, 3 kelenjar), sing ana ing K8 utawa ing sawetara server lawas. Aplikasi sing di-host ing Kubernetes (wis ana utawa ing mangsa ngarep) bisa digunakake:

Migrasi lancar saka RabbitMQ menyang Kubernetes

... lan kita ngadhepi tugas migrasi menyang produksi anyar ing Kubernetes.

Kaping pisanan, pendekatan umum kanggo migrasi dhewe bakal diterangake, lan sawise rincian teknis implementasine bakal diterangake.

Algoritma migrasi

Tahap pertama, awal, sadurunge tumindak yaiku mriksa manawa mode kasedhiyan dhuwur diaktifake ing instalasi RabbitMQ lawas (HA). Alesane jelas - kita ora pengin kelangan data. Kanggo nindakake mriksa iki, sampeyan bisa pindhah menyang panel admin RabbitMQ lan ing tab Admin β†’ Kabijakan priksa manawa nilai wis disetel ha-mode: all:

Migrasi lancar saka RabbitMQ menyang Kubernetes

Langkah sabanjure yaiku ngunggahake kluster RabbitMQ anyar ing polong Kubernetes (ing kasus kita, contone, dumadi saka 3 simpul, nanging jumlahe bisa uga beda).

Sawise iki, kita gabungke kluster RabbitMQ lawas lan anyar, entuk kluster siji (saka 6 simpul):

Migrasi lancar saka RabbitMQ menyang Kubernetes

Proses sinkronisasi data antarane kluster RabbitMQ lawas lan anyar diwiwiti. Sawise kabeh data disinkronake antarane kabeh simpul ing kluster, kita bisa ngalih aplikasi kanggo nggunakake kluster anyar:

Migrasi lancar saka RabbitMQ menyang Kubernetes

Sawise operasi kasebut, cukup mbusak kelenjar lawas saka kluster RabbitMQ, lan pamindhahan kasebut bisa dianggep lengkap:

Migrasi lancar saka RabbitMQ menyang Kubernetes

Kita wis nggunakake skema iki kaping pirang-pirang ing produksi. Nanging, kanggo kepenak kita dhewe, kita nindakake ing sistem khusus sing nyebarake konfigurasi RMQ standar ing pirang-pirang kluster Kubernetes. (kanggo sing penasaran: kita ngomong babagan operator addonbab kang kita mung bubar marang). Ing ngisor iki kita bakal menehi instruksi individu sing bisa ditrapake sapa wae ing instalasi kanggo nyoba solusi sing diusulake.

Ayo dadi nyoba ing laku

syarat

Rincian banget prasaja:

  1. Kluster Kubernetes (minikube uga bisa digunakake);
  2. RabbitMQ cluster (bisa disebarake ing bare metal, lan digawe kaya kluster biasa ing Kubernetes saka denah Helm resmi).

Kanggo conto ing ngisor iki, aku ngirim RMQ menyang Kubernetes lan diarani rmq-old.

Persiapan ngadeg

1. Unduh bagan Helm lan sunting sethithik:

helm fetch --untar stable/rabbitmq-ha

Kanggo penak, kita nyetel sandhi, ErlangCookie lan nggawe politik ha-allsupaya kanthi standar antrian disinkronake ing antarane kabeh simpul kluster 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. Instal grafik:

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

3. Pindhah menyang panel admin RabbitMQ, nggawe antrian anyar lan nambah sawetara pesen. Bakal dibutuhake supaya sawise migrasi, kita bisa nggawe manawa kabeh data disimpen lan ora ilang apa-apa:

Migrasi lancar saka RabbitMQ menyang Kubernetes

Bangku test siap: kita duwe RabbitMQ "lawas" karo data sing kudu ditransfer.

Migrasi kluster RabbitMQ

1. Pisanan, ayo masang RabbitMQ anyar ing kanca namespace karo padha ErlangCookie lan sandhi kanggo pangguna. Kanggo nindakake iki, kita bakal nindakake operasi kasebut ing ndhuwur, ngganti printah pungkasan kanggo nginstal RMQ ing ngisor iki:

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

2. Saiki sampeyan kudu nggabungake kluster anyar karo sing lawas. Kanggo nindakake iki, pindhah menyang saben polong anyar RabbitMQ lan nglakokake printah:

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

Ing variabel OLD_RMQ alamat salah sawijining simpul ditemokake lawas RMQ klaster.

Printah iki bakal mungkasi simpul saiki anyar RMQ cluster, masang menyang kluster lawas lan miwiti maneh.

3. Kluster RMQ 6 simpul siap:

Migrasi lancar saka RabbitMQ menyang Kubernetes

Sampeyan kudu ngenteni nalika pesen disinkronake ing antarane kabeh simpul. Iku ora angel kanggo guess sing wektu sinkronisasi pesen gumantung ing kapasitas saka hardware kang kluster disebarake lan ing nomer pesen. Ing skenario sing diterangake, mung ana 10, mula data kasebut langsung disinkronake, nanging kanthi jumlah pesen sing cukup akeh, sinkronisasi bisa nganti pirang-pirang jam.

Dadi, status sinkronisasi:

Migrasi lancar saka RabbitMQ menyang Kubernetes

iku +5 tegese pesen wis mlebu luwih akeh ing 5 simpul (kajaba sing dituduhake ing lapangan Node). Mangkono, sinkronisasi sukses.

4. Kabeh sing isih kanggo ngalih alamat RMQ ing aplikasi kanggo kluster anyar (tumindak tartamtu kene gumantung ing tumpukan teknologi sing digunakake lan spesifik aplikasi liyane), sawise sampeyan bisa ngomong pamit kanggo lawas.

Kanggo operasi pungkasan (yaiku послС ngoper aplikasi menyang kluster anyar) menyang saben simpul lawas cluster lan nglakokake perintah:

rabbitmqctl stop_app
rabbitmqctl reset

Kluster "kelalen" babagan kelenjar lawas: sampeyan bisa mbusak RMQ lawas, nalika pamindhahan bakal rampung.

komentar: Yen sampeyan nggunakake RMQ karo sertifikat, banjur ora ana owah-owahan dhasar - proses obah bakal digawa metu persis padha.

temonan

Skema sing diterangake cocog kanggo meh kabeh kasus nalika kita kudu migrasi RabbitMQ utawa mung pindhah menyang kluster anyar.

Ing kasus kita, kangelan muncul mung sapisan, nalika RMQ diakses saka akeh panggonan, lan kita ora duwe kesempatan kanggo ngganti alamat RMQ menyang anyar nang endi wae. Banjur kita ngluncurake RMQ anyar ing ruang jeneng sing padha karo label sing padha supaya bakal ana ing layanan lan Ingresses sing wis ana, lan nalika mbukak pod, kita ngapusi label kanthi tangan, mbusak ing wiwitan supaya panjaluk ora tiba ing RMQ kosong, lan nambah maneh sawise pesen diselarasake.

Kita nggunakake strategi sing padha nalika nganyari RabbitMQ menyang versi anyar kanthi konfigurasi sing diganti - kabeh bisa digunakake kaya jam.

PS

Minangka tutugan logis saka materi iki, kita nyiapake artikel babagan MongoDB (migrasi saka server hardware menyang Kubernetes) lan MySQL (carane nyiyapake DBMS iki ing Kubernetes). Padha bakal diterbitake ing sasi teka.

PPS

Waca uga ing blog kita:

Source: www.habr.com

Add a comment