8.2.16 Elasticsearch
- Elasticsearch 7xおよび6xを使用したElasticsearch
Elasticsearchハンドラを使用すると、大量のデータをすばやく、ほぼリアルタイムで保存、検索および分析できます。 - Elasticsearch 8x
Elasticsearchハンドラを使用すると、大量のデータをすばやく、ほぼリアルタイムで保存、検索および分析できます。
親トピック: ターゲット
8.2.16.1 Elasticsearch 7xおよび6xを使用したElasticsearch
Elasticsearchハンドラを使用すると、大量のデータをすばやく、ほぼリアルタイムで保存、検索および分析できます。
ノート:
Elasticsearchハンドラに関するこの項は、Oracle GoldenGate for Distributed Applications and Analytics (GG for DAA)バージョン21.9.0.0.0以前に関連しています。Oracle GoldenGate for Distributed Applications and Analytics (GG for DAA) 21.10.0.0.0以降では、Elasticsearch 8.xをサポートするためにElasticsearchクライアントが変更されています。- 概要
- 機能の詳細
- Elasticsearchハンドラの設定および実行
- トラブルシューティング
- パフォーマンスに関する考慮事項
- Shieldプラグインのサポートについて
- DDL処理について
- Elasticsearchハンドラの既知の問題
- Elasticsearchハンドラ・トランスポート・クライアント依存性
Elasticsearchデータベースに接続するためのElasticsearchハンドラの依存性とはどのようなものでしょう。 - Elasticsearch High Level RESTクライアント依存性
親トピック: Elasticsearch
8.2.16.1.1 概要
Elasticsearchは、拡張性の高い、オープン・ソースのフルテキスト検索および分析エンジンです。Elasticsearchを使用すると、大量のデータをすばやく、ほぼリアルタイムで保存、検索および分析できます。通常、複雑な検索機能を備えたアプリケーションを駆動する基盤となるエンジンやテクノロジとして使用されます。
ノート:
Elasticsearchハンドラに関するこの項は、Oracle GoldenGate for Distributed Applications and Analytics (GG for DAA)バージョン21.9.0.0.0以前に関連しています。GG for DAA 21.10.0.0.0以降では、Elasticsearch 8.xをサポートするためにElasticsearchクライアントが変更されています。8.2.16.1.2 機能の詳細
8.2.16.1.2.1 Elasticsearchバージョン・プロパティについて
Elasticsearchハンドラは、Elasticsearchクラスタと通信するために、Elasticsearchトランスポート・クライアントとElasticsearch High Level RESTクライアントの2つの異なるクライアントをサポートしています。
Elasticsearchハンドラは、適切なバージョンのElasticsearchハンドラ・プロパティ・ファイルを指定することで、サポートされている2つのクライアント用に構成することもできます。以前のバージョンのElasticsearch (6.x)ではトランスポート・クライアントのみがサポートされており、構成可能なプロパティ・バージョン値を6.xに設定することでElasticsearchハンドラを構成できます。Elasticsearchの最新バージョン(7.x)では、トランスポート・クライアントとHigh Level RESTクライアントの両方がサポートされています。そのため、最新バージョンでは、Elasticsearchハンドラは、構成可能なプロパティ・バージョンの値を7.xに設定することでトランスポート・クライアント用に構成でき、High Level RESTクライアントは値をRest7.xに設定することで構成できます。
それぞれの構成可能なパラメータは次のとおりです。
- 6.xまたは7.xのバージョンを使用するトランスポート・クライアントを使用してElasticsearchクラスタに接続するには、
gg.handler.name.version
構成値をそれぞれ6.xまたは7.xに設定します。 - Elasticsearch High Level RESTクライアントを使用してElasticseachクラスタに接続するには、
gg.handler.name.version
構成値をREST7.0に設定します。RESTクライアントはElasticsearchバージョン7.xをサポートしています。
親トピック: 機能の詳細
8.2.16.1.2.2 インデックスとタイプについて
Elasticsearchのインデックスは、類似した特性を持つドキュメントの集まりです。インデックスは小文字でのみ作成できます。Elasticsearchのタイプは、インデックス内の論理グループです。インデックスまたはタイプ内のすべてのドキュメントは、同じ番号およびタイプのフィールドを持つ必要があります。
Elasticsearchハンドラでは、ソース証跡スキーマをソース証跡表名と連結してインデックスが構築されます。ソース証跡の3つの部分からなる表名の場合、インデックスはソース・カタログ、スキーマおよび表名を連結して構成されます。
ノート:
Elasticsearchフィールド名では、大/小文字が区別されます。更新または挿入するデータのフィールド名が大文字で、Elasticsearchサーバーの既存のフィールドが小文字の場合、それらは新しいフィールドとして扱われ、既存のフィールドとして更新されません。これを回避するには、パラメータgg.schema.normalize=lowercase
を使用します。これにより、フィールド名が小文字に更新され、問題が解決されます。
表8-13 Elasticsearchのマッピング
ソース証跡 | Elasticsearchのインデックス | Elasticsearchのタイプ |
---|---|---|
|
|
|
|
|
|
Elasticsearchクラスタにまだインデックスが存在しない場合は、Elasticsearchハンドラがデータを受信すると(ソース証跡でのINSERT
またはUPDATE
操作)、新しいインデックスが作成されます。
親トピック: 機能の詳細
8.2.16.1.2.3 ドキュメントについて
Elasticsearchのドキュメントは、インデックス付けのできる情報の基本単位です。インデックスまたはタイプ内に、必要な数のドキュメントを格納できます。各ドキュメントには_id
フィールドに基づく一意の識別子があります。
Elasticsearchハンドラでは、ソース証跡の主キー列の値がドキュメント識別子としてマッピングされます。
親トピック: 機能の詳細
8.2.16.1.2.4 主キーの更新について
Elasticsearchのドキュメント識別子はソース表の主キー列の値に基づいて作成されます。ドキュメント識別子は変更できません。Elasticsearchハンドラでは、DELETE
に続いてINSERT
を実行することによってソース主キーの更新操作が処理されます。INSERT
の実行中、新しいドキュメントのフィールドが必要なフィールド数よりも少ないことがあります。ソース表内のすべてのフィールドをINSERT
操作に含めるには、更新操作用にデータ全体のビフォア・イメージをキャプチャするように証跡のExtractを有効にするか、GETBEFORECOLS
を使用して必要な列のビフォア・イメージを書き込みます。
親トピック: 機能の詳細
8.2.16.1.2.5 データ型について
Elasticsearchでは次のデータ型がサポートされています。
-
32ビット整数
-
64ビット整数
-
Double
-
Date
-
String
-
Binary
親トピック: 機能の詳細
8.2.16.1.2.6 操作モード
Elasticsearchハンドラでは、パフォーマンスを向上させるために操作モードが使用されます。gg.handler.name.mode
プロパティはハンドラでは使用されません。
親トピック: 機能の詳細
8.2.16.1.2.7 操作処理のサポート
Elasticsearchハンドラでは、ソース表名がElasticsearchのタイプにマッピングされます。タイプ名は大文字と小文字を区別します。
ソース証跡の3つの部分からなる表名の場合、インデックスはソース・カタログ、スキーマおよび表名を連結して構成されます。
-
INSERT
-
Elasticsearchハンドラでは、インデックスが存在しない場合、新規インデックスが作成されて新規ドキュメントが挿入されます。
-
UPDATE
-
Elasticsearchのインデックスやドキュメントが存在する場合は、そのドキュメントが更新されます。Elasticsearchのインデックスやドキュメントが存在しない場合は、新規インデックスが作成され、
UPDATE
操作の列の値が新規ドキュメントとして挿入されます。 -
DELETE
-
Elasticsearchのインデックスやドキュメントが存在する場合は、そのドキュメントが削除されます。Elasticsearchのインデックスやドキュメントが存在しない場合は、フィールドがゼロの新規インデックスが作成されます。
TRUNCATE
操作はサポートされていません。
親トピック: 機能の詳細
8.2.16.1.2.8 接続について
クラスタは、データ全体を保持する1つまたは複数のノード(サーバー)の集合です。すべてのノードにわたるフェデレーテッド索引付けおよび検索機能が提供されます。
ノードはクラスタの一部であり、データを格納し、クラスタの索引付けおよび検索に参加する単一のサーバーです。
Elasticsearchハンドラのプロパティgg.handler.name.ServerAddressList
は、クラスタで使用可能なノードを指すように設定できます。
親トピック: 機能の詳細
8.2.16.1.3 Elasticsearchハンドラの設定および実行
Elasticsearchクラスタが正しく設定され、そのクラスタが稼働していることを確認する必要があります(https://www.elastic.co/guide/en/elasticsearch/reference/current/index.htmlを参照)。また、Kibanaを使用して設定を確認することもできます。
クラスパスの設定
プロパティgg.classpath
には、Javaのトランスポート・クライアントに必要なすべてのjarが含まれている必要があります。必要なクライアントJARファイルのバージョン別リストは、Elasticsearchハンドラ・トランスポート・クライアント依存性を参照してください。Elatisticsearch High Level RESTクライアントに必要なクライアントJARファイルのリストは、Elasticsearch High Level RESTクライアント依存性を参照してください。
パス内のワイルドカード(*)は、(*)のワイルドカード文字により、そのディレクトリ内のすべてのJARファイルを関連するクラスパスに含めることができます。*.jar
は使用しないでください
正しく構成されたクラスパスの例を次に示します。
gg.classpath=Elasticsearch_Home/lib/*
8.2.16.1.3.1 Elasticsearchハンドラの構成
Elasticsearchハンドラは、異なるバージョンのElasticsearchに対して構成できます。最新バージョン(7.x)では、トランスポート・クライアントとHigh-level RESTクライアントの2つのタイプのクライアントがサポートされています。構成可能なプロパティ・バージョンが6.xまたは7.xの値に設定されている場合、Elasticsearchトランスポート・クライアントを使用して、ハンドラの他のすべての操作をElasticsearchクラスタに接続して実行します。構成可能なプロパティ・バージョンがrest7.xに設定されている場合、Elasticsearch High Level RESTクライアントを使用して、他のハンドラの操作をElasticsearch 7.xクラスタに接続して実行します。それぞれの構成可能なパラメータを、次に個別に説明します。
表8-14 共通の構成可能なプロパティ
プロパティ | 必須/オプション | 有効な値 | デフォルト | 説明 |
---|---|---|---|---|
gg.handlerlist |
必須 | 名前(ハンドラに選択した任意の名前) | なし | 使用するハンドラのリスト。 |
gg.handler.<name>.type |
必須 | elasticsearch | なし | 使用するハンドラのタイプ。たとえば、Elasticsearch、KafkaまたはFlume。 |
gg.handler.name.ServerAddressList |
オプション |
|
|
ノードの連絡ポイントのカンマ区切りのリスト。バージョンREST7.xで使用できるポートは9200です。他のバージョンの場合は9300です。 |
gg.handler.name.version |
必須 |
|
7.x |
バージョン値5.x、6.xおよび7.xは、Elasticsearchトランスポート・クライアントを使用してそれぞれElasticsearchバージョン5.x、6.xおよび7.xと通信することを示します。バージョンREST7.xは、Elasticsearch High Level RESTクライアントを使用してElasticsearchバージョン7.xと通信することを示します。 |
gg.handler.name.version gg.handler.name.bulkWrite
|
オプション | true | false |
false |
このプロパティがtrue の場合、Elasticsearchハンドラでは、一括書込みAPIを使用してElasticsearchクラスタにデータが収集されます。一括書込みのバッチ・サイズは、ReplicatパラメータのMAXTRANSOPS を使用して制御できます。
|
gg.handler.name.numberAsString |
オプション | true | false |
false |
このプロパティがtrue の場合、Elasticsearchハンドラは、ソース証跡内のすべての数値列の値(Long、IntegerまたはDouble)を文字列としてElasticsearchクラスタに受信します。
|
gg.handler.elasticsearch.upsert |
オプション | true | false |
true |
このプロパティがtrue の場合、UPDATE 操作の実行時にドキュメントが存在しないとき、新規ドキュメントが挿入されます。
|
例8-1 サンプルのハンドラ・プロパティ・ファイル:
サンプルのReplicat構成およびJavaアダプタのプロパティ・ファイルは、次のディレクトリにあります。
GoldenGate_install_directory/AdapterExamples/big-data/elasticsearch
Elasticsearch RESTハンドラの場合
gg.handlerlist=elasticsearch gg.handler.elasticsearch.type=elasticsearch gg.handler.elasticsearch.ServerAddressList=localhost:9300 gg.handler.elasticsearch.version=rest7.x gg.classpath=/path/to/elasticsearch/lib/*:/path/to/elasticsearch/modules/reindex/*:/path/to/elasticsearch/modules/lang-mustache/*:/path/to/elasticsearch/modules/rank-eval/*
- 共通の構成可能なプロパティ
- トランスポート・クライアントの 構成可能なプロパティ
- トランスポート・クライアントの設定プロパティ・ファイル
- トランスポート・クライアントのクラスパス設定
- RESTクライアントの構成可能なプロパティ
- RESTクライアントの認証
- RESTクライアントのクラスパス設定
親トピック: Elasticsearchハンドラの設定および実行
8.2.16.1.3.1.1 共通の構成可能なプロパティ
表8-15 共通の構成可能なプロパティ
プロパティ | 必須/オプション | 有効な値 | デフォルト | 説明 |
---|---|---|---|---|
gg.handlerlist |
必須 | 名前(ハンドラに選択した任意の名前) | なし | 使用するハンドラのリスト。 |
gg.handler.<name>.type |
必須 | elasticsearch | なし | 使用するハンドラのタイプ。たとえば、Elasticsearch、KafkaまたはFlume。 |
gg.handler.name.ServerAddressList |
オプション |
|
|
ノードの連絡ポイントのカンマ区切りのリスト。バージョンREST7.xで使用できるポートは9200です。他のバージョンの場合は9300です。 |
gg.handler.name.version |
必須 |
|
7.x |
バージョン値6.xおよび7.xは、Elasticsearchトランスポート・クライアントを使用してそれぞれElasticsearchバージョン6.xおよび7.xと通信することを示します。バージョンREST7.xは、Elasticsearch High Level RESTクライアントを使用してElasticsearchバージョン7.xと通信することを示します。 |
gg.handler.name.version gg.handler.name.bulkWrite
|
オプション | true | false |
false |
このプロパティがtrue の場合、Elasticsearchハンドラでは、一括書込みAPIを使用してElasticsearchクラスタにデータが収集されます。一括書込みのバッチ・サイズは、ReplicatパラメータのMAXTRANSOPS を使用して制御できます。
|
gg.handler.name.numberAsString |
オプション | true | false |
false |
このプロパティがtrue の場合、Elasticsearchハンドラは、ソース証跡内のすべての数値列の値(Long、IntegerまたはDouble)を文字列としてElasticsearchクラスタに受信します。
|
gg.handler.elasticsearch.upsert |
オプション | true | false |
true |
このプロパティがtrue の場合、UPDATE 操作の実行時にドキュメントが存在しないとき、新規ドキュメントが挿入されます。
|
親トピック: Elasticsearchハンドラの構成
8.2.16.1.3.1.2 トランスポート・クライアントの 構成可能なプロパティ
構成可能なプロパティ・バージョンが値6.xまたは7.xに設定されている場合、トランスポート・クライアントを使用して、対応するバージョンのElasticsearchクラスタと通信します。トランスポート・クライアントのみを使用する場合に適用される構成可能なプロパティは次のとおりです。
表8-16 トランスポート・クライアントの構成可能なプロパティ
プロパティ | 必須/オプション | 有効な値 | デフォルト | 説明 |
---|---|---|---|---|
gg.handler.name.clientSettingsFile |
必須 | トランスポート・クライアントのプロパティ・ファイル。 | なし | Elasticsearchハンドラで使用されるElasticsearchトランスポート・クライアントのプロパティを保持するクラスパスのファイル名。 |
Copygg.handlerlist=elasticsearch gg.handler.elasticsearch.type=elasticsearch gg.handler.elasticsearch.ServerAddressList=localhost:9300 gg.handler.elasticsearch.clientSettingsFile=client.properties gg.handler.elasticsearch.version=[6.x | 7.x] gg.classpath=/path/to/elastic/lib/*:/path/to/elastic/modules/transport-netty4/*:/path/to/elastic/modules/reindex/*: /path/to/elastic/plugins/x-pack/*:
親トピック: Elasticsearchハンドラの構成
8.2.16.1.3.1.3 トランスポート・クライアントの設定プロパティ・ファイル
Elasticsearchハンドラは、JavaのTransportクライアントを使用してElasticsearchクラスタとやりとりします。Elasticsearchクラスタには、shieldやx-packのような追加のプラグインがあり、追加の構成が必要な場合があります。
gg.handler.name.clientSettingsFile property
は、Elasticsearchクラスタのバージョンに基づく追加のクライアント設定のあるファイルを指している必要があります。
Elasticsearchハンドラは、Javaクラスパスを使用してクライアント設定ファイルの検索とロードを試みます。Javaクラスパスには、プロパティ・ファイルを含むディレクトリが含まれている必要があります。Elasticsearchのクライアント・プロパティ・ファイル(プラグインなし)は、cluster.name=Elasticsearch_cluster_name
です。
Shieldプラグインは、SSLやIPフィルタリングなどの追加機能もサポートしています。プロパティは、client.properties
ファイルで設定できます。https://www.elastic.co/guide/en/shield/current/_using_elasticsearch_java_clients_with_shield.htmlを参照してください。
X-Packプラグインを使用したElasticsearchハンドラのclient.propertiesファイルの例:
Copycluster.name=Elasticsearch_cluster_name xpack.security.user=x-pack_username:x-pack-password
X-Packプラグインも追加の機能をサポートしています。プロパティは、client.properties
ファイルで設定できます。次を参照
https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.1/transport-client.htmlおよびhttps://www.elastic.co/guide/en/x-pack/current/java-clients.html
親トピック: Elasticsearchハンドラの構成
8.2.16.1.3.1.4 トランスポート・クライアントのクラスパス設定
トランスポート・クライアントを使用するElasticsearchハンドラのgg.classpath
設定には、ライブラリ(lib)からjarへのパスと、Elasticsearchインストール・ディレクトリ内のモジュール(transport-netty4およびreindex module)フォルダが含まれている必要があります。認証のためにxパック・プラグインを使用する場合、クラスパスには、Elasticsearchインストール・ディレクトリ内のプラグイン(x-pack)フォルダ内にjarを含む必要もあります。次のように、jarのパスを参照してください。
.
1. [path/to/elastic/lib/*] 2. [/path/to/elastic/modules/transport-netty4/*] 3. [/path/to/elastic/modules/reindex/*] 4. [/path/to/elastic/plugins/x-pack/*] This needs to be added only if x-pack plugin is configured in Elasticsearch
親トピック: Elasticsearchハンドラの構成
8.2.16.1.3.1.5 RESTクライアントの構成可能なプロパティ
構成可能なプロパティ・バージョンが値rest7.xに設定されている場合、ハンドラはElasticsearch High Level RESTクライアントを使用してElasticsearchの7.xクラスタに接続します。RESTクライアントでのみサポートされている構成可能なプロパティは、次のとおりです。
プロパティ | 必須/オプション | 有効な値 | デフォルト | 説明 |
---|---|---|---|---|
|
オプション |
|
なし | ルーティング・アルゴリズムの決定に使用されるテンプレート。 |
gg.handler.name.authType |
オプション | none | basic | ssl |
なし | Elasticsearch RESTクライアントの認証タイプを制御します。
|
gg.handler.name.authType gg.handler.name.basicAuthUsername
|
必須(認証タイプがbasicの場合) | 有効なユーザー名 | なし | Elasticsearch RESTクライアントを認証するサーバーのユーザー名。認証タイプbasic の場合に指定する必要があります。
|
gg.handler.name.basicAuthPassword |
必須(認証タイプがbasicの場合) | 有効なパスワード | なし | Elasticsearch RESTクライアントを認証するサーバーのパスワード。認証タイプbasic の場合に指定する必要があります。
|
gg.handler.name.trustStore |
必須(認証タイプがSSLの場合) | トラストストア・ファイルの完全修飾名(パス+名前) | なし | Elasticsearchサーバーから受信した証明書を検証するElasticsearchクライアントのトラストストア。認証タイプがssl に設定されている場合は指定する必要があります。Elasticsearch RESTクライアントに対してのみ有効です
|
gg.handler.name.trustStorePassword |
必須(認証タイプがSSLの場合) | 有効なトラストストア・パスワード | なし | Elasticsearchサーバーから受信した証明書を検証するElasticsearch RESTクライアントのトラストストアのパスワード。認証タイプがsslに設定されている場合は指定する必要があります。 |
gg.handler.name.maxConnectTimeout |
オプション | 正の整数 | Apache HTTPコンポーネント・フレームワークのデフォルト値。 | Elasticsearch RESTクライアントからElasticsearchサーバーへの接続が確立されるまでの最大待機時間を設定します。Elasticsearch RESTクライアントに対してのみ有効です。 |
gg.handler.name.maxSocketTimeout |
オプション | 正の整数 | Apache HTTPコンポーネント・フレームワークのデフォルト値。 | リクエストの発行後にサービスからのレスポンスを待機する最大待機期間(ミリ秒)を設定します。大量のデータをプッシュする場合は、増やす必要がある場合があります。Elasticsearch RESTクライアントに対してのみ有効です。 |
gg.handler.name.proxyUsername |
オプション | プロキシ・サーバーのユーザー名 | なし | Elasticsearchへの接続でRESTクライアントおよびプロキシ・サーバー経由のルーティングを使用する場合、このプロパティはプロキシ・サーバーのユーザー名を設定します。ほとんどのプロキシ・サーバーでは、資格証明は必要ありません。 |
gg.handler.name.proxyPassword |
オプション | プロキシ・サーバーのパスワード | なし | Elasticsearchへの接続でRESTクライアントおよびプロキシ・サーバー経由のルーティングを使用する場合、このプロパティはプロキシ・サーバーのパスワードを設定します。ほとんどのプロキシ・サーバーでは、資格証明は必要ありません。 |
gg.handler.name.proxyProtocol |
オプション | http | https |
なし | Elasticsearchへの接続でRESTクライアントおよびプロキシ・サーバー経由のルーティングを使用する場合、このプロパティはプロキシ・サーバーのプロトコルを設定します。 |
gg.handler.name.proxyPort |
オプション | プロキシ・サーバーのポート番号。 | なし | Elasticsearchへの接続でRESTクライアントおよびプロキシ・サーバー経由のルーティングを使用する場合、このプロパティはプロキシ・サーバーのポート番号を設定します。 |
gg.handler.name.proxyServer |
オプション | プロキシ・サーバーのホスト名。 | なし | Elasticsearchへの接続でRESTクライアントおよびプロキシ・サーバー経由のルーティングを使用する場合、このプロパティはプロキシ・サーバーのホスト名を設定します。 |
RESTクライアントを使用したElasticsearchハンドラのサンプル・プロパティ
gg.handlerlist=elasticsearch gg.handler.elasticsearch.type=elasticsearch gg.handler.elasticsearch.ServerAddressList=localhost:9200 gg.handler.elasticsearch.version=rest7.x gg.classpath=/path/to/elasticsearch/lib/*:/path/to/elasticsearch/modules/reindex/*:/path/to/elasticsearch/modules/lang-mustache/*:/path/to/elasticsearch/modules/rank-eval/*
親トピック: Elasticsearchハンドラの構成
8.2.16.1.3.1.6 RESTクライアントの認証
構成可能なプロパティauth-type値SSLを使用して、Elasticsearchクラスタと通信するためのSSL認証メカニズムを構成できます。このプロパティは、構成可能なプロパティの基本ユーザー名/パスワードをトラストストアのプロパティとともに指定することによって、SSLを使用した基本認証を構成するためにも使用できます。
親トピック: Elasticsearchハンドラの構成
8.2.16.1.3.1.7 RESTクライアントのクラスパス設定
High Level RESTクライアントのクラスパスには、ライブラリ(lib)フォルダからのjarと、Elasticsearchインストール・ディレクトリ内のモジュール・フォルダ(reindex、lang-mustacheおよびran-eval)が含まれている必要があります。RESTクライアントはこれらのライブラリに依存するため、ハンドラが機能するにはgg.classpathに含まれている必要があります。依存性のリストを次に示します。
1. [/path/to/elasticsearch/lib/*] 2. [/path/to/elasticsearch/modules/reindex/*] 3. [/path/to/elasticsearch/modules/lang-mustache/*] 4. [/path/to/elasticsearch/modules/rank-eval/*]
親トピック: Elasticsearchハンドラの構成
8.2.16.1.4 トラブルシューティング
この項では、様々な問題のトラブルシューティングに役立つ情報を示します。
トランスポート・クライアントのプロパティ・ファイルが見つからない
これは、プロパティ・バージョンが6.xまたは7.xに設定されている場合にのみトランスポート・クライアントに適用されます。
ERROR 2017-01-30 22:33:10,058 [main] Unable to establish connection. Check handler properties and client settings configuration.
この例外を解決するには、gg.handler.name.clientSettingsFile
構成プロパティに、Elasticsearchトランスポート・クライアントの設定ファイル名が正しく設定されていることを確認します。gg.classpath
変数に正しいファイル名へのパスが含まれ、プロパティ・ファイルへのパスの最後にアスタリスク(*)のワイルドカードが含まれていないことを確認します。
8.2.16.1.4.1 不適切なJavaクラスパス
最も一般的な初期エラーは、必要なすべてのクライアント・ライブラリを含めるクラスパスが正しくないことす。log4j
ログ・ファイルにClassNotFound
例外が作成されます。
また、gg.classpath
変数に表記上の誤りがある場合、クラスパス解決エラーの原因となる可能性があります。
Elasticsearchトランスポート・クライアント・ライブラリは、Oracle GoldenGate for Distributed Applications and Analytics (GG for DAA)製品には付属していません。クライアント・ライブラリを正しく解決するには、Javaアダプタのプロパティ・ファイルでgg.classpath
プロパティを正しく構成する必要があります(「Elasticsearchハンドラの設定および実行」を参照)。
親トピック: トラブルシューティング
8.2.16.1.4.2 Elasticsearchのバージョン不一致
Elasticsearchクラスタのメジャー・バージョン番号と一致させるには、Elasticsearchハンドラのgg.handler.name.version
プロパティを6.x
、7.x
またはREST7.x
に設定する必要があります。たとえば、gg.handler.name.version=7.x
です。
バージョン構成に誤りがあると、次のエラーが発生することがあります。
Error: NoNodeAvailableException[None of the configured nodes are available:] ERROR 2017-01-30 22:35:07,240 [main] Unable to establish connection. Check handler properties and client settings configuration. java.lang.IllegalArgumentException: unknown setting [shield.user]
必要なすべてのプラグインがインストールされていることを確認し、削除されたすべての設定に関するドキュメントの変更点を確認します。
親トピック: トラブルシューティング
8.2.16.1.4.3 トランスポート・クライアントのプロパティ・ファイルが見つからない
この例外を解決するには:
ERROR 2017-01-30 22:33:10,058 [main] Unable to establish connection. Check handler properties and client settings configuration.
gg.handler.name.clientSettingsFile
構成プロパティに、Elasticsearchトランスポート・クライアントの設定ファイル名が正しく設定されていることを確認します。gg.classpath
変数に正しいファイル名へのパスが含まれ、プロパティ・ファイルへのパスの最後にアスタリスク(*)のワイルドカードが含まれていないことを確認します。
親トピック: トラブルシューティング
8.2.16.1.4.4 クラスタ接続の問題
このエラーは、ElasticsearchハンドラがElasticsearchクラスタに接続できない場合に発生します。
Error: NoNodeAvailableException[None of the configured nodes are available:]
この問題をデバッグするには、次のステップを実行します。
-
Elasticsearchのサーバー・プロセスが実行中であることを確認します。
-
クライアント・プロパティ構成ファイルで、
cluster.name
プロパティを確認します。 -
クライアント・プロパティ・ファイルで、x-PackまたはShieldプラグインの認証の資格証明を確認します。
-
gg.handler.name.ServerAddressList
ハンドラ・プロパティを確認します。
親トピック: トラブルシューティング
8.2.16.1.4.5 サポートされていないTRUNCATE操作
Elasticsearchハンドラがソース証跡でTRUNCATE
操作を検出すると、次のエラーが発生します。
oracle.goldengate.util.GGException: Elasticsearch Handler does not support the operation: TRUNCATE
この例外エラー・メッセージは、RAeplicatプロセスが異常終了する前にハンドラのログ・ファイルに書き込まれます。Replicatのパラメータ・ファイルからGETTRUNCATES
パラメータを削除すると、このエラーが解決します。
親トピック: トラブルシューティング
8.2.16.1.4.6 一括実行エラー
DEBUG [main] (ElasticSearch5DOTX.java:130) - Bulk execute status: failures:[true] buildFailureMessage:[failure in bulk execution: [0]: index [cs2cat_s1sch_n1tab], type [N1TAB], id [83], message [RemoteTransportException[[UOvac8l][127.0.0.1:9300][indices:data/write/bulk[s][p]]]; nested: EsRejectedExecutionException[rejected execution of org.elasticsearch.transport.TransportService$7@43eddfb2 on EsThreadPoolExecutor[bulk, queue capacity = 50, org.elasticsearch.common.util.concurrent.EsThreadPoolExecutor@5ef5f412[Running, pool size = 4, active threads = 4, queued tasks = 50, completed tasks = 84]]];]
Elasticsearchが操作を処理するためのリソースが不足している可能性があります。MAXTRANSOPS
を使用してReplicatのバッチ・サイズを制限し、Elasticsearchの構成パラメータthread_pool.bulk.queue_size
の値と一致させることができます。
ノート:
Elasticsearchのパラメータthread_pool.bulk.queue_size
の変更は、Elasticsearchノードの再起動後にのみ有効です。
親トピック: トラブルシューティング
8.2.16.1.5 パフォーマンスに関する考慮事項
Elasticsearchハンドラのgg.handler.name.bulkWrite
プロパティは、Elasticsearchクラスタにソース証跡レコードをプッシュする際に、一度に1つずつ行うか、または一括書込みAPIを使用して一括で行うかを判断するために使用されます。このプロパティがtrueの場合、ソース証跡の操作は、一般的なReplicatパラメータ・ファイルのMAXTRANSOPS
パラメータによってサイズを制御されるバッチでElasticsearchクラスタにプッシュされます。一括書込みAPIを使用するとパフォーマンスが向上します。
Elasticsearchは、ノード内で管理されるスレッド・プールのメモリー消費量を改善するために、異なるスレッド・プールを使用します。また、これらのプールの多くにはそれに関連付けられたキューも存在し、保留中のリクエストは廃棄されずに保持されます。
一括操作の場合、デフォルトのキュー・サイズは50(バージョン5.2)および200(バージョン5.3)です。
一括APIのエラーを回避するには、ReplicatのMAXTRANSOPS
サイズを一括スレッドのプール・キュー・サイズの最小値と一致するように設定する必要があります。thread_pool.bulk.queue_size
構成プロパティはelasticsearch.yaml
ファイルで変更できます。
8.2.16.1.6 Shieldプラグインのサポートについて
Elasticsearchバージョン6.xおよび7.x (Elasticsearch 6.xおよび7.x用X-Packプラグイン)では、基本認証、SSLおよびIPフィルタリングを提供するShieldプラグインがサポートされています。Elasticsearch 6.xおよび7.xのX-Packプラグインにも同様の機能があります。追加のトランスポート・クライアントの設定は、gg.handler.name.clientSettingsFile
プロパティを使用してElasticsearchハンドラで構成できます。
8.2.16.1.7 DDL処理について
Elasticsearchハンドラはソース証跡内のDDLレコードには反応しません。新規ソース表のデータ操作レコードにより、Elasticsearchクラスタでインデックスまたはタイプの自動作成が行われます。
8.2.16.1.8 Elasticsearchハンドラの既知の問題
Elasticsearch: 非常に大きな数を入力しようとしています
非常に大きな数値は、Elasticsearchのドキュメントでは不正確な値になります。たとえば、9223372036854775807、-9223372036854775808です。これは、Elasticsearchサーバーの問題であり、Elasticsearchハンドラの制限ではありません。
この問題の回避策は、gg.handler.name.numberAsString=true
プロパティを使用してすべての数値を文字列として収集することです。
Elasticsearch: インデックスの問題
類似した列名で異なる列データ型を持つ複数の表がある場合、Elasticsearchハンドラでは同じインデックスにデータを入力できません。
証跡内のcatalog/schema/tablename
は、大文字と小文字を区別することがありますが、インデックス名は常に小文字です。
8.2.16.1.9 Elasticsearchハンドラ・トランスポート・クライアント依存性
Elasticsearchデータベースに接続するためのElasticsearchハンドラの依存性とはどのようなものでしょう。
Maven Central RepositoryのElasticsearchデータベースのアーティファクトは次のとおりです。
Maven groupId: org.elasticsearch.client
Maven atifactId: transport
Maven groupId: org.elasticsearch.client
Maven atifactId: x-pack-transport
8.2.16.1.10 Elasticsearch High Level RESTクライアント依存性
Elasticsearch High Level RESTクライアントのMaven座標は次のとおりです。
Maven groupId: org.elasticsearch.client
Maven atifactId: elasticsearch-rest-high-level-client
Maven version: 7.13.3
ノート:
Elasticsearch High Level RESTクライアントのjarファイルの依存性スタックにバージョンを混在させないでください。バージョンが混在すると、依存性の競合が発生します。8.2.16.2 Elasticsearch 8x
Elasticsearchハンドラを使用すると、大量のデータをすばやく、ほぼリアルタイムで保存、検索および分析できます。
この記事では、Elasticsearchハンドラ(Oracle GoldenGate for Distributed Applications and Analytics (GG for DAA) 21.10.0.0.0以降)の使用方法について説明します。Oracle GoldenGate for Distributed Applications and Analytics (GG for DAA)バージョン21.10.0.0では、Elasticsearchハンドラが、新しいElasticsearchクライアントをサポートするように変更されました。新しいクライアントは、Elasticsearch 8.xをサポートしています。
- 概要
- 機能の詳細
- インデックスについて
- ドキュメントについて
- データ型について
- 接続について
- サポートされている操作について
- DDL処理について
- 主キーの更新について
- UPSERTについて
- 一括書込みについて
- ルーティングについて
- リクエスト・ヘッダーについて
- Java APIクライアントについて
- Elasticsearchハンドラの設定
- Elasticsearchハンドラ構成
- Elasticsearchのセキュリティの有効化
Elasticsearchクラスタには、本番環境でセキュアな方法でアクセスする必要があります。最初にElasticsearchクラスタでセキュリティ機能を有効にし、それらのセキュリティ構成をElasticsearchハンドラ・プロパティ・ファイルに追加する必要があります - Elasticsearchクラスタのセキュリティ構成
最新バージョンのElasticsearchのセキュリティは、インストールおよび起動時に自動構成されます。ログには、自動構成されたクラスタのセキュリティ詳細が次のように出力されます: - Elasticsearchハンドラのセキュリティ構成
- トラブルシューティング
- Elasticsearchハンドラ・クライアント依存性
Elasticsearchデータベースに接続するためのElasticsearchハンドラの依存性とはどのようなものでしょう。
親トピック: Elasticsearch
8.2.16.2.1 概要
Elasticsearchは、拡張性の高い、オープン・ソースのフルテキスト検索および分析エンジンです。Elasticsearchを使用すると、大量のデータをすばやく、ほぼリアルタイムで保存、検索および分析できます。通常、複雑な検索機能を備えたアプリケーションを駆動する基盤となるエンジンやテクノロジとして使用されます。
Elasticsearchハンドラでは、Elasticsearch Javaクライアントを使用してElasticsearchノードに接続し、データを受信します。https://www.elastic.coを参照してください。
親トピック: Elasticsearch 8x
8.2.16.2.3 インデックスについて
Elasticsearchのインデックスは、類似した特性を持つドキュメントの集まりです。インデックスは小文字でのみ作成できます。Elasticsearchのタイプは、インデックス内の論理グループです。インデックスまたはタイプ内のすべてのドキュメントは、同じ番号およびタイプのフィールドを持つ必要があります。ElasticsearchのインデックスはRDBMSの表に相当します。
ソース証跡の3つの部分からなる表名の場合、インデックスはソース・カタログ、スキーマおよび表名を連結して構成されます。ソース表にカタログがない場合、Elasticsearchハンドラによってソース証跡スキーマがソース証跡表名と連結されてインデックスが構築されます。
表8-17 Elasticsearchのマッピング
ソース証跡 | Elasticsearchのインデックス |
---|---|
|
|
|
|
Elasticsearchクラスタにまだインデックスが存在しない場合は、Elasticsearchハンドラがデータを受信すると(ソース証跡でのINSERT
またはUPDATE
操作)、新しいインデックスが作成されます。
ハンドラがソース証跡でDELETE
操作を受信したが、インデックスがElasticsearchクラスタに存在しない場合、ハンドラはABEND
します。
親トピック: Elasticsearch 8x
8.2.16.2.4 ドキュメントについて
Elasticsearchのドキュメントは、インデックス付けのできる情報の基本単位です。インデックスまたはタイプ内に、必要な数のドキュメントを格納できます。各ドキュメントには_id
フィールドに基づく一意の識別子があります。
ハンドラがソース証跡でDELETE
操作を受信したが、インデックスがElasticsearchクラスタに存在しない場合、ハンドラはABEND
します。
親トピック: Elasticsearch 8x
8.2.16.2.5 データ型について
Elasticsearchでは次のデータ型がサポートされています。
-
32ビット整数
-
64ビット整数
-
Double
-
Date
-
String
-
Binary
親トピック: Elasticsearch 8x
8.2.16.2.6 接続について
クラスタは、データ全体を保持する1つまたは複数のノード(サーバー)の集合です。すべてのノードにわたるフェデレーテッド索引付けおよび検索機能が提供されます。
ノードはクラスタの一部であり、データを格納し、クラスタの索引付けおよび検索に参加する単一のサーバーです。
Elasticsearchハンドラのプロパティgg.handler.name.ServerAddressList
は、クラスタで使用可能なノードを指すように設定できます。
Elasticsearchハンドラは、クラスタ・ノードがトランスポート・レイヤー・プロトコルを使用して相互に内部的に通信する場合でも、Java APIクライアントを使用して、http/httpsプロトコルを介して前述のハンドラ・プロパティで構成されたElasticsearchクラスタ・ノードに接続します。
http/httpsのポートは、Elasticsearchクライアントを介した接続のハンドラ・プロパティ(トランスポート・ポートではなく)で構成する必要があります。
親トピック: Elasticsearch 8x
8.2.16.2.7 サポートされている操作について
Elasticsearchハンドラは、ターゲット内のElasticsearchクラスタへのレプリケーションに対して次の操作をサポートします。
-
INSERT
-
Elasticsearchハンドラでは、インデックスが存在しない場合、新規インデックスが作成されて新規ドキュメントが挿入されます。
_id
がすでに存在する場合、既存のレコードをsame _id
の新しいレコードで上書き(置換)します。 -
UPDATE
-
Elasticsearchのインデックスやドキュメントが存在する場合は、そのドキュメントが更新されます。Elasticsearchのインデックスやドキュメントが存在しない場合は、新規インデックスが作成され、
UPDATE
操作の列の値が新規ドキュメントとして挿入されます。 -
DELETE
-
Elasticsearchのインデックスやドキュメントの
_id
が存在する場合は、そのドキュメントが削除されます。ドキュメントの_id
が存在しない場合、何もせずに続行されます。Elasticsearchインデックスがない場合は、ハンドラをABEND
します。
TRUNCATE
操作はサポートされていません。
親トピック: Elasticsearch 8x
8.2.16.2.8 DDL処理について
Elasticsearchハンドラはソース証跡内のDDLレコードには反応しません。新規ソース表のデータ操作レコードにより、Elasticsearchクラスタでインデックスまたはタイプの自動作成が行われます。
親トピック: Elasticsearch 8x
8.2.16.2.9 主キーの更新について
Elasticsearchのドキュメント識別子はソース表の主キー列の値に基づいて作成されます。ドキュメント識別子は変更できません。
Elasticsearchハンドラでは、DELETE
に続いてINSERT
を実行することによってソース主キーの更新操作が処理されます。INSERT
の実行中、新しいドキュメントのフィールドが必要なフィールド数よりも少ないことがあります。
ソース表内のすべてのフィールドをINSERT
操作に含めるには、更新操作用にデータ全体のビフォア・イメージをキャプチャするように証跡のExtractを有効にするか、GETBEFORECOLS
を使用して必要な列のビフォア・イメージを書き込みます。
親トピック: Elasticsearch 8x
8.2.16.2.10 UPSERTについて
Elasticsearchハンドラは、UPDATE
操作のUPSERT
モードをサポートしています。このモードを有効にするには、Elasticsearchハンドラ・プロパティgg.handler.name.upsert
をtrue
に設定します。デフォルトでは、これは有効になっています。
UPSERT
モードでは、ソース証跡からのUPDATE
操作について、Elasticsearchクラスタにドキュメントのインデックスまたは_idがない場合、インデックスが作成され、操作がINSERT
に変換されて新しいレコードとして追加されます。
UPSERT
がfalse
の場合、Elasticsearchハンドラは同じシナリオでABEND
します。
HANDLECOLLISION
モードのOracle GoldenGateと一致するように拡張され、次のようになります:
- 挿入の衝突が発生すると、重複エラーが発生します。
- 更新または削除がないと、見つからないというエラーになります。
親トピック: Elasticsearch 8x
8.2.16.2.11 一括書込みについて
Elasticsearchハンドラは一括操作モードをサポートしており、複数の操作を1つのバッチにグループ化でき、バッチ全体を1つのショットでターゲットElasticsearchクラスタに適用できます。これにより、パフォーマンスが向上します。
一括モードを有効にするには、Elasticsearchハンドラ・プロパティ gg.handler.name.bulkWrite
の値をtrue
に設定します。デフォルトでは無効です。
一括モードにはいくつかの制限があります。一括操作で障害が発生した場合(例外がスローされた場合)、ターゲットでデータの一貫性が失われる可能性があります。たとえば、ターゲットElasticsearchクラスタからインデックスが欠落している削除操作では、例外が発生します。このような操作が一括モードのバッチの一部である場合、その操作の失敗後にバッチは適用されず、一貫性が失われます。
一括APIのエラーを回避するには、ハンドラのMAXTRANSOPS
サイズを一括スレッドのプール・キュー・サイズの最小値と一致するように設定する必要があります。
thread_pool.bulk.queue_size
構成プロパティはelasticsearch.yaml
ファイルで変更できます。
親トピック: Elasticsearch 8x
8.2.16.2.12 ルーティングについて
ドキュメントは、_routing
値を使用してインデックスの特定のシャードにルーティングされます。デフォルトの_routing
値は、ドキュメントの_id
フィールドです。カスタム・ルーティング・パターンを実装するには、ドキュメントごとにカスタム・ルーティング値を指定します。
Elasticsearchハンドラは、Elasticsearchハンドラ・プロパティ・ファイルのプロパティgg.handler.name.routingKeyMappingTemplate
でマッピング・フィールド・キーを指定することで、カスタム・ルーティングをサポートします。
親トピック: Elasticsearch 8x
8.2.16.2.13 リクエスト・ヘッダーについて
gg.handler.name.headers
でヘッダー名と値のペアを指定することで、追加のヘッダーの送信をサポートします。
親トピック: Elasticsearch 8x
8.2.16.2.14 Java APIクライアントについて
Elasticsearchハンドラは、Java APIクライアントを使用してElasticsearchクラスタを接続し、レプリケーションのすべての操作を実行するようになりました。内部でElasticsearch Restクライアントおよびトランスポート・クライアントを使用してすべての操作を実行します。高レベルのRestクライアントやトランスポート・クライアントなどの古いクライアントは非推奨であるため削除されました。
Elasticsearchクラスタのサポートされているバージョン
このハンドラを構成するには、Elasticsearchクラスタ・バージョン7.16.x以降を構成して実行する必要があります。Elasticsearchクラスタを構成するには、Elasticsearchの起動と実行を参照してください
親トピック: Elasticsearch 8x
8.2.16.2.15 Elasticsearchハンドラの設定
Elasticsearchクラスタが正しく設定され、そのクラスタが稼働していることを確認する必要があります。Elasticsearchクラスタのサポートされているバージョンは、7.16.x以降です。https://www.elastic.co/guide/en/elasticsearch/reference/current/index.htmlを参照してください。また、Kibanaを使用して設定を確認することもできます。
親トピック: Elasticsearch 8x
8.2.16.2.16 Elasticsearchハンドラ構成
Elasticsearchハンドラを構成するには、パラメータ・ファイル(res.prm
)およびプロパティ(elasticsearch.props
)ファイルを有効な値で構成する必要があります。
パラメータ・ファイル:
パラメータ・ファイルは、Elasticsearchハンドラの正しいプロパティ・ファイルを指す必要があります。
res.prm
)の必須パラメータは次のとおりです:
- REPLICAT replicat-name - TARGETDB LIBFILE libggjava.so SET property=dirprm/elasticsearch.props - MAP schema-name.table-name, TARGET schema-name.table-name
プロパティ・ファイル:
次に、Elasticsearchハンドラの実行に必要なプロパティ・ファイル(elasticsearch.props
)の必須プロパティを示します:
- gg.handlerlist=elasticsearch - gg.handler.elasticsearch.type=elasticsearch - gg.handler.elasticsearch.ServerAddressList=127.0.0.1:9200
表8-18 Elasticsearchハンドラの構成プロパティ
プロパティ名 | 必須(はい/いいえ) | 有効な値(デフォルト値) | 説明 |
---|---|---|---|
gg.handler.name.ServerAddressList |
はい |
[<Hostname|ip>:<port>, <Hostname|ip>:<port>, …]
|
Elasticsearchクラスタのクラスタ・ノードの有効なホスト名(またはIP)およびポート番号を':'で区切ったリスト。 |
gg.handler.name.BulkWrite |
いいえ |
|
一括書込みモードが有効(trueに設定)の場合、トランザクションの操作はバッチに格納され、バッチ・サイズに応じてバッチ(トランザクション)に対して1つのショットでターゲットESクラスタに適用されます。 |
gg.handler.name.Upsert |
いいえ |
|
アップサート・モードが有効になっている場合(trueに設定)、更新操作がターゲットESクラスタで欠落している場合は、新しいドキュメントとして挿入されます。 |
gg.handler.name.NumberAsString |
いいえ |
|
数値を文字列として格納する場合に設定します。 |
gg.handler.name.ProxyServer |
いいえ |
[Proxy-Hostname | Proxy-IP] |
Elasticsearchクラスタに接続するプロキシ・サーバーのホスト名(またはIP)。 |
gg.handler.name.ProxyPort |
いいえ |
[ポート番号] |
プロキシ・サーバーのポート番号。プロキシが構成されている場合は必須です。 |
gg.handler.name.ProxyProtocol |
いいえ |
|
プロキシ・サーバー接続のプロトコル。 |
gg.handler.name.ProxyUsername |
いいえ |
[プロキシ・サーバーのユーザー名] | プロキシ・サーバーに接続するためのユーザー名。 |
gg.handler.name.ProxyPassword
|
いいえ |
[プロキシ・サーバーのパスワード] | プロキシ・サーバーに接続するためのパスワード。これは、ORACLEWALLET を使用して暗号化できます。
|
gg.handler.name.AuthType |
いいえ |
|
Elasticsearchクラスタへの接続に使用する認証タイプ。 |
gg.handler.name.BasicAuthUsername |
いいえ |
[ESクラスタのユーザー名] | ESサーバーに接続するための基本認証のユーザー名資格証明。これは、ORACLEWALLET を使用して暗号化できます。
|
gg.handler.name.BasicAuthPassword |
いいえ |
[ESクラスタのパスワード] | ESサーバーに接続するための基本認証のパスワード資格証明。これは、ORACLEWALLET を使用して暗号化できます。
|
gg.handler.name.Fingerprint |
いいえ |
[フィンガープリント・ハッシュ・コード] | これは、すべての証明書のデータとその署名について計算された証明書のハッシュです。認証タイプSSLに適用できます。これは、ORACLEWALLET を使用して暗号化できます。
|
gg.handler.name.CertFilePath
|
いいえ |
[/path/to/CA_certificate_file.crt] |
SSL/TLS認証用のCA証明書ファイル(.crt )。
|
gg.handler.name.TrustStore |
いいえ
|
[/Path/to/trust-store-file] |
SSL/TLSサーバー認証用のサーバーのトラストストア・ファイルへのパス。認証タイプSSLに適用できます。 |
gg.handler.name.TrustStorePassword |
いいえ |
[trust-store password] |
SSL/TLS認証用のトラストストア・ファイルのパスワード。認証タイプSSLに適用できます。これは、ORACLEWALLET を使用して暗号化できます。
|
gg.handler.name.TrustStoreType |
いいえ |
[jks | pkcs12]
|
SSL/TLS認証のキーストア・タイプ。認証タイプがSSLの場合に適用できます。 |
gg.handler.name.RoutingKeyMappingTemplate |
いいえ |
[ルーティング・フィールド名] | これは、ESクラスタのインデックス内の特定のシャードにルーティングするために値がマップされるフィールド名を定義します。 |
gg.handler.name.Headers |
いいえ |
|
RESTコールで送信されるヘッダーの名前と値のペアのリスト。 |
|
いいえ
|
時間(秒) | リクエストがElasticsearchサーバーへの接続を待機する秒単位の時間。 |
gg.handler.name.MaxSocketTimeout |
いいえ
|
時間(秒) | リクエストがElasticsearchサーバーからのレスポンスを待機する時間(秒)。 |
gg.handler.name.IOThreadCount |
いいえ |
数 | IOリクエストを処理するスレッドの数。 |
gg.handler.name.NodeSelector |
いいえ |
|
事前定義済のストラテジANY またはSKIP_DEDICATED_MASTERS 。または、(NodeSelector.java インタフェースを実装することによって)カスタム・ストラテジを実装するクラスの完全修飾名。
|
クラスパスの設定
Elasticsearchハンドラ・プロパティgg.classpath
には、Java APIクライアントに必要なすべての依存性jarが含まれている必要があります。必要なクライアントJARファイルのリストおよびダウンロードについては、OGG_HOME/DependencyDownloader
ディレクトリの依存性ダウンローダ・スクリプトelasticsearch_java.sh
を使用して、バージョン8.7.0を引数として渡します。Elasticsearchクライアント依存性の詳細は、「Elasticsearchハンドラ・クライアント依存性」を参照してください。
ディレクトリOGG_HOME/DepedencyDownloader/dependencies/elasticsearch_rest_8.7.0
を作成し、その中のすべての依存性jarをダウンロードします。クライアント・ライブラリ・バージョン8.7.0は、サポートされているすべてのElasticsearchクラスタに使用できます。
この場所は、gg.classpath=/path/to/OGG_HOME/DepedencyDownloader/dependencies/elasticsearch_rest_8.7.0/*
のようにクラスパスで構成できます
パスの末尾に*ワイルドカード文字を含めると、そのディレクトリ内のすべてのJARファイルを関連するクラスパスに含めることができます。*.jar
は使用しないでください
Elasticsearchハンドラのサンプル構成:
参照用にElasticsearchハンドラを構成するには、Elasticsearchハンドラのサンプル・パラメータ(res.prm
)およびサンプル・プロパティ・ファイル(elasticsearch.props
)をディレクトリで使用できます:
OGG_HOME/AdapterExamples/big-data/elasticsearch
親トピック: Elasticsearch 8x
8.2.16.2.17 Elasticsearchのセキュリティの有効化
Elasticsearchクラスタには、本番環境でセキュアな方法でアクセスする必要があります。最初にElasticsearchクラスタでセキュリティ機能を有効にし、それらのセキュリティ構成をElasticsearchハンドラ・プロパティ・ファイルに追加する必要があります
親トピック: Elasticsearch 8x
8.2.16.2.18 Elasticsearchクラスタのセキュリティ構成
最新バージョンのElasticsearchのセキュリティは、インストールおよび起動時に自動構成されます。ログには、自動構成されたクラスタのセキュリティ詳細が次のように出力されます:
- Elasticsearch security features have been automatically configured!
- Authentication is enabled and cluster connections are encrypted.
- Password for the elastic user (reset with `bin/elasticsearch-reset-password -u elastic`): nnh0LWKZMLkw_QD5jxhE
- HTTP CA certificate SHA-256 fingerprint: 862e3f117c386a63f8f43db88760d463900e4c814590b8920e1c0e25f6db4df4
- Configure Kibana to use this cluster:
- Run Kibana and click the configuration link in the terminal when Kibana starts.
- Copy the following enrollment token and paste it into Kibana in your browser (valid for the next 30 minutes): eyJ2ZXIiOiI4LjYuMiIsImFkciI6WyIxMDAuNzAuOTguNzM6OTIwMCJdLCJmZ3IiOiI4NjJlM2YxMTdjMzg2YTYzZjhmNDNkYjg4NzYwZDQ2MzkwMGU0YzgxNDU5MGI4OTIwZTFjMGUyNWY2ZGI0ZGY0Iiwia2V5IjoiUTVCVF9vWUJ2TnZDVXBSSkNTWEM6NkJNc3ZXanBUYWUwa0l6V1pDU1JPQSJ9
これらのセキュリティ・パラメータ値は書き留めて、Elasticsearchハンドラを構成するために使用する必要があります。自動生成された証明書はすべて、ElasticSearch-install-directory/config/cert
フォルダ内に作成されます。
古いバージョンのElasticsearchに対してセキュリティが自動構成されていない場合、Elasticsearchクラスタの実行前に、次の構成ファイルで基本認証および暗号化された(SSL)認証などのセキュリティ機能を手動で有効にする必要があります。
Elasticsearch-installation-directory/config/elasticsearch.yml
#----------------------- BEGIN SECURITY AUTO CONFIGURATION ----------------
# The following settings, TLS certificates and keys have been
# configured for SSL/TLS authentication.
# -----------------------------------------------------------------------
# Enable security features
xpack.security.enabled: true
xpack.security.enrollment.enabled: true
# Enable encryption for HTTP API client connections
xpack.security.http.ssl:
enabled: true
keystore.path: certs/http.p12
# Enable encryption and mutual authentication between cluster nodes
xpack.security.transport.ssl:
enabled: true
verification_mode: certificate
keystore.path: certs/transport.p12
truststore.path: certs/transport.p12
# Create a new cluster with the current node only
# Additional nodes can still join the cluster later
cluster.initial_master_nodes: ["cluster-host-name"]
# Allow HTTP API connections from anywhere
# Connections are encrypted and require user authentication
http.host: 0.0.0.0
#----------------------- END SECURITY AUTO CONFIGURATION --------------
Elasticsearchクラスタのセキュリティ設定の詳細は、https://www.elastic.co/guide/en/elasticsearch/reference/current/manually-configure-security.htmlを参照してください親トピック: Elasticsearch 8x
8.2.16.2.19 Elasticsearchハンドラのセキュリティ構成
gg.handler.name.authType
を使用して構成できる3つのセキュリティ構成モードがサポートされています: Elasticsearch-installation-directory/config/elasticsearch.yml
- なし: このモードは、Elasticsearchスタックでセキュリティ機能が有効になっていない場合に使用されます。このモードに他の構成は必要ありません。Elasticsearchにはhttpプロトコルを使用して直接アクセスできます。
- Basic: このモードは、ユーザーのユーザー名とパスワードを設定して、ユーザーに対して基本セキュリティ機能のみが有効になっている場合に使用されます。Elasticsearchクラスタにアクセスするには、基本認証のユーザー名およびパスワード・プロパティをプロパティ・ファイルで指定する必要があります。
gg.handler.name.authType=basic gg.handler.name.basicAuthUsername=elastic gg.handler.name.basicAuthPassword=changeme
- SSL: このモード・モードは、ElasticsearchスタックでSSL/TLS認証が暗号化用に構成されている場合に使用されます。ハンドラをElasticsearchクラスタに接続できるようにするには、CAフィンガープリント・ハッシュ、CA証明書ファイル(
.crt
)へのパスまたはトラストストア・ファイルへのパス(トラストストア・タイプおよびトラストストア・パスワード)のいずれかを指定する必要があります。このモードでは、Elasticsearchスタックで構成されたSSL/TLS認証と基本認証の組合せもサポートされています。両方がElasticsearchクラスタで構成されている場合、ユーザーは基本認証プロパティ(ユーザー名とパスワード)とSSL関連プロパティ(フィンガープリント、証明書ファイルまたはトラストストア)の両方を構成する必要があります。gg.handler.name.authType=ssl # if basic authentication username and password is configured. gg.handler.name.basicAuthUsername=username gg.handler.name.basicAuthPassword=password # for SSL one of these three must be configured gg.handler.name.certFilePath=/path/to/ESHome/config/certs/http_ca.crt OR gg.handler.name.fingerprint=862e3f117c386a63f8f43db88760d463900e4c814590b8920e1c0e25f6db4df4 OR gg.handler.name.trustStore=/path/to/http.p12 gg.handler.name.trustStoreType=pkcs12 gg.handler.name.trustStorePassword=pass
機密情報を含む前述のセキュリティ関連プロパティはすべて、Oracle Walletを使用してプロパティ・ファイル内の機密値を暗号化するように構成できます。
親トピック: Elasticsearch 8x
8.2.16.2.20 トラブルシューティング
- エラー:
org.elasticsearch.ElasticsearchException[Index [index-name] is not found]
- この例外は、削除操作があり、対応する削除操作のインデックスがElasticsearchクラスタに存在しない場合に発生します。これは、upsert=false
およびインデックスがない場合の更新操作でも発生する可能性があります。 - エラー:
javax.net.SSL.SSLHandshakeException:[ Connection failed ]
- これは、前述のelasticsearch.yml
ファイルで認証を有効にするためのプロパティが認証タイプSSLにない場合に発生する可能性があります。 - エラー:
javax.net.ssl.SSLException: [Received fatal alert: bad_certificate]
- この問題は、ホストの検証に失敗した場合に発生します。Elasticsearchのcert-utilsを使用して生成された証明書にホスト情報が含まれていることを確認します。
親トピック: Elasticsearch 8x
8.2.16.2.21 Elasticsearchハンドラ・クライアント依存性
Elasticsearchデータベースに接続するためのElasticsearchハンドラの依存性とはどのようなものでしょう。
Maven Central RepositoryのElasticsearchデータベースのアーティファクトは次のとおりです。
Maven groupId: co.elastic.clients
Maven atifactId: elasticsearch-java
バージョン: 8.7.0
8.2.16.2.21.1 Elasticsearch 8.7.0
commons-codec-1.15.jar commons-logging-1.2.jar elasticsearch-java-8.7.0.jar elasticsearch-rest-client-8.7.0.jar httpasyncclient-4.1.5.jar httpclient-4.5.13.jar httpcore-4.4.13.jar httpcore-nio-4.4.13.jar jakarta.json-api-2.0.1.jar jsr305-3.0.2.jar parsson-1.0.0.jar
親トピック: Elasticsearchハンドラ・クライアント依存性