RabbitMQ grupēšana operētājsistēmā CentOS 7

RabbitMQ ir atvērtā pirmkoda ziņojumu brokeris, kas atbalsta AMQP, STOMP un citas komunikācijas tehnoloģijas. To plaši izmanto uzņēmumu lietojumprogrammās un modernās mikropakalpojumu arhitektūrās, kur tas darbojas kā asinhrons ziņojumu kanāls starp dažādiem mikropakalpojumiem. Šajā rokasgrāmatā ir aprakstīts, kā RabbitMQ var grupēt vairākos CentOS 7 serveros, lai izveidotu augstas pieejamības ziņojumu starpnieku. Šajā apmācībā viens serveris darbosies kā galvenais serveris, bet pārējie serveri darbosies kā spoguļserveri, ja galvenais serveris kļūs nepieejams.

Priekšnoteikumi

Konfigurējiet ugunsmūri

CentOS ugunsmūris ( firewalld) pēc noklusējuma neatļauj ienākošo trafiku. Lai RabbitMQ būtu pieejams citām sistēmām tīklā un ārpus tā un ļautu mums piekļūt pārvaldības konsolei, vispirms ir jāatver daži porti.

RabbitMQ tīmekļa saskarnes pārvaldības konsole pēc noklusējuma klausās portā 15672. Mēs vēlamies padarīt pārvaldības konsoli publiski pieejamu, lai mēs varētu tai piekļūt no sava datora. Tāpēc mēs norādīsim firewalldpastāvīgi atvērt portu 15672publiskajā zonā (kas ir noklusējuma un aktīvā zona Vultr instancē).

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

RabbitMQ mezgliem jāspēj sazināties vienam ar otru. Mēs vēlētos atvērt nepieciešamos portus, bet tikai caur iekšējo tīklu. Mēs nevēlamies, lai kāds interneta lietotājs varētu administrēt vai tieši sazināties ar mūsu serveriem. Šīs komandas pieņem, ka mūsu serveri atrodas 192.168.0.100/24apakštīklā.

Pirmais pakalpojums ir epmdvienādranga atklāšanas pakalpojums, kas pēc noklusējuma klausās 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'

Lai nodrošinātu starpmezglu un CLI saziņu, RabbitMQ ir jāspēj sazināties, izmantojot portu 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'

CLI rīki sazinās portu diapazonā 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'

Ja jūsu lietojumprogrammām ir nepieciešams AMQP protokols, jums būs jāatver arī porti 5671un 5672. Ja jums ir jāspēj sazināties, izmantojot citu protokolu, nepieciešamo informāciju par RabbitMQ tīkla prasībām varat atrast oficiālajā RabbitMQ dokumentācijā .

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'

Tagad, kad tas firewalldir konfigurēts, mums ir jānorāda, lai tā atkārtoti ielādētu konfigurāciju.

sudo firewall-cmd --reload

Atkārtojiet šīs sadaļas darbības visos serveros.

Uzstādīt rabbitmqadmin

Pārvaldības spraudnis ir aprīkots ar Python rīku, rabbitmqadminko var viegli instalēt sistēmā, tiklīdz pārvaldības spraudnis ir iespējots.

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

Konfigurēt DNS

Klasterizācijas laikā ir jāizmanto servera resursdatora nosaukumi, lai identificētu serverus. Pēc noklusējuma serveriem nav piešķirts DNS ieraksts, un savienojums neizdosies. Lai to ātri pārvarētu, pievienojiet /etc/hostsfailam galveno un spoguļresursa nosaukumu, izmantojot savu iecienītāko redaktoru.

Piemēram, jūsu galvenā saimniekdatora fails var izskatīties šādi. Ievērojiet pēdējos divus ierakstus, kas ļauj serveriem identificēt viens otru pēc resursdatora nosaukuma. Noteikti nomainiet IP adreses uz savām.

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

Sagrupējiet mezglus

Importēšanas priekšnoteikums, lai mezgli varētu pievienoties viens otram, ir tas, ka visu mezglu Erlang sīkfails ir identisks. Pēc noklusējuma katram mezglam tiks piešķirts unikāls Erlang sīkfails, tāpēc tas ir jāpārkonfigurē visos mezglos.

Šī komanda iestatīs Erlang sīkfailu uz " WE<3COOKIES", taču varat to mainīt pēc saviem ieskatiem. Dariet to visos serveros.

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

Restartējiet RabbitMQ visos serveros, lai pārliecinātos, ka Erlang sīkfails ir pareizi ielādēts.

sudo systemctl restart rabbitmq-server.service

Izpildiet šādas komandas visos serveros, izņemot galvenajā serverī. Tas ļaus mezgliem pievienoties galvenajam serverim un izveidot kopu.

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

Pārbaudiet, vai mezgli ir pievienojušies klasterim, izpildot šo komandu.

sudo rabbitmqctl cluster_status

Visas jūsu mezgliem parādīsies nodesun running_nodessadaļā produkciju. No šī brīža jums vairs nav jāatkārto darbības katrā serverī, konfigurācija tiks automātiski atspoguļota citos mezglos.

Izveidojiet augstas pieejamības politiku

Tagad, kad mums ir RabbitMQ mezglu kopa, mēs varam to izmantot, lai izveidotu augstas pieejamības rindas un apmaiņu, iestatot jaunu politiku. Šo politiku var pievienot, izmantojot RabbitMQ pārvaldības konsoli vai komandrindas saskarni.

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

Nākamajā sarakstā ir paskaidrots, ko nozīmē katra komandas daļa.

  • -p "/": izmantojiet šo politiku "/"vhost (pēc instalēšanas noklusējuma)
  • --priority 1: secība, kādā piemērojamas politikas
  • --apply-to "all": Var būt "queues", "exchanges"vai"all"
  • ha: nosaukums, ko piešķiram savai politikai
  • ".*": regulārā izteiksme, kas tiek izmantota, lai izlemtu, kurām rindām vai apmaiņām šī politika tiek piemērota. ".*"piestāvēs jebkam
  • '{ "ha-mode": "exactly", "ha-params": 2, "ha-sync-mode": "automatic"}': politikas JSON attēlojums. Šajā dokumentā ir aprakstīts, ka mēs vēlamies - tieši 2 mezglus, uz kuriem dati tiek automātiski sinhronizēti

Īsāk sakot, šī politika nodrošinās, ka mums vienmēr būs 2 datu kopijas rindā vai apmaiņā, ja vien mums ir izveidoti un darbojas vismaz 2 mezgli. Ja jums ir vairāk mezglu, varat palielināt vērtību ha-params. Ieteicams N/2 + 1mezglu kvorums ( ). Ja jums ir vairāk datu kopiju, palielināsies diska, i/o un tīkla lietojums, kā rezultātā var pasliktināties veiktspēja.

Ja vēlaties atspoguļot datus visos klastera mezglos, varat izmantot šo JSON dokumentu.

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

Ja vēlaties atspoguļot datus tikai noteiktos mezglos (piemēram: node-1un node-2), varat izmantot tālāk norādīto.

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

Varat mainīt regulāro izteiksmi, lai dažādām rindām piešķirtu dažādas politikas. Pieņemsim, ka mums ir šādi trīs mezgli:

  • trusis@meistars
  • zaķis@klients-ha
  • trusis@produkts-ha

Pēc tam mēs varam izveidot divas politikas, kuru rezultātā rindas ar nosaukumu, kas sākas ar "klients", tiks atspoguļotas rabbit@client-hamezglā, un visas rindas, kuru nosaukums sākas ar "produkts", tiks atspoguļotas rabbit@product-hamezglā.

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"}

Šeit ir neliela piezīme: ekskluzīvas rindas nekad netiek atspoguļotas vai noturīgas pakalpojumā RabbitMQ, pat ja šī politika atbilstu šādām rindām. Ekskluzīvas rindas tiek automātiski iznīcinātas, tiklīdz klients atvienojas, un tādēļ nebūtu lietderīgi to replicēt citā serverī. Ja serveris neizdosies, klients atvienotos no tā un rinda tiktu automātiski iznīcināta. Tiks iznīcināti arī spoguļattēli.

Iestatījuma pārbaude

Lai pārbaudītu grupēto iestatīšanu, mēs varam izveidot jaunu rindu, izmantojot komandrindas interfeisu, izmantojot pārvaldības konsoli.

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

Tas izveidos ilgstošu rindu noklusējuma /vhost ar nosaukumu my-ha-queue.

Palaidiet šo komandu un izvadā pārbaudiet, vai rindai ir piešķirta mūsu “ha” politika un vai galvenajā un spoguļmezglā ir pid.

sudo rabbitmqctl list_queues name policy state pid slave_pids

Tagad mēs varam publicēt ziņojumu rindā no galvenā mezgla un apturēt RabbitMQ galvenajā mezglā.

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

Tagad iegūstiet to atpakaļ, izveidojot savienojumu ar spoguļa mezglu.

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

Visbeidzot, mēs varam restartēt mūsu galveno mezglu.

sudo systemctl start rabbitmq-server.service

Dzēst viesa lietotāju

Kā minēts iepriekš, RabbitMQ automātiski izveido viesa lietotāju ar noklusējuma viesa paroli. Būtu slikta prakse atstāt šo noklusējuma lietotāju publiski atklātā sistēmā.

sudo rabbitmqctl delete_user guest

Atstājiet komentāru

Mašīnu pieaugums: AI reālās pasaules lietojumi

Mašīnu pieaugums: AI reālās pasaules lietojumi

Mākslīgais intelekts nav nākotnē, tas ir šeit, tagadnē. Šajā emuārā lasiet, kā mākslīgā intelekta lietojumprogrammas ir ietekmējušas dažādas nozares.

DDOS uzbrukumi: īss pārskats

DDOS uzbrukumi: īss pārskats

Vai arī jūs esat DDOS uzbrukumu upuris un esat neizpratnē par profilakses metodēm? Izlasiet šo rakstu, lai atrisinātu savus jautājumus.

Vai esat kādreiz domājis, kā hakeri pelna naudu?

Vai esat kādreiz domājis, kā hakeri pelna naudu?

Iespējams, esat dzirdējuši, ka hakeri pelna daudz naudas, bet vai esat kādreiz domājuši, kā viņi nopelna šādu naudu? pārrunāsim.

Google revolucionāri izgudrojumi, kas atvieglos jūsu dzīvi.

Google revolucionāri izgudrojumi, kas atvieglos jūsu dzīvi.

Vai vēlaties redzēt revolucionārus Google izgudrojumus un to, kā šie izgudrojumi mainīja katra cilvēka dzīvi mūsdienās? Pēc tam lasiet emuārā, lai redzētu Google izgudrojumus.

Piektdiena: kas notika ar AI vadītām automašīnām?

Piektdiena: kas notika ar AI vadītām automašīnām?

Pašpiedziņas automobiļu koncepcija izbraukt uz ceļiem ar mākslīgā intelekta palīdzību ir mūsu sapnis jau kādu laiku. Bet, neskatoties uz vairākiem solījumiem, tie nekur nav redzami. Lasiet šo emuāru, lai uzzinātu vairāk…

Tehnoloģiskā singularitāte: cilvēces civilizācijas tāla nākotne?

Tehnoloģiskā singularitāte: cilvēces civilizācijas tāla nākotne?

Zinātnei strauji attīstoties, pārņemot lielu daļu mūsu pūļu, palielinās arī risks pakļaut sevi neizskaidrojamai singularitātei. Izlasiet, ko singularitāte varētu nozīmēt mums.

Lielo datu atsauces arhitektūras slāņu funkcijas

Lielo datu atsauces arhitektūras slāņu funkcijas

Lasiet emuāru, lai vienkāršākā veidā uzzinātu dažādus lielo datu arhitektūras slāņus un to funkcijas.

Datu glabāšanas evolūcija – infografika

Datu glabāšanas evolūcija – infografika

Datu uzglabāšanas metodes ir attīstījušās kopš datu dzimšanas. Šajā emuārā ir aprakstīta datu uzglabāšanas attīstība, pamatojoties uz infografiku.

6 brīnišķīgas priekšrocības, ko sniedz viedo mājas ierīču izmantošana mūsu dzīvē

6 brīnišķīgas priekšrocības, ko sniedz viedo mājas ierīču izmantošana mūsu dzīvē

Šajā digitālajā pasaulē viedās mājas ierīces ir kļuvušas par būtisku dzīves sastāvdaļu. Šeit ir daži pārsteidzoši viedo mājas ierīču ieguvumi, lai padarītu mūsu dzīvi dzīves vērtu un vienkāršāku.

MacOS Catalina 10.15.4 papildinājuma atjauninājums rada vairāk problēmu nekā to risināšana

MacOS Catalina 10.15.4 papildinājuma atjauninājums rada vairāk problēmu nekā to risināšana

Nesen Apple izlaida macOS Catalina 10.15.4 papildinājuma atjauninājumu, lai novērstu problēmas, taču šķiet, ka atjauninājums rada vairāk problēmu, kas izraisa Mac datoru bloķēšanu. Izlasiet šo rakstu, lai uzzinātu vairāk