手動によるクラスターの作成および管理

クラスターを作成および管理する方法は 2 つあります。

  • Runtime Manager を使用する

    設定手順は、​「クラスター」​を参照してください。

  • 手動で設定ファイルを使用する

クラスターの要件と制限事項

  • クラスター管理ツールを混在させないでください。

    手動で行ったクラスター設定は Anypoint Runtime Manager とは同期されないため、プラットフォームで変更を行うと、クラスター設定ファイルが上書きされます。この状況を回避するには、手動での設定または Anypoint Runtime Manager を使用した設定のどちらかの方法のみでクラスターの作成と管理を行ってください。

  • クラスター内のすべてのノードは、次の同じバージョンを使用する必要があります。

    • Mule Runtime Engine

      4.3.0-20210322 などの累積パッチリリースを使用している場合は、すべての Mule インスタンスの累積パッチバージョンが同じである必要があります。

    • Runtime Manager エージェントのバージョン

    • Java

手動でクラスターを作成する

設定ファイルを使用して手動でクラスターを作成する手順は、次のとおりです。

  1. ノードが実行されていないことと、Mule Runtime サーバーが停止していることを確認します。

  2. ノードの ​$MULE_HOME/.mule​ ディレクトリ内に ​mule-cluster.properties​ という名前のファイルを作成します。

  3. パラメーター = 値のペア (1 行に 1 つ) を使用してファイルを編集します。以下の例を参照してください。

    注意​: mule.clusterId​ と ​mule.clusterNodeId​ は、プロパティファイルに存在している必要があります。

    ...
    mule.cluster.nodes=192.168.10.21,192.168.10.22,192.168.10.23
    mule.cluster.multicastenabled=false
    mule.clusterId=<Cluster_ID>
    mule.clusterNodeId=<Cluster_Node_ID>
    ...
  4. クラスターに含めるすべての Mule サーバーでこの手順を繰り返します。

  5. ノードの Mule サーバーを開始します。

使用可能なパラメーターの完全なリストについては、​[Cluster Configuration Parameters]​を参照してください。

手動でクラスターを管理する

クラスターの手動管理は、手動で作成されたクラスターでのみ可能です。

クラスターノードの設定を手動で変更する手順は、次のとおりです。

  1. ノードの Mule サーバーを停止します。

  2. 必要に応じてノードの ​mule-cluster.properties​ を編集し、ファイルを保存します。

  3. ノードの Mule サーバーを再起動します。

設定ファイルで適用するオプションがすべてのクラスターノードで有効であることを確認しておかないと、クラスター設定が壊れてクラスターが無効化される場合があります。

クォーラム管理

手動で設定したクラスター​を管理する場合、クラスターが稼働するのに必要なマシンの最小クォーラムを設定できるようになりました。

ネットワークをパーティション分割する場合、デフォルトでクラスターを使用できます。ただし、最小クォーラムサイズを設定すると、最小しきい値を満たしていない更新を拒否するようにクラスターを設定できます。
これにより、一貫性が向上し、予期せずにノード (クラスター内の Mule Runtime) が失われた場合にクラスターを保護できます。

通常の状況では、クラスター内のノードが停止しても、データを保存するのに十分なメモリがありますが、使用可能なノードが少なくなるため要求の処理に使用できるスレッド数が減少し、クラスター内のパーティションスレッドがすぐに不足する可能性があります。そのため、次のことが発生する場合があります。

  • クライアントの要求を処理するスレッドがなくなり、クライアントが置き去りになる。

  • 応答できない要求が多すぎて残りのクラスターメンバーで処理しきれなくなり、停止していると想定されてクラスターから除外されます。

メンバーが失われた場合にクラスターの残りのメンバーを保護するには、ノードの同時更新を停止する最小クォーラムサイズを設定します。これにより、クラスター内のアクティブなノードの数が設定値を下回ったとき、QuorumException がスローされます。

クラスターのクォーラムサイズを設定する場合には QuorumExceptions をキャッチして、メールの送信、プロセスの停止、ログの実行、再試行戦略の実行などを実行するようにしてください。

クォーラムを有効にするには、​mule.cluster.quorumsize​ プロパティをクラスター設定ファイル ​{MULE_HOME}/.mule/mule-cluster.properties​ に配置して、稼働状態を維持するためのクラスターの最小ノード数を定義します。

クォーラム機能は、オブジェクトストアを使用するコンポーネントでのみ有効です。

オブジェクトストアの永続性

クラスターオブジェクトストアの永続性を維持するには、中央 JDBC ストアをセットアップしてください。そうしないと、オブジェクトストア設定で永続性設定が有効になっていても、すべてのクラスターノードをシャットダウンした場合にオブジェクトストアのコンテンツが失われます。

Mule Runtime Engine をオンプレミスで使用する場合は、すべてのクラスターノードからアクセスできる中央システムに JDBC データを永続的に保存できます。

以下のリレーショナルデータベースシステムがサポートされています。

  • MySQL 5.5+

  • PostgreSQL 9

  • Microsoft SQL Server 2014

  • Microsoft SQL Server 2019

  • Microsoft SQL Server 2022

オブジェクトストアの永続性を有効にするには、データベースを作成し、​{MULE_HOME}/.mule/mule-cluster.properties​ ファイルでその設定値を定義します。

  1. mule.cluster.jdbcstoreurl​: データベースに接続するための JDBC URL

  2. mule.cluster.jdbcstoreusername​: データベースのユーザー名

  3. mule.cluster.jdbcstorepassword​: データベースのユーザーパスワード

  4. mule.cluster.jdbcstoredriver​: JDBC ドライバーのクラス名

  5. mule.cluster.jdbcstorequerystrategy​: SQL 言語

    このパラメーターで有効な設定値については、​クラスター設定パラメーター​を参照してください。

この機能により、保持するオブジェクトストアごとにテーブルが作成されるため、データベースのテーブルは自動的に作成されます。
オブジェクトストアごとに 2 つのテーブルが作成されます。

  • データを保存するテーブル

  • パーティションを保存するテーブル。

オブジェクトストアデータベースの推奨事項

  • JDBC ストアでのみ使用される専用データベース/スキーマを作成することをお勧めします。

  • データベースのユーザー名は、次の権限が必要です。

    • データベース (​DDL​) でのテーブル用のオブジェクト ​CREATE​ および ​DROP​ の作成。

    • 作成するオブジェクト (​DML​)、​INSERT​、​UPDATE​、​DELETE​、および ​SELECT​ のアクセスと管理。

  • データストレージは、すべてのノードからアクセスできる中央 DB でホストする必要があることを常に念頭に置いてください。クラスターごとに複数のデータベースを使用しないでください。
    これらの値の設定方法についての詳細は、​永続性のクラスター設定リファレンス​を参照してください。

  • 一部のリレーショナルデータベースにはテーブル名の長さに関する特定の制約があります。​mule.cluster.jdbcstoretableNametransformerstrategy​ プロパティを使用して長いテーブル名を短い値に変換します。
    このプロパティの設定方法についての詳細は、​テーブル名トランスフォーマー​セクションを参照してください。

  • 永続的なオブジェクトストアは、​ComboPooledDataSource​ Java クラスに基づいたデータベース接続プールを使用します。Mule Runtime Engine は、接続プールの動作の明示的な値を設定しません。標準設定では、各プロパティのデフォルト値を使用します。
    たとえば、​maxIdleTime​ のデフォルト値は 0 です。これは、アイドル接続の期限が切れず、プールから削除されないことを意味します。アイドル接続は、アイドル状態でデータベースに接続されたままになります。
    接続プールの動作を設定するには、次のいずれかのオプションを使用して目的のパラメーター値をランタイムに渡します。

    • Mule の起動時にコマンドラインで複数のパラメーターを渡す。

      $ $MULE_HOME/bin/mule start \
      -M-Dc3p0.maxIdleTime=<value> \
      -M-Dc3p0.maxIdleTimeExcessConnections=<value>

      <value>​ を目的の値 (ミリ秒) に置き換えます。

    • $MULE_HOME/conf/wrapper.conf​ ファイルに複数行を追加する。

      wrapper.java.additional.<n>=-Dc3p0.maxIdleTime=<value>
      wrapper.java.additional.<n>=-Dc3p0.maxIdleTimeExcessConnections=<value>

      <n>​ を ​wrapper.conf​ ファイルの次に大きい順次値に置き換えます。

      ComboPooledDataSource​ Java クラスのプール設定についての詳細は、 この記事​を参照してください。

監視

JMX テクノロジー​を使用して、クラスターメンバーでスローされるイベントを監視できます。

JMX 監視オプションは、デフォルトで無効になっています。有効にするには、​mule.cluster.jmxenabled​ プロパティを ​{MULE_HOME}/.mule/mule-cluster.properties​ 設定ファイルに追加します。

JMX を有効にすると、パフォーマンスのオーバーヘッドが発生する可能性があります (基盤となる構造で各ノードの統計を取得するためのリスナーが追加される場合)。

テーブル名トランスフォーマー

mule.cluster.jdbcstoretableNametransformerstrategy​ プロパティを使用して、テーブル名を変更するためのカスタムトランスフォーマーを定義できます。

たとえば、​mule-cluster.properties​ ファイルに次のプロパティを設定すると、Mule は MD5 とプレフィックスを使用してテーブル名をハッシュし、テーブルを Mule テーブルとして識別します。

mule.cluster.jdbcstoretableNametransformerstrategy=com.mulesoft.mule.runtime.module.cluster.api.persistence.query.MD5TableNameTransformerStrategy

テーブル名をハッシュすることで確実に長さの制約が守られます。

com.mulesoft.mule.runtime.module.cluster.api.persistence.query.TableNameTransformerStrategy​ インターフェースを実装してカスタムトランスフォーマー戦略を作成してから、​mule.cluster.jdbcstoretableNametransformerstrategy​ プロパティにカスタムトランスフォーマー戦略を設定することもできます。

メンバーシップリスナー

メンバーシップリスナーを使用すると、次のイベントが発生するたびに通知を取得できます。

  1. 新しいメンバーがクラスターに追加される

  2. 既存のメンバーがクラスターから離脱する

これらのいずれかのイベントがトリガーされると、メンバーシップリスナーは、参加または離脱したメンバーのアドレスを出力します。

クラスター設定パラメーター

次の表に、​mule-cluster.properties​ ファイルのパラメーターを示します。

プロパティ名 説明 必須

mule.clusterId

クラスターの一意の識別子。任意の英数字文字列になります。

はい

mule.clusterNodeId

クラスター内のノードの一意の ID。1 ~クラスター内のノード数の間の整数になります。

はい

mule.clusterSize

クラスターに属するノードの数。

はい

mule.cluster.networkinterfaces

Hazelcast で使用されるインターフェースのカンマ区切りリスト。以下のようにワイルドカードがサポートされています。

192.168.1.*,192.168.100.25

いいえ

mule.cluster.nodes

クラスターに属するノード。​<host:port>​ の形式になります (例: 172.16.9.24:9000​)。1 つの IP アドレスのみを指定すると、サーバーがクラスターに参加できるようになります。

ポート番号は省略可能です。設定しない場合は、デフォルトは 5701 になります。複数のホストを含めるには、カンマ区切りリストを作成します。

このオプションでは、指定した固定 IP アドレスでクラスターを設定します。クラスターノードの検出にマルチキャストを使用しない場合、このオプションを使用します。このオプションを使用する場合、​mule.cluster.multicastenabled​ を ​false​ に設定します。そのように設定しないと、クラスターを開始するときに例外がスローされます。(この表の次の項目を参照)。

例:

ポート 9000 をリスンする 2 つのノード:

172.16.9.24:9000,172.16.9.51:9000

ポート 5701 をリスンする 2 つのノード:

192.168.1.19,192.168.1.20

いいえ

mule.cluster.quorumsize

稼働状態を維持するためにクラスター内に必要なマシンの最小数を定義できます。

いいえ

mule.cluster.multicastenabled

(Boolean (ブール))​ マルチキャストを有効/無効にします。クラスターノードの検出に固定 IP アドレスを使用する場合、​false​ に設定します (上記の ​mule.cluster.nodes​ オプションを参照)。
true​ に設定する場合、​mule.cluster.nodes​ で IP アドレスを設定しないでください。

いいえ

mule.cluster.multicastgroup

使用するマルチキャストグループ IP アドレス。

いいえ

mule.cluster.multicastport

使用するマルチキャストポート番号。

いいえ

mule.cluster.jdbcstoreurl

データベースに接続するための JDBC URL

永続データを保存する場合のみ必須。

mule.cluster.jdbcstoreusername

データベースのユーザー名

永続データを保存する場合のみ必須。

mule.cluster.jdbcstorepassword

データベースのユーザーパスワード

永続データを保存する場合のみ必須。

mule.cluster.jdbcstoredriver

JDBC ドライバーのクラス名

永続データを保存する場合のみ必須。

mule.cluster.jdbcstorequerystrategy

保存されているオブジェクトデータにアクセスするための SQL 言語。 このプロパティは、3 つの異なる値 (​mssql​、​mysql​、​postgresql​) を取ります。

永続データを保存する場合のみ必須。

mule.cluster.jmxenabled

(Boolean (ブール))​ 監視を有効/無効にします。

いいえ

mule.cluster.listenersenabled

(Boolean (ブール))​ メンバーシップリスナーを有効/無効にします。クラスターメンバーが参加または離脱したときにノードに通知するには、​true​ に設定します。

いいえ