30.3. データのレプリケーション


レプリケーションを使用すると、ライブとバックアップサーバーのペアが同じデータディレクトリーを共有せず、すべてのデータ同期がネットワーク経由で行われます。したがって、ライブサーバーが受信したすべての (永続的な) データがバックアップに複製されます。

ライブサーバーが正常にシャットダウンされると、バックアップサーバーがアクティブになり、クライアントはバックアップにフェイルオーバーします。この動作は事前に決定し、データのレプリケーション使用時に設定することはできません。

バックアップサーバーは、最初にライブサーバーのすべての既存データを同期してから置き換える必要があります。したがって、共有ストレージとは異なり、複製バックアップは、起動直後に完全に機能する訳ではありません。同期にかかる時間は、同期されるデータ量とネットワーク速度によって異なります。また、バックアップが起動すると、クライアントは initial-replication-sync-timeout の間ブロックされることに注意してください。このタイムアウトが過ぎると、同期が完了しない場合でもクライアントのブロックが解除されます。

フェイルオーバーが成功すると、バックアップのジャーナルは、ライブサーバーのデータよりも新しいデータの保持を開始します。フェイルバックを実行し、再起動後にライブサーバーになるように元のライブサーバーを設定できます。フェイルバックは、ライブサーバーがオンラインに戻る前に、バックアップサーバーとライブサーバーの間でデータを同期します。

両方のサーバーがシャットダウンしている場合、管理者はどのサーバーのジャーナルに最新データがあるかを判断する必要があります。バックアップジャーナルに最新のデータがある場合は、そのジャーナルをライブサーバーにコピーします。最新データがない場合は、再度アクティブになるたびに、バックアップはライブサーバーから古いジャーナルデータを複製し、独自のジャーナルデータを削除します。ライブサーバーのデータが最新の場合、アクションは不要で、サーバーを正常に起動できます。

重要

レイテンシーが高く、データセンター間のネットワークが信頼できない可能性があるため、データセンター間の高可用性に複製ジャーナルの設定と使用は推奨されず、サポートされていません。

ライブとバックアップの複製ペアは、クラスターの一部である必要があります。cluster-connection 設定要素は、バックアップサーバーがライブ一致を見つける方法を定義します。

レプリケーションには、ネットワーク分離のリスクを軽減するには、少なくとも 3 つのライブ/バックアップペアが必要ですが、このリスクを排除することはできません。3 つ以上のライブ/バックアップのペアを使用する場合、クラスターはクォーラム voting を使用して 2 つのライブブローカーを使用しないようにすることができます。

cluster-connection を設定する場合は、以下の詳細を確認してください。

  • ライブサーバーとバックアップサーバーはいずれも同じクラスター内に含まれる必要があります。単純なライブ/バックアップ複製ペアでも、クラスター設定が必要になることに注意してください。
  • クラスターのユーザーとパスワードは、ペアの各サーバーで一致している必要があります。

<master> および <slave> 要素の両方に group-name 属性を設定して、ライブ/バックアップサーバーのペアを指定 し ます。バックアップサーバーは、同じ group-name を共有するライブサーバーにのみ接続します。

group-name を使用する例として、ライブサーバーと 3 つのバックアップサーバーがあるとします。ライブサーバーはそれぞれ独自のバックアップとペアする必要があるため、以下のグループ名を割り当てます。

  • live1 および backup1 は、pair1group-name を使用します。
  • live2 および backup2 は、pair2group-name を使用します。
  • live3 および backup3 は、pair3group-name を使用します。

上記の例では、サーバー backup1 は同じ group-namepair1 でライブサーバーを検索します。この場合は、サーバーは live1 です。

共有ストアの場合と同様に、ライブサーバーが停止またはクラッシュすると、複製するペアのバックアップがアクティブになり、そのロールを引き継ぎます。特に、ライブサーバーへの接続が失われると、ペアのバックアップがアクティブになります。これは、一時的なネットワークの問題が原因でも発生することがあるため、問題となる可能性があります。この問題に対処するために、ペアのバックアップは、クラスター内の他のサーバーにまだ接続できるかどうかを判断しようとします。半分を超えるサーバーに接続できる場合、アクティブになります。ライブサーバーのほか、クラスター内の半分を超える他のサーバーとの通信が失われた場合、ペアのバックアップは待機し、ライブサーバーとの再接続を試みます。これにより、バックアップサーバーとライブサーバーの両方がメッセージを処理し、一方がそれに気付かないスプリットブレイン状況のリスクが軽減されます。

重要

これは、ライブサーバーが見つからず、ジャーナルのファイルロックが解放された場合にバックアップがアクティブになり、クライアント要求の処理を開始する共有ストアバックアップとの重要な違いです。また、レプリケーションでは、バックアップサーバーは、保持している可能性のあるデータが最新であるかどうかがわからないため、自動的にアクティブ化することを決定できないことに注意してください。保持しているデータを使用して複製バックアップサーバーをアクティブにするには、管理者はスレーブをマスターに変更することで、設定を変更してライブサーバーにする必要があります。

30.3.1. データのレプリケーションの設定

以下の 2 つの例は、my-cluster という名前のクラスターと group1 という名前のバックアップグループに存在するライブサーバーとバックアップサーバーの両方の基本設定を示しています。

以下の手順では、管理 CLI を使用して my-cluster という名前のクラスターと group1 という名前のバックアップグループに存在するライブサーバーとバックアップサーバーの両方の基本設定を提供します。

注記

以下の例は、standalone-full-ha 設定プロファイルを使用して JBoss EAP を実行していることを前提とします。

管理 CLI コマンドを使用して、データレプリケーションにライブサーバーを設定する

  1. ha-policy をライブサーバーに追加します

    /subsystem=messaging-activemq/server=default/ha-policy=replication-master:add(check-for-live-server=true,cluster-name=my-cluster,group-name=group1)
    Copy to Clipboard

    check-for-live-server 属性は、指定された ID を持つ他のサーバーがクラスター内にないことを確認するようにライブサーバーに指示します。JBoss EAP 7.0 では、この属性のデフォルト値は false でした。JBoss EAP 7.1 以上では、デフォルト値は true です。

  2. ha-policy をバックアップサーバーに追加します

    /subsystem=messaging-activemq/server=default/ha-policy=replication-slave:add(cluster-name=my-cluster,group-name=group1)
    Copy to Clipboard
  3. 共有された cluster-connection が存在することを確認します。

    ライブサーバーとバックアップサーバーの間の適切な通信には cluster-connection が必要です。以下の管理 CLI コマンドを使用して、同じ cluster-connection がライブサーバーとバックアップサーバーの両方に設定されていることを確認します。この例では、standalone-full-ha 設定プロファイルにあるデフォルトの cluster-connection を使用しています。ほとんどの場合、これで十分なはずです。クラスター接続の設定方法の詳細は、クラスター接続の設定 を参照してください。

    以下の管理 CLI コマンドを使用して、ライブおよびバックアップサーバーの両方で同じ cluster-connection を使用していることを確認します。

    /subsystem=messaging-activemq/server=default/cluster-connection=my-cluster:read-resource
    Copy to Clipboard

    cluster-connection が存在する場合、出力は現在の設定を提供します。存在しない場合は、エラーメッセージが表示されます。

すべての設定属性の詳細は、すべてのレプリケーション設定 を参照してください。

30.3.2. すべてのレプリケーション設定

管理 CLI を使用して、追加された後、ポリシーに設定を追加できます。これを実行するコマンドは、以下の基本構文に従います。

/subsystem=messaging-activemq/server=default/ha-policy=POLICY:write-attribute(name=ATTRIBUTE,value=VALUE)
Copy to Clipboard

たとえば、restart-backup 属性の値を true に設定するには、以下のコマンドを使用します。

/subsystem=messaging-activemq/server=default/ha-policy=replication-slave:write-attribute(name=restart-backup,value=true)
Copy to Clipboard

以下の表は、replication-master ノードと replication-slave 設定要素の HA 設定属性を示しています。

表30.1 replication-master の属性
属性説明

check-for-live-server

true に設定して、起動時に同じサーバー ID を使用して別のサーバーのクラスターをチェックするようにこのサーバーに指示します。JBoss EAP 7.0 のデフォルト値は false です。JBoss EAP 7.1 以降のデフォルト値は true です。

cluster-name

レプリケーションに使用されるクラスターの名前。

group-name

設定されている場合、バックアップサーバーは、group-name が一致するライブサーバーとのみペアになります。

initial-replication-sync-timeout

開始レプリケーションが同期されるまでの待機時間 (ミリ秒単位)。デフォルトは 30000 です。

synchronized-with-backup

ライブサーバーとレプリケーションサーバーのジャーナルが同期されているかどうかを示します。

表30.2 replication-slave の属性
属性説明

allow-failback

別のサーバーがこのサーバーを引き継ぐ要求を送信したときに、このサーバーが自動的に停止するかどうか。通常のユースケースは、再起動または障害復旧後に、ライブサーバーがアクティブなプロセスの再開を要求する場合です。allow-failbacktrue に設定されたバックアップサーバーは、クラスターに再参加してプロセスの再開を要求すると、ライブサーバーに移行します。デフォルトは true です。

cluster-name

レプリケーションに使用されるクラスターの名前。

group-name

設定されている場合、バックアップサーバーは、group-name が一致するライブサーバーとのみペアになります。

initial-replication-sync-timeout

開始レプリケーションが同期されるまでの待機時間 (ミリ秒単位)。デフォルトは 30000 です。

max-saved-replicated-journal-size

起動時にファイルを移動した後に、レプリケートされたバックアップサーバーが再起動できる回数を指定します。最大値に達した後、サーバーはフェイルバックすると永久に停止します。デフォルトは 2 です。

restart-backup

true に設定して、フェイルバックが原因で停止したら再起動するようにこのバックアップサーバーに指示します。デフォルトは true です。

synchronized-with-live

レプリケーションサーバーのジャーナルがライブサーバーと同期されているかどうか (ライブサーバーを安全にシャットダウンできるかどうか) を示します。

30.3.3. クラスター接続タイムアウトの防止

ライブとバックアップのペアはそれぞれ cluster-connection を使用して通信します。cluster-connectioncall-timeout 属性は、クラスターの別のサーバーへの呼び出し後にサーバーが応答を待機する時間を設定します。call-timeout のデフォルト値は 30 秒で、ほとんどの場合、これで十分です。ただし、バックアップサーバーが、ライブサーバーから送信されるレプリケーションパケットを処理できない状況があります。これは、たとえば、ディスク操作が遅いため、または journal-min-files の値が大きいために、ジャーナルファイルの最初の事前作成に時間がかかりすぎる場合に発生することがあります。このようなタイムアウトが発生すると、ログに次のような行が表示されます。

AMQ222207: The backup server is not responding promptly introducing latency beyond the limit. Replication server being disconnected now.
Copy to Clipboard
警告

上記のような行がログに表示された場合は、レプリケーションのプロセスが停止していることを意味します。レプリケーションを再度開始するには、バックアップサーバーを再起動する必要があります。

クラスター接続のタイムアウトを防ぐには、以下のオプションを考慮してください。

30.3.4. 古いジャーナルディレクトリーの削除

バックアップサーバーは、ライブサーバーとの同期を開始すると、ジャーナルを新しい場所に移動します。デフォルトでは、ジャーナルディレクトリーは EAP_HOME/standalonedata/activemq ディレクトリーに置かれます。ドメインの場合、各サーバーは EAP_HOME/domain/servers の下に独自の serverX/data/activemq ディレクトリーを持っています。ディレクトリーの名前は、bindingsjournallargemessagespaging です。これらのディレクトリーの詳細は、永続性の設定ページングの設定 を参照してください。

移動すると、新しいディレクトリーの名前が oldreplica.X に変更されます。X は数字の接尾辞です。新しいフェイルオーバーにより別の同期が開始されると、moved ディレクトリーの接尾辞が 1 増えます。たとえば、最初の同期では、ジャーナルディレクトリーは oldreplica.1 に移動され、2 回目は oldreplica.2、といったように移動されます。元のディレクトリーは、ライブサーバーから同期したデータを保存します。

デフォルトでは、バックアップサーバーは、フェイルオーバーとフェイルバックの 2 つの発生を管理するように設定されています。その後、クリーンアッププロセスがトリガーされ、oldreplica.X ディレクトリーが削除されます。バックアップサーバーの max-saved-replicated-journal-size 属性を使用して、クリーンアッププロセスをトリガーするフェイルオーバーの発生回数を変更できます。

注記

ライブサーバーには、max-saved-replicated-journal-size2 に設定されます。この値は変更できません

30.3.5. 専用ライブサーバーとバックアップサーバーの更新

ライブサーバーとバックアップサーバーが専用のトポロジーにデプロイされ、そこで各サーバーが JBoss EAP の独自のインスタンスで実行されている場合は、以下の手順に従ってクラスターのスムーズな更新と再起動を行ってください。

  1. バックアップサーバーを正常にシャットダウンします。
  2. ライブサーバーを正常にシャットダウンします。
  3. ライブサーバーとバックアップサーバーの設定を更新します。
  4. ライブサーバーを起動します。
  5. バックアップサーバーを起動します。

30.3.6. データのレプリケーションの制限: スプリットブレイン処理

スプリットブレイン状態は、ライブサーバーとそのバックアップの両方が同時にアクティブなときに発生します。両方のサーバーがクライアントおよびプロセスメッセージを処理し、一方はそれに気付きません。この場合、ライブサーバーとバックアップサーバーの間でメッセージのレプリケーションは行われなくなります。2 つのサーバー間でネットワーク障害が発生すると、スプリット状況が発生する可能性があります。

たとえば、ライブサーバーとネットワークルーター間の接続が切断されると、バックアップサーバーはライブサーバーへの接続を失います。ただし、バックアップはクラスター内の半分以上のサーバーに引き続き接続できるため、アクティブになります。ライブ/バックアップのペアが 1 つのみで、バックアップサーバーがライブサーバーへの接続を失った場合にも、バックアップがアクティブになることに注意してください。両方のサーバーがクラスター内でアクティブな場合、2 つの望ましくない状況が発生する可能性があります。

  1. リモートクライアントはバックアップサーバーにフェイルオーバーしますが、MDB などのローカルクライアントはライブサーバーを使用します。両方のノードでのジャーナルが完全に別になるため、スプリットブレイン処理が生じます。
  2. ライブサーバーへの接続の切断は、リモートクライアントがバックアップサーバーにフェイルオーバーした後に修正されます。古いクライアントは引き続きバックアップを使用し続け、新しいクライアントはライブサーバーに接続するので、これもスプリットブレインの状況が生じます。

お客様は、ライブサーバーとバックアップサーバーの各ペア間に信頼できるネットワークを実装して、データのレプリケーション使用時のスプリットブレイン処理のリスクを軽減する必要があります。たとえば、複製したネットワークインターフェイスカードや、その他のネットワーク冗長性を使用します。

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat