Clustering RabbitMQ pe CentOS 7

RabbitMQ este un broker de mesaje open-source care acceptă AMQP, STOMP și alte tehnologii de comunicare. Este utilizat pe scară largă în aplicații de întreprindere și arhitecturi moderne de micro-servicii, unde acționează ca un canal de mesaj asincron între diferite micro-servicii. Acest ghid va descrie cum puteți grupa RabbitMQ pe mai multe servere CentOS 7 pentru a forma un broker de mesaje cu disponibilitate ridicată. În acest tutorial, un server va acționa ca un server master, iar celelalte servere vor acționa ca servere oglindă în cazul în care serverul principal devine indisponibil.

Cerințe preliminare

Configurați firewallul

Firewall-ul CentOS, ( firewalld), nu permite traficul primit în mod implicit. Pentru a face RabbitMQ disponibil pentru alte sisteme din rețeaua și în afara acesteia și pentru a ne permite accesul la consola de management, trebuie să deschidem mai întâi unele porturi.

Consola de administrare a interfeței web a RabbitMQ ascultă în mod implicit în port 15672. Am dori să facem consola de management disponibilă publicului, astfel încât să o putem accesa de pe computerul nostru. Prin urmare, vom instrui firewalldsă deschidem permanent portul 15672în zona publică (care este zona implicită și activă pe o instanță Vultr).

sudo firewall-cmd --zone=public --add-port=15672/tcp --permanent

Nodurile RabbitMQ trebuie să poată comunica între ei. Am dori să deschidem porturile necesare, dar numai prin rețeaua internă. Nu dorim ca nimeni de pe internet să poată administra sau contacta direct serverele noastre. Următoarele comenzi presupun că serverele noastre sunt pe 192.168.0.100/24subrețea.

Primul serviciu este serviciul de epmddescoperire de la egal la egal care ascultă în mod implicit în port 4369.

sudo firewall-cmd --permanent --zone=public --add-rich-rule='
  rule family="ipv4"
  source address="192.168.0.100/24"
  port protocol="tcp" port="4369" accept'

Pentru comunicare internode și CLI, RabbitMQ trebuie să poată comunica prin port 25672.

sudo firewall-cmd --permanent --zone=public --add-rich-rule='
  rule family="ipv4"
  source address="192.168.0.100/24"
  port protocol="tcp" port="25672" accept'

Instrumentele CLI comunică în intervalul de porturi 35672-35682.

sudo firewall-cmd --permanent --zone=public --add-rich-rule='
  rule family="ipv4"
  source address="192.168.0.100/24"
  port protocol="tcp" port="35672-35682" accept'

Dacă aplicațiile dvs. au nevoie de protocolul AMQP, va trebui să deschideți 5671și porturi și 5672. Dacă trebuie să puteți comunica peste un alt protocol, puteți găsi informațiile necesare despre cerințele de rețea ale RabbitMQ pe documentația oficială RabbitMQ .

sudo firewall-cmd --permanent --zone=public --add-rich-rule='
  rule family="ipv4"
  source address="192.168.0.100/24"
  port protocol="tcp" port="5672" accept'

sudo firewall-cmd --permanent --zone=public --add-rich-rule='
  rule family="ipv4"
  source address="192.168.0.100/24"
  port protocol="tcp" port="5671" accept'

Acum, că firewalldeste configurat, trebuie să-l instruim pentru a reîncărca configurația.

sudo firewall-cmd --reload

Repetați pașii din această secțiune pe toate serverele.

Instalare rabbitmqadmin

Pluginul de administrare vine cu un instrument Python numit rabbitmqadmincare poate fi instalat cu ușurință pe sistem odată ce pluginul de gestionare este activat.

sudo wget http://localhost:15672/cli/rabbitmqadmin
sudo mv rabbitmqadmin /usr/local/bin/
sudo chmod +x /usr/local/bin/rabbitmqadmin

Configurați DNS

Trebuie să folosiți numele de gazdă ale serverului pentru a identifica serverele atunci când faceți cluster. În mod implicit, serverele nu au înregistrate DNS, iar conexiunea nu va reuși. Pentru a depăși rapid acest lucru, adăugați numele de gazdă principal și oglindă în /etc/hostsfișier utilizând editorul preferat.

