PolarDB for MySQL クラスターを OpenSearch にデータソースとして接続し、データを自動的に検索インデックスに同期します。OpenSearch は、オンデマンドまたはスケジュールに基づいて完全データをプルし、バイナリロギングを介した増分変更でインデックスを最新の状態に保ちます。
前提条件
開始する前に、以下を確認してください。
バージョン 5.6、5.7、または 8.0 で実行されている PolarDB for MySQL クラスター
OpenSearch アプリケーションと同じリージョンにあるクラスター
OpenSearch コンソールへのログインに使用する同じ Alibaba Cloud アカウントで作成されたクラスター (OpenSearch は他のアカウントが所有するクラスターにアクセスできません)
クラスターでバイナリロギングが有効になっていること (デフォルトでは無効 — 以下の「バイナリロギングの有効化」をご参照ください)
バイナリロギングの有効化
データソースとして追加する前に、PolarDB for MySQL クラスターで以下のパラメーターを設定します。
| パラメーター | 必須値 | デフォルト | 備考 |
|---|---|---|---|
loose_polar_log_bin | ON_WITH_GTID | OFF | GTID モードでバイナリロギングを有効にします |
binlog_row_image | FULL | FULL | デフォルトで正しく設定されています。変更されていないことを確認してください。 |
これらのパラメーターを変更するには、PolarDB コンソールの [パラメーター設定] ページに移動します。
バイナリロギングが有効になっていない場合、インデックスの再作成が停止する可能性があります。その場合は、ソースデータベースにテストテーブルを作成し、インデックスの再作成が完了するまで、1 分あたり 1 ~ 2 行を書き込むか更新して、連続したバイナリログを生成してください。
データベースアカウントの設定
データソースの接続に使用されるデータベースアカウントには、Data Transmission Service (DTS) を介してソースデータベース内のすべてのテーブルを読み取る権限が必要です。以下を確認してください。
アカウントが
SHOW CREATE TABLE *.*を正常に実行できること。アカウントが同期するすべてのテーブルに対して
SELECT権限を持っていること。
データソースが構成された後、データベースアカウントまたはその権限を変更しないでください。アカウントの変更はリアルタイム同期を中断させ、新しいアプリケーションバージョンの作成を妨げる可能性があります。アカウント認証情報を変更する必要がある場合は、データソースを削除し、新しい認証情報で再追加してください。
OpenSearch IP アドレスをクラスターのホワイトリストに追加
OpenSearch は、固定された IP アドレスセットから PolarDB for MySQL クラスターにアクセスします。ご利用のリージョンの CIDR ブロックをクラスターの IP アドレスホワイトリストに追加してください。
| リージョン | CIDR ブロック |
|---|---|
| 中国 (杭州) | 100.104.190.128/26, 100.104.241.128/26 |
| 中国 (北京) | 100.104.16.192/26, 100.104.179.0/26 |
| 中国 (上海) | 100.104.37.0/26, 100.104.46.0/26 |
| 中国 (深セン) | 100.104.87.192/26, 1100.104.132.192/26 |
| 中国 (青島) | 100.104.240.128/26, 1100.104.111.128/26 |
| 中国 (張家口) | 100.104.155.192/26, 100.104.238.64/26 |
| ドイツ (フランクフルト) | 100.104.127.0/26, 100.104.35.192/26 |
| 米国 (シリコンバレー) および 米国 (バージニア) | 100.104.193.128/26, 100.104.119.128/26 |
| シンガポール | 100.104.58.192/26, 100.104.74.192/26 |
OpenSearch が PolarDB for MySQL データにアクセスする場合、内部エンドポイントまたはパブリックエンドポイントのどちらを使用しても、トラフィック料金は発生しません。エンドポイントはいつでも切り替えることができます。
PolarDB for MySQL データソースの接続
新しいアプリケーションを作成するときに、PolarDB for MySQL データソースを設定します。新しいアプリケーションを作成する。既存のアプリケーションにデータソースを追加するには、オフライン変更 を使用します。
[データソースの選択] パネルで、[PolarDB] を選択し、[データベースに接続] をクリックします。
接続パラメーターを入力し、[接続] をクリックします。接続に失敗した場合、OpenSearch でエラーが表示されます:
パラメーター 説明 クラスター ID ご利用の PolarDB for MySQL クラスターの ID。PolarDB コンソールで確認できます。ID は大文字と小文字を区別します。例: pc-uf6c056ny9tiaj1l7データベース名 接続するデータベースの名前。大文字と小文字は区別されません。 ユーザー名 テーブルスキーマと完全データを読み取るためのデータベースアカウント。大文字と小文字を区別します。 パスワード データベースアカウントのパスワード。パーセント記号 ( %) を含めることはできません。エラー 対処法 PolarDB for MySQL クラスターが OpenSearch アプリケーションと同じリージョンにありません。 クラスター ID を確認し、クラスターとアプリケーションの両方が同じリージョンにあることを確認してください。リージョンが一致しているにもかかわらずエラーが解決しない場合は、チケットを送信してください。 PolarDB for MySQL データソースへの接続に失敗しました。 クラスター ID、データベース名、ユーザー名、およびパスワードがすべて正しいことを確認してください。 現在の PolarDB for MySQL クラスターにテーブルが存在しません。 テーブル名を確認し、クラスターにテーブルが存在することを確認してください。 PolarDB for MySQL クラスターの構成が無効です。 PolarDB コンソールでこのクラスターのパラメーター設定ページに移動し、設定を修正してください。 同期するテーブルを選択し、[OK] をクリックします。
テーブル名は大文字と小文字を区別します。
アスタリスク (
*) をワイルドカードとして使用して、同じ名前のプレフィックスを持つ複数のテーブルを照合します。たとえば、table_*はtable_a、table_b、および類似のテーブルに一致します。一致するすべてのテーブルは同じスキーマを共有する必要があります。
フィールドマッピングを構成します。OpenSearch はテーブルからソースフィールドを自動的にロードします。それらをアプリケーションの送信先フィールドにマッピングします。同期中のフィールド値の変換に関する詳細については、「データ処理プラグイン」をご参照ください。
フィルター条件を指定して同期する行を制御し、[送信] をクリックしてアプリケーションスキーマを保存します。フィルター構文の詳細については、「ApsaraDB RDS および PolarDB データソースのフィールドをフィルターする条件を設定する」をご参照ください。
標準アプリケーションでは、フィルター条件はサポートされていません。
データ同期の仕組み
OpenSearch が各行を処理する方法を理解することで、インデックスの動作を予測し、データ不整合を回避できます。
完全データ同期
OpenSearch はプライマリデータベースからすべての行をプルします。各行について:
行がインデックスに存在しない場合、OpenSearch は新しいドキュメントを作成します。
行がすでにインデックスに存在する場合、OpenSearch は既存のドキュメントを置き換えます。
フィルター条件を満たさない行はインデックスから除外されます。プライマリキー値が送信先テーブルの既存のドキュメントと一致する行も除外されます。
完全データ同期が完了すると、OpenSearch はバイナリログを使用して増分同期に切り替わり、その後の変更をほぼリアルタイムで適用します。
増分同期
OpenSearch はバイナリログを介して行レベルの変更をキャプチャします。ソースで 15 日以上増分データが生成されない場合、データ同期が失敗する可能性があります。手動でオフライン変更をトリガーして回復してください。詳細については、「オフライン変更の実行」をご参照ください。
サポートされている機能
スケジュールされた、またはオンデマンドの完全データ同期: ソースデータベースまたはテーブル内のすべてのデータを手動で、または自動スケジュールでプルします。
複数テーブルの行マージ: 複数のデータソースにわたる複数のテーブルからの行を、アプリケーション内の単一テーブルにマージします。ソーステーブルは同じスキーマとデータ処理プラグインの構成を共有する必要があります。重複するプライマリキー値は上書きできます。
フィールド値の変換: データ処理プラグインを使用して、インデックス作成前にソースフィールド値を変換します。
フィルター条件: フィルター条件を適用して、完全データまたは増分データから一致する行のみを含めます。
ワイルドカードテーブルマッチング:
*を使用して、共通の名前プレフィックスを持つテーブルを照合します。クローンインスタンス: PolarDB for MySQL クラスターは、データソースとしてクローンインスタンスをサポートしています。
読み書き分離: PolarDB for MySQL クラスターは読み書き分離をサポートしています。
制限事項
| 制限事項 | 詳細 |
|---|---|
| サポートされているバージョン | PolarDB for MySQL 5.6、5.7、および 8.0 のみ |
| 同一アカウント要件 | PolarDB for MySQL クラスターは、OpenSearch コンソールへのアクセスに使用される同じ Alibaba Cloud アカウントによって作成されている必要があります。 |
| 同一リージョン要件 | クラスターと OpenSearch アプリケーションは同じリージョンにある必要があります。 |
| 標準アプリケーション | 増分データをプッシュするために OpenSearch SDK または API オペレーションを使用することはできません。フィルター条件はサポートされていません。 |
| サポートされていない SQL ステートメント | REPLACE INTO、TRUNCATE、および DROP はサポートされていません。DELETE を使用してデータを削除してください。 |
| パスワードの制限 | パスワードにはパーセント記号 (%) を含めることはできません。% を含むパスワードは、「Illegal hex characters in escape (%) pattern」というエラーでインデックスの再作成を失敗させます。 |
| クロススキーマフィールド連結 | 異なるスキーマを使用するソーステーブルからのフィールド値を連結することはできません。 |
| パラメーターの推奨事項 | インデックスの再作成またはオフライン変更を実行する前に、loose_max_statement_time と connect_timeout の両方を 0 に設定してください。完全データ同期が完了した後、ワークロードに基づいて値を調整してください。 |
注意事項
データ型
ソーステーブル内の
DATETIMEまたはTIMESTAMP型のフィールドはミリ秒に変換されます。対応する送信先フィールドの型をアプリケーションでTIMESTAMPに設定してください。DATEまたはDATETIMEフィールドでフィルタリングする場合、完全な形式 (createtime>'2018-03-01 00:00:00') を使用してください。2018-3-1 00:00:00'のような短い形式はエラーを返します。
複数のデータソース
ソーステーブルが同じスキーマとデータ処理プラグインの構成を共有している場合、単一のアプリケーションテーブルに対して複数のデータソースを構成できます。
ApsaraDB RDS for MySQL または PolarDB データソースが PolarDB-X インスタンスにアタッチされている場合、PolarDB-X インスタンスで実際に使用されているデータベースシャードの名前を指定してください。データベースシャードの後、PolarDB-X 上の各論理データベースには 1 つのシャドウデータベースと 8 つのシャードがあります。データはランダムにシャードに書き込まれます。
完全データインポートのタイミング
OpenSearch はプライマリデータベースからのみ完全データをプルします。完全データインポートとインデックスの再構築は、オフピーク時間にスケジュールしてください。
SSL 暗号化
PolarDB for MySQL クラスターで SSL 暗号化が有効になっている場合、SSL 証明書を有効な状態に保ってください。期限切れの証明書は接続失敗の原因となります。
トラブルシューティング
データソース構成後のインデックスの再作成の停止
バイナリログが継続的に生成されていない可能性があります。ソースデータベースにテストテーブルを作成し、インデックスの再作成が完了するまで、1 分あたり 1 ~ 2 行を書き込むか更新してください。これにより、バイナリログイベントの安定したストリームが確保されます。
支払い遅延によるインデックスの再作成の失敗
PolarDB for MySQL データソースが構成されている高度なアプリケーションに支払い遅延がある場合、未払い残高を支払い、OpenSearch コンソールから手動でインデックスの再作成をトリガーしてください。
複数テーブルからの同期時の重複するプライマリキー
同じスキーマを持つ複数のソーステーブルから同期する場合、テーブル間でプライマリキー値が重複すると、ドキュメントが互いに上書きされます。一意キーを作成するには、StringCatenateExtractor プラグインを使用して、元のプライマリキーとテーブル名を連結します。
ソースフィールドを pk (実際のプライマリキーフィールド名に置き換えてください) と $table (テーブル名に解決されるシステム変数) に設定し、ハイフン (-) または別のカスタム文字を区切り文字として使用してください。
たとえば、テーブルが my_table_0 でプライマリキー値が 123456 の場合、連結されたキーは 123456-my_table_0 になります。