Message QueueTM ではブローカクラスタの使用がサポートされています。ブローカクラスタでは、ブローカのグループの連動により、メッセージ配信サービスがクライアントに提供されます。メッセージサービスでは、クラスタにより、複数のブローカ間でクライアント接続を分散し、メッセージトラフィックのボリュームで処理を拡張できます。クラスタとその動作方法の概要については、『Message Queue 技術の概要』を参照してください。
この章では、ブローカクラスタを管理する方法、ブローカをブローカクラスタに接続する方法、ブローカクラスタを設定する方法について説明します。この章は、次の節から構成されています。
クラスタを定義するには、メンバーブローカごとにクラスタ設定プロパティーを指定します。このプロパティーは、クラスタのブローカごとに個別に設定できますが、このプロパティーを中央のクラスタ設定ファイルに集めて、すべてのブローカに参照させる方が一般的に便利です。このようにすると、設定の不一致を防止し、クラスタのすべてのブローカで同一の一貫した設定情報を共有できます。
クラスタ設定プロパティーについては、表 14–9 で詳しく説明します。クラスタ設定プロパティーには次のものが含まれます。
imq.cluster.brokerlist では、クラスタに属しているすべてのブローカのホスト名とポート番号を指定します。
imq.cluster.masterbroker では、どのブローカをマスターブローカにするかを必要に応じて指定します。マスターブローカでは状態変更を追跡します。
imq.cluster.hostname では、cluster 接続サービスのホスト名か IP アドレスを指定します。複数のホストを使用できる場合、この設定は便利です。たとえば、複数のネットワークインタフェースカードが 1 台のコンピュータに含まれる場合に便利です。
imq.cluster.transport では、tcp や ssl など、cluster cluster 接続サービスで使用するトランスポートプロトコルを指定します。
hostname プロパティーと port プロパティーはブローカごとに個別に設定できますが、brokerlist、masterbroker、url、transport は、クラスタのすべてのブローカで同一の値にする必要があります。
次の節では、クラスタのブローカごとに個別に、またはクラスタ設定ファイルを使用して中央で、ブローカのクラスタ設定プロパティーを設定する方法について説明します。
ブローカのクラスタ設定プロパティーは、インスタンス設定ファイルで、またはブローカの起動時にコマンド行で設定できます。たとえば、host1 のポート 9876、host2 のポート 5000、ctrlhost のデフォルトポート 7676 のブローカから構成されるクラスタを作成するには、3 つすべてのブローカのインスタンス設定ファイルに次のプロパティーを含めます。
imq.cluster.brokerlist=host1:9876,host2:5000,ctrlhost
この手法では、クラスタ設定を変更する必要がある場合、クラスタのブローカごとにインスタンス設定ファイルを更新する必要があることに注意してください。
一貫性を保って保守しやすくするため、ブローカごとに共有クラスタ設定プロパティーを設定する代わりに、すべての共有クラスタ設定プロパティーを 1 つのクラスタ設定ファイルに集めることをお勧めします。この手法では、それぞれのブローカのインスタンス設定ファイルで imq.cluster.url プロパティーを設定し、クラスタ設定ファイルの場所を指定する必要があります。たとえば、次のように指定します。
imq.cluster.url=file:/home/cluster.properties
クラスタ設定ファイルでは、接続するブローカのリスト (imq.cluster.brokerlist)、cluster 接続サービスに使用するトランスポートプロトコル (imq.cluster.transport )、任意でマスターブローカのアドレス (imq.cluster.masterbroker) など、クラスタに属しているすべてのブローカの共有設定プロパティーを定義します。次のコードでは、前の例と同じクラスタが定義され、ctrlhost で動作するブローカがマスターブローカになります。
imq.cluster.brokerlist=host1:9876,host2:5000,ctrlhost imq.cluster.masterbroker=ctrlhost
この節では、ブローカのセットを接続してクラスタを形成する方法、既存クラスタに新しいブローカを追加する方法、クラスタからブローカを削除する方法について説明します。
一般的にブローカを接続してクラスタを形成する方法は、2 つあります。コマンド行から行う方法 (-cluster オプションを使用) と、クラスタ設定ファイルで imq.cluster.brokerlist プロパティーを設定する方法です。どちらの方法を使用しても、起動するそれぞれのブローカは、5 秒ごとにその他のブローカとの接続を試み、設定されている場合はマスターブローカが起動すると接続されます。マスターブローカの前にクラスタのブローカを起動すると、マスターブローカが起動するまで、そのブローカは保留状態になり、クライアント接続を拒否します。マスターブローカが起動すると、保留状態のブローカは自動的に完全に機能するようになります。
ブローカクラスタをコマンド行から設定するには、それぞれのブローカの起動時に、imqbrokerd コマンドの -cluster オプションを使用して、クラスタのブローカの完全なリストを指定します。たとえば次のコマンドでは、新しいブローカが起動し、host1 のデフォルトポート 7676、host2 のポート 5000、デフォルトホスト localhost のポート 9876 で動作しているブローカに接続されます。
imqbrokerd -cluster host1,host2:5000,:9876
本稼動システムに適した別の方法として、クラスタ設定ファイルを作成し、imq.cluster.brokerlist プロパティーを使用して、接続するブローカのリストを指定する方法があります。クラスタのそれぞれのブローカでは、独自の imq.cluster.url プロパティーを設定し、このクラスタ設定ファイルの場所を指定する必要があります。
いずれの方法であれ、クラスタ内のブローカで、ネットワーク ループバック IP アドレス (127.0.0.1) に解決するアドレスが指定されていないことを確認する必要があります。このアドレスで設定されたブローカは、クラスタ内のほかのブローカに接続できなくなります。
一部の Linux インストーラでは、localhost エントリが、ネットワークループバックアドレスに自動的に設定されます。このようなシステムでは、クラスタのすべてのブローカでアドレスを適切にするように、システムの IP アドレスを変更する必要があります。
クラスタに加わるすべての Linux システムでは、クラスタ設定の一環として /etc/hosts ファイルをチェックしてください。システムで固定 IP アドレスを使用している場合は、/etc/hosts ファイルを編集し、localhost の正しいアドレスを指定します。アドレスがドメインネームサービス (DNS) に登録されている場合は、/etc/nsswitch.conf ファイルを編集してエントリの順序を変更し、システムが DNS 検索を実行してから、ローカルの hosts ファイルを参照するように設定します。/etc/nsswitch.conf ファイルの行は次のようになります。
hosts:dns files
安全で暗号化されたメッセージ配信がクラスタのブローカ間で必要である場合は、SSL ベースのトランスポートプロトコルを使用するように cluster 接続サービスを設定します。「メッセージの暗号化」で説明するように、クラスタのブローカごとに、SSL ベースの接続サービスを設定します。次にそれぞれのブローカの imq.cluster.transport プロパティーを、クラスタ設定ファイルでまとめて、またはブローカごとに個別に、ssl に設定します。
新しいブローカをクラスタに追加する手順は、クラスタでクラスタ設定ファイルを使用しているかどうかによって決まります。
クラスタ内の任意のブローカに次のコマンドを実行します。
imqcmd reload cls |
それぞれのブローカでクラスタ設定が再読み込みされ、クラスタに属しているブローカのすべての一貫した情報が最新になります。このコマンドをクラスタ内の各ブローカに対して実行する必要はありません。いずれかのブローカに対して実行すれば、すべてのブローカでクラスタ設定が再ロードされます。
(任意指定) ブローカの config.properties ファイルで imq.cluster.url プロパティーの値をクラスタ設定ファイルの場所に設定します。
新しいブローカを起動します。
「クラスタへのブローカの追加」を実行しなかった場合は、imqbrokerd コマンド行で -D オプションを使用し、imq.cluster.url の値を設定します。
config.properties ファイルを編集するか、imqbrokerd コマンド行で -D オプションを使用し、次のプロパティー値を設定します。
クラスタからブローカを削除する方法は、最初にコマンド行でクラスタを作成したか、中央のクラスタ設定ファイルによって作成したかによって決まります。
コマンド行から imqbrokerd コマンドを使用してブローカをクラスタに接続した場合は、それぞれのブローカを停止してから、コマンド行に新しいクラスタメンバーセットを指定してブローカを再起動する必要があります。その手順は次のとおりです。
imqcmd コマンドを使用し、クラスタのそれぞれのブローカを停止します。
imqbrokerd コマンドの -cluster オプションを使用し、クラスタに残すブローカのみを指定してそれらのブローカを再起動します。
たとえば、次のコマンドを使用して、A、B、 C というそれぞれのブローカを起動し、その 3 つのブローカから構成されるクラスタを最初に作成したとします。
imqbrokerd -cluster A,B, C |
ブローカ A をクラスタから削除するには、次のコマンドを使用してブローカ B と C を再起動します。
imqbrokerd -cluster B,C |
中央のクラスタ設定ファイルの imq.cluster.brokerlist プロパティーでメンバーブローカを指定してクラスタを最初に作成した場合、ブローカを停止してメンバーのうち 1 つのブローカを削除する必要はありません。単純に設定ファイルを編集して削除したいブローカを除外し、残りのクラスタメンバーにクラスタ設定を再読み込みさせます。除外するブローカは、同じクラスタ設定ファイルの場所を指定しないように再設定します。手順は次のとおりです。
クラスタ設定ファイルを編集し、imq.cluster.brokerlist プロパティーに指定しているリストから除外対象ブローカを削除します。
クラスタ内の残りのブローカに次のコマンドを実行します。
imqcmd reload cls |
ブローカがクラスタ設定を再読み込みします。
クラスタから削除するブローカを停止します。
そのブローカの config.properties ファイルを編集し、imq.cluster.url プロパティーを削除するか、別の値を指定します。
クラスタには、1 つのマスターブローカを任意に含めることができます。マスターブローカでは設定変更レコードが維持され、クラスタの持続的な状態の変更が追跡されます。マスターブローカは、クラスタ設定ファイル、またはそれぞれのブローカのインスタンス設定ファイルで、imq.cluster.masterbroker 設定プロパティーによって識別されます。
設定変更レコードには、永続サブスクリプション、および管理者が作成した物理的送信先など、クラスタに関連する持続エンティティーの変更に関する情報が含まれます。クラスタのすべてのブローカは、起動中にマスターブローカを参照し、この持続エンティティーに関する情報を更新します。このような同期は、マスターブローカの障害によって不可能になります。詳細は、「マスターブローカを使用できない場合」を参照してください。
設定変更レコードには重要な情報が含まれるので、定期的にバックアップして、障害が発生した場合に復元できるようにすることが重要です。バックアップから復元しても、バックアップ以降に発生したクラスタの持続的な状態の変更は失われますが、頻繁にバックアップすれば、情報喪失の可能性を最小限に抑えることができます。バックアップ操作と復元操作には、時間の経過とともに増大していく可能性がある設定変更レコード内の変更履歴を、圧縮して最適化するという肯定的な効果もあります。
imqbrokerd コマンドの -backup オプションを使用し、バックアップファイルの名前を指定します。たとえば、次のように指定します。
imqbrokerd -backup mybackuplog
クラスタにあるすべてのブローカをシャットダウンします。
次のコマンドを使用し、マスターブローカの設定変更レコードをバックアップファイルから復元します。
imqbrokerd -restore mybackuplog |
新しい名前やポート番号をマスターブローカに割り当てる場合は、クラスタ設定ファイルの imq.cluster.brokerlist プロパティーと imq.cluster.masterbroker プロパティーをそれぞれ更新します。
クラスタにあるすべてのブローカを再起動します。
クラスタのすべてのブローカでは、持続的な操作を実行するためにマスターブローカが必要になるので、マスターブローカを使用できない場合、クラスタのすべてのブローカでは次の imqcmd サブコマンドがエラーになります。
create dst
destroy dst
update dst
destroy dur
自動作成の物理的送信先および一時的送信先は影響されません。
マスターブローカがない場合、永続サブスクライバを作成したり、永続サブスクリプションから登録解除しようとするすべてのクライアントアプリケーションではエラーが発生します。ただしクライアントは、既存の永続サブスクリプションを指定したり、既存の永続サブスクリプションとやり取りしたりすることはできます。