De exemplu, fișierul gazdelor maestrului dvs. ar putea arăta ca următorul. Observați ultimele două înregistrări, care permit serverelor să se identifice reciproc după numele lor de gazdă. Asigurați-vă că schimbați adresele IP pe cont propriu.

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

127.0.0.1 guest
::1       guest

127.0.0.1 YOUR_MASTER_SERVER_HOST_NAME
::1       YOUR_MASTER_SERVER_HOST_NAME


192.168.0.101 YOUR_MASTER_SERVER_HOST_NAME
192.168.0.102 YOUR_MIRROR_SERVER_HOST_NAME

Cluster nodurile

O condiție prealabilă de import pentru a permite nodurilor să se unească între ele este ca cookie-ul Erlang al tuturor nodurilor să fie identic. În mod implicit, fiecărui nod i se va atribui un cookie Erlang unic, deci trebuie să-l reconfigurați pe toate nodurile.

Următoarea comandă va seta cookie-ul Erlang la " WE<3COOKIES", dar nu ezitați să schimbați acest lucru după bunul plac. Faceți acest lucru pe toate serverele.

sudo sh -c "echo 'WE<3COOKIES' > /var/lib/rabbitmq/.erlang.cookie"

Reporniți RabbitMQ pe toate serverele pentru a vă asigura că cookie-ul Erlang este reîncărcat corect.

sudo systemctl restart rabbitmq-server.service

Executați următoarele comenzi pe toate serverele, cu excepția serverului principal. Acest lucru va permite nodurilor să se alăture serverului principal și să formeze un cluster.

sudo rabbitmqctl stop_app
sudo rabbitmqctl join_cluster "rabbit@<YOUR_MASTER_SERVER_HOST_NAME>"
sudo rabbitmqctl start_app

Verificați dacă nodurile s-au alăturat clusterului executând următoarea comandă.

sudo rabbitmqctl cluster_status

Toate nodurile dvs. vor apărea în secțiunea nodesși running_nodessecțiunea de ieșire. De acum nu mai trebuie să repetați pași pe fiecare server, configurația va fi automat oglindită la celelalte noduri.

Creați o politică cu disponibilitate ridicată

Acum că avem un grup de noduri RabbitMQ, îl putem folosi pentru a face cozi și schimburi cu disponibilitate ridicată prin configurarea unei noi politici. Această politică poate fi adăugată prin RabbitMQ Management Console sau folosind interfața liniei de comandă.

sudo rabbitmqctl set_policy -p "/" --priority 1 --apply-to "all" ha ".*" '{ "ha-mode": "exactly", "ha-params": 2, "ha-sync-mode": "automatic"}'

Următoarea listă va explica ce înseamnă fiecare parte a comenzii.

  • -p "/": Utilizați această politică pe "/"vhost (implicit după instalare)
  • --priority 1: Ordinea în care se vor aplica politicile
  • --apply-to "all": Poate fi "queues", "exchanges"sau"all"
  • ha: Numele pe care îl dăm politicii noastre
  • ".*": Expresia obișnuită care este utilizată pentru a decide ce cozi sau schimburi este aplicată această politică. ".*"se va potrivi cu orice
  • '{ "ha-mode": "exactly", "ha-params": 2, "ha-sync-mode": "automatic"}': Reprezentarea JSON a politicii. Acest document descrie că vrem - exact 2 noduri pe care datele sunt sincronizate automat

Pe scurt, această politică ne va asigura că vom avea întotdeauna 2 copii ale datelor pe o coadă sau schimb, atâta timp cât avem cel puțin 2 noduri în funcțiune. Dacă aveți mai multe noduri puteți crește valoarea ha-params. Se recomandă un cvorum, ( N/2 + 1), de noduri. Dacă aveți mai multe copii ale datelor dvs., rezultați în discuri, i / o și utilizare netă mai ridicate, ceea ce ar putea duce la o performanță degradată.

Dacă doriți să reflectați datele la toate nodurile din cluster, puteți utiliza următorul document JSON.

'{ "ha-mode": "all", "ha-sync-mode": "automatic"}'

Dacă doriți să reflectați datele doar în anumite noduri, (de exemplu: node-1și node-2), puteți utiliza următoarele.

'{ "ha-mode": "nodes", "ha-params" :["rabbit@node-1", "rabbit@node-2"], "ha-sync-mode": "automatic"}'

Puteți schimba expresia regulată pentru a atribui politici diferite la cozi diferite. Spune că avem următoarele trei noduri:

  • iepure @ maestru
  • iepure @ client-ha
  • iepure @ produs-ha

Putem apoi să creăm două politici care vor rezulta în cozi cu un nume care începe cu „client” să fie oglindit la rabbit@client-hanod și toate cozile care au un nume care începe cu „produs” să fie oglindite la rabbit@product-hanod.

sudo rabbitmqctl set_policy -p "/" --priority 1 --apply-to "queues" ha-client "client.*" '{ "ha-mode": "nodes", "ha-params": ["rabbit@master", "rabbit@client-ha"], "ha-sync-mode": "automatic"}
sudo rabbitmqctl set_policy -p "/" --priority 1 --apply-to "queues" ha-product "product.*" '{ "ha-mode": "nodes", "ha-params": ["rabbit@master", "rabbit@product-ha"], "ha-sync-mode": "automatic"}

O mică remarcă aici: cozile exclusive nu sunt niciodată reflectate sau durabile în RabbitMQ, chiar dacă această politică ar corespunde astfel de cozi. Cozile exclusive sunt distruse automat odată ce un client se deconectează și, ca atare, nu ar fi de folos să-l reproduceți pe un alt server. Dacă serverul ar fi eșuat, clientul s-ar deconecta de la acesta și coada ar fi distrusă automat. Instanțele oglindite ar fi distruse și ele.

Testarea configurației

Pentru a testa configurația grupată, putem crea o coadă nouă folosind interfața liniei de comandă prin consola de administrare.

sudo rabbitmqadmin declare queue --vhost "/" name=my-ha-queue durable=true

Aceasta va crea o coadă durabilă pe /vhost implicit cu numele my-ha-queue.

Rulați următoarea comandă și verificați în ieșire că coada are politica noastră „ha” atribuită și are pid pe master și pe un nod oglindă.

sudo rabbitmqctl list_queues name policy state pid slave_pids

Acum putem publica un mesaj la coadă de la nodul principal și oprim RabbitMQ pe nodul principal.

sudo rabbitmqadmin -u user_name -p password  publish routing_key=my-ha-queue payload="hello world"
sudo systemctl rabbitmqctl shutdown

Acum obțineți-l înapoi conectându-vă la nodul oglinzii.

 sudo rabbitmqadmin -H MIRROR_NODE_IP_OR_DNS -u user_name -p password get queue=my-ha-queue

În cele din urmă, putem reporni nodul principal.

sudo systemctl start rabbitmq-server.service

Ștergeți utilizatorul invitat

După cum am menționat anterior, RabbitMQ creează automat un utilizator invitat cu o parolă de invitat implicită. Ar fi o practică proastă să lăsăm acest utilizator implicit pe un sistem expus public.

sudo rabbitmqctl delete_user guest


Leave a Comment

Instalare RethinkDB Cluster pe CentOS 7

Instalare RethinkDB Cluster pe CentOS 7

Introducere RethinkDB este o bază de date NoSQL care stochează date sub formă de documente JSON. Are un limbaj de interogare super intuitiv și are funcții disponibile în mod obișnuit

Configurarea conturilor de utilizator numai SFTP pe CentOS 7

Configurarea conturilor de utilizator numai SFTP pe CentOS 7

În anumite ocazii, este posibil ca un administrator de sistem să aibă nevoie să creeze un cont de utilizator și să restricționeze accesul acestora la gestionarea propriilor fișiere prin sFTP, dar nu b

Cum să compilați Nginx din sursă pe CentOS 7

Cum să compilați Nginx din sursă pe CentOS 7

Folosind un sistem diferit? NGINX poate fi utilizat ca server HTTP / HTTPS, server proxy invers, server proxy de poștă, echilibrator de sarcină, terminator TLS sau cachin

Cum se instalează Chamilo 1.11.8 pe CentOS 7

Cum se instalează Chamilo 1.11.8 pe CentOS 7

