ブローカーの Amazon MQ ネットワーク - Amazon MQ

ブローカーの Amazon MQ ネットワーク

Amazon MQ は ActiveMQ のブローカーのネットワーク機能をサポートしています。

ブローカーのネットワークは、同時にアクティブな複数の単一インスタンスブローカー、またはアクティブ/スタンバイブローカーで構成されています。ブローカーのネットワークは、高可用性やスケーラビリティなどのアプリケーションのニーズに応じて、さまざまなトポロジ (コンセントレータハブアンドスポークツリー、またはメッシュなど) で設定できます。例えば、ブローカーのハブアンドスポークネットワークは耐障害性を高めることができ、1 つのブローカーが到達不能な場合にはメッセージを保存します。コンセントレータトポロジを使用するブローカーのネットワークは、多数の着信メッセージの負荷をより良く処理するために、着信メッセージを受け入れる多数のブローカーからメッセージを収集し、それらをより中核的なブローカーに集中させます。

チュートリアルおよび詳細な設定情報については、以下を参照してください。

ブローカーのネットワークを使用すると、以下のような利点があります。

  • ブローカーのネットワークを作成すると、ブローカーインスタンスを追加することで、総スループットと最大プロデューサーおよびコンシューマー接続数を増やすことができます。

  • プロデューサーとコンシューマーが複数のアクティブなブローカーインスタンスを認識できるようにすることで、可用性を向上させることができます。これにより、現在接続しているインスタンスが使用できなくなった場合に、新しいインスタンスに再接続できます。

  • プロデューサーとコンシューマーはブローカーネットワーク内の別のノードにすぐに再接続できるため、また、スタンバイブローカーインスタンスが昇格するのを待つ必要がないため、ブローカーのネットワーク内でのクライアントの再接続は、高可用性のためのアクティブ/スタンバイブローカーよりも高速です。

ブローカーのネットワークの仕組み

Amazon MQ は、ActiveMQ のブローカーのネットワーク機能をさまざまな方法でサポートします。まず、ネイティブ ActiveMQ と同じように、各ブローカーの設定内のパラメータを編集してブローカーのネットワークを作成できます。次に、Amazon MQ には、AWS CloudFormation を使用してブローカーのネットワークの作成を自動化するサンプル設計図があります。Amazon MQ コンソールからこれらのサンプル設計図を直接デプロイする、または関連する AWS CloudFormation テンプレートを編集して独自のトポロジと設定を作成することが可能です。

ブローカーのネットワークは、ネットワークコネクターを使用してブローカー同士を接続することによって確立されます。接続されると、これらのブローカーはメッセージ転送を提供します。例えば、Broker1Broker2 へのネットワークコネクターを確立する場合、ブローカーにキューまたはトピックのコンシューマーが存在すると、Broker1 のメッセージは Broker2 に転送されます。ネットワークコネクターが duplex として設定されている場合も、メッセージは Broker2 から Broker1 に転送されます。ネットワークコネクターはブローカーの設定で設定されます。「設定」を参照してください。例えば、ブローカー設定の networkConnector エントリの例は以下のようになります。

<networkConnectors> <networkConnector name="connector_1_to_2" userName="myCommonUser" duplex="true" uri="static:(ssl://b-1234a5b6-78cd-901e-2fgh-3i45j6k178l9-1.mq.us-east-2.amazonaws.com:61617)"/> </networkConnectors>

ブローカーのネットワークは、メッセージがあるブローカーインスタンスから別のブローカーインスタンスに確実に流れ、対応するコンシューマーを持つブローカーインスタンスにのみメッセージを転送するようにします。ネットワーク内でブローカーインスタンスが互いに隣接しているという利点のために、ActiveMQ は、ネットワークに接続したり切断したりするプロデューサーとコンシューマーに関するメッセージをアドバイザリトピックに送信します。ブローカーインスタンスが特定の送信先から消費するプロデューサーに関する情報を受信すると、ブローカーインスタンスはメッセージの転送を開始します。詳細については、ActiveMQ ドキュメントの「アドバイザリトピック」を参照してください。

ブローカーのネットワークはどのように認証情報を処理しますか?

