リアルタイム分析を実現するために、Data Transmission Service (DTS) を使用して、自己管理 TiDB データベースから AnalyticDB for MySQL V3.0 クラスターへデータを同期します。
仕組み
DTS は、変更データキャプチャ(CDC)バッファーとして機能する Kafka クラスターを介して TiDB の増分変更を読み取り、その後、そのデータを AnalyticDB for MySQL V3.0 に書き込みます。全体のパイプラインは以下のとおりです。
TiDB → Kafka クラスター → DTS → AnalyticDB for MySQL V3.0
TiDB はバイナリログを DTS に対して直接公開しません。増分変更を Kafka トピックに公開するには、以下の CDC コンポーネントのいずれかを設定する必要があります。
TiDB Binlog — Pump および Drainer コンポーネントを使用
TiCDC — Canal-JSON 形式を使用
DTS は Kafka トピックのパーティション 0 から読み取り、変更を宛先クラスターに適用します。
制限事項
タスクの設定を開始する前に、これらの制限事項をご確認ください。
ソースデータベースの制限
| 制限 | 詳細 |
|---|---|
| プライマリキーまたは一意制約が必要 | 同期対象のテーブルには、すべての一意フィールドを含む PRIMARY KEY または一意制約(UNIQUE constraint)が必要です。この制約がないテーブルでは、宛先に重複レコードが生成される可能性があります。 |
| 同期中の DDL 制限 | スキーマ同期または完全データ同期中に、データベースまたはテーブルのスキーマを変更する DDL 文を実行しないでください。タスクは失敗します。 |
| プレフィックスインデックス長の損失 | TiDB はメタデータ内にプレフィックスインデックス長を保存しないため、AnalyticDB for MySQL V3.0 へのデータ同期時にこの長さが失われ、宛先インスタンスの障害を引き起こす可能性があります。プレフィックスインデックスを使用するテーブルについては、手動でインデックス長を修正してください。 |
| タスクあたりのテーブル数制限 | 個別のテーブル(全データベースではなく)を選択し、名前を変更する場合、1 つのタスクで最大 1,000 個のテーブルをサポートします。この上限を超える場合は、複数のタスクを設定するか、代わりに全データベースを同期してください。 |
| Kafka のセットアップが必要 | DTS タスクを作成する前に、Kafka クラスターをデプロイし、TiDB Binlog または TiCDC をインストールしてください。 |
| アウトバウンド帯域幅 | TiDB をホストするサーバーには十分なアウトバウンド帯域幅が必要です。帯域幅が不足していると、同期速度が低下します。 |
宛先およびタスクの制限
| 制限 | 詳細 |
|---|---|
| Kafka パーティション | DTS は Kafka トピックのパーティション 0 のみから読み取ります。トピックは、正確に 1 つのパーティションで作成してください。 |
| カスタムプライマリキーが必要 | AnalyticDB for MySQL V3.0 でカスタムプライマリキーを指定するか、プライマリキー列 を データベース・テーブル・カラムの構成 ステップで設定してください。これを設定しないと、タスクが失敗する可能性があります。 |
| ディスク使用率のしきい値 | AnalyticDB for MySQL V3.0 クラスター内の任意のノードのディスク使用率が 80 % を超えると、DTS タスクは遅延し、エラーを返します。開始前に必要なディスク領域を見積もってください。 |
| バックアップとの競合 | DTS の実行中に宛先クラスターのバックアップが実行されている場合、タスクは失敗します。 |
| 異種データ型 | TiDB と AnalyticDB for MySQL V3.0 のデータ型は 1 対 1 でマッピングされません。詳細については、「初期スキーマ同期におけるデータ型のマッピング」をご参照ください。 |
| FLOAT/DOUBLE の精度 | DTS は FLOAT および DOUBLE 値を取得するために ROUND(COLUMN,PRECISION) を使用します。FLOAT のデフォルト精度は 38 桁、DOUBLE は 308 桁です。これらのデフォルト値が要件を満たすことを確認してください。 |
| タスクオフセットの初期化 | タスクを作成した後、すぐにソースデータベースで操作を実行するか、テストデータを挿入してください。これにより、タスクオフセットが更新されます。このステップを省略すると、過度なレイテンシーによってタスクが失敗する可能性があります。 |
| 他のソースからのデータ | 同期中は、他のソースから宛先クラスターにデータを書き込まないでください。これにより、データの不整合が発生します。 |
| 失敗したタスクの再開 | DTS は、失敗したタスクを最大 7 日間自動的に再試行します。ワークロードを宛先クラスターに切り替える前に、失敗したタスクを停止または解放してください。あるいは、宛先データベースから DTS の書き込み権限を REVOKE することで、再開されたタスクが新規データを上書きできないようにしてください。 |
| 完全データ同期のパフォーマンス | 完全データ同期は、ソースおよび宛先データベースの両方に負荷をかけます。CPU 使用率が 30 % 未満の非ピーク時間帯に実行してください。 |
| 完全同期後のテーブルスペースサイズ | 完全データ同期中の同時 INSERT 操作により、テーブルの断片化が発生します。宛先のテーブルスペースはソースよりも大きくなります。 |
| DDL 失敗 | 宛先データベースで DDL 文が失敗した場合、タスクは継続します。失敗した DDL 文を確認するには、タスクログをご参照ください。 |
| DTS テクニカルサポートの SLA | DTS タスクの実行に失敗した場合、DTS テクニカルサポートは 8 時間以内にタスクの復旧を試みます。復旧中、タスクが再起動され、タスクパラメーターが変更される場合があります。変更可能なのはタスクパラメーターのみであり、データベースパラメーターは変更されません。 |
増分同期の SQL 操作
| 操作タイプ | サポートされる文 |
|---|---|
| DML | INSERT、UPDATE、DELETE |
| DDL | CREATE TABLE、DROP TABLE、RENAME TABLE、TRUNCATE TABLE、ADD COLUMN、DROP COLUMN |
DTS が UPDATE 文を AnalyticDB for MySQL V3.0 に書き込む際、自動的に REPLACE INTO に変換します。UPDATE 文がプライマリキーに影響を与える場合、DTS は DELETE の後に INSERT を実行する形式に変換します。課金
| 同期タイプ | コスト |
|---|---|
| スキーマ同期および完全データ同期 | 無料 |
| 増分データ同期 | 課金済み。「課金概要」を参照してください。 |
前提条件
開始する前に、以下の条件を満たしていることをご確認ください。
必要な権限
| データベース | 必要な権限 | 参考情報 |
|---|---|---|
| TiDB | 同期対象オブジェクトに対する SELECT 権限、SHOW VIEW 権限 | 権限管理 |
| AnalyticDB for MySQL V3.0 | 宛先データベースに対する読み取りおよび書き込み権限 | データベースアカウントの作成 |
増分データキャプチャのセットアップ
DTS は、TiDB からの増分変更イベントが Kafka トピックに公開されることを必要とします。以下のいずれかの方法を選択してください。
方法の選択
| TiDB Binlog | TiCDC | |
|---|---|---|
| コンポーネント | Pump + Drainer | TiCDC(TiUP 管理) |
| 出力形式 | デフォルトの TiDB バイナリログ形式 | Canal-JSON 形式 |
| 推奨用途 | 既存の TiDB Binlog デプロイメント | 新規セットアップおよび TiDB v4.0 以降 |
| DTS 設定 | TiDB データベースのデフォルトバイナリログ形式を使用 | TiCDC Canal-JSON 形式を使用 |
Kafka クラスターの準備
どちらの方法でも Kafka クラスターが必要です。以下のいずれかを選択してください。
自己管理 Kafka クラスター:Apache Kafka をデプロイします。「Apache Kafka ドキュメント」をご参照ください。
ApsaraMQ for Kafka インスタンス:インスタンスを作成します。「はじめにの概要」をご参照ください。
選択するオプションに関係なく:
ネットワーク遅延を最小限にするため、Kafka クラスターを TiDB サーバーと同じネットワークまたは仮想プライベートクラウド(VPC)にデプロイしてください。
Kafka ブローカーのパラメーター
message.max.bytesおよびreplica.fetch.max.bytesを大きな値に設定し、コンシューマーのパラメーターfetch.message.max.bytesも同様に大きな値に設定してください。これにより、クラスターが TiDB からのバイナリログデータ量を処理できるようになります。「Kafka 構成リファレンス」をご参照ください。
クラスターのセットアップ後、正確に 1 つのパーティションを持つトピックを作成してください。DTS はパーティション 0 のみから読み取るため、複数のパーティションを設定するとデータ損失が発生します。
オプション 1:TiDB Binlog
TiDB と同じ内部ネットワーク上のサーバーに Pump および Drainer をデプロイします。「TiDB Binlog クラスターのデプロイ」をご参照ください。
Drainer の構成ファイルを編集し、下流シンクとして Kafka クラスターを指定します。「Binlog Consumer Client ユーザーガイド」をご参照ください。次に進む前に、TiDB サーバーが Kafka クラスターに接続できることを確認してください。
DTS サーバーの CIDR ブロックを TiDB データベースの許可リストに追加します。 詳細については、「DTS サーバーの CIDR ブロックを追加する」をご参照ください。
オプション 2:TiCDC
TiUP を使用して TiCDC をインストールします。TiDB クラスターに新しい TiCDC ノードを追加するか、既存のノードをスケールアウトします。「TiCDC のデプロイおよび保守」をご参照ください。
TiDB から Kafka クラスターへ増分データを複製する changefeed を作成します。
tiup cdc cli changefeed createを使用し、Canal-JSON sink URI を指定します。「Kafka へのデータ複製」「」「Kafka へのデータ同期」を参照してください。続行する前に、TiDB サーバーが Kafka クラスターに接続できることを確認してください。
データ同期タスクの作成
ステップ 1:データ同期ページへ移動
DTS コンソールまたは DMS コンソールを使用します。
DTS コンソール
DMS コンソール
手順は、DMS コンソールのレイアウトによって異なる場合があります。「シンプルモード」および「DMS コンソールのレイアウトとスタイルのカスタマイズ」をご参照ください。
ステップ 2:ソースおよび宛先データベースの構成
タスクの作成 をクリックし、以下のパラメーターを構成します。
ソースデータベース
| パラメーター | 説明 |
|---|---|
| タスク名 | DTS タスクの名前です。DTS が自動的に生成します。識別しやすいように、意味のある名前を指定してください。名前は一意である必要はありません。 |
| DMS データベースインスタンスの選択 | 既存の登録済みデータベースを選択するか、この欄を空欄のままにして、以下のパラメーターを入力してください。データベースを登録するには:DMS コンソールで、[DMS データベースインスタンスの追加] をクリックします。DTS コンソールでは、[データベース接続] ページを使用します。詳細については、「Alibaba Cloud データベースインスタンスの登録」および「サードパーティのクラウドサービスまたは自己管理データベース上でホストされているデータベースの登録」をご参照ください。 |
| データベースタイプ | TiDB を選択します。 |
| アクセス方法 | TiDB のデプロイ場所に応じたアクセス方法を選択します。この例では Self-managed Database on ECS を使用します。他のアクセス方法の場合は、まず必要な環境を準備してください。「準備の概要」をご参照ください。 |
| インスタンスリージョン | TiDB が配置されているリージョンです。 |
| ECS インスタンス ID | TiDB をホストする ECS インスタンスの ID です。 |
| ポート番号 | TiDB サービスのポートです。デフォルト: 4000。 |
| データベースアカウント | 必要な権限を持つ TiDB アカウントです。 |
| データベースパスワード | TiDB アカウントのパスワードです。 |
| 増分データの移行 | 常に はいアラート通知設定 に設定してください。この設定は変更できません。増分データなしで同期する場合は、代わりにデータ移行タスクを作成してください。「自己管理 TiDB データベースから AnalyticDB for MySQL V3.0 クラスターへのデータ移行」をご参照ください。 |
| Kafka クラスタータイプ | Kafka クラスターのデプロイ場所に応じたアクセス方法を選択します。この例では Self-managed Database on ECS を使用します。もし Express Connect、VPN Gateway、または Smart Access Gateway を選択した場合は、接続済み VPC から VPC を選択し、ドメイン名または IP を指定してください。 |
| Kafka データソースコンポーネント | [TiDB データベースのデフォルト Binlog フォーマットを使用する](TiDB Binlog 向け)または[TiCDC Canal-JSON フォーマットを使用する](TiCDC 向け)を、「増分データキャプチャの設定」で設定した内容に基づいて選択します。 |
| ECS インスタンス ID | Kafka クラスターがデプロイされている ECS インスタンスの ID です。 |
| ポート番号 | Kafka サービスのポートです。 |
| Kafka クラスターアカウント / Kafka クラスターパスワード | Kafka のユーザー名およびパスワードです。認証が有効になっていない場合は、空白のままにしてください。 |
| Kafka バージョン | Kafka のバージョンです。バージョンが 1.0 以降の場合は、1.0 を選択します。 |
| 暗号化 | セキュリティ要件に応じて、暗号化なし または SCRAM-SHA-256 を選択します。 |
| トピック | TiDB からの増分データを受け取る Kafka トピックです。 |
宛先データベース
| パラメーター | 説明 |
|---|---|
| DMS データベースインスタンスの選択 | 登録済みの既存データベースを選択するか、この項目を空欄のままにして以下のパラメーターを入力してください。 |
| データベースタイプ | AnalyticDB for MySQL 3.0 を選択します。 |
| アクセス方法 | Alibaba Cloud インスタンス を選択します。 |
| インスタンスリージョン | AnalyticDB for MySQL V3.0 クラスターが配置されているリージョンです。 |
| インスタンス ID | 宛先の AnalyticDB for MySQL V3.0 クラスターの ID です。 |
| データベースアカウント | 読み取りおよび書き込み権限を持つデータベースアカウントです。 |
| データベースパスワード | データベースアカウントのパスワードです。 |
ステップ 3:接続性のテスト
接続性のテストと続行 をクリックし、DTS サーバーの CIDR ブロック ダイアログボックスで 接続性のテスト をクリックします。
DTS CIDR ブロックが既にデータベースのセキュリティ設定に追加されていない場合は、続行する前にそれらを追加してください。詳細については、「DTS サーバーの CIDR ブロックをセキュリティ設定に追加する」をご参照ください。
ステップ 4:同期対象オブジェクトの構成
オブジェクトの構成 ステップで、以下のパラメーターを設定します。
| パラメーター | 説明 |
|---|---|
| 同期タイプ | スキーマ同期、完全データ同期、および 増分データ同期 を選択します。これら 3 つは必須です。増分データ同期 はデフォルトで選択されていますが、他の 2 つも必ず選択してください。完全データ同期は、増分同期の履歴データベースラインを提供します。 |
| 競合テーブルの処理モード | [事前チェックとエラーの報告](デフォルト):送信先に同名のテーブルが存在する場合、事前チェックが失敗します。オブジェクト名マッピングを使用して、送信先テーブルを削除せずに競合を解決します。詳細については、「オブジェクト名マッピング」をご参照ください。[エラーを無視して続行]:同名のテーブルに対する事前チェックをスキップします。完全同期中は、既存の送信先レコードが保持されます。増分同期中は、送信先レコードが上書きされます。注意:この設定を使用すると、データの不整合が発生する可能性があります。 |
| 宛先インスタンスでのオブジェクト名の大文字小文字 | 宛先におけるデータベース名、テーブル名、および列名の大文字小文字を制御します。デフォルト: [DTS デフォルトポリシー]。詳細については、「宛先インスタンスにおけるオブジェクト名の大文字小文字の指定」をご参照ください。 |
| ソースオブジェクト | 同期するデータベースまたはテーブルを選択し、矢印アイコンをクリックして 選択済みオブジェクト に移動します。 |
| 選択済みオブジェクト | 宛先でオブジェクト名を変更するには、オブジェクトを右クリックしてオブジェクト名マッピングを使用します。複数のオブジェクトを一度に名前変更するには、一括編集 をクリックします。SQL WHERE 条件で行をフィルターするには、テーブルを右クリックして条件を指定します。「フィルター条件の指定」をご参照ください。オブジェクト名の変更は、依存オブジェクトを破損させる可能性があります。 |
ステップ 5:高度な設定の構成
次へ:高度な設定 をクリックし、以下の設定を行います。
| パラメーター | 説明 |
|---|---|
| 失敗した接続の再試行時間 | タスク開始後に、DTS が失敗した接続を再試行する時間です。範囲:10~1440 分。デフォルト:720 分。30 分以上に設定してください。複数のタスクが同じソースまたは宛先データベースを共有する場合、最も短い再試行時間が優先されます。 |
| その他の問題の再試行時間 | DTS が失敗した DDL または DML 操作を再試行する時間です。範囲:1~1440 分。デフォルト:10 分。10 分以上に設定してください。この値は、失敗した接続の再試行時間 よりも小さくする必要があります。 |
| 完全データ同期のスロットリングを有効化 | 完全データ同期中の読み取りおよび書き込み負荷を制限します。ソースデータベースへのクエリ/秒(QPS)、完全データ移行の RPS、および 完全移行のデータ移行速度(MB/s) を構成します。完全データ同期 が選択されている場合にのみ利用可能です。 |
| 増分データ同期のスロットリングを有効化 | 増分データ同期中の書き込み負荷を制限します。増分データ同期の RPS および 増分同期のデータ同期速度(MB/s) を構成します。 |
| 環境タグ | DTS インスタンスを環境(例:本番またはテスト)で識別するための任意のタグです。 |
| ETL の構成 | 抽出・変換・書き出し (ETL) を有効にしてデータ処理文を入力するには、[はい] を選択します。[いいえ] を選択するとスキップされます。「ETL とは |
| モニタリングとアラート | タスクの失敗またはレイテンシーしきい値の超過に対するアラートを設定するには、[はい] を選択します。アラートのしきい値と通知設定を構成します。詳細については、「モニタリングとアラートの設定」をご参照ください。 |
ステップ 6:データ検証の構成(任意)
[次のステップ:データ検証] をクリックして、データ検証を設定します。詳細については、「データ検証タスクの設定」をご参照ください。
ステップ 7:データベースおよびテーブルフィールドの構成(任意)
次へ:データベースおよびテーブルフィールドの構成 をクリックして、各テーブルについて AnalyticDB for MySQL V3.0 固有の設定を構成します。
このステップは、スキーマ同期 が選択されている場合にのみ利用可能です。定義ステータス を すべて に設定すると、すべてのテーブルを表示および変更できます。
| パラメーター | 説明 |
|---|---|
| タイプ | AnalyticDB for MySQL V3.0 におけるテーブルのタイプです。 |
| プライマリキー列 | テーブルのプライマリキー列です。複合プライマリキーをサポートします。 |
| 分散キー | テーブルの分散キーです。プライマリキー列のうち 1 つ以上である必要があります。 |
| パーティションキー / パーティショニングルール / パーティションライフサイクル | テーブルのパーティショニング設定です。「CREATE TABLE」をご参照ください。 |
ステップ 8:タスクの保存および事前チェックの実行
このタスク構成の API パラメーターをプレビューするには、次へ:タスク設定の保存および事前チェック の上にポインターを置き、OpenAPI パラメーターのプレビュー をクリックします。
次へ:タスク設定の保存および事前チェック をクリックして、設定を保存し、事前チェックを開始します。
事前チェックが失敗した場合:
各失敗項目の横にある 詳細の表示 をクリックし、問題を修正して再度事前チェックを実行してください。
警告が表示される項目については、警告の詳細の確認 をクリックし、次に 無視、OK、そして 再チェック をクリックしてください。警告を無視すると、データの不整合が発生する可能性があります。
ステップ 9:インスタンスの購入
成功率 が 100% に達したら、次へ:インスタンスの購入 をクリックします。
購入ページで、以下の設定を行います。
| パラメーター | 説明 |
|---|---|
| 課金方法 | サブスクリプション:固定期間の前払い方式です。長期利用に適しており、コスト効率が高くなります。従量課金:時間単位で課金されます。短期利用に適しています。不要になったらインスタンスをリリースして、不要な課金を回避してください。 |
| リソースグループ設定 | 同期インスタンスのリソースグループです。デフォルトは [デフォルトリソースグループ] です。詳細については、「Resource Management とは |
| インスタンスクラス | データ同期インスタンスのインスタンスクラス同期速度の階層です。「」をご参照ください。 |
| サブスクリプション期間 | サブスクリプション課金方法で利用可能です。選択肢:1~9 か月、1 年、2 年、3 年、5 年。 |
Data Transmission Service(従量課金)サービス利用規約 を読み、同意してください。
購入して開始 をクリックし、確認ダイアログボックスで OK をクリックします。
タスクはタスクリストに表示されます。そこで進行状況を監視してください。