Folosind un sistem diferit? Chamilo este un sistem gratuit și deschis de management al învățării (LMS), care este utilizat pe scară largă pentru educația online și colaborarea în echipă

Instalarea comunității Odoo 9 pe CentOS 7

Instalarea comunității Odoo 9 pe CentOS 7

Odoo, cunoscută anterior drept OpenERP, este o cunoscută platformă de afaceri ERP open source. Întreprinderile de orice dimensiune pot beneficia de Odoo, datorită licenței sale abundente

Cum se instalează Couch CMS 2.0 pe un VPS CentOS 7 LAMP

Cum se instalează Couch CMS 2.0 pe un VPS CentOS 7 LAMP

Folosind un sistem diferit? Couch CMS este un sistem de gestionare a conținutului (CMS) simplu și flexibil, gratuit și deschis, care permite proiectanților web să deseneze

Cum se instalează SonarQube pe CentOS 7

Cum se instalează SonarQube pe CentOS 7

Folosind un sistem diferit? SonarQube este un instrument open source pentru dezvoltarea sistemului de calitate. Este scris în Java și acceptă mai multe baze de date. Oferă

Cum se instalează NextCloud 9 pe CentOS 7

Cum se instalează NextCloud 9 pe CentOS 7

NextCloud, așa cum sugerează și numele său, este o alternativă promițătoare a unei alte soluții de hosting de fișiere open source OwnCloud. În acest articol, vă voi arăta

Instalarea Netdata pe CentOS 7

Instalarea Netdata pe CentOS 7

Folosind un sistem diferit? Netdata este o stea în creștere în domeniul monitorizării în timp real a metricilor sistemului. Comparativ cu alte instrumente de același fel, Netdata:

Cum se instalează Starbound Server pe CentOS 7

Cum se instalează Starbound Server pe CentOS 7

Folosind un sistem diferit? În acest tutorial, voi explica cum să configurați un server Starbound pe CentOS 7. Condiții preliminare Trebuie să dețineți acest joc pe dvs.

Configurați un server multiplayer SA-MP San Andreas pe CentOS 6

Configurați un server multiplayer SA-MP San Andreas pe CentOS 6

Bine ați venit la un alt tutorial Vultr. Aici, veți învăța cum să instalați și să rulați un server SAMP. Acest ghid a fost scris pentru CentOS 6. Condiții preliminare pe care le veți obține

Instalați Elgg pe CentOS 7

Instalați Elgg pe CentOS 7

Folosind un sistem diferit? Elgg este un motor de rețea socială open source care permite crearea de medii sociale, cum ar fi rețelele sociale din campus

Cum se instalează RStudio Server pe CentOS 7

Cum se instalează RStudio Server pe CentOS 7

RStudio Server este ediția web a RStudio care este o serie de instrumente concepute pentru a facilita munca de codare folosind limbajul de programare R. În ti

Instalarea Bolt CMS pe CentOS 7

Instalarea Bolt CMS pe CentOS 7

Bolt este un CMS open source scris în PHP. Codul sursă Bolts este găzduit pe GitHub. Acest ghid vă va arăta cum instalați Bolt CMS pe un nou CentOS 7 Vult

Cum se instalează Bugzilla 5.0.x pe CentOS 7

Cum se instalează Bugzilla 5.0.x pe CentOS 7

Bugzilla este un sistem gratuit și open source de urmărire a erorilor, care este utilizat pe scară largă de diverși furnizori pentru a-și îmbunătăți continuu softwar-ul

Implementați Kubernetes cu Kubeadm pe CentOS 7

Implementați Kubernetes cu Kubeadm pe CentOS 7

Prezentare generală Acest articol este menit să vă ajute să obțineți un cluster Kubernetes și să funcționeze cu kubeadm în cel mai scurt timp. Acest ghid va implementa două servere, pe

Configurare Sails.js pentru dezvoltare pe CentOS 7

Configurare Sails.js pentru dezvoltare pe CentOS 7

Folosind un sistem diferit? Introducere Sails.js este un cadru MVC pentru Node.js, similar cu Ruby on Rails. Face pentru dezvoltarea aplicațiilor moderne ver

Configurarea BGP folosind Quagga pe Vultr (CentOS 7)

Configurarea BGP folosind Quagga pe Vultr (CentOS 7)