ブローカー A がネットワーク内でブローカー B に接続するには、ブローカー A が他のプロデューサーまたはコンシューマーと同様に有効な認証情報を使用する必要があります。ブローカー A の <networkConnector> 設定でパスワードを提供する代わりに、ブローカー B の別のユーザーと同じ値を持つブローカー A のユーザーを最初に作成する必要があります (これらは同じユーザー名を共有する別の、一意のユーザーです)。<networkConnector> 設定で userName 属性を指定すると、Amazon MQ は実行時にパスワードを自動的に追加します。

重要

password には <networkConnector> 属性を指定しないでください。パスワードが Amazon MQ コンソールに表示されてしまうため、プレーンテキストのパスワードをブローカー設定ファイルに保存することは推奨されません。詳細については、「Configure Network Connectors for Your Broker」を参照してください。

ブローカーは、同じ VPC またはピア接続された VPC に属している必要があります。詳細については、前提条件チュートリアルの「Creating and Configuring a Network of Brokers」を参照してください。

サンプル設計図

Amazon MQ では、ブローカーのネットワークの使用を開始するためのサンプル設計図が提供されています。これらのサンプルの設計図は、ブローカーのネットワーク展開、および AWS CloudFormation を使用したすべての関連リソースを作成します。利用可能な 2 つのサンプル設計図は次のとおりです。

  1. シングルインスタンスブローカーのメッシュネットワーク

  2. アクティブ/スタンバイブローカーのメッシュネットワーク


                サンプルデプロイ

[ブローカーの作成] ページから、サンプルの設計図を 1 つ選択し、[次へ] を選択します。リソースが作成されたら、Amazon MQ コンソールで生成されたブローカーとその設定を確認します。

ブローカーを作成し、ブローカー設定でさまざまな networkConnector 要素を設定することで、さまざまなトポロジでブローカーのネットワークを作成できます。ブローカーのネットワーク設定の詳細については、ActiveMQ ドキュメントの「ブローカーのネットワーク」を参照してください。

ブローカーのネットワークのトポロジ

ブローカーをデプロイし、その設定で networkConnector エントリを設定することで、さまざまなネットワークトポロジを使用してブローカーのネットワークを構築できます。ネットワークコネクターは、接続されているブローカー間でオンデマンドメッセージ転送を提供します。接続は、メッセージがブローカー間で双方向に転送される二重、または転送が一方のブローカーから他方のブローカーにのみ伝達される二重ではないように構成できます。たとえば、Broker1Broker2 の間に二重接続があり、コンシューマーが存在する場合は、メッセージはお互いに転送されます。


                二重コネクター

二重ネットワークコネクターでは、メッセージは各ブローカーから他のブローカーに転送されます。これらはオンデマンドで転送されます。Broker1 のメッセージに対するコンシューマーが Broker2 にある場合は、メッセージが転送されます。同様に、Broker2 のメッセージに対するコンシューマーが Broker1 にある場合も、メッセージが転送されます。

非二重接続の場合、メッセージは一方のブローカーから他方のブローカーにのみ転送されます。この例では、Broker1 のメッセージに対するコンシューマーが Broker2 にある場合に、メッセージが転送されます。しかし、メッセージは Broker2 から Broker1 に転送されません。


                1 方向コネクター

二重と非二重の両方のネットワークコネクターを使用して、任意の数のネットワークトポロジでブローカーのネットワークを構築できます。

注記

各ネットワークトポロジの例で、networkConnector 要素は、接続先ブローカーのエンドポイントを参照しています。uri 属性のブローカーエンドポイントエントリをブローカーのエンドポイントに置き換えます。「Listing brokers and viewing broker details」を参照してください。

メッシュトポロジ

メッシュトポロジは、すべて互いに接続されている複数のブローカーを提供します。この簡単な例では、3 つのシングルインスタンスブローカーを接続していますが、より多くのブローカーをメッシュとして設定できます。


                    メッシュトポロジ

このトポロジ、およびブローカーのアクティブ/スタンバイペアのメッシュが含まれるトポロジは、Amazon MQ コンソールのサンプル設計図を使用して作成できます。これらのサンプル設計図デプロイを作成して、機能しているブローカーのネットワークを確認し、それらがどのように設定されているかを確認できます。

Broker2Broker3 の両方に二重接続を確立し、Broker2Broker3 の間に単一の二重接続を確立するネットワークコネクターを Broker1 に追加することで、このように 3 ブローカーメッシュネットワークを設定できます。

Broker1 のネットワークコネクター:

<networkConnectors> <networkConnector name="connector_1_to_2" userName="myCommonUser" duplex="true" uri="static:(ssl://b-9876l5k4-32ji-109h-8gfe-7d65c4b132a1-2.mq.us-east-2.amazonaws.com:61617)"/> <networkConnector name="connector_1_to_3" userName="myCommonUser" duplex="true" uri="static:(ssl://b-743c885d-2244-4c95-af67-a85017ff234e-3.mq.us-east-2.amazonaws.com:61617)"/> </networkConnectors>

Broker2 のネットワークコネクター:

<networkConnectors> <networkConnector name="connector_2_to_3" userName="myCommonUser" duplex="true" uri="static:(ssl://b-743c885d-2244-4c95-af67-a85017ff234e-3.mq.us-east-2.amazonaws.com:61617)"/> </networkConnectors>

Broker1Broker2 の設定に上記のコネクターを追加することで、これら 3 つのブローカー間に、オンデマンドですべてのブローカー間でメッセージを転送するメッシュを作成できます。詳細については、「Amazon MQ Broker Configuration Parameters」を参照してください。

ハブアンドスポークトポロジ

ハブアンドスポークトポロジでは、スポークのブローカーが中断してもメッセージは保存されます。メッセージは一斉に転送され、中心的な Broker1 だけがネットワークのオペレーションに不可欠です。


                    ハブアンドスポークトポロジ

この例にあるブローカーのハブアンドスポークネットワークを設定するには、Broker1 の設定にあるスポーク上の各ブローカーに networkConnector を追加できます。

<networkConnectors> <networkConnector name="connector_hub_and_spoke_2" userName="myCommonUser" duplex="true" uri="static:(ssl://b-1234a5b6-78cd-901e-2fgh-3i45j6k178l9-1.mq.us-east-2.amazonaws.com:61617)"/> <networkConnector name="connector_hub_and_spoke_3" userName="myCommonUser" duplex="true" uri="static:(ssl://b-9876l5k4-32ji-109h-8gfe-7d65c4b132a1-2.mq.us-east-2.amazonaws.com:61617)"/> <networkConnector name="connector_hub_and_spoke_4" userName="myCommonUser" duplex="true" uri="static:(ssl://b-743c885d-2244-4c95-af67-a85017ff234e-3.mq.us-east-2.amazonaws.com:61617)"/> <networkConnector name="connector_hub_and_spoke_5" userName="myCommonUser" duplex="true" uri="static:(ssl://b-62a7fb31-d51c-466a-a873-905cd660b553-4.mq.us-east-2.amazonaws.com:61617)"/> </networkConnectors>

コンセントレータトポロジ

このトポロジ例では、一番下の 3 つのブローカーが多数の接続を処理でき、それらのメッセージは Broker1Broker2 に集中しています。他の各ブローカーは、より中央のブローカーへの非二重接続を持っています。このトポロジの容量を拡張するために、メッセージを受信してそれらのメッセージを Broker1Broker2 に集中させる追加のブローカーを追加することができます。


                    コンセントレータトポロジ

このトポロジを設定するには、一番下の各ブローカーに、メッセージを集中させている各ブローカーへのネットワークコネクターを含めます。

Broker3 のネットワークコネクター:

<networkConnectors> <networkConnector name="3_to_1" userName="myCommonUser" duplex="false" uri="static:(ssl://b-1234a5b6-78cd-901e-2fgh-3i45j6k178l9-1.mq.us-east-2.amazonaws.com:61617)"/> <networkConnector name="3_to_2" userName="myCommonUser" duplex="false" uri="static:(ssl://b-9876l5k4-32ji-109h-8gfe-7d65c4b132a1-2.mq.us-east-2.amazonaws.com:61617)"/> </networkConnectors>

Broker4 のネットワークコネクター:

<networkConnectors> <networkConnector name="4_to_1" userName="myCommonUser" duplex="false" uri="static:(ssl://b-1234a5b6-78cd-901e-2fgh-3i45j6k178l9-1.mq.us-east-2.amazonaws.com:61617)"/> <networkConnector name="4_to_2" userName="myCommonUser" duplex="false" uri="static:(ssl://b-1234a5b6-78cd-901e-2fgh-3i45j6k178l9-1.mq.us-east-2.amazonaws.com:61617)"/> </networkConnectors>

Broker5 のネットワークコネクター:

<networkConnectors> <networkConnector name="5_to_1" userName="myCommonUser" duplex="false" uri="static:(ssl://b-1234a5b6-78cd-901e-2fgh-3i45j6k178l9-1.mq.us-east-2.amazonaws.com:61617)"/> <networkConnector name="5_to_2" userName="myCommonUser" duplex="false" uri="static:(ssl://b-9876l5k4-32ji-109h-8gfe-7d65c4b132a1-2.mq.us-east-2.amazonaws.com:61617)"/> </networkConnectors>

クロスリージョン

AWS リージョンにまたがるブローカーのネットワークを設定するには、それらのリージョンにブローカーをデプロイし、それらのブローカーのエンドポイントにネットワークコネクターを設定します。


                クロスリージョンメッシュトポロジ

この例のようなブローカーのネットワークを設定するには、これらのブローカーのワイヤレベルのエンドポイントを参照する Broker1Broker4 の設定に networkConnectors エントリを追加できます。

Broker1 のネットワークコネクター:

<networkConnectors> <networkConnector name="1_to_2" userName="myCommonUser" duplex="true" uri="static:(ssl://b-9876l5k4-32ji-109h-8gfe-7d65c4b132a1-2.mq.us-east-2.amazonaws.com:61617)"/> <networkConnector name="1_to_3" userName="myCommonUser" duplex="true" uri="static:(ssl://b-743c885d-2244-4c95-af67-a85017ff234e-3.mq.us-east-2.amazonaws.com:61617)"/> <networkConnector name="1_to_4" userName="myCommonUser" duplex="true" uri="static:(ssl://b-62a7fb31-d51c-466a-a873-905cd660b553-4.mq.us-east-2.amazonaws.com:61617)"/> </networkConnectors>

Broker2 のネットワークコネクター:

<networkConnectors> <networkConnector name="2_to_3" userName="myCommonUser" duplex="true" uri="static:(ssl://b-743c885d-2244-4c95-af67-a85017ff234e-3.mq.us-east-2.amazonaws.com:61617)"/> </networkConnectors>

Broker4 のネットワークコネクター:

<networkConnectors> <networkConnector name="4_to_3" userName="myCommonUser" duplex="true" uri="static:(ssl://b-743c885d-2244-4c95-af67-a85017ff234e-3.mq.us-east-2.amazonaws.com:61617)"/> <networkConnector name="4_to_2" userName="myCommonUser" duplex="true" uri="static:(ssl://b-9876l5k4-32ji-109h-8gfe-7d65c4b132a1-2.mq.us-east-2.amazonaws.com:61617)"/> </networkConnectors>

トランスポートコネクタを使用した動的なフェイルオーバー

networkConnector 要素の設定に加えて、ブローカーの transportConnector オプションを設定して動的なフェイルオーバーを有効にし、ネットワークからブローカーが追加または削除されたときに接続を再分散することができます。

<transportConnectors> <transportConnector name="openwire" updateClusterClients="true" rebalanceClusterClients="true" updateClusterClientsOnRemove="true"/> </transportConnectors>

この例では、updateClusterClients および rebalanceClusterClients の両方が true に設定されます。この場合、クライアントにはネットワークのブローカーのリストが提供され、新しいブローカーが参加した場合は再分散がリクエストされます。

利用可能なオプション:

  • updateClusterClients: ブローカートポロジのネットワークの変化に関する情報をクライアントに渡します。

  • rebalanceClusterClients: 新しいブローカーがブローカーのネットワークに追加されたときに、クライアントはブローカー間で再分散されます。

  • updateClusterClientsOnRemove: ブローカーがブローカーのネットワークを離れるときに、トポロジ情報を使用してクライアントを更新します。

updateClusterClients を true に設定すると、クライアントはブローカーのネットワークの 1 つのブローカーに接続するように設定されます。

failover:(ssl://b-1234a5b6-78cd-901e-2fgh-3i45j6k178l9-1.mq.us-east-2.amazonaws.com:61617)

新しいブローカーが接続すると、そのブローカーはネットワーク内のすべてのブローカーの URI のリストを受け取ります。ブローカーへの接続に失敗した場合、接続時に、提供されたいずれかのブローカーに動的に切り替えることができます。

フェイルオーバーの詳細については、Active MQ ドキュメントの「Broker-side Options for Failover」を参照してください。