GNU/Linux >> Linux の 問題 >  >> Ubuntu

Ubuntu20.04でRabbitMQクラスターをセットアップする方法

RabbitMQは、Erlangプログラミング言語で記述された無料のオープンソースのマルチプロトコルメッセージングブローカーソフトウェアです。メッセージブローカーは、アプリケーションのメッセージを格納するために使用されます。アプリケーションが別のアプリケーションにデータを送信すると、アプリはメッセージをメッセージブローカーに公開します。 RabbitMQは複数のメッセージングプロトコルをサポートしており、分散構成で簡単に展開できます。メッセージブローカーは、さまざまなWebアプリケーションの仲介役として機能し、Webアプリケーションの負荷と配信時間を削減するために使用されます。

このチュートリアルでは、Ubuntu20.04サーバーに3ノードのRabbitMQクラスターをセットアップします。

前提条件
  • Ubuntu20.04を実行している3台のサーバー。
  • ルートパスワードは各サーバーで構成されます。
はじめに

開始する前に、システムパッケージを最新バージョンに更新する必要があります。各ノードで次のコマンドを実行して、それらを更新できます。

 apt-get update -y 

すべてのパッケージが更新されたら、各ノードで/ etc/hostsファイルを設定する必要があります。そのため、ホスト名で相互に通信できます。

次のコマンドを使用して、各ノードの/ etc/hostsファイルを編集します。

 nano / etc / hosts 

次の行を追加します:

 192.168.0.10 node1192.168.0.11 node2192.168.0.12 node3 

終了したら、ファイルを保存して閉じます。次に、次のステップに進むことができます。

RabbitMQサーバーをインストールする

次に、各ノードにRabbitMQサーバーパッケージをインストールする必要があります。次のコマンドを実行するだけでインストールできます:

 apt-get installrabbitmq-server-y 

インストールしたら、次のコマンドを使用してRabbitMQサービスを開始し、システムの再起動時に開始できるようにします。

 systemctl startrabbitmq-server 
systemctl enablerabbitmq-server

次のコマンドを使用して、RabbitMQサービスのステータスを確認することもできます。

 systemctl statusrabbitmq-server 

次の出力が得られるはずです:

? rabbitmq-server.service-RabbitMQメッセージングサーバーロード済み:ロード済み(/lib/systemd/system/rabbitmq-server.service;有効;ベンダープリセット:有効)アクティブ:アクティブ(実行中)2020年7月21日火曜日以降06:25: 07 UTC; 19分前メインPID:2565(beam.smp)ステータス:「初期化済み」タスク:87(制限:2353)メモリ:83.5M CGroup:/system.slice/rabbitmq-server.service ?? 2551 / bin / sh / usr / sbin / javbitmq-server ?? 2565 /usr/lib/erlang/erts-10.6.4/bin/beam.smp -W w -A 64 -MBas ageffcbf -MHas ageffcbf -MBlmbcs 512 -MHlmbcs 512 -MMmcs 30 -P 1> ?? 2828 erl_child_setup 65536 ?? 2921 inet_gethost 4 ?? 2922 inet_gethost 4Jul 21 06:24:58 node1 systemd [1]:RabbitMQメッセージングサーバーを起動しています... Jul 21 06:25:07 node1 systemd [1]:rabbitmq- server.service:私たちの子ではない監視プロセス2565。> Jul 21 06:25:07 node1 systemd [1]:RabbitMQメッセージングサーバーを開始したときに気付かない可能性があります。

この時点で、RabbitMQサーバーがインストールされ、各ノードで実行されています。これで、次のステップに進むことができます。

RabbitMQ管理プラグインを有効にする

RabbitMQ管理プラグインは、Webブラウザーを介してRabbitMQノードとクラスターを監視および管理するために使用できるHTTPベースのAPIを提供します。デフォルトでは、TCPポート15672で実行されています。

各ノードで次のコマンドを実行することにより、RabbitMQ管理プラグインを有効にできます。

rabbitmq-プラグインはrabbitmq_managementを有効にします

次の出力が表示されます。

ノード[emailprotected]でプラグインを有効にする:rabbitmq_management次のプラグインが構成されています:rabbitmq_managementrabbitmq_management_agentrabbitmq_web_dispatchプラグイン構成を[emailprotected]に適用しています次のプラグインが有効になっています:rabbitmq_managementrabbitmq_management_agentrabbitmq_web_dispatchstarted3プラグイン 

次に、RabbitMQサービスを再起動して、変更を適用します。

 systemctl restartrabbitmq-server 

次のコマンドを使用して、リスニングポートを確認できます。

 netstat -tunelp | grep 15672 

次の出力が表示されます。

 tcp 0 0 0.0.0.0:15672 0.0.0.0:* LISTEN 109 23155 2565 / beam.smp 
RabbitMQクラスターのセットアップ

デフォルトでは、/var/lib/rabbitmq/.erlang.cookieファイルは各ノードで同じです。 RabbitMQクラスターをセットアップするには、/ var / lib / javbitmq/.erlang.cookieファイルをnode1から他のノードにコピーする必要があります。

node1で、次のコマンドを実行して/var/lib/rabbitmq/.erlang.cookieファイルを他のノードにコピーします。

 scp /var/lib/rabbitmq/.erlang.cookie [メール保護]:/ var / lib / rabitmq / 
scp /var/lib/rabbitmq/.erlang.cookie [メール保護]:/ var / lib / javbitmq /

次に、クラスターnode1に参加するためにnode1とnode2をセットアップする必要があります。

まず、RabbitMQサービスを再起動し、node2とnode3の両方で次のコマンドを使用してアプリを停止します。

 systemctlrestartrabbitmq-サーバー
rabbitmqctlstop_app

node2で、次のコマンドを実行して、node1のクラスターに参加します。

 rabitmqctljoin_cluster[メール保護]

次の出力が表示されます。

クラスタリングノード[メール保護]と[メール保護]

node2で、次のコマンドを使用してアプリを起動します。

 rabitmqctl start_app 

次の出力が表示されます。

開始ノード[メール保護]...3つのプラグインで完了。

node3で、次のコマンドを実行して、node1のクラスターに参加します。

 rabitmqctljoin_cluster[メール保護]

次の出力が表示されます。

クラスタリングノード[メール保護]と[メール保護]

node3で、次のコマンドを使用してアプリを起動します。

 rabitmqctl start_app 

次の出力が表示されます。

開始ノード[メール保護]...3つのプラグインで完了。

正常に完了したら、node1で次のコマンドを実行してクラスターのステータスを確認します。

 rabitmqctl cluster_status 

次の出力が表示されます。

ノードのクラスターステータス[メール保護]...Basicsクラスター名:[メール保護]ディスクノード[メール保護][メール保護][メール保護]実行中のノード[メール保護][メール保護][メール保護]バージョン[メール保護]:Erlang22.2.7のRabbitMQ3.8.2 [メール保護]:Erlang22.2.7のRabbitMQ3.8.2 [メール保護]:Erlang22.2.7のRabbitMQ3.8.2アラーム(なし)ネットワークパーティション(なし) ListenersNode:[メール保護]、インターフェース:[::]、ポート:25672、プロトコル:クラスタリング、目的:ノード間およびCLIツールcommunicationNode:[メール保護]、インターフェース:[::]、ポート:5672、プロトコル: amqp、目的:AMQP0-9-1およびAMQP1.0Node:[メール保護]、インターフェース:[::]、ポート:15672、プロトコル:http、目的:HTTP APINode:[メール保護]、インターフェース:[:: ]、ポート:25672、プロトコル:クラスタリング、目的:ノード間およびCLIツールcommunicationNode:[メール保護]、インターフェース:[::]、ポート:5672、プロトコル:amqp、目的:AMQP0-9-1およびAMQP 1.0ノード:[メール保護]、インターフェース:[::]、ポート: 15672、プロトコル:http、目的:HTTP APINode:[メール保護]、インターフェース:[::]、ポート:25672、プロトコル:クラスタリング、目的:ノード間およびCLIツールcommunicationNode:[メール保護]、インターフェース:[: :]、ポート:5672、プロトコル:amqp、目的:AMQP0-9-1およびAMQP1.0ノード:[メール保護]、インターフェース:[::]、ポート:15672、プロトコル:http、目的:HTTP APIFeature flagsFlag: drop_unroutable_metric、状態:disabledFlag:empty_basic_get_metric、状態:disabledFlag:implicit_default_bindings、状態:enabledFlag:quorum_queue、状態:enabledFlag:virtual_host_metadata、状態:enabled 
セットアップ管理者ユーザー

次に、RabbitMQサーバーの新しい管理者ユーザーを作成し、デフォルトの「ゲスト」ユーザーを削除する必要があります。

node1で次のコマンドを実行すると、「hitesh」という名前の新しいユーザーとパスワード「password」を作成できます。

 rabitmqctl add_user hitesh password 

次の出力が表示されます。

ユーザー「hitesh」を追加しています...

次に、次のコマンドを使用して、hiteshユーザーを管理者として構成します。

 rabitmqctlset_user_tagshitesh管理者

次の出力が表示されます。

ユーザー「hitesh」のタグを[管理者]に設定しています...

次に、hiteshユーザーに、すべてのvhostを変更、書き込み、および読み取る権限を付与します。

 rabitmqctl set_permissions -p /hitesh"。*""。*""。*"

次の出力が表示されます。

仮想ホスト「/」でユーザー「hitesh」の権限を設定しています...

次に、次のコマンドを使用してゲストユーザーを削除します。

 rabitmqctl delete_user guest 

次のコマンドを取得する必要があります:

ユーザー「guest」の削除...

次のコマンドを使用して、すべてのユーザーを一覧表示できるようになりました。

 rabitmqctl list_users 

次の出力が得られるはずです:

ユーザーの一覧表示...usertagshitesh[管理者]

node1で作成したユーザーは、クラスター上のすべてのノードに自動的に複製されます。

RabbitMQセットアップキューミラーリング

デフォルトでは、キューの内容は単一のノードにあります。したがって、キューのミラーリングとすべてのクラスタノードへのレプリケーションのために「hapolicy」クラスタを設定する必要があります。

これを行うには、「ha-all」という名前のhaポリシーを作成します。これにより、RabbitMQクラスター上のすべてのキューがクラスター上のすべてのノードにミラーリングされます。

 rabitmqctl set_policy ha-all"。*"'{"ha-mode": "all"}' 

出力:

パターン「。*」のポリシー「ha-all」を「{"ha-mode": "all"}」に設定し、vhost「/」の優先度は「0」にします... 

次に、すべてのキュー名が「two」で始まる「ha-two」という名前のhaポリシーを作成します。クラスタ上の2つのノードにミラーリングされます。

 rabitmqctl set_policy ha-two "^two\。" '{"ha-mode": "exactly"、 "ha-params":2、 "ha-sync-mode": "automatic"}' 

出力:

パターン「^two\」のポリシー「ha-two」を設定します。 to "{" ha-mode ":"exactly "、" ha-params ":2、" ha-sync-mode ":"automatic "}" with priority "0" for vhost "/" ... 
>

次に、「ha-nodes」という名前の高可用性ポリシーを作成します。このポリシーには、名前が「nodes」で始まるすべてのキューが含まれます。クラスタ内の2つの特定のノード「node2」と「node3」にミラーリングします。

 rabitmqctl set_policy ha-nodes "^nodes\。" '{"ha-mode": "nodes"、 "ha-params":["[email protected]"、 "[email protected]"]}' 

出力:

パターン「^nodes\」のポリシー「ha-nodes」を設定します。 to "{" ha-mode ":" nodes "、" ha-params ":[" [email protected] "、" [email protected] "]}"、優先度 "0" for vhost "/" ... 

次のコマンドを実行して、構成済みのすべてのポリシーを一覧表示できるようになりました。

 rabitmqctl list_policies; 

次の出力が表示されます。

 vhost "/"...vhost名パターンのリストポリシーapply-todefinitionpriority/ha-all。*all{"ha-mode": "all"} 0 / ha-two ^two\。 all {"ha-mode": "exactly"、 "ha-params":2、 "ha-sync-mode": "automatic"} 0 / ha-nodes ^nodes\。 all {"ha-mode": "nodes"、 "ha-params":["[email protected]"、 "[email protected]"]} 0 

終了したら、次のステップに進むことができます。

アクセスRabbitMQクラスター

これで、ポート 15672 を使用してWebブラウザの任意のノードのIPアドレスを入力することにより、RabbitMQWebインターフェイスにアクセスできます。 http://192.168.0.10:15672/のように。 RabbitMQログインページが表示されます:

管理者のユーザー名とパスワードを入力し、ログインをクリックします ボタン。次の画面にRabbitMQダッシュボードが表示されます。

次に、[管理者]をクリックします 'タブメニューをクリックし、'ポリシーをクリックします 'メニュー。次の画面に、作成したすべてのRabbitMQhaポリシーが表示されます。

結論

おめでとう!これで、Ubuntu20.04サーバーに3ノードのRabbitMQクラスターが正常にセットアップされました。これで、クラスタは、トポロジやセキュリティ情報などの構成情報をすべてのノードで共有できるようになりました。


Ubuntu
  1. Ubuntu18.04にLogstashをインストールする方法

  2. Ubuntu20.04でWireGuardVPNを設定する方法

  3. Ubuntu に Git をインストールしてセットアップするにはどうすればよいですか?

  1. Ubuntu 20.04/18.04にRedisをインストールする方法

  2. Ubuntu – Ubuntuで静的IPを設定する方法は?

  3. UbuntuでMySQLクラスターを設定する方法

  1. Ubuntu18.04でOpenVPNサーバーをセットアップする方法

  2. Ubuntu18.04でDNSネームサーバーを設定する方法

  3. Ubuntu18.04でWireGuardVPNを設定する方法