Funcțiile Vultrs Adu-ți spațiul IP permite o libertate fără precedent în alocarea propriilor resurse IP serverelor din norul Vultr. Noi generall

Configurarea unui server Half Life 2 pe CentOS 6

Configurarea unui server Half Life 2 pe CentOS 6

Acest tutorial va acoperi procesul de instalare a unui server de joc Half Life 2 pe CentOS 6 System. Pasul 1: Instalarea condițiilor preliminare Pentru a configura ou

Instrumente de monitorizare mai bune pentru Ubuntu și CentOS

Instrumente de monitorizare mai bune pentru Ubuntu și CentOS

Introducere Sistemele Linux sunt livrate cu instrumente de monitorizare în mod implicit, cum ar fi top, df și du care ajută la monitorizarea proceselor și a spațiului pe disc. De multe ori însă, acestea sunt

O perspectivă asupra a 26 de tehnici de analiză a datelor mari: partea 1

O perspectivă asupra a 26 de tehnici de analiză a datelor mari: partea 1

O perspectivă asupra a 26 de tehnici de analiză a datelor mari: partea 1

6 lucruri extrem de nebunești despre Nintendo Switch

6 lucruri extrem de nebunești despre Nintendo Switch

Mulți dintre voi cunoașteți Switch care va fi lansat în martie 2017 și noile sale funcții. Pentru cei care nu știu, am pregătit o listă de funcții care fac din „Switch” un „gadget obligatoriu”.

Promisiuni tehnologice care sunt încă nelivrate

Promisiuni tehnologice care sunt încă nelivrate

Aștepți ca giganții tehnologiei să-și îndeplinească promisiunile? vezi ce a ramas nelivrat.

Funcționalitățile straturilor arhitecturii de referință pentru Big Data

Funcționalitățile straturilor arhitecturii de referință pentru Big Data

Citiți blogul pentru a cunoaște diferitele straturi din Arhitectura Big Data și funcționalitățile acestora în cel mai simplu mod.

Cum poate AI să ducă automatizarea proceselor la următorul nivel?

Cum poate AI să ducă automatizarea proceselor la următorul nivel?

Citiți asta pentru a afla cum devine populară inteligența artificială în rândul companiilor la scară mică și cum crește probabilitățile de a le face să crească și de a le oferi concurenților avantaje.

CAPTCHA: Cât timp poate rămâne o tehnică viabilă pentru distincția uman-AI?

CAPTCHA: Cât timp poate rămâne o tehnică viabilă pentru distincția uman-AI?

CAPTCHA a devenit destul de dificil de rezolvat pentru utilizatori în ultimii ani. Va fi capabil să rămână eficient în detectarea spam-ului și a botului în viitor?

Singularitatea tehnologică: un viitor îndepărtat al civilizației umane?

Singularitatea tehnologică: un viitor îndepărtat al civilizației umane?

Pe măsură ce Știința Evoluează într-un ritm rapid, preluând multe dintre eforturile noastre, crește și riscurile de a ne supune unei Singularități inexplicabile. Citiți, ce ar putea însemna singularitatea pentru noi.

Telemedicină și îngrijire medicală la distanță: viitorul este aici

Telemedicină și îngrijire medicală la distanță: viitorul este aici

Ce este telemedicina, îngrijirea medicală la distanță și impactul acesteia asupra generației viitoare? Este un loc bun sau nu în situația de pandemie? Citiți blogul pentru a găsi o vedere!

Te-ai întrebat vreodată cum câștigă hackerii bani?

Te-ai întrebat vreodată cum câștigă hackerii bani?

Poate ați auzit că hackerii câștigă mulți bani, dar v-ați întrebat vreodată cum câștigă acești bani? sa discutam.

Actualizarea suplimentului macOS Catalina 10.15.4 cauzează mai multe probleme decât rezolvă

Actualizarea suplimentului macOS Catalina 10.15.4 cauzează mai multe probleme decât rezolvă

Recent, Apple a lansat macOS Catalina 10.15.4 o actualizare suplimentară pentru a remedia problemele, dar se pare că actualizarea provoacă mai multe probleme care duc la blocarea mașinilor Mac. Citiți acest articol pentru a afla mai multe