第14章 ブローカークラスターの設定
クラスターは、グループ化された複数のブローカーインスタンスで設定されます。ブローカークラスターは、メッセージ処理の負荷を複数のブローカーに分散してパフォーマンスを向上します。さらに、ブローカークラスターは、高可用性によりダウンタイムを最小限に抑えることができます。
多くの異なるクラスタートポロジーでブローカーを接続できます。クラスター内では、アクティブな各ブローカーは独自のメッセージを管理し、独自の接続を処理します。
また、クラスター全体でクライアント接続を分散し、メッセージの再分配を行うことで、ブローカーの不足を避けることもできます。
14.1. ブローカークラスターについて
ブローカークラスターを作成する前に、いくつかの重要なクラスタリングの概念を理解する必要があります。
14.1.1. ブローカークラスターがメッセージ負荷のバランスを取る方法
ブローカーがクラスターを形成するとき、AMQ Broker はブローカー間でメッセージの負荷を自動的に分散します。これにより、クラスターが高メッセージスループットを維持できるようになります。
4 つのブローカーの対称クラスターについて考えてみましょう。各ブローカーは OrderQueue
という名前のキューで設定されます。OrderProducer
クライアントは Broker1
に接続し、メッセージを OrderQueue
に送信します。Broker1
は、ラウンドロビン方式でメッセージを他のブローカーに転送します。各ブローカーに接続されている OrderConsumer
クライアントはメッセージを消費します。
図14.1 メッセージの負荷分散
メッセージの負荷分散がない場合、Broker1
に送信されたメッセージは Broker1
に残り、OrderConsumer1
のみがそれらを消費できます。
AMQ Broker はデフォルトでメッセージを自動的に負荷分散し、メッセージの最初のグループを最初のブローカーに分散し、メッセージの 2 番目のグループを 2 番目のブローカーに分散します。ブローカーが開始された順序によって、1 番目のブローカー、2 番目ブローカーなど、順序が決まります。
以下を設定できます。
- 一致するキューを持つブローカーへのメッセージの負荷分散を行うクラスター。
- 一致するキューとアクティブなコンシューマーを持つブローカーへのメッセージの負荷分散を行うクラスター。
- 負荷分散は行わないが、コンシューマーを持つキューへコンシューマーを持たないキューからのメッセージの再分配を実行するクラスター。
- コンシューマーのないキューからコンシューマーを持つキューへのメッセージを自動的に再分散するアドレス。
関連情報
-
メッセージの負荷分散ポリシーは、各ブローカーのクラスター接続の
message-load-balancing
プロパティーで設定されます。詳細は、付録C クラスター接続設定要素 を参照してください。 - メッセージ再分配に関する詳細は、「メッセージ再分配の設定」 を参照してください。
14.1.2. ブローカークラスターが信頼性を向上させる方法
ブローカークラスターは高可用性とフェイルオーバーを可能にします。これにより、スタンドアロンブローカーよりも信頼性が高くなります。高可用性を設定すると、ブローカーが障害イベントに遭遇しても、クライアントアプリケーションがメッセージを送受信できます。
高可用性により、クラスターのブローカーはライブバックアップグループにグループ化されます。ライブバックアップグループは、クライアントのリクエストに対応するライブブローカーと、パッシブに待機してライブブローカーを置き換える 1 つ以上のバックアップブローカーで設定されます。障害が発生した場合、バックアップブローカーはライブバックアップグループのライブブローカーを置き換え、クライアントが再接続して作業を続行します。
14.1.3. クラスターの制限
クラスター環境で AMQ Broker を使用する場合、次の制限が適用されます。
- 一時キュー
- フェイルオーバー中に、クライアントに一時キューを使用するコンシューマーがある場合、これらのキューは自動的に再作成されます。このとき、再作成されたキュー名が元のキュー名と一致しないため、メッセージの再分配が失敗し、メッセージが既存の一時キューに取り残されたままになる可能性があります。Red Hat は、クラスター内で一時キューを使用しないことを推奨します。たとえば、要求/応答パターンを使用するアプリケーションは、JMSReplyTo アドレスに固定キューを使用する必要があります。
14.1.4. ノード ID について
ブローカー ノード ID は、ブローカーインスタンスのジャーナルの初回作成および初期化時にプログラムで生成されるグローバル一意識別子 (GUID) です。ノード ID は server.lock
ファイルに保存されます。ノード ID は、ブローカーがスタンドアロンインスタンスか、クラスターの一部であるかに関わらず、ブローカーインスタンスを一意に識別するために使用されます。ライブバックアップブローカーペアは、同じジャーナルを共有するため、同じノード ID を共有します。
ブローカークラスターでは、ブローカーインスタンス ( ノード ) は相互に接続し、ブリッジおよび内部のストアアンドフォワードキューを作成します。これらの内部キューの名前は、他のブローカーインスタンスのノード ID に基づいています。ブローカーインスタンスは、独自のノード ID のクラスターブロードキャストも監視します。ブローカーは、重複 ID を特定する場合にログに警告メッセージを生成します。
レプリケーション高可用性 (HA) ポリシーを使用している場合、起動するマスターブローカーと、check-for-live-server
が true
に設定されたマスターブローカーは、ノード ID を使用するブローカーを検索します。マスターブローカーが同じノード ID を使用して別のブローカーを見つける場合、それは起動しないか、HA 設定に基づいてフェイルバックを開始します。
ノード ID は 永続性 があるため、ブローカーの再起動後も維持されます。ただし、( ジャーナルを含む ) ブローカーインスタンスを削除すると、ノード ID も永続的に削除されます。
関連情報
- レプリケーション HA ポリシーの設定に関する詳細は、Configuring replication high availability を参照してください。
14.1.5. 一般的なブローカークラスタートポロジー
ブローカーに接続し、対称 または チェーン クラスタートポロジーのいずれかを形成できます。実装するトポロジーは、環境およびメッセージングの要件によって異なります。
対称クラスター
対称クラスターでは、すべてのブローカーが他のすべてのブローカーに接続されます。つまり、すべてのブローカーは他のすべてのブローカーから複数のホップを削除できません。
図14.2 対称クラスター
対称クラスターの各ブローカーは、クラスター内の他のすべてのブローカーに存在するすべてのキューと、これらのキューでリッスンしているコンシューマーを認識します。そのため、対称クラスターは、メッセージをチェーンクラスターよりも最適に負荷分散および再分散できます。
対称クラスターはチェーンクラスターよりも設定が簡単ですが、ネットワーク制限が原因でブローカーが直接接続されないようにする環境では使用が困難になる可能性があります。
チェーンクラスター
チェーンクラスターでは、クラスターの各ブローカーはクラスター内のすべてのブローカーに直接接続されません。代わりに、ブローカーはチェーンの最後ごとにブローカーと、チェーンの前のブローカーおよび次のブローカーに接続するすべてのブローカーでチェーンを形成します。
図14.3 チェーンクラスター
チェーンクラスターは対称クラスターよりも設定が難しくなりますが、ブローカーが別個のネットワーク上にあり、直接接続できない場合に役立ちます。チェーンクラスターを使用すると、中間ブローカーは 2 つのブローカーを間接的に接続し、2 つのブローカーが直接接続されていない場合でも、メッセージ間のフローが可能になります。
14.1.6. ブローカー検出メソッド
検出は、クラスターのブローカーが接続の詳細を相互に伝播するメカニズムです。AMQ Broker は、動的検出 と 静的検出 の両方をサポートします。
動的検出
クラスターの各ブローカーは、UDP マルチキャストまたは JGroups のいずれかを使用して接続設定を他のメンバーにブロードキャストします。この方法では、各ブローカーは以下を使用します。
- クラスター接続に関する情報をクラスターの他の潜在的なメンバーにプッシュする ブロードキャストグループ。
- クラスターの他のブローカーに関するクラスター接続情報を受信し、保存する ディスカバリーグループ。
静的検出
ネットワークで UDP または JGroups を使用できない場合や、クラスターの各メンバーを手動で指定する場合は、静的検出を使用できます。この方法では、2 番目のブローカーに接続し、その接続の詳細を送信することで、ブローカーを結合します。次に、2 番目のブローカーはそれらの詳細をクラスターの他のブローカーに伝播します。
14.1.7. クラスターのサイジングに関する考慮事項
ブローカークラスターを作成する前に、メッセージングのスループット、トポロジー、および高可用性の要件を考慮してください。これらの要因は、クラスターに追加するブローカーの数に影響します。
クラスターの作成後に、ブローカーを追加および削除してサイズを調整できます。メッセージを失うことなく、ブローカーを追加および削除できます。
メッセージングスループット
クラスターには、必要なメッセージングスループットを提供するのに十分なブローカーが含まれる必要があります。クラスターの他のブローカーにより、スループットが高くなります。ただし、大規模なクラスターは管理が複雑になる可能性があります。
トポロジー
対称クラスターまたはチェーンクラスターのいずれかを作成できます。選択したトポロジーのタイプは、必要なブローカーの数に影響します。
詳細は、「一般的なブローカークラスタートポロジー」 を参照してください。
高可用性
高可用性 (HA) が必要な場合は、クラスターを作成する前に HA ポリシーを選択することを検討してください。各マスターブローカーは少なくとも 1 つのスレーブブローカーを持つ必要があるため、HA ポリシーはクラスターのサイズに影響します。
詳細は、「高可用性の実装」 を参照してください。