GNU/Linux >> Znalost Linux >  >> Linux

Jak nastavit RabbitMQ Cluster na Ubuntu/Debian Linux

Chcete snížit pracovní vytížení a dodací lhůty vašich aplikací? Ušetřete si bolesti hlavy a nastavte pro svou aplikaci cluster RabbitMQ!

V tomto tutoriálu se naučíte, jak nastavit RabbitMQ Cluster a mít plně funkční RabbitMQ cluster s podporou vysoké dostupnosti.

Připraveni? Čtěte dále a začněte snižovat pracovní zátěž!

Předpoklady

Chcete-li pokračovat v tomto tutoriálu, ujistěte se, že máte splněny následující požadavky:

  • Dva nebo více serverů Linux ve stejné síti – Tento výukový program používá tři servery Debian 11 s názvem node01, node02 a node03.
  • Oprávnění uživatele Sudo root nebo přístup k účtu root/administrátora.

Nastavení souboru Hosts

Cluster RabbitMQ pracuje s názvem hostitele nebo místní doménou. Úpravou souboru /etc/hosts musíte zajistit, aby se každý název hostitele překládal na adresu IP serveru. soubor.

Otevřete /etc/hosts soubor na všech serverech pomocí preferovaného textového editoru a přidejte do souboru následující řádky.

Pamatujte, že úprava souboru /etc/hosts vyžaduje oprávnění sudo.

Formát souboru /etc/hosts konfigurace je IP-address hostname .

Nahraďte níže uvedené hodnoty IP adresami a názvy hostitelů, uložte změny a ukončete editor.

# /etc/hosts file RabbitMQ Servers
172.16.1.20     node01
172.16.1.21     node02
172.16.1.22     node03

Nyní spusťte ping níže, abyste ověřili, že každý název hostitele se překládá na správnou IP adresu serveru. Každý -c 3 volba dělá ping požádá třikrát a poté požadavky ukončí.

# ping node01 node02 and node03
ping -c 3 node01
ping -c 3 node02
ping -c 3 node03

Pokud je vaše konfigurace správná, uvidíte, že každý název hostitele je přeložen na správnou IP adresu serveru, jak je uvedeno níže.

Instalace RabbitMQ na všechny servery

Nyní, když jste nakonfigurovali /etc/hosts soubor na všech serverech, je čas nainstalovat balíčky RabbitMQ na všechny servery (node01, node02 a node03). RabbitMQ můžete nainstalovat z oficiálního úložiště distribuce pro většinu distribucí Linuxu.

V době psaní tohoto článku poskytuje úložiště Debian a Ubuntu nejnovější stabilní verzi RabbitMQ 3.8.9.

1. Spusťte apt příkaz níže k obnovení všech indexů balíčků vašeho systému.

sudo apt update

2. Dále spusťte následující apt install příkaz k instalaci RabbitMQ (rabbitmq-server ) ve vašem systému.

Po dokončení instalace se zobrazí rabbitmq-server služba se automaticky spustí a povolí ve vašem systému.

sudo apt install rabbitmq-server -y

3. Nakonec spusťte následující příkaz pro ověření rabbitmq-server stav služby.

sudo systemctl status rabbitmq-server

Níže můžete vidět, že služba serveru RabbitMQ je aktivní (běžící) a povoleno . V důsledku toho se služby spouštějí automaticky při spuštění/spuštění systému.

Kromě toho můžete také ověřit verzi RabbitMQ ve vašem systému pomocí následujícího příkazu.

sudo rabbitmq-diagnostics server_version

Nainstalovaná verze RabbitMQ je 3.8.9 , jak je uvedeno níže, ale vaše se může lišit.

Nastavení klastru RabbitMQ

Po instalaci RabbitMQ je čas nastavit cluster RabbitMQ. Použití clusteru RabbitMQ zabraňuje ztrátě dat a chybám mezi vašimi aplikacemi. Cluster RabbitMQ poskytuje replikaci a vysokou dostupnost na všech serverech.

RabbitMQ je aplikace napsaná v Erlangu a ve výchozím nastavení poskytuje .erlang.cookie soubor v datovém adresáři RabbitMQ (/var/lib/rabbitmq) .

Chcete-li vytvořit cluster RabbitMQ, nastavte .erlang.cookie soubor na každém serveru se stejným obsahem a musí být vlastněn rabbitmq uživatele a skupiny.

1. Na serveru node01 spusťte následující příkaz pro kontrolu dostupných souborů v datovém adresáři RabbitMQ (/var/lib/rabbitmq ). Příkaz pak vytiskne obsah .erlang.cookie soubor.

# List files and directories on /var/lib/rabbitmq
ls -lah /var/lib/rabbitmq

# Print content of the file .erlang.cookie
cat /var/lib/rabbitmq/.erlang.cookie

Zkopírujte výstup (UXPBSDKHLRMGJSOJVEAN ) do vaší poznámky, protože tento výstup přidáte na servery node02 a node03 v následujících krocích. Pamatujte, že můžete získat jiný výstup .erlang.cookie. než to, co je uvedeno níže.

2. Dále se přesuňte na server node02 a spusťte následující příkaz na stop rabbitmq servis.

sudo systemctl stop rabbitmq-server

3. Upravte /var/lib/rabbitmq/.erlang.cookie soubor ve vašem preferovaném textovém editoru. Nahraďte původní obsah tím, který jste si poznamenali v prvním kroku, uložte změny a ukončete editor.

# content of .erlang.cookie from node01
UXPBSDKHLRMGJSOJVEAN

4. Nyní spusťte níže uvedený příkaz pro spuštění rabbitmq-server servis.

sudo systemctl start rabbitmq-server

5. Přepněte na server node03 a opakujte kroky (dva až čtyři) pro úpravu /var/lib/rabbitmq/.erlang.cookie soubor.

6. Spusťte následující rabbitmqctl příkazy na serverech node02 a node03 k jejich přidání do clusteru RabbitMQ (node01).

# Stop RabbitMQ application
sudo rabbitmqctl stop_app

# Join the RabbitMQ node01
sudo rabbitmqctl join_cluster [email protected]

# Start the RabbitMQ application again
sudo rabbitmqctl start_app

Níže můžete vidět, že server node02 se shlukuje s clusterem RabbitMQ (node01) a totéž platí pro server node03.

7. Nakonec spusťte rabbitmqctl příkaz níže k ověření stavu clusteru RabbitMQ. Můžete to spustit z libovolného serveru (node01, node02 nebo node03).

sudo rabbitmqctl cluster_status

Ve výstupu pod názvem clusteru můžete vidět ([email protected] ) a běžící uzly.

Nastavení administrátorského uživatele pro RabbitMQ

Po nastavení clusteru RabbitMQ vytvoříte nového administrátora pro RabbitMQ a smažete výchozího hosta. Uživatel RabbitMQ admin má oprávnění konfigurovat, číst a zapisovat jakoukoli entitu dostupnou v clusteru RabbitMQ.

1. Přepněte na server node01 a spusťte rabbitmqctl příkaz níže k vytvoření nového uživatele s názvem admin s heslem nastaveným jako AdminPassRabbitMQ . Můžete nastavit své preferované uživatelské jméno a heslo, ale nezapomeňte nastavit silné heslo.

sudo rabbitmqctl add_user admin AdminPassRabbitMQ

2. Dále spusťte následující příkaz pro nastavení (set_user_tags ) nového uživatele (admin ) jako administrator pro cluster RabbitMQ.

sudo rabbitmqctl set_user_tags admin administrator

3. Spusťte níže uvedený příkaz na set_permissions na admin uživatel s následujícím:

  • Povoluje (-p / ) admin pro přístup ke všem hostitelům vhosts v clusteru RabbitMQ.
  • První ".*" – Umožňuje uživateli nakonfigurovat oprávnění pro každou entitu a hostitele vhost.
  • Druhý ".*" – Umožňuje uživateli oprávnění k zápisu do každé entity a hostitelů vhost.
  • Třetí ".*" – Umožňuje uživateli oprávnění ke čtení pro každou entitu a hostitele vhost.
sudo rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"

4. Nyní spusťte následující příkaz pro odstranění (delete_user ) výchozí uživatel (guest ) z clusteru RabbitMQ.

sudo rabbitmqctl delete_user guest

5. Nakonec spusťte níže uvedený příkaz a vypište všechny dostupné uživatele (list_users ) na clusteru RabbitMQ.

sudo rabbitmqctl list_users

Níže vidíte pouze jednoho uživatele (admin) . Můžete také ověřit uživatele z jiných serverů (node02 a node03) a získáte stejný výstup.

Vytvoření virtuálního hostitele a nového administrátora na RabbitMQ

Nastavili jste svůj cluster RabbitMQ a vytvořili jste administrátora na RabbitMQ. Nyní však vytvoříte virtuálního hostitele (vhost) a uživatele na RabbitMQ, aby se vaše aplikace mohla připojit k RabbitMQ.

Základní koncept virtuálního hostitele (vhost) na RabbitMQ je podobný jako na Apache nebo serverových blocích na NGINX. Každý vhost má entity, jako jsou výměny, fronty, vazby, uživatelská oprávnění, ověřování atd.

1. Spusťte rabbitmqctl příkaz níže k vytvoření nového vhost (add_vhost ) s názvem app-qa1 .

sudo rabbitmqctl add_vhost app-qa1

2. Dále spusťte následující příkazy pro vytvoření nového uživatele (add_user ) s názvem alice s heslem AlicePassRabbitMQ a označte uživatele jako administrator . Uživatelské jméno a heslo můžete nastavit, jak chcete.

# create new user alice
sudo rabbitmqctl add_user alice AlicePassRabbitMQ

# set a tag administrator for user alice
sudo rabbitmqctl set_user_tags alice administrator

3. Spusťte níže uvedený příkaz a nastavte oprávnění pro uživatele alice ke správě vhost app-qa1 . Tato oprávnění umožňují uživateli alice pro konfiguraci, čtení a zápis všech entit pod vhost app-qa1 .

# set up permission for user alice
sudo rabbitmqctl set_permissions alice --vhost app-qa1 ".*" ".*" ".*"

4. Nakonec spusťte každý níže uvedený příkaz a zobrazí se seznam dostupných hostitelů vhost (list_vhosts ) v clusteru RabbitMQ a oprávnění (list_user_permissions ) nového administrátora (alice ).

# check available vhosts on RabbitMQ
sudo rabbitmqctl list_vhosts

# check permissions for user alice
sudo rabbitmqctl list_user_permissions alice

Vytváření Exchanges, Queues a Bindings na RabbitMQ

Váš virtuální hostitel a uživatel admin jsou nastaveni, ale jsou to vše, co potřebujete, aby vaše aplikace fungovala? Stále budete muset vytvořit entity, jako jsou výměny, fronty a vazby na RabbitMQ. Tyto entity jsou nezbytné, aby vaše aplikace fungovala s RabbitMQ.

1. Spusťte následující rabbitmqadmin příkaz k vytvoření nové burzy na RabbitMQ s názvem test_exchange pod app-qa1 vhost a uživatel alice . Typ výměn můžete určit pomocí type možnost, což je direct pro toto demo.

# Create new exchange test_exchange
sudo rabbitmqadmin -u alice -p AlicePassRabbitMQ -V app-qa1 declare exchange name=test_exchange type=direct

2. Dále spusťte každý níže uvedený příkaz k vytvoření nových front na RabbitMQ. V této ukázce vytvoříte výchozí classic (test_classic ) a quorum fronta s názvem test_quorum .

# create quorum queue with option queue_type=quorum
sudo rabbitmqadmin -u alice -p AlicePassRabbitMQ -V app-qa1 declare queue name=test_quorum durable=true queue_type=quorum

# create default classic queue
sudo rabbitmqadmin -u alice -p AlicePassRabbitMQ -V app-qa1 declare queue name=test_classic durable=true

3. Spuštěním níže uvedených příkazů vytvořte vazbu pro obě test_classic a test_quorum fronty. Každá vazba má jiné routing_key ale stále běží na stejné burze (test_exchange ).

# create binding for test_quorum
sudo rabbitmqadmin -u alice -p AlicePassRabbitMQ -V app-qa1 declare binding source="test_exchange" destination_type="queue" destination="test_quorum" routing_key="test_routing_key_quorum"

# create binding for test_classic
sudo rabbitmqadmin -u alice -p AlicePassRabbitMQ -V app-qa1 declare binding source="test_exchange" destination_type="queue" destination="test_classic" routing_key="test_routing_key_classic"

4. Nyní spusťte následující příkazy na publish hello, world zprávu na test_exchange . Ujistěte se, že jste nastavili správnou hodnotu routing_key.

# publish message for the test_quorum queue
sudo rabbitmqadmin -u alice -p AlicePassRabbitMQ -V app-qa1 publish exchange=test_exchange routing_key=test_routing_key_quorum payload="hello world, Quorum Queue"

# publish message for the test_classic queue
sudo rabbitmqadmin -u alice -p AlicePassRabbitMQ -V app-qa1 publish exchange=test_exchange routing_key=test_routing_key_classic payload="hello world, Classic Queue"

5. Nakonec spusťte následující příkaz na get hello, world zpráva od test_quorum a test_classic fronty.

# retrieve the message from test_quorum queue
sudo rabbitmqadmin -u alice -p AlicePassRabbitMQ -V app-qa1 get queue=test_quorum

# retrieve the message from test_classic queue
sudo rabbitmqadmin -u alice -p AlicePassRabbitMQ -V app-qa1 get queue=test_classic

Jak je uvedeno níže, budete vědět, že fronty fungují, pokud obdržíte hello, world zprávu z test_quorum a test_classic fronty.

Povolení modulu RabbitMQ Management Plugin

Dosud se vám podařilo pracovat na RabbitMQ prostřednictvím prostředí příkazového řádku. Možná však dáváte přednost GUI pro interakci se servery a clustery RabbitMQ. Pokud ano, budete muset aktivovat plugin pro správu RabbitMQ.

RabbitMQ Management Plugin poskytuje webové uživatelské rozhraní pro správu běžící na výchozím portu 15672 a nástroj pro správu příkazového řádku [rabbitmqadmin]

Spusťte rabbitmq-plugins příkaz níže na všech serverech (node01, node02 a node03), abyste povolili rabbitmq_management zapojit. Tento příkaz automaticky povolí další potřebné pluginy, jako je rabbitmq_management_agent a rabbitmq_web_dispatch .

sudo rabbitmq-plugins enable rabbitmq_management

Níže je podobný výstup, který uvidíte na obrazovce vašeho terminálu.

Nyní otevřete webový prohlížeč a přejděte na IP adresu svého serveru, za kterou následuje port 15672 (http://172.16.1.20:15672/) pro přístup k webovému rozhraní pro správu RabbitMQ. Port 15672 se automaticky otevře, když povolíte plugin pro správu RabbitMQ.

Přihlaste se na přihlašovací stránku uživatelského rozhraní správy RabbitMQ pomocí uživatele alice a heslo AlicePassRabbitMQ .

Na řídicím panelu RabbitMQ uvidíte všechny dostupné uzly v clusteru RabbitMQ.

Níže můžete vidět, že všechny uzly v clusteru RabbitMQ běží bez problémů.

Ověřování vysoké dostupnosti fronty kvora

Již dříve jste ověřili, že uzly v clusteru RabbitMQ běží a fronty fungují, a to je skvělé. Ale co když se jeden z uzlů vypne nebo selže? Ověřte, že fronta test_quorum poskytuje vysokou dostupnost a replikaci mezi servery.

1. Na řídicím panelu RabbitMQ klikněte na Fronty pro přístup k frontám dostupným v clusteru RabbitMQ.

Níže můžete vidět test_classic fronta a test_quorum fronta.

2. Dále klikněte na test_classic fronty, abyste získali podrobné informace.

Jak vidíte níže, test_classic fronta běží na [email protected] bez zrcadel/replikace. Když uzel [email protected] je nefunkční, test_classic fronta nebude dostupná.

3. Přepněte zpět do Fronty ale klikněte na test_quorum tentokrát fronta.

Níže vidíte test_quorum fronta je k dispozici na adrese [email protected] a také poskytuje zrcadla dalším uzlům v clusteru. Toto nastavení zachová test_quorum fronta běží, i když je node01 mimo provoz.

4. Nyní spusťte následující příkaz pro vypnutí/vypnutí node01 server. Se spuštěným serverem node01.

# turnoff node01
sudo poweroff

5. Přesuňte se na server node02 a spusťte níže uvedený příkaz ke kontrole RabbitMQ cluster_status

# checking RabbitMQ cluster status
sudo rabbitmqctl cluster_status

Zobrazí se aktuální Spuštěné uzly v clusteru RabbitMQ jsou node02 a node03 .

6. Dále spusťte následující příkazy, abyste získali zprávu „hello world“ z test_classic fronta. Tento příkaz odešle pět požadavků na test_classic fronty pomocí smyčky Bash.

# setup temporary environment variable CLASSIC
export CLASSIC="sudo rabbitmqadmin -u alice -p AlicePassRabbitMQ -V app-qa1 get queue=test_classic"

# retrieve message from `test_classic` queue 5 times using bash loop
for i in {1..5}; do $CLASSIC; done

Obdržíte zprávu Nenalezeno výstupy, jak je znázorněno níže, protože server node01 je mimo provoz.

7. Nakonec spusťte následující příkazy a načtěte zprávu „ahoj světe“ z test_quorum fronta.

Podobně jako při testování fronty test_classic tento příkaz odešle pět požadavků na test_quorum ve frontě, ale tentokrát dostanete zprávu „ahoj světe“, dokonce i node01 je dole. Proč? test_quorum fronta je automaticky replikována/zrcadlena na servery node02 nebo node03.

# setup temporary environment variable QUORUM
export QUORUM="sudo rabbitmqadmin -u alice -p AlicePassRabbitMQ -V app-qa1 get queue=test_quorum"

# retrieve message from `test_quorum` queue 5 times using bash loop
for i in {1..5}; do $QUORUM; done

Závěr

Cílem tohoto tutoriálu je pomoci vám projít procesem nastavení clusteru RabbitMQ na systémech Debian/Ubuntu Linux. Také jste se naučili základní administraci serveru RabbitMQ a jak vytvářet fronty, které podporují vysokou dostupnost na RabbitMQ.

V tomto okamžiku jste nastavili plně klastr RabbitMQ. Takže co bude dál? Možná se naučit implementovat RabbitMQ do vaší aplikace?


Linux
  1. Jak zakázat Ipv6 na Ubuntu, Linux Mint, Debian

  2. Jak nastavit název vlákna v Linuxu pthreads?

  3. Jak nastavit IP adresu z C v linuxu

  1. Jak nastavit Ubuntu/Debian LAMP Server

  2. Linux – Jak nastavit afinitu procesoru k procesu v Linuxu?

  3. Jak nastavit MySQL Cluster na Ubuntu

  1. Jak zakázat modul na Ubuntu/Debian Linux

  2. Jak nastavit nebo změnit časové pásmo v Linuxu

  3. Jak nastavit preferované síťové rozhraní v linuxu