{"id":33075,"date":"2019-10-31T21:50:35","date_gmt":"2019-10-31T18:50:35","guid":{"rendered":"https:\/\/prohoster.info\/blog\/besprostojnaya-migratsiya-rabbitmq-v-kubernetes\/"},"modified":"2019-10-31T21:50:35","modified_gmt":"2019-10-31T18:50:35","slug":"besprostojnaya-migratsiya-rabbitmq-v-kubernetes","status":"publish","type":"post","link":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/besprostojnaya-migratsiya-rabbitmq-v-kubernetes","title":{"rendered":"Migrarea complicat\u0103 a RabbitMQ \u00een Kubernetes","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Migrarea complicat\u0103 a RabbitMQ \u00een Kubernetes\" src=\"\/wp-content\/uploads\/2019\/05\/32c491c8605e2488550efadbcb052320.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nRabbitMQ \u2013 un broker de mesaje scris \u00een Erlang, care permite organizarea unui cluster rezistent la defecte, cu replicarea complet\u0103 a datelor pe mai multe noduri, fiecare dintre acestea put\u00e2nd gestiona cereri de citire \u0219i scriere. Av\u00e2nd numeroase clustere Kubernetes \u00een exploatare \u00een produc\u021bie, sus\u021binem un num\u0103r mare de instal\u0103ri RabbitMQ \u0219i ne-am confruntat cu necesitatea de a migra date dintr-un cluster \u00een altul f\u0103r\u0103 a avea \u00eentreruperi.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Aceast\u0103 opera\u021biune a fost necesar\u0103 \u00een cel pu\u021bin dou\u0103 situa\u021bii:<\/p>\n<ol>\n<li> Transferul datelor dintr-un cluster RabbitMQ care nu este \u00een Kubernetes \u00eentr-un nou \u2013 deja \u00abkubernetizat\u00bb (adic\u0103 func\u021bion\u00e2nd \u00een poduri K8s) \u2013 cluster.<\/li>\n<li> Migrarea RabbitMQ \u00een cadrul Kubernetes dintr-un namespace \u00een altul (de exemplu, dac\u0103 contururile sunt delimitate de spa\u021bii de nume, atunci pentru a transfera infrastructura dintr-un contur \u00een altul).<\/li>\n<\/ol>\n<p>\nRe\u021beta propus\u0103 \u00een acest articol este orientat\u0103 spre situa\u021bii (dar nu se limiteaz\u0103 doar la acestea) \u00een care exist\u0103 un vechi cluster RabbitMQ (de exemplu, format din 3 noduri), care este fie deja \u00een K8s, fie pe unele servere vechi. Acesta este folosit de o aplica\u021bie plasat\u0103 \u00een Kubernetes (fie deja acolo sau \u00een perspectiv\u0103):<\/p>\n<p><img decoding=\"async\" alt=\"Migrarea complicat\u0103 a RabbitMQ \u00een Kubernetes\" src=\"\/wp-content\/uploads\/2019\/05\/5fba162c90bc441978429288c59300ef.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u2026 \u0219i ne confrunt\u0103m cu sarcina de a-l migra \u00een noul mediu de produc\u021bie \u00een Kubernetes.<\/p>\n<p>La \u00eenceput, va fi descris\u0103 abordarea general\u0103 a migra\u021biei, iar ulterior detaliile tehnice ale implement\u0103rii acesteia.<\/p>\n<h2>Algoritmul de migrare<\/h2>\n<p>\nPrimul pas, preliminar, \u00eenainte de orice ac\u021biune \u2013 verificarea dac\u0103 \u00een vechea instalare RabbitMQ este activat modul de \u00eenalt\u0103 disponibilitate (<noindex><a rel=\"nofollow\" href=\"https:\/\/www.rabbitmq.com\/ha.html\">HA<\/a><\/noindex>). Motiva\u021bia este evident\u0103 \u2013 nu dorim s\u0103 pierdem date. Pentru a efectua aceast\u0103 verificare, putem accesa interfa\u021ba de administrare a RabbitMQ \u0219i, \u00een tab-ul Admin \u2192 Policies, ne asigur\u0103m c\u0103 este setat\u0103 valoarea <code>ha-mode: all<\/code>:<\/p>\n<p><img decoding=\"async\" alt=\"Migrarea complicat\u0103 a RabbitMQ \u00een Kubernetes\" src=\"\/wp-content\/uploads\/2019\/05\/2e37be2cd3685eb8cedfbc5949e5036f.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nUrm\u0103torul pas \u2013 ridic\u0103m un nou cluster RabbitMQ \u00een podurile Kubernetes (\u00een cazul nostru, de exemplu, format din 3 noduri, dar num\u0103rul lor poate fi diferit).<\/p>\n<p>Dup\u0103 aceasta, combin\u0103m vechiul \u0219i noul cluster RabbitMQ, ob\u021bin\u00e2nd un singur cluster (format din 6 noduri):<\/p>\n<p><img decoding=\"async\" alt=\"Migrarea complicat\u0103 a RabbitMQ \u00een Kubernetes\" src=\"\/wp-content\/uploads\/2019\/05\/52204b814f0ba73a20c4854e990c4059.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSe ini\u021biaz\u0103 procesul de sincronizare a datelor \u00eentre vechiul \u0219i noul cluster RabbitMQ. Dup\u0103 ce toate datele sunt sincronizate \u00eentre toate nodurile din cluster, putem comuta aplica\u021bia pentru a folosi noul cluster:<\/p>\n<p><img decoding=\"async\" alt=\"Migrarea complicat\u0103 a RabbitMQ \u00een Kubernetes\" src=\"\/wp-content\/uploads\/2019\/05\/8bf19d4176e38b4679e96e0f1b8b57c1.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDup\u0103 aceste opera\u021biuni, este suficient s\u0103 elimin\u0103m din clusterul RabbitMQ vechile noduri, iar mutarea poate fi considerat\u0103 finalizat\u0103:<\/p>\n<p><img decoding=\"async\" alt=\"Migrarea complicat\u0103 a RabbitMQ \u00een Kubernetes\" src=\"\/wp-content\/uploads\/2019\/05\/bccc9b9fc8d6691d24195e9a97a0f88b.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAceast\u0103 schem\u0103 a fost aplicat\u0103 de mai multe ori \u00een produc\u021bia noastr\u0103. Totu\u0219i, pentru confortul propriu, am implementat-o \u00een cadrul unui sistem specializat, care distribuie configura\u021bii standard RMQ pe un num\u0103r mare de clustere Kubernetes. <i>(pentru cei curio\u0219i: este vorba despre <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/flant\/addon-operator\">addon-operator<\/a><\/noindex>, despre care noi <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/449096\/\">tocmai am povestit<\/a><\/noindex>)<\/i>. Mai jos vor fi prezentate instruc\u021biuni separate, pe care fiecare le poate aplica \u00een instal\u0103rile proprii pentru a testa propunerea \u00een ac\u021biune.<\/p>\n<h2>S\u0103 \u00eencerc\u0103m \u00een practic\u0103<\/h2>\n<p><\/p>\n<h3>Cerin\u021be<\/h3>\n<p>\nCeriuile sunt foarte simple:<\/p>\n<ol>\n<li> Cluster Kubernetes (poate fi \u0219i minikube);<\/li>\n<li> Cluster RabbitMQ (poate fi implementat pe bare metal sau creat ca un cluster obi\u0219nuit \u00een Kubernetes din graficul oficial Helm).<\/li>\n<\/ol>\n<p>\nPentru exemplul descris mai jos, am implementat RMQ \u00een Kubernetes \u0219i l-am numit <code>rmq-old<\/code>.<\/p>\n<h3>Preg\u0103tirea standului<\/h3>\n<p>\n1. Vom desc\u0103rca graficul Helm \u0219i \u00eel vom edita pu\u021bin:<\/p>\n<pre><code class=\"bash\">helm fetch --untar stable\/rabbitmq-ha<\/code><\/pre>\n<p>\nPentru comoditate, stabilim parola, <code>ErlangCookie<\/code> \u0219i facem politica <code>ha-all<\/code>, astfel \u00eenc\u00e2t, implicit, co\u0219urile s\u0103 se sincronizeze \u00eentre toate nodurile clusterului RMQ:<\/p>\n<pre><code class=\"plaintext\">rabbitmqPassword: guest\nrabbitmqErlangCookie: mae9joopaol7aiVu3eechei2waiGa2we\ndefinitions:\npolicies: |-\n  {\n    \"name\": \"ha-all\",\n    \"pattern\": \".*\",\n    \"vhost\": \" \/ \",\n    \"definition\": {\n      \"ha-mode\": \"all\",\n      \"ha-sync-mode\": \"automatic\",\n      \"ha-sync-batch-size\": 81920\n    }\n  }<\/code><\/pre>\n<p>\n2. Instal\u0103m graficul:<\/p>\n<pre><code class=\"bash\">helm install . --name rmq-old --namespace rmq-old<\/code><\/pre>\n<p>\n3. Acces\u0103m interfa\u021ba de administrare RabbitMQ, cre\u0103m un nou co\u0219 \u0219i ad\u0103ug\u0103m c\u00e2teva mesaje. Acestea vor fi necesare pentru a ne asigura c\u0103, dup\u0103 migrare, toate datele au fost p\u0103strate \u0219i nu am pierdut nimic:<\/p>\n<p><img decoding=\"async\" alt=\"Migrarea complicat\u0103 a RabbitMQ \u00een Kubernetes\" src=\"\/wp-content\/uploads\/2019\/05\/b4b78ce622903dada396ced196c2ecce.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nStandul de testare este gata: avem un RabbitMQ \u201evechi\u201d cu datele care trebuie migrate.<\/p>\n<h3>Migrarea clusterului RabbitMQ<\/h3>\n<p>\n1. \u00cen primul r\u00e2nd, vom implementa un nou RabbitMQ \u00een <b>alt<\/b> spa\u021biu de nume cu <b>acelea\u0219i<\/b> <code>ErlangCookie<\/code> \u0219i parol\u0103 pentru utilizator. Pentru aceasta, vom efectua opera\u021biile descrise mai sus, modific\u00e2nd comanda final\u0103 de instalare RMQ la urm\u0103toarea:<\/p>\n<pre><code class=\"bash\">helm install . --name rmq-new --namespace rmq-new<\/code><\/pre>\n<p>\n2. Acum trebuie s\u0103 unim noul cluster cu cel vechi. Pentru aceasta, acces\u0103m fiecare dintre podurile <b>noului<\/b> RabbitMQ \u0219i execut\u0103m comenzile:<\/p>\n<pre><code class=\"bash\">export OLD_RMQ=rabbit@rmq-old-rabbitmq-ha-0.rmq-old-rabbitmq-ha-discovery.rmq-old.svc.cluster.local &amp;&amp; \n  rabbitmqctl stop_app &amp;&amp; \n  rabbitmqctl join_cluster $OLD_RMQ &amp;&amp; \n  rabbitmqctl start_app<\/code><\/pre>\n<p>\n\u00cen variabila <code>OLD_RMQ<\/code> reprezint\u0103 adresa unuia dintre nodurile <b>vechiului<\/b> cluster RMQ.<\/p>\n<p>Aceste comenzi vor opri nodul curent <b>noului<\/b> al clusterului RMQ, \u00eel vor al\u0103tura vechiului cluster \u0219i \u00eel vor reporni.<\/p>\n<p>3. Clusterul RMQ din 6 noduri este gata:<\/p>\n<p><img decoding=\"async\" alt=\"Migrarea complicat\u0103 a RabbitMQ \u00een Kubernetes\" src=\"\/wp-content\/uploads\/2019\/05\/88f4655556c1146f7a6e54fd2fd798f4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTrebuie s\u0103 a\u0219tepta\u021bi p\u00e2n\u0103 c\u00e2nd mesajele se sincronizeaz\u0103 \u00eentre toate nodurile. Nu e greu de intuit c\u0103 timpul de sincronizare a mesajelor depinde de puterea hardware-ului pe care este desf\u0103\u0219urat clusterul \u0219i de num\u0103rul de mesaje. \u00cen cazul descris, sunt doar 10, a\u0219a c\u0103 datele s-au sincronizat instantaneu, dar cu un num\u0103r suficient de mare de mesaje, sincronizarea poate dura ore \u00eentregi.<\/p>\n<p>A\u0219adar, starea sincroniz\u0103rii:<\/p>\n<p><img decoding=\"async\" alt=\"Migrarea complicat\u0103 a RabbitMQ \u00een Kubernetes\" src=\"\/wp-content\/uploads\/2019\/05\/1185591d8d5478634f35b7433ca75bbc.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAici <code>+5<\/code> \u00eenseamn\u0103 c\u0103 mesajele sunt deja <b>\u00eenc\u0103<\/b> pe 5 noduri (\u00een afar\u0103 de cel men\u021bionat \u00een c\u00e2mpul <code>Node<\/code>). Astfel, sincronizarea a avut loc cu succes.<\/p>\n<p>4. R\u0103m\u00e2ne doar s\u0103 schimb\u0103m \u00een aplica\u021bie adresa RMQ pe noul cluster (ac\u021biunile specifice aici depind de tehnologia pe care o utiliza\u021bi \u0219i de alte particularit\u0103\u021bi ale aplica\u021biei), dup\u0103 care putem lua la revedere de la cel vechi.<\/p>\n<p>Pentru ultima opera\u021biune (adic\u0103 deja <b>dup\u0103<\/b> schimbarea aplica\u021biei pe noul cluster) intr\u0103m pe fiecare nod <b>vechiului<\/b> al clusterului \u0219i execut\u0103m comenzile:<\/p>\n<pre><code class=\"bash\">rabbitmqctl stop_app\nrabbitmqctl reset<\/code><\/pre>\n<p>\nClusterul a \"uitat\" de nodurile vechi: se poate \u0219terge RMQ-ul vechi, iar migrarea va fi complet\u0103.<\/p>\n<p><i><b>Not\u0103<\/b>: Dac\u0103 utiliza\u021bi RMQ cu certificate, principial nimic nu se schimb\u0103 \u2014 procesul de migrare se va desf\u0103\u0219ura exact la fel.<\/i><\/p>\n<h2>Conclusions<\/h2>\n<p>\nSchema descris\u0103 se potrive\u0219te practic pentru toate cazurile \u00een care trebuie s\u0103 mut\u0103m RabbitMQ sau pur \u0219i simplu s\u0103 ne transfer\u0103m \u00eentr-un nou cluster.<\/p>\n<p>\u00cen cazul nostru, dificult\u0103\u021bile au ap\u0103rut doar o dat\u0103, c\u00e2nd RMQ-ul era accesat din multe locuri, iar noi nu aveam posibilitatea s\u0103 schimb\u0103m adresa RMQ la noua loca\u021bie peste tot. Atunci am pornit un nou RMQ \u00een acela\u0219i spa\u021biu de nume cu etichete identice, astfel \u00eenc\u00e2t s\u0103 intre sub serviciile \u0219i Ingress-urile deja existente, iar la pornirea podului am manipulat manual etichetele, elimin\u00e2ndu-le la \u00eenceput pentru ca cererile s\u0103 nu ajung\u0103 la RMQ-ul gol, \u0219i ad\u0103ug\u00e2ndu-le \u00eenapoi dup\u0103 sincronizarea mesajelor.<\/p>\n<p>Am aplicat aceea\u0219i strategie \u0219i la actualizarea RabbitMQ la o nou\u0103 versiune cu o configura\u021bie modificat\u0103 \u2014 totul a func\u021bionat ca un ceas.<\/p>\n<h2>P.S.<\/h2>\n<p>\nCa o continuare logic\u0103 a acestui material, preg\u0103tim articole despre MongoDB (migrarea de pe un server fizic \u00een Kubernetes) \u0219i MySQL (cum preg\u0103tim aceast\u0103 SGBD \u00een Kubernetes). Acestea vor fi publicate \u00een lunile urm\u0103toare.<\/p>\n<h2>P.P.S.<\/h2>\n<p>\nCiti\u021bi \u0219i \u00een blogul nostru:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/flant\/blog\/431500\/\">Baze de date \u0219i Kubernetes (prezentare general\u0103 \u0219i videoclip al expunerii)<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/417509\/\">Sfaturi \u0219i trucuri K8s: Accelerarea bootstrapping-ului bazelor de date mari<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>Sursa: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/450662\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>RabbitMQ \u2013 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 Erlang \u0431\u0440\u043e\u043a\u0435\u0440 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0441 \u043f\u043e\u043b\u043d\u043e\u0439 \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0435\u0439 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0437\u043b\u043e\u0432, \u0433\u0434\u0435 \u043a\u0430\u0436\u0434\u044b\u0439 \u0443\u0437\u0435\u043b \u043c\u043e\u0436\u0435\u0442 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435 \u0438 \u0437\u0430\u043f\u0438\u0441\u044c. \u0418\u043c\u0435\u044f \u0432 production-\u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432 Kubernetes, \u043c\u044b \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u043d\u0441\u0442\u0430\u043b\u043b\u044f\u0446\u0438\u0439 RabbitMQ \u0438 \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0438\u0441\u044c \u0441 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c\u044e \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u0431\u0435\u0437 \u043f\u0440\u043e\u0441\u0442\u043e\u044f. \u0414\u0430\u043d\u043d\u0430\u044f [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":24827,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-33075","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"RabbitMQ \u2013 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 Erlang \u0431\u0440\u043e\u043a\u0435\u0440.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/besprostojnaya-migratsiya-rabbitmq-v-kubernetes\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"ro_RO\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0411\u0435\u0441\u043f\u0440\u043e\u0441\u0442\u043e\u0439\u043d\u0430\u044f \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044f RabbitMQ \u0432 Kubernetes | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"RabbitMQ \u2013 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 Erlang \u0431\u0440\u043e\u043a\u0435\u0440.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/besprostojnaya-migratsiya-rabbitmq-v-kubernetes\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:50:35+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:50:35+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Migrarea f\u0103r\u0103 probleme a RabbitMQ \u00een Kubernetes | ProHoster","description":"RabbitMQ \u2013 un broker scris \u00een Erlang.","canonical_url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/besprostojnaya-migratsiya-rabbitmq-v-kubernetes","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"ro_RO","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0411\u0435\u0441\u043f\u0440\u043e\u0441\u0442\u043e\u0439\u043d\u0430\u044f \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044f RabbitMQ \u0432 Kubernetes | ProHoster","og:description":"RabbitMQ \u2013 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 Erlang \u0431\u0440\u043e\u043a\u0435\u0440.","og:url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/besprostojnaya-migratsiya-rabbitmq-v-kubernetes","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:50:35+00:00","article:modified_time":"2019-10-31T18:50:35+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"33075","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 13:51:33","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 02:47:28","updated":"2026-01-21 13:51:33","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/33075","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/comments?post=33075"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/33075\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media\/24827"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=33075"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=33075"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=33075"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}