Alibaba Cloud Elasticsearch は、オープンソースの Elasticsearch と完全な互換性を持ち、セキュリティ、機械学習、グラフ、APM などの商用機能を提供します。データ分析と検索シナリオ向けに設計されており、エンタープライズレベルのアクセス制御、セキュリティ監視とアラート、および自動レポート生成をサポートします。Data Transmission Service (DTS) を使用して、Elastic Compute Service (ECS) インスタンス上の自己管理 MySQL データベースから Alibaba Cloud Elasticsearch インスタンスにデータを同期し、データセットを迅速に構築できます。
前提条件
-
バージョン 5.5、5.6、6.3、6.7、または 7.x の宛先 Alibaba Cloud Elasticsearch インスタンスを作成済みであること。詳細については、「Alibaba Cloud Elasticsearch インスタンスの作成」をご参照ください。
-
自己管理 MySQL データベースのバージョンが 5.1、5.5、5.6、5.7、または 8.0 であること。
注意事項
-
初期完全データ同期中、DTS はソースデータベースと宛先データベースの読み書きリソースを消費し、データベースの負荷が増加します。データベースのパフォーマンスが低い、インスタンスの仕様が低い、またはビジネストラフィックが重い (たとえば、ソースデータベースに多くの低速 SQL クエリやプライマリキーのないテーブルがある、または宛先データベースでデッドロックが発生するなど) 場合、データベースの負荷が増加し、サービスが利用できなくなる可能性があります。データを同期する前に、ソースインスタンスと宛先インスタンスのパフォーマンスを評価してください。両方のインスタンスの CPU 使用率が 30% 未満であるなど、オフピーク時にデータ同期を実行することを推奨します。
-
DTS は DDL 操作を同期しません。データ同期中にソースデータベースのテーブルで DDL 操作が実行された場合は、そのテーブルを同期オブジェクトから削除し、Alibaba Cloud Elasticsearch インスタンスから対応するインデックスを削除してから、そのテーブルを同期オブジェクトに再度追加する必要があります。詳細については、「同期オブジェクトの削除」および「同期オブジェクトの追加」をご参照ください。
-
同期したいテーブルに列を追加するには、まず Alibaba Cloud Elasticsearch インスタンスで対応するインデックスのマッピングを変更します。次に、ソース MySQL データベースで DDL 操作を実行します。最後に、DTS インスタンスを一時停止して再起動します。
-
MySQL インスタンスから Alibaba Cloud Elasticsearch インスタンスに同期されたデータに空の文字列値が含まれている場合、そのデータは Alibaba Cloud Elasticsearch インスタンスに書き込まれる前に LONG 型に変換されます。これにより、タスクが失敗します。
-
MySQL インスタンスから Alibaba Cloud Elasticsearch インスタンスに同期されたデータに位置情報が含まれ、緯度と経度が逆の順序で保存されている場合、データが Alibaba Cloud Elasticsearch インスタンスに書き込まれる際にエラーが発生します。
Elasticsearch インスタンスの開発およびテスト仕様はサポートされていません。
課金
|
同期タイプ |
料金 |
|
スキーマ同期と完全データ同期 |
無料です。 |
|
増分データ同期 |
有料です。詳細については、「課金概要」をご参照ください。 |
サポートされる SQL 操作
INSERT、DELETE、UPDATE
データ型のマッピング
-
ソースデータベースと Elasticsearch インスタンスは、常に直接マッピングできるとは限らない異なるデータ型をサポートしています。構造の初期化中、DTS はターゲットの Elasticsearch インスタンスがサポートするデータ型に基づいてデータ型をマッピングします。詳細については、「構造初期化のためのデータ型マッピング」をご参照ください。
説明DTS のスキーマ移行プロセス中、DTS は
mappingのdynamicパラメーターを設定しません。このパラメーターの動作は、ご利用の Elasticsearch インスタンスの設定に依存します。ソースデータが JSON 型の場合、特定のキーに対して、その対応する値がテーブル内のすべての行で同じデータ型であることを確認する必要があります。そうでない場合、DTS で同期の問題が発生する可能性があります。詳細については、「dynamic」をご参照ください。 -
Elasticsearch とリレーショナルデータベース間のマッピングは、Elasticsearch のバージョンによって異なります。
重要Elasticsearch 7.0 以降、インデックスは複数のタイプをサポートしなくなり、Elasticsearch 8.0 ではタイプが完全に削除されました。デフォルトでは、同期または移行タスクを設定すると、DTS はリレーショナルデータベースのテーブルを Elasticsearch のインデックスにマッピングします。このマッピングは、同期または移行するオブジェクトを設定する際に変更できます。
Elasticsearch 7.0 以降
Elasticsearch
リレーショナルデータベース
index
table
document
row
field
column
mapping
schema
Elasticsearch 7.0 より前のバージョン
Elasticsearch
リレーショナルデータベース
index
database
type
table
document
row
field
column
mapping
schema
事前準備
操作手順
-
データ同期インスタンスを購入します。詳細については、「購入手順」をご参照ください。
説明インスタンスの購入時に、ソースインスタンスを MySQL に、宛先インスタンスを Elasticsearch に、同期トポロジを 一方向同期 に設定します。
-
DTS コンソールにログインします。
説明Data Management (DMS) コンソールに自動的にリダイレクトされた場合は、右下隅の
アイコンをクリックし、次に
をクリックして従来の DTS コンソールに戻ることができます。 -
左側のナビゲーションウィンドウで、データ同期 をクリックします。
-
[同期タスク] ページの上部で、宛先インスタンスが配置されているリージョンを選択します。
-
購入したデータ同期タスクを見つけ、[タスクの設定] をクリックします。
-
ソースインスタンスと宛先インスタンスを設定します。
カテゴリ
設定
説明
N/A
同期タスク名
DTS は自動的にタスク名を生成します。識別しやすいように、わかりやすい名前を指定することを推奨します。名前は一意である必要はありません。
ソースインスタンス
インスタンスタイプ
[ECS インスタンス上のセルフマネージドデータベース] を選択します。
インスタンスリージョン
購入時にソースインスタンスに選択したリージョンです。このパラメーターは変更できません。
ECS インスタンス ID
自己管理 MySQL データベースがデプロイされている ECS インスタンスの ID を選択します。
データベースタイプ
これは MySQL に固定されており、変更できません。
ポート
自己管理 MySQL データベースのポート番号を入力します。
データベースアカウント
自己管理 MySQL データベースのアカウントを入力します。
説明アカウントには、すべての同期オブジェクトに対する REPLICATION CLIENT、REPLICATION SLAVE、SHOW VIEW、および SELECT 権限が必要です。
データベースのパスワード
データベースアカウントのパスワードを入力します。
宛先インスタンス
インスタンスタイプ
これはElasticsearch に固定されており、変更できません。
インスタンスリージョン
データ同期インスタンスを購入したときに選択した宛先インスタンスのリージョンです。このパラメーターは変更できません。
Elasticsearch
Alibaba Cloud Elasticsearch インスタンスの ID を選択します。
データベースアカウント
Alibaba Cloud Elasticsearch インスタンスへの接続に使用するデータベースアカウントを入力します。デフォルト値は elastic です。
データベースのパスワード
データベースアカウントのパスワードを入力します。
-
ページ右下の [ホワイトリストの設定と次へ] をクリックします。
ソースまたは宛先データベースが ApsaraDB RDS for MySQL や ApsaraDB for MongoDB などの Alibaba Cloud データベースインスタンスである場合、DTS は自動的に DTS サーバーの CIDR ブロックをインスタンスの IP アドレスホワイトリストに追加します。ソースまたは宛先データベースが Elastic Compute Service (ECS) インスタンスでホストされている自己管理データベースである場合、DTS は自動的に DTS サーバーの CIDR ブロックを ECS インスタンスのセキュリティグループルールに追加し、ECS インスタンスがデータベースにアクセスできることを確認する必要があります。自己管理データベースが複数の ECS インスタンスでホストされている場合は、各 ECS インスタンスのセキュリティグループルールに DTS サーバーの CIDR ブロックを手動で追加する必要があります。ソースまたは宛先データベースがデータセンターにデプロイされているか、サードパーティのクラウドサービスプロバイダーによって提供されている自己管理データベースである場合は、DTS がデータベースにアクセスできるように、データベースの IP アドレスホワイトリストに DTS サーバーの CIDR ブロックを手動で追加する必要があります。詳細については、「DTS サーバーの IP アドレスをホワイトリストに追加する」をご参照ください。
警告DTS サーバーのパブリック IP アドレスの CIDR ブロックを自動または手動で追加すると、セキュリティリスクが生じる可能性があります。この製品を使用することにより、これらの潜在的なリスクを認識し、受け入れるものとします。基本的なセキュリティ保護を実装する必要があります。これらの保護には、パスワードセキュリティの強化、CIDR ブロックのオープンポートの制限、内部 API 通信での認証の使用、不要な CIDR ブロックの定期的なレビューと制限などが含まれますが、これらに限定されません。あるいは、専用回線、VPN Gateway、または Smart Access Gateway などの内部ネットワークを介してデータベースに接続することもできます。
-
インデックス名、既存のテーブルの処理モード、および同期オブジェクトを設定します。
設定
説明
インデックス名
-
テーブル名
テーブル名 を選択した場合、宛先の Alibaba Cloud Elasticsearch インスタンスに作成されるインデックスの名前はテーブル名と同じになります。この例では、インデックス名は
customerです。 -
データベース名_テーブル名
データベース名_テーブル名 を選択した場合、宛先の Alibaba Cloud Elasticsearch インスタンスに作成されるインデックスの名前は
データベース名_テーブル名の形式になります。この例では、インデックス名はdtstestdata_customerです。
既存のテーブルの処理モード
-
エラーの事前チェックと報告:DTS は宛先データベースに同じ名前の既存のインデックスがあるかチェックします。見つかった場合、事前チェックは失敗し、タスクは開始されません。それ以外の場合、事前チェックは合格します。
説明宛先データベースで同じ名前のインデックスを削除または名前変更できない場合は、「宛先インスタンスで同期オブジェクトの新しい名前を指定する」ことで名前の競合を回避できます。
-
エラーを無視して続行:DTS は宛先データベースで同じ名前のインデックスのチェックをスキップします。
警告エラーを無視して続行 を選択すると、データの不整合が発生し、ビジネスにリスクをもたらす可能性があります。例:
-
マッピングが一致し、宛先データベースのレコードがソースデータベースのレコードと同じプライマリキー値を持つ場合、完全データ同期中に宛先データベースのレコードが保持されます。増分データ同期中には、ソースからの変更によって上書きされます。
-
マッピングが一致しない場合、初期データ同期が失敗したり、部分的なデータになったり、完全に失敗したりする可能性があります。
-
同期オブジェクトの選択
ソースオブジェクト ボックスで、同期したいオブジェクトをクリックし、
アイコンをクリックして 選択中のオブジェクト ボックスに移動します。データベースとテーブルを同期オブジェクトとして選択できます。
マッピング名の変更
宛先インスタンスで同期されたオブジェクトの名前を変更します。詳細については、「データベース、テーブル、および列のマッピング」をご参照ください。
DMS オンライン DDL 中の一時テーブルのレプリケート
Data Management (DMS) を使用してソースデータベースでオンライン DDL 変更を実行する場合、DDL 変更によって生成された一時テーブルを同期するかどうかを選択できます。
-
○:オンライン DDL 変更によって生成された一時テーブルを同期します。
説明オンライン DDL 変更によって大量の一時テーブルデータが生成された場合、データ同期タスクが遅延する可能性があります。
-
いいえ:オンライン DDL 変更によって生成された一時テーブルを同期しません。ソースデータベースからの元の DDL 操作のみが同期されます。
説明このオプションを選択すると、宛先データベースのテーブルがロックされます。
ネットワーク不安定時のリトライ期間
DTS がソースまたは宛先インスタンスに接続できない場合、デフォルトで 720 分 (12 時間) リトライします。カスタムのリトライ期間を指定することもできます。指定された期間内に DTS がソースまたは宛先インスタンスに再接続した場合、同期タスクは自動的に再開されます。それ以外の場合、タスクは失敗します。
説明接続リトライ中のタスク実行時間に対して課金されます。ビジネスニーズに基づいてリトライ期間をカスタマイズするか、ソースおよび宛先インスタンスがリリースされたらすぐに DTS インスタンスをリリースしてください。
-
-
選択中のオブジェクト ボックスで、同期したいテーブルにカーソルを合わせ、編集 をクリックします。宛先の Alibaba Cloud Elasticsearch インスタンスで、テーブルのインデックス名、タイプ名、その他の情報を設定します。
パラメーター
説明
インデックス名
詳細については、「Elasticsearch の基本概念」をご参照ください。
警告-
インデックス名とタイプ名には、特殊文字としてアンダースコア (_) のみを含めることができます。
-
同じ構造を持つ複数のソーステーブルを単一の宛先インデックスに同期するには、各ソーステーブルに同じ宛先インデックスとタイプ名を設定する必要があります。そうしないと、タスクが失敗したり、データが失われたりする可能性があります。
タイプ名
フィルター条件
SQL フィルター条件を設定して、同期するデータをフィルタリングできます。フィルター条件を満たすデータのみが宛先インスタンスに同期されます。詳細については、「SQL 条件を使用したデータのフィルタリング」をご参照ください。
パーティション
パーティションを設定するかどうかを選択します。○ を選択した場合は、[パーティションキー列] と [パーティション数] も設定する必要があります。
_routing の設定
_routing設定は、ドキュメントを宛先の Alibaba Cloud Elasticsearch インスタンスの特定のシャードにルーティングできます。詳細については、「_routing」をご参照ください。-
○ を選択して、ルーティングにカスタム列を使用します。
-
× を選択して、ルーティングに
_idを使用します。
説明宛先の Alibaba Cloud Elasticsearch インスタンスがバージョン 7.x の場合は、× を選択する必要があります。
_id の値
-
[テーブルのプライマリキー列]
複合プライマリキーは単一の列にマージされます。
-
ビジネスキー
[ビジネスキー] を選択した場合は、対応する [ビジネスキー列] も設定する必要があります。
パラメーターの追加
必要な パラメーター と 値 を選択します。フィールドパラメーターとその値の詳細については、Elasticsearch の公式ドキュメントをご参照ください。
説明DTS は、ドロップダウンリストから選択できるパラメーターのみをサポートします。
-
-
上記の設定が完了したら、ページ右下の [事前チェックして開始] をクリックします。
説明-
同期タスクが開始される前に事前チェックが実行され、合格した後にのみタスクを開始できます。
-
事前チェックが失敗した場合は、失敗した項目の横にある
アイコンをクリックして詳細を表示します。-
原因に基づいて問題を修正し、再度事前チェックを実行できます。
-
警告をトリガーした項目を修正する必要がない場合は、無視 または [警告を無視して再実行] をクリックして警告をスキップし、再度事前チェックを実行できます。
-
-
-
事前チェック ダイアログボックスに 事前チェック完了 と表示されたら、事前チェック ダイアログボックスを閉じます。同期タスクは自動的に開始されます。
-
タスクが初期化を完了し、同期中 状態になるのを待ちます。
データ同期 ページでデータ同期タスクのステータスを表示できます。
同期されたインデックスとデータの表示
タスクが 同期中 状態になったら、Alibaba Cloud Elasticsearch インスタンスに接続して、同期されたインデックスとデータが要件を満たしていることを確認します。この例では、Elasticsearch-Head プラグインを使用します。
結果が要件を満たさない場合は、インデックスとそのデータを削除し、データ同期タスクを再設定できます。
Head プラグインの [Browser] タブで、dtstestdata_customer と dtstestdata_order インデックスが存在することがわかります。テーブルには、address、id、name などのフィールドを持つ同期されたレコードが表示されます。レコードをクリックすると、その生の JSON データを表示できます。