Clustering af RabbitMQ på CentOS 7

RabbitMQ er en open source-meddelelsesmægler, der understøtter AMQP, STOMP og andre kommunikationsteknologier. Det er meget udbredt i virksomhedsapplikationer og moderne mikroservicearkitekturer, hvor det fungerer som en asynkron meddelelseskanal mellem forskellige mikrotjenester. Denne vejledning vil beskrive, hvordan du kan gruppere RabbitMQ på flere CentOS 7-servere for at danne en meddelelsesmægler med høj tilgængelighed. I denne vejledning vil en server fungere som en masterserver, og de andre servere vil fungere som spejlservere, hvis masterserveren bliver utilgængelig.

Forudsætninger

Konfigurer firewallen

CentOS-firewallen, ( firewalld), tillader som standard ingen indgående trafik. For at gøre RabbitMQ tilgængelig for andre systemer i og uden for netværket, og for at give os adgang til administrationskonsollen, skal vi først åbne nogle porte.

RabbitMQ's webgrænsefladestyringskonsol lytter som standard på port 15672. Vi vil gerne gøre administrationskonsollen offentligt tilgængelig, så vi kan få adgang til den fra vores computer. Vi vil derfor instruere firewalldom permanent at åbne porten 15672i den offentlige zone (som er standard og aktive zone på en Vultr-instans).

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

RabbitMQ-knuderne skal kunne kommunikere med hinanden. Vi vil gerne åbne de nødvendige porte, men kun over det interne netværk. Vi ønsker ikke, at nogen på internettet skal kunne administrere eller kontakte vores servere direkte. Følgende kommandoer antager, at vores servere er på 192.168.0.100/24undernettet.

Den første tjeneste er epmdpeer discovery-tjenesten, som lytter som standard på 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'

For internode- og CLI-kommunikation skal RabbitMQ være i stand til at kommunikere over 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'

CLI-værktøjerne kommunikerer over portrækken 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'

Hvis dine applikationer har brug for AMQP-protokollen, skal du også åbne porte 5671og 5672. Hvis du har brug for at kunne kommunikere over en anden protokol, kan du finde de nødvendige oplysninger om netværkskravene for RabbitMQ i den officielle RabbitMQ-dokumentation .

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'

Nu det firewallder konfigureret, skal vi instruere det i at genindlæse konfigurationen.

sudo firewall-cmd --reload

Gentag trinene fra dette afsnit på alle servere.

Installere rabbitmqadmin

Administrationsplugin'et kommer med et Python-værktøj kaldet, rabbitmqadminsom nemt kan installeres på systemet, når administrationspluginnet er aktiveret.

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

Konfigurer DNS

Du skal bruge serverens værtsnavne til at identificere serverne, når du klynger. Som standard har serverne ingen DNS-record tildelt, og forbindelsen vil mislykkes. For hurtigt at overvinde dette skal du tilføje master- og spejlværtsnavnet til /etc/hostsfilen ved hjælp af din yndlingseditor.

For eksempel kan din masters værtsfil se ud som følgende. Læg mærke til de sidste to poster, som gør det muligt for serverne at identificere hinanden ved deres værtsnavn. Sørg for at ændre IP-adresserne til dine egne.

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

Klynge knudepunkterne

En importforudsætning for at tillade noder at slutte sig til hinanden er, at Erlang-cookien for alle noder er identiske. Som standard vil hver node blive tildelt en unik Erlang-cookie, så du skal omkonfigurere den på alle noder.

Den følgende kommando vil sætte Erlang-cookien til " WE<3COOKIES", men du er velkommen til at ændre dette efter din smag. Gør dette på alle servere.

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

Genstart RabbitMQ på alle servere for at sikre, at Erlang-cookien genindlæses korrekt.

sudo systemctl restart rabbitmq-server.service

Udfør følgende kommandoer på alle servere undtagen på masterserveren. Dette vil lade noderne slutte sig til masterserveren og danne en klynge.

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

Bekræft, at noderne har sluttet sig til klyngen ved at køre følgende kommando.

sudo rabbitmqctl cluster_status

Alle dine noder vises i nodesog running_nodesdel af produktionen. Fra nu af behøver du ikke længere at gentage trin på hver server, konfigurationen vil automatisk blive spejlet til de andre noder.

Lav en høj tilgængelighedspolitik

Nu hvor vi har en klynge af RabbitMQ-noder, kan vi bruge dette til at lave højtilgængelige køer og udvekslinger ved at opsætte en ny politik. Denne politik kan tilføjes via RabbitMQ Management Console eller ved hjælp af kommandolinjegrænsefladen.

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

Den følgende liste vil forklare, hvad hver del af kommandoen betyder.

  • -p "/": Brug denne politik på "/"vhost (standard efter installation)
  • --priority 1: Den rækkefølge, som politikkerne skal anvendes i
  • --apply-to "all": Kan være "queues", "exchanges"eller"all"
  • ha: Det navn, vi giver vores politik
  • ".*": Det regulære udtryk, som bruges til at bestemme, hvilke køer eller udvekslinger denne politik anvendes på. ".*"vil matche hvad som helst
  • '{ "ha-mode": "exactly", "ha-params": 2, "ha-sync-mode": "automatic"}': JSON-repræsentationen af ​​politikken. Dette dokument beskriver, at vi ønsker - præcis 2 noder, hvorpå dataene automatisk synkroniseres

Kort sagt vil denne politik sikre, at vi altid vil have 2 kopier af dataene på en kø eller en central, så længe vi har mindst 2 noder oppe at køre. Hvis du har flere noder, kan du øge værdien af ha-params. Et kvorum, ( N/2 + 1), af noder tilrådes. At have flere kopier af dine data vil resultere i højere disk-, i/o- og netforbrug, hvilket kan resultere i en forringet ydeevne.

Hvis du gerne vil spejle dataene til alle noderne i klyngen, kan du bruge følgende JSON-dokument.

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

Hvis du kun vil spejle dataene til specifikke noder (for eksempel: node-1og node-2), kan du bruge følgende.

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

Du kan ændre det regulære udtryk for at tildele forskellige politikker til forskellige køer. Lad os sige, at vi har følgende tre noder:

  • kanin@mester
  • kanin@klient-ha
  • kanin@produkt-ha

Vi kan derefter oprette to politikker, som vil resultere i, at køer med et navn, der starter med "klient", spejles til rabbit@client-hanoden, og alle køer, der har et navn, der starter med "produkt", spejles til rabbit@product-hanoden.

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

En lille bemærkning her: eksklusive køer er aldrig spejlet eller holdbare i RabbitMQ, selvom denne politik ville matche sådanne køer. Eksklusive køer bliver automatisk ødelagt, når en klient afbryder forbindelsen, og som sådan ville det ikke nytte noget at replikere den til en anden server. Hvis serveren fejler, vil klienten afbryde forbindelsen fra den, og køen vil automatisk blive ødelagt. Spejlvendte forekomster ville også blive ødelagt.

Test af opsætningen

For at teste den klyngede opsætning kan vi oprette en ny kø ved hjælp af kommandolinjegrænsefladen gennem administrationskonsollen.

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

Dette vil skabe en holdbar kø på standard /vhost med navnet my-ha-queue.

Kør følgende kommando og bekræft i outputtet, at køen har vores 'ha'-politik tildelt og har pid'er på masteren og på en spejlknude.

sudo rabbitmqctl list_queues name policy state pid slave_pids

Vi kan nu publicere en besked til køen fra masterknuden og stoppe RabbitMQ på masterknuden.

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

Få det nu tilbage ved at oprette forbindelse til spejlknudepunktet.

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

Endelig kan vi genstarte vores masterknude.

sudo systemctl start rabbitmq-server.service

Slet gæstebrugeren

Som nævnt før opretter RabbitMQ automatisk en gæstebruger med en standard gæsteadgangskode. Det ville være dårlig praksis at efterlade denne standardbruger på et offentligt eksponeret system.

sudo rabbitmqctl delete_user guest

Installer Plesk på CentOS 7

Installer Plesk på CentOS 7

Bruger du et andet system? Plesk er et proprietært webhost kontrolpanel, der giver brugerne mulighed for at administrere deres personlige og/eller klienters websteder, databaser

Sådan installeres Squid Proxy på CentOS

Sådan installeres Squid Proxy på CentOS

Squid er et populært, gratis Linux-program, der giver dig mulighed for at oprette en webproxy til videresendelse. I denne vejledning vil du se, hvordan du installerer Squid på CentOS for at gøre dig

Sådan installeres Lighttpd (LLMP Stack) på CentOS 6

Sådan installeres Lighttpd (LLMP Stack) på CentOS 6

Introduktion Lighttpd er en forgrening af Apache, der sigter mod at være meget mindre ressourcekrævende. Den er let, deraf navnet, og den er ret enkel at bruge. Installer

Konfiguration af statisk netværk og IPv6 på CentOS 7

Konfiguration af statisk netværk og IPv6 på CentOS 7

VULTR har for nylig foretaget ændringer i deres ende, og alt skulle nu fungere fint ud af boksen med NetworkManager aktiveret. Skulle du ønske at deaktivere

Ændring af Icinga2 til at bruge Master/Client Model på CentOS 6 eller CentOS 7

Ændring af Icinga2 til at bruge Master/Client Model på CentOS 6 eller CentOS 7

Icinga2 er et kraftfuldt overvågningssystem, og når det bruges i en master-klient-model, kan det erstatte behovet for NRPE-baserede overvågningstjek. Mester-klienten

Sådan installeres Apache Cassandra 3.11.x på CentOS 7

Sådan installeres Apache Cassandra 3.11.x på CentOS 7

Bruger du et andet system? Apache Cassandra er et gratis og open source NoSQL-databasestyringssystem, der er designet til at give skalerbarhed, høj

Sådan installeres Microweber på CentOS 7

Sådan installeres Microweber på CentOS 7

Bruger du et andet system? Microweber er en open source træk og slip CMS og online shop. Microweber-kildekoden er hostet på GitHub. Denne guide vil vise dig

Sådan installeres Mattermost 4.1 på CentOS 7

Sådan installeres Mattermost 4.1 på CentOS 7

Bruger du et andet system? Mattermost er et open source, selvhostet alternativ til Slack SAAS-meddelelsestjenesten. Med andre ord, med Mattermost er du ca

Oprettelse af et netværk af Minecraft-servere med BungeeCord på Debian 8, Debian 9 eller CentOS 7

Oprettelse af et netværk af Minecraft-servere med BungeeCord på Debian 8, Debian 9 eller CentOS 7

Hvad skal du bruge En Vultr VPS med mindst 1 GB RAM. SSH-adgang (med root/administrative rettigheder). Trin 1: Installation af BungeeCord Første ting først

Lad os kryptere på Plesk

Lad os kryptere på Plesk

Plesk-kontrolpanelet har en meget flot integration til Lets Encrypt. Lets Encrypt er en af ​​de eneste SSL-udbydere, der udleverer certifikater komplet

Lader kryptere på cPanel

Lader kryptere på cPanel

Lets Encrypt er en certifikatmyndighed dedikeret til at levere SSL-certifikater gratis. cPanel har bygget en pæn integration, så du og din klient

Sådan installeres Concrete5 på CentOS 7

Sådan installeres Concrete5 på CentOS 7

Bruger du et andet system? Concrete5 er et open source CMS, som tilbyder mange karakteristiske og nyttige funktioner til at hjælpe redaktører med at producere indhold nemt og

Sådan installeres Review Board på CentOS 7

Sådan installeres Review Board på CentOS 7

Bruger du et andet system? Review Board er et gratis og open source-værktøj til gennemgang af kildekode, dokumentation, billeder og mange flere. Det er webbaseret software

Konfigurer HTTP-godkendelse med Nginx på CentOS 7

Konfigurer HTTP-godkendelse med Nginx på CentOS 7

I denne vejledning lærer du, hvordan du opsætter HTTP-godkendelse for en Nginx-webserver, der kører på CentOS 7. Krav For at komme i gang skal du bruge

Sådan installeres YOURLS på CentOS 7

Sådan installeres YOURLS på CentOS 7

YOURLS (Your Own URL Shortener) er en open source URL-forkortelse og dataanalyseapplikation. I denne artikel vil vi dække installationsprocessen

Sådan installeres og konfigureres ArangoDB på CentOS 7

Sådan installeres og konfigureres ArangoDB på CentOS 7

Bruger du et andet system? Introduktion ArangoDB er en open source NoSQL-database med en fleksibel datamodel for dokumenter, grafer og nøgleværdier. det er

Brug af Etckeeper til versionskontrol af /etc

Brug af Etckeeper til versionskontrol af /etc

Introduktion /etc/-biblioteket spiller en afgørende rolle i den måde et Linux-system fungerer på. Årsagen til dette er, at næsten alle systemkonfigurationer

Hvorfor skal du bruge SSHFS? Sådan monteres et eksternt filsystem med SSHFS på CentOS 6

Hvorfor skal du bruge SSHFS? Sådan monteres et eksternt filsystem med SSHFS på CentOS 6

Mange systemadministratorer administrerer store mængder servere. Når filer skal tilgås på tværs af forskellige servere, logges ind på hver enkelt individuelt ca

Opsætning af en Half Life 2-server på CentOS 6

Opsætning af en Half Life 2-server på CentOS 6

Denne vejledning vil dække processen med at installere en Half Life 2-spilserver på CentOS 6 System. Trin 1: Installation af forudsætninger For at opsætte ou

Sådan installeres Laravel GitScrum på CentOS 7

Sådan installeres Laravel GitScrum på CentOS 7

Laravel GitScrum eller GitScrum er et open source-produktivitetsværktøj designet til at hjælpe udviklingsteams med at implementere Scrum-metoden på en måde, der ligner t.

The Rise of Machines: Real World Applications of AI

The Rise of Machines: Real World Applications of AI

Kunstig intelligens er ikke i fremtiden, det er her lige i nuet I denne blog Læs, hvordan kunstig intelligens-applikationer har påvirket forskellige sektorer.

DDOS-angreb: et kort overblik

DDOS-angreb: et kort overblik

Er du også et offer for DDOS-angreb og forvirret over forebyggelsesmetoderne? Læs denne artikel for at løse dine spørgsmål.

Har du nogensinde spekuleret på, hvordan tjener hackere penge?

Har du nogensinde spekuleret på, hvordan tjener hackere penge?

Du har måske hørt, at hackere tjener mange penge, men har du nogensinde spekuleret på, hvordan tjener de den slags penge? lad os diskutere.

Revolutionære opfindelser fra Google, der vil gøre dit liv lettere.

Revolutionære opfindelser fra Google, der vil gøre dit liv lettere.

Vil du se revolutionerende opfindelser fra Google, og hvordan disse opfindelser ændrede livet for ethvert menneske i dag? Læs derefter til bloggen for at se opfindelser fra Google.

Fredag ​​Essential: Hvad skete der med AI-drevne biler?

Fredag ​​Essential: Hvad skete der med AI-drevne biler?

Konceptet med selvkørende biler til at køre på vejene ved hjælp af kunstig intelligens er en drøm, vi har haft i et stykke tid nu. Men på trods af flere løfter er de ingen steder at se. Læs denne blog for at lære mere...

Teknologisk singularitet: En fjern fremtid for menneskelig civilisation?

Teknologisk singularitet: En fjern fremtid for menneskelig civilisation?

Efterhånden som videnskaben udvikler sig i et hurtigt tempo og overtager en stor del af vores indsats, stiger risikoen for at udsætte os selv for en uforklarlig Singularitet. Læs, hvad singularitet kunne betyde for os.

Udvikling af datalagring – Infografik

Udvikling af datalagring – Infografik

Opbevaringsmetoderne for dataene har været under udvikling, kan være siden fødslen af ​​dataene. Denne blog dækker udviklingen af ​​datalagring på basis af en infografik.

Funktioner af Big Data Reference Architecture Layers

Funktioner af Big Data Reference Architecture Layers

Læs bloggen for at kende forskellige lag i Big Data-arkitekturen og deres funktionaliteter på den enkleste måde.

6 fantastiske fordele ved at have smarte hjemmeenheder i vores liv

6 fantastiske fordele ved at have smarte hjemmeenheder i vores liv

I denne digitalt drevne verden er smarte hjemmeenheder blevet en afgørende del af livet. Her er et par fantastiske fordele ved smarte hjemmeenheder om, hvordan de gør vores liv værd at leve og enklere.

macOS Catalina 10.15.4-tillægsopdatering forårsager flere problemer end at løse

macOS Catalina 10.15.4-tillægsopdatering forårsager flere problemer end at løse

For nylig udgav Apple macOS Catalina 10.15.4 en supplerende opdatering for at løse problemer, men det ser ud til, at opdateringen forårsager flere problemer, hvilket fører til mursten af ​​mac-maskiner. Læs denne artikel for at lære mere