24.2. JGroups を用いたクラスター通信
24.2.1. JGroups リンクのコピーリンクがクリップボードにコピーされました!
JGroups は信頼できるメッセージングのためのツールキットで、お互いにメッセージを送信するノードを持つクラスターを作成するために使用できます。
jgroups サブシステムは JBoss EAP で高可用性サービスのグループ通信サポートを提供します。これにより、名前付きのチャネルおよびプロトコルスタックを設定でき、チャネルのランタイム統計を表示することもできます。jgroups サブシステムは高可用性の機能を提供する設定を使用する場合に使用できます (管理対象ドメインでは ha や full-ha プロファイル、スタンドアロンサーバーは standalone-ha.xml や standalone-full-ha.xml 設定ファイルなど)。
JBoss EAP には 2 つの JGroups スタックが事前に設定されています。
- udp
- クラスターのノードは UDP (User Datagram Protocol) マルチキャストを使用してお互いに通信します。これはデフォルトのスタックです。
- tcp
- クラスターのノードは TCP (Transmission Control Protocol) を使用してお互いに通信します。
TCP はエラーのチェック、パケットの順番、および輻輳制御を処理するため、TCP のオーバーヘッドは UDP よりも大きく、速度も遅くなると考えられます。JGroups は UDP のこれらの機能を処理しますが、TCP はこれらの機能を独自で処理します。信頼できないネットワークや輻輳度の高いネットワークで JGroups を使用する場合やマルチキャストが使用できない場合は、TCP を選択するとよいでしょう。
事前設定されたスタックを使用できますが、システムの要件に合うように独自に定義をすることもできます。使用できるプロトコルとそれらの属性については、以下の項を参照してください。
24.2.2. デフォルトの JGroups チャネルが TCP を使用するよう設定 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、クラスターノードは ee JGroups チャネルに設定された udp プロトコルスタックを使用して通信します。
マルチキャストを使用した TCP の設定
一部のネットワークでは TCP のみを使用できます。以下の管理 CLI コマンドを使用して、ee チャネルが事前設定された tcp スタックを使用するようにします。
/subsystem=jgroups/channel=ee:write-attribute(name=stack,value=tcp)
/subsystem=jgroups/channel=ee:write-attribute(name=stack,value=tcp)
このデフォルトの tcp スタックは、IP マルチキャストを使用して初期クラスターメンバーシップを検出する MPING プロトコルを使用します。
マルチキャストを使用しない TCP の設定
マルチキャストが好ましくない場合、またはセキュリティーポリシーで許可されていない場合は、TCP を使用するようにデフォルトのプロトコルスタックを変更できます。マルチキャストなしで TCP ベースのクラスターリングを設定するには、以下の手順を実行します。
以下のコマンドを実行して、
eeチャネルが JGroups サブシステムで事前設定されたtcpスタックを使用するように切り替えます。<channel name="ee" stack="tcp" cluster="ejb"/>
<channel name="ee" stack="tcp" cluster="ejb"/>Copy to Clipboard Copied! Toggle word wrap Toggle overflow クラスターノードの名前を設定します。
スタンドアロン設定モードでは、次のいずれかの手順を実行します。
以下のコマンドを実行します。
<server xmlns="urn:jboss:domain:8.0" name="node_1">
<server xmlns="urn:jboss:domain:8.0" name="node_1">Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
インスタンスの起動時にシステムプロパティー
jboss.node.nameに一意の名前を指定します。
ドメインモードでは、クラスターサーバーはサーバーのタグの
host-*.xmlファイルに一覧表示されます。デフォルト設定では、以下のサーバー名を指定します。このサーバー名は、必要に応じて編集できます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
他のクラスターメンバーを検出するには、以下のいずれかのプロトコルを選択します。
-
TCPGOSSIP: このプロトコルは、外部のゴシップルーターサービスを使用してクラスターのメンバーを検出します。これには、追加のプロセスの設定および管理が必要ですが、個々の EAP インスタンスが相互のクラスターメンバーを一覧表示しないようにすることができます。このプロトコルは、クラスターメンバーが頻繁に変更される場合に役立ちます。詳細は TCPPING を参照してください。 -
TCPPING: このプロトコルは静的クラスターメンバーシップリストを定義し、各ノードが潜在的なクラスターメンバーの一覧を表示する必要があります。このプロトコルは、クラスターメンバーアドレスが認識されており、頻繁に変更されない場合に推奨されます。詳細は、TCPGOSSIP を参照してください。
-
24.2.3. TCPPING の設定 リンクのコピーリンクがクリップボードにコピーされました!
この手順は TCPPING プロトコルを使用する新しい JGroups スタックを作成し、静的クラスターメンバーシップのリストを定義します。ベーススクリプトは、tcpping スタックを作成し、この新しいスタックを使用するようデフォルトの ee チャネルを設定します。このスクリプトの管理 CLI コマンドは環境に合わせてカスタマイズする必要があり、バッチで処理されます。
以下のスクリプトをテキストエディターにコピーし、ローカルファイルシステムに保存します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 定義されたプロトコルの順番が重要になることに注意してください。また、
add-indexの値をaddコマンドに渡すと、特定のインデックスでプロトコルを挿入できます。インデックスはゼロベースであるため、以下の管理 CLI コマンドはUNICAST3プロトコルを 7 つ目のプロトコルとして追加します。/subsystem=jgroups/stack=tcpping/protocol=UNICAST3:add(add-index=6)
/subsystem=jgroups/stack=tcpping/protocol=UNICAST3:add(add-index=6)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 環境に合わせてスクリプトを変更します。
-
管理対象ドメインで実行している場合は、
/subsystem=jgroupsコマンドの前に/profile=PROFILE_NAMEを追加し、更新するプロファイルを指定する必要があります。 以下のプロパティーを環境に合わせて調整します。
-
socket-bindings: ウェルノウンとして見なされ、最初のメンバーシップの検索に利用できるホストとポートの組み合わせのコンマ区切りリスト。ソケットバインディングの定義に関する詳細は、ソケットバインディングの設定 を参照してください -
initial_hosts: ウェルノウンとして見なされ、最初のメンバーシップの検索に使用できるHOST[PORT]という構文を使用したホストとポートの組み合わせのコンマ区切りリスト (例:host1[1000],host2[2000])。 -
port_range: このプロパティーは、initial_hostsポート範囲を指定した値の分拡張するために使用されます。たとえば、initial_hostsをhost1[1000],host2[2000]に設定し、port_rangeを1に設定した場合initial_hosts設定はhost1[1000],host1[1001],host2[2000],host2[2001]に拡張されます。このプロパティーはinitial_hostsプロパティーと併用した場合のみ有効です。
-
-
管理対象ドメインで実行している場合は、
スクリプトファイルを管理 CLI に渡してスクリプトを実行します。
EAP_HOME/bin/jboss-cli.sh --connect --file=/path/to/SCRIPT_NAME
$ EAP_HOME/bin/jboss-cli.sh --connect --file=/path/to/SCRIPT_NAMECopy to Clipboard Copied! Toggle word wrap Toggle overflow
TCPPING スタックが使用できるようになり、ネットワークの通信に TCP が使用されます。
24.2.3.1. スタンドアロンモードでの TCPPING の設定 リンクのコピーリンクがクリップボードにコピーされました!
この手順では、スタンドアロンモードでクラスター化されたアプリケーションの TCP スタックおよびノードを設定するのに役立ちます。
手順
JGroups サブシステムで、デフォルトのスタックを
udpからtcpに変更します。<channel name="ee" stack="tcp" cluster="ejb"/>
<channel name="ee" stack="tcp" cluster="ejb"/>Copy to Clipboard Copied! Toggle word wrap Toggle overflow デフォルトの MPING プロトコルの代わりに TCPPING プロトコルを使用するように TCP スタックを設定します。以下のコードでは、
initial_hostsプロパティーはクラスター内の全ノードのリストに相関し、7600は設定および環境に応じて異なるデフォルトのjgroups-tcpポートを示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記initial_hostsに設定されたポート番号7600は、jgroups-tcpソケットバインディング定義で定義されたポート番号と同じでなければなりません。ソケットバインディングに port-offset 機能を使用する場合は、initial_hostsのオフセットの後に同じ値を指定する必要があります。JGroups コンポーネントによって使用されるプライベートインターフェイスの IP アドレスを設定します。IP アドレスは、
initial_hostsで指定されている IP アドレスのいずれかに関連付ける必要があります。<interface name="private"> <inet-address value="${jboss.bind.address.private:192.168.1.5}"/> </interface><interface name="private"> <inet-address value="${jboss.bind.address.private:192.168.1.5}"/> </interface>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - クラスター内の他のノードを設定するには、上記の手順を繰り返します。ノードが設定されたら、各ノードを起動して、クラスター化されたアプリケーションをデプロイします。
検証
ログを確認して、ノードが稼働しているかどうかを確認できます。
INFO [org.infinispan.remoting.transport.jgroups.JGroupsTransport] (thread-2,ee,node_1) ISPN000094: Received new cluster view for channel server: [node_1|1] (2) [node_1, node_2] INFO [org.infinispan.remoting.transport.jgroups.JGroupsTransport] (thread-2,ee,node_1) ISPN000094: Received new cluster view for channel web: [node_1|1] (2) [node_1, node_2]
INFO [org.infinispan.remoting.transport.jgroups.JGroupsTransport] (thread-2,ee,node_1) ISPN000094: Received new cluster view for channel server: [node_1|1] (2) [node_1, node_2] INFO [org.infinispan.remoting.transport.jgroups.JGroupsTransport] (thread-2,ee,node_1) ISPN000094: Received new cluster view for channel web: [node_1|1] (2) [node_1, node_2]Copy to Clipboard Copied! Toggle word wrap Toggle overflow
24.2.3.2. ドメインモードでの TCPPING の設定 リンクのコピーリンクがクリップボードにコピーされました!
この手順では、ドメインモードでクラスター化されたアプリケーションの TCP スタックおよびノードを設定するのに役立ちます。
手順
複数のクラスターに同じプロファイルを使用する場合は、システムプロパティーの値を
initial_hostsに設定します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow ホストコントローラーの XML 設定内でプライベートインターフェイスの IP アドレスを設定します。プライベートインターフェイスの IP アドレスは、
initial_hostsで指定されている IP アドレスのいずれかに関連付ける必要があります。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
ログを確認して、ノードが稼働しているかどうかを確認できます。
INFO [org.infinispan.remoting.transport.jgroups.JGroupsTransport] (thread-2,ee,node_1) ISPN000094: Received new cluster view for channel server: [node_1|1] (2) [node_1, node_2] INFO [org.infinispan.remoting.transport.jgroups.JGroupsTransport] (thread-2,ee,node_1) ISPN000094: Received new cluster view for channel web: [node_1|1] (2) [node_1, node_2]
INFO [org.infinispan.remoting.transport.jgroups.JGroupsTransport] (thread-2,ee,node_1) ISPN000094: Received new cluster view for channel server: [node_1|1] (2) [node_1, node_2] INFO [org.infinispan.remoting.transport.jgroups.JGroupsTransport] (thread-2,ee,node_1) ISPN000094: Received new cluster view for channel web: [node_1|1] (2) [node_1, node_2]Copy to Clipboard Copied! Toggle word wrap Toggle overflow
24.2.4. TCPGOSSIP の設定 リンクのコピーリンクがクリップボードにコピーされました!
この手順は、TCPGOSSIP プロトコルを使用する新しい JGroups スタックを作成し、外部ゴシップルーターを使用してクラスターのメンバーを検索します。ベーススクリプトは、tcpgossip スタックを作成し、この新しいスタックを使用するようデフォルトの ee チャネルを設定します。このスクリプトの管理 CLI コマンドは環境に合わせてカスタマイズする必要があり、バッチで処理されます。
以下のスクリプトをテキストエディターにコピーし、ローカルファイルシステムに保存します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 定義されたプロトコルの順番が重要になることに注意してください。また、
add-indexの値をaddコマンドに渡すと、特定のインデックスでプロトコルを挿入できます。インデックスはゼロベースであるため、以下の管理 CLI コマンドはUNICAST3プロトコルを 7 つ目のプロトコルとして追加します。/subsystem=jgroups/stack=tcpgossip/protocol=UNICAST3:add(add-index=6)
/subsystem=jgroups/stack=tcpgossip/protocol=UNICAST3:add(add-index=6)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 環境に合わせてスクリプトを変更します。
-
管理対象ドメインで実行している場合は、
/subsystem=jgroupsコマンドの前に/profile=PROFILE_NAMEを追加し、更新するプロファイルを指定する必要があります。 以下のプロパティーを環境に合わせて調整します。
-
socket-bindings: ウェルノウンとして見なされ、最初のメンバーシップの検索に利用できるホストとポートの組み合わせのコンマ区切りリスト。ソケットバインディングの定義に関する詳細は、ソケットバインディングの設定 を参照してください -
initial_hosts: ウェルノウンとして見なされ、最初のメンバーシップの検索に使用できるHOST[PORT]という構文を使用したホストとポートの組み合わせのコンマ区切りリスト (例:host1[1000],host2[2000])。 -
port_range: このプロパティーは、initial_hostsポート範囲を指定した値の分拡張するために使用されます。たとえば、initial_hostsをhost1[1000],host2[2000]に設定し、port_rangeを1に設定した場合initial_hosts設定はhost1[1000],host1[1001],host2[2000],host2[2001]に拡張されます。このプロパティーはinitial_hostsプロパティーと併用した場合のみ有効です。 -
reconnect_interval: 接続が切断されたスタブがゴシップルーターへの再接続を試みる間隔 (ミリ秒単位)。 -
sock_conn_timeout: ソケット作成の最大時間。デフォルトは1000ミリ秒です。 -
sock_read_timeout: 読み取りがブロックされる最大時間 (ミリ秒単位)。0を値として指定すると無制限にブロックされます。
-
-
管理対象ドメインで実行している場合は、
スクリプトファイルを管理 CLI に渡してスクリプトを実行します。
EAP_HOME/bin/jboss-cli.sh --connect --file=/path/to/SCRIPT_NAME
$ EAP_HOME/bin/jboss-cli.sh --connect --file=/path/to/SCRIPT_NAMECopy to Clipboard Copied! Toggle word wrap Toggle overflow
TCPGOSSIP スタックが使用できるようになり、ネットワークの通信に TCP が使用されます。このスタックはゴシップルーターと使用するように設定されるため、JGroups メンバーは他のクラスターメンバーを見つけることができます。
24.2.5. JDBC_PING の設定 リンクのコピーリンクがクリップボードにコピーされました!
JDBC_PING プロトコルを使用して、クラスターでメンバーシップを管理および検出できます。
JDBC_PING はデータソースに指定されたデータベースを使用して、クラスターのメンバーを一覧表示します。
- クラスターメンバーシップの管理に使用するデータベースに接続するデータソースを作成します。
以下のスクリプトをテキストエディターにコピーし、ローカルファイルシステムに保存します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 定義されたプロトコルの順番が重要になることに注意してください。また、
add-indexの値をaddコマンドに渡すと、特定のインデックスでプロトコルを挿入できます。インデックスはゼロベースであるため、以下の管理 CLI コマンドはUNICAST3プロトコルを 7 つ目のプロトコルとして追加します。/subsystem=jgroups/stack=JDBC_PING/protocol=UNICAST3:add(add-index=6)
/subsystem=jgroups/stack=JDBC_PING/protocol=UNICAST3:add(add-index=6)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 環境に合わせてスクリプトを変更します。
-
管理対象ドメインで実行している場合は、
/subsystem=jgroupsコマンドの前に/profile=PROFILE_NAMEを追加し、更新するプロファイルを指定する必要があります。 - ExampleDSを、手順 1 で定義したデータソースの名前に置き換えます。
-
管理対象ドメインで実行している場合は、
スクリプトファイルを管理 CLI に渡してスクリプトを実行します。
EAP_HOME/bin/jboss-cli.sh --connect --file=/path/to/SCRIPT_NAME
$ EAP_HOME/bin/jboss-cli.sh --connect --file=/path/to/SCRIPT_NAMECopy to Clipboard Copied! Toggle word wrap Toggle overflow
JDBC_PING スタックが使用できるようになり、ネットワークの通信に TCP が使用されます。
関連情報
JDBC_PING: https://developer.jboss.org/wiki/JDBCPING
データソースの作成: JBoss EAP データソース
24.2.6. JGroups のネットワークインターフェイスへのバインディング リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、JGroups は private ネットワークインターフェイスのみへバインドし、デフォルト設定でローカルホストへ示されます。クラスターリングのトラフィックはパブリックネットワークインターフェイスで公開するべきではないため、セキュリティー上の理由で JGroups は JBoss EAP の起動中に指定された -b 引数によって定義されたネットワークインターフェイスにはバインドしません。
ネットワークインターフェイスの設定方法については ネットワークおよびポート設定 の章を参照してください。
セキュリティー上の理由で、JGroups はパブリックではないネットワークインターフェイスのみにバインドされる必要があります。また、パフォーマンス上の理由で JGroups トラフィックのネットワークインターフェイスは専用の VLAN (Virtual Local Area Network) の一部にすることが推奨されます。
24.2.7. クラスターのセキュア化 リンクのコピーリンクがクリップボードにコピーされました!
クラスターをセキュアに実行するには、複数の課題に対応する必要があります。
24.2.7.1. 認証の設定 リンクのコピーリンクがクリップボードにコピーされました!
JGroups の認証は AUTH プロトコルによって実行されます。認証されたノードのみがクラスターに参加できるようにすることが目的です。
該当のサーバー設定ファイルに AUTH プロトコルと適切なプロパティー設定を追加します。AUTH プロトコルは pbcast.GMS プロトコルの直前に設定する必要があります。
以下は、AUTH を異なる承認トークンと使用する例になります。
AUTH とシンプルトークン
AUTH とダイジェストアルゴリズムトークン
この形式は、MD5 や SHA-2 など、どのダイジェストアルゴリズムでも使用できます。JBoss EAP 7.3 でのデフォルトのダイジェストアルゴリズムは SHA-256 で、これは JVM によるサポートに必要な最強のダイジェストアルゴリズムです。多くの JVM は、追加で SHA-512 を実装します。
AUTH と X509 トークン
この例は、elytron サブシステムで新しいキーストアを作成し、JGroups の AUTH 設定で参照します。
キーストアを作成します。
keytool -genkeypair -alias jgroups_key -keypass my_password -storepass my_password -storetype jks -keystore jgroups.keystore -keyalg RSA
$ keytool -genkeypair -alias jgroups_key -keypass my_password -storepass my_password -storetype jks -keystore jgroups.keystore -keyalg RSACopy to Clipboard Copied! Toggle word wrap Toggle overflow 管理 CLI を使用して、キーストアを
elytronサブシステムに追加します。/subsystem=elytron/key-store=jgroups-token-store:add(type=jks,path=/path/to/jgroups.keystore,credential-reference={clear-text=my_password}, required=true)/subsystem=elytron/key-store=jgroups-token-store:add(type=jks,path=/path/to/jgroups.keystore,credential-reference={clear-text=my_password}, required=true)Copy to Clipboard Copied! Toggle word wrap Toggle overflow JGroups のスタック定義で
AUTHを設定してキーストアを使用するようにします。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
24.2.7.2. 暗号化の設定 リンクのコピーリンクがクリップボードにコピーされました!
JGroups はクラスターのメンバーが共有する秘密鍵を使用してメッセージを暗号化します。送信元は共有する秘密鍵を使用してメッセージを暗号化し、受信先は同じ秘密鍵を使用してメッセージを復号化します。対称暗号化 は SYM_ENCRYPT プロトコルを使用して設定され、ノードは共有のキーストアを使用して秘密鍵を取得します。非対称暗号化 は ASYM_ENCRYPT プロトコルを使用して設定され、ノードは AUTH を使用して認証された後にクラスターのコーディネーターから秘密鍵を取得します。
対称暗号化の使用
SYM_ENCRYPT を使用するには、各ノードの JGroups 設定で参照されるキーストアを設定する必要があります。
キーストアを作成します。
以下のコマンドでは、
VERSIONを適切な JGroups JAR バージョンに置き換え、PASSWORDをキーストアパスワードに置き換えます。java -cp EAP_HOME/modules/system/layers/base/org/jgroups/main/jgroups-VERSION.jar org.jgroups.demos.KeyStoreGenerator --alg AES --size 128 --storeName defaultStore.keystore --storepass PASSWORD --alias mykey
$ java -cp EAP_HOME/modules/system/layers/base/org/jgroups/main/jgroups-VERSION.jar org.jgroups.demos.KeyStoreGenerator --alg AES --size 128 --storeName defaultStore.keystore --storepass PASSWORD --alias mykeyCopy to Clipboard Copied! Toggle word wrap Toggle overflow これにより、JGroups 設定で参照される
defaultStore.keystoreファイルが生成されます。キーストアが生成されたら、2 つの方法の 1 つを使用して
SYM_PROTOCOLで定義されます。- キーストアを 直接設定に 定義します。
- Elytron サブシステムを使用 してキーストアを参照します。
SYM_ENCRYPT を使用する場合、AUTH の設定は任意です。
キーストアを直接参照して対称暗号化を使用
jgroupsサブシステムでSYM_ENCRYPTプロトコルを設定します。該当するサーバー設定ファイルに、
SYM_ENCRYPTプロトコルと適切なプロパティー設定を追加します。このプロトコルは、以前作成されたキーストアを参照します。SYM_ENCRYPTプロトコルはpbcast.NAKACK2の直前に設定する必要があります。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Elytron と対称暗号化の使用
管理 CLI を使用して、
対称暗号化を使用して作成されたdefaultStore.keystoreを参照するキーストアを elytron サブシステムに作成します。/subsystem=elytron/key-store=jgroups-keystore:add(path=/path/to/defaultStore.keystore,credential-reference={clear-text=PASSWORD},type=JCEKS)/subsystem=elytron/key-store=jgroups-keystore:add(path=/path/to/defaultStore.keystore,credential-reference={clear-text=PASSWORD},type=JCEKS)Copy to Clipboard Copied! Toggle word wrap Toggle overflow SYM_ENCRYPTプロトコルと適切なプロパティー設定をjgroupsサブシステムに追加します。以下の設定どおり、SYM_ENCRYPTプロトコルはpbcast.NAKACK2プロトコルの直前に設定する必要があります。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記上記の例はクリアテキストのパスワードを使用しますが、認証情報ストアを定義して設定ファイル外部にパスワードを定義することもできます。認証情報ストアの設定に関する詳細は、How to Configure Server Security のCredential Storeを参照してください。
非対称暗号化の使用
ASYM_ENCRYPT を使用するには AUTH プロトコルを定義する必要があります。AUTH プロトコルを jgroups サブシステムで設定する手順は、認証の設定 を参照してください。
ASYM_ENCRYPT は 2 つの方法の 1 つで設定されます。
- 秘密鍵を生成し、設定で直接 参照します。
- キーストアを作成し、Elytron サブシステムを使用して 参照します。
秘密鍵を生成して非対象暗号化を使用
jgroupsサブシステムでASYM_ENCRYPTプロトコルを設定します。該当のサーバー設定ファイルに
ASYM_ENCRYPTプロトコルと適切なプロパティー設定を追加します。以下の設定どおり、ASYM_ENCRYPTプロトコルはpbcast.NAKACK2プロトコルの直前に設定する必要があります。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Elytron と非対称暗号化の使用
キーペアが含まれるキーストアを作成します。以下のコマンドは、
mykeyというエイリアスでキーストアを作成します。keytool -genkeypair -alias mykey -keyalg RSA -keysize 1024 -keystore defaultKeystore.keystore -dname "CN=localhost" -keypass secret -storepass secret
$ keytool -genkeypair -alias mykey -keyalg RSA -keysize 1024 -keystore defaultKeystore.keystore -dname "CN=localhost" -keypass secret -storepass secretCopy to Clipboard Copied! Toggle word wrap Toggle overflow 管理 CLI を使用して、
defaultStore.keystoreを参照するキーストアをelytronサブシステムに作成します。/subsystem=elytron/key-store=jgroups-keystore:add(path=/path/to/defaultStore.keystore,credential-reference={clear-text=PASSWORD},type=JCEKS)/subsystem=elytron/key-store=jgroups-keystore:add(path=/path/to/defaultStore.keystore,credential-reference={clear-text=PASSWORD},type=JCEKS)Copy to Clipboard Copied! Toggle word wrap Toggle overflow ASYM_ENCRYPTプロトコルと適切なプロパティー設定をjgroupsサブシステムに追加します。以下の設定どおり、ASYM_ENCRYPTプロトコルはpbcast.NAKACK2プロトコルの直前に設定する必要があります。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記上記の例はクリアテキストのパスワードを使用しますが、認証情報ストアを定義して設定ファイル外部にパスワードを定義することもできます。認証情報ストアの設定に関する詳細は、How to Configure Server Security のCredential Storeを参照してください。
24.2.8. JGroups スレッドプールの設定 リンクのコピーリンクがクリップボードにコピーされました!
jgroups サブシステムには default、internal、oob、および timer スレッドプールが含まれます。これらのプールはすべての JGroups スタックに対して設定でき、ローカルノードに設定された Bean やその他のプールには影響しません。JGroup スレッドプールは、クラスター通信をサポートするために使用されます。
以下の表は、各スレッドプールに設定できる属性とデフォルト値を表しています。
| スレッドプール名 | 説明 | keepalive-time | max-threads | min-threads | queue-length |
|---|---|---|---|---|---|
| default | このプールは、帯域外としてマークされていない受信メッセージを処理するために使用されます。 | 60000L | 300 | 20 | 100 |
| internal | このプールは、EAP のメンテナンスに必要な内部プロセスを処理するために使用されます。 | 60000L | 4 | 2 | 100 |
| oob | このプールは、受信 OOB (out of band) メッセージを処理する場合に使用されます。 | 60000L | 300 | 20 | 0 |
| timer | このプールは、タイムバウンドスケジューラーメッセージを処理するために使用されます。 | 5000L | 4 | 2 | 500 |
以下の構文を使用して、管理 CLI で JGroups スレッドプールを設定します。
/subsystem=jgroups/stack=STACK_TYPE/transport=TRANSPORT_TYPE/thread-pool=THREAD_POOL_NAME:write-attribute(name=ATTRIBUTE_NAME, value=ATTRIBUTE_VALUE)
/subsystem=jgroups/stack=STACK_TYPE/transport=TRANSPORT_TYPE/thread-pool=THREAD_POOL_NAME:write-attribute(name=ATTRIBUTE_NAME, value=ATTRIBUTE_VALUE)
以下は、 udp スタックの default スレッドプールで max-threads の値を 500 に設定する管理 CLI コマンドの例になります。
/subsystem=jgroups/stack=udp/transport=UDP/thread-pool=default:write-attribute(name="max-threads", value="500")
/subsystem=jgroups/stack=udp/transport=UDP/thread-pool=default:write-attribute(name="max-threads", value="500")
24.2.9. JGroups の送受信バッファーの設定 リンクのコピーリンクがクリップボードにコピーされました!
バッファーサイズ警告の解決
デフォルトでは、JGroups は特定の送受信バッファー値で設定されています。しかし、可能なバッファーサイズがオペレーティングシステムによって制限され、JBoss EAP が設定されたバッファー値を使用できないことがあります。このような場合、以下と似た警告が JBoss EAP のログに記録されます。
これに対応するには、オペレーティングシステムのマニュアルでバッファーサイズを増やす方法を参照してください。Red Hat Enterprise Linux システムの場合は、root ユーザーとして /etc/sysctl.conf を編集し、システムの再起動後も維持されるバッファーサイズの最大値を設定します。以下に例を示します。
Allow a 25MB UDP receive buffer for JGroups Allow a 1MB UDP send buffer for JGroups
# Allow a 25MB UDP receive buffer for JGroups
net.core.rmem_max = 26214400
# Allow a 1MB UDP send buffer for JGroups
net.core.wmem_max = 1048576
/etc/sysctl.conf を編集後、sysctl -p を実行して変更を反映します。
JGroups バッファーサイズの設定
以下のトランスポートプロパティーを UDP および TCP JGroups スタックに設定すると、JBoss EAP が使用する JGroups バッファーサイズを設定できます。
- UDP スタック
-
ucast_recv_buf_size -
ucast_send_buf_size -
mcast_recv_buf_size -
mcast_send_buf_size
-
- TCP スタック
-
recv_buf_size -
send_buf_size
-
JGroups バッファーサイズは、管理コンソールまたは管理 CLI を使用して設定できます。
以下の構文を使用して、管理 CLI で JGroups バッファーサイズプロパティーを設定します。
/subsystem=jgroups/stack=STACK_NAME/transport=TRANSPORT/property=PROPERTY_NAME:add(value=BUFFER_SIZE)
/subsystem=jgroups/stack=STACK_NAME/transport=TRANSPORT/property=PROPERTY_NAME:add(value=BUFFER_SIZE)
以下は、tcp スタックで recv_buf_size プロパティーを 20000000 に設定する管理 CLI コマンドの例になります。
/subsystem=jgroups/stack=tcp/transport=TRANSPORT/property=recv_buf_size:add(value=20000000)
/subsystem=jgroups/stack=tcp/transport=TRANSPORT/property=recv_buf_size:add(value=20000000)
JGroups バッファーサイズは管理コンソールを使用して設定することもできます。 Configuration タブで JGroups サブシステムを選択し、表示 をクリックして Stack タブを選択し、該当するスタックを選びます。 Transport をクリックし、 Properties フィールドを編集します。
24.2.10. JGroups サブシステムの調整 リンクのコピーリンクがクリップボードにコピーされました!
jgroups サブシステムのパフォーマンスを監視および最適化するための情報は、パフォーマンスチューニングガイド のJGroups サブシステムの調整の項を参照してください。
24.2.11. JGroups トラブルシューティング リンクのコピーリンクがクリップボードにコピーされました!
24.2.11.1. ノードがクラスターを形成しない リンクのコピーリンクがクリップボードにコピーされました!
マシンで IP マルチキャストが正しくセットアップされていることを確認します。JBoss EAP には、IP マルチキャストのテストに使用できる McastReceiverTest と McastSenderTest の 2 つのテストプログラムが含まれています。
ターミナルで McastReceiverTest を開始します。
java -cp EAP_HOME/bin/client/jboss-client.jar org.jgroups.tests.McastReceiverTest -mcast_addr 230.11.11.11 -port 5555
$ java -cp EAP_HOME/bin/client/jboss-client.jar org.jgroups.tests.McastReceiverTest -mcast_addr 230.11.11.11 -port 5555
別のターミナルウインドウで McastSenderTest を開始します。
java -cp EAP_HOME/bin/client/jboss-client.jar org.jgroups.tests.McastSenderTest -mcast_addr 230.11.11.11 -port 5555
$ java -cp EAP_HOME/bin/client/jboss-client.jar org.jgroups.tests.McastSenderTest -mcast_addr 230.11.11.11 -port 5555
特定のネットワークインターフェイスカード (NIC) をバインドする場合は、-bind_addr YOUR_BIND_ADDRESS を使用します。YOUR_BIND_ADDRESS はバインドする NIC の IP アドレスに置き換えます。送信側と受信側の両方にこのパラメーターを使用します。
McastSenderTest ターミナルウインドウで入力すると McastReceiverTest ウインドウに出力が表示されます。表示されない場合は以下の手順に従います。
-
送信側のコマンドに
-ttl VALUEを追加して、マルチキャストパケットの TTL (time-to-live) を増やします。このテストプログラムによって使用されるデフォルトの値は32で、VALUEは255以下である必要があります。 - マシンに複数のインターフェイスがある場合は、適切なインターフェイスを使用していることを確認します。
- システム管理者に連絡し、マルチキャストが選択したインターフェイスで動作することを確認します。
クラスターの各マシンでマルチキャストが適切に動作したら、送信側と受信側を別々のマシンに配置し、テストを繰り返します。
24.2.11.2. 障害検出での不明なハートビートの原因 リンクのコピーリンクがクリップボードにコピーされました!
ハートビートの確認が一定時間 (T) 受信されないと、障害検出 (FD) によってクラスターメンバーが原因として疑われることがあります。T は timeout および max_tries によって定義されます。
たとえば、ノード A、B、C、および D のクラスターがあり、A が B、B が C、C が D、D が A を ping する場合、以下のいずれかの理由で C が疑われます。
-
B または C が CPU の使用率が 100% の状態で
T秒よりも長く稼働している場合。この場合、 C がハートビート確認を B に送信しても CPU の使用率が 100% であるため B が確認を処理できないことがあります。 - B または C がガベッジコレクションを実行している場合、上記と同じ結果になります。
- 上記 2 件の組み合わせ。
- ネットワークによるパケットの損失が発生する場合。通常、ネットワークに大量のトラフィックがあり、スイッチがパケットを破棄すると発生します (通常は最初にブロードキャスト、次に IP マルチキャスト、そして最後に TCP パケットが破棄されます)。
-
B または C がコールバックを処理する場合。C が処理に
T+ 1 秒かかるリモートメソッド呼び出しをチャネル上で受信した場合、C はハートビートを含む他のメッセージを処理できません。そのため、B はハートビート確認を受信せず、C が疑われます。