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.smpRabbitMQクラスターのセットアップ デフォルトでは、/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_appnode2で、次のコマンドを実行して、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