コンソールまたは手動で、セルフマネージド ClickHouse クラスターから ApsaraDB for ClickHouse Enterprise Edition クラスターへデータを移行する方法について説明します。
前提条件
セルフマネージドクラスター:データベースアカウントおよびパスワードが作成済みであること。また、当該アカウントにはデータベースおよびテーブルの読み取り権限とSYSTEM コマンド実行権限が必要です。(外部テーブルを移行する場合、そのアカウントはアカウントパスワードを含むため、
displaySecretsInShowAndSelect権限も必要です)。ターゲットクラスター:「データベースアカウントおよびパスワード」が必要です。このアカウントには「最高権限」が必要です。
ネットワーク接続
セルフホストクラスターとターゲットクラスターが同一の仮想プライベートクラウド (VPC)内にある場合、ターゲットクラスターのすべてのノードの IP アドレスおよびそのスイッチの IPv4 CIDR ブロックを、セルフホストクラスターの許可リストに追加します。
ApsaraDB for ClickHouse の許可リストを設定するには、「許可リストの設定」をご参照ください。
セルフホストクラスターの許可リストを設定するには、該当製品のドキュメントをご参照ください。
ターゲット ApsaraDB for ClickHouse クラスター内のすべてのノードの IP アドレスを確認するには、以下のクエリを実行します。
SELECT * FROM system.clusters WHERE internal_replication = 1;
セルフホストクラスターとターゲットクラスターが異なる VPC 内にある場合、またはセルフホストクラスターがオンプレミスまたは他のクラウドプラットフォーム上にある場合は、まずネットワーク接続を確立する必要があります。「ターゲットクラスターとデータソース間のネットワーク接続確立方法」をご参照ください。
説明このシナリオでは、異なる VPC 間の CIDR ブロックの競合を回避するために、IP マッピングを設定することがあります。IP マッピングを設定した場合は、マップされた IP アドレスを両方のクラスターの許可リストにも追加する必要があります。
移行検証
データ移行を開始する前に、ビジネス互換性およびパフォーマンスを検証し、移行が成功することを確認するためのテスト環境を作成してください。検証が完了したら、本番環境でデータ移行を開始します。この重要なステップにより、潜在的な問題を早期に特定・解決でき、スムーズな移行を実現し、本番環境への影響を最小限に抑えることができます。
「移行タスクの作成」を行います。
「パフォーマンスボトルネック分析」を実施し、移行の成功を検証します。
以下のいずれかの方法でクラウド互換性を検証します:
手動による検証。詳細については、「互換性分析および対応策」をご参照ください。
コンソールによる検証。詳細については、「(任意)SQL 互換性の確認」をご参照ください。
移行手法
移行手法 | メリット | デメリット | 適用範囲 |
コンソール移行 | ビジュアルインターフェイスを提供し、メタデータの手動移行を不要にします。 | クラスター全体に対する完全移行および増分移行のみをサポートします。特定のデータベースやテーブル、または部分的な履歴データの移行はサポートしていません。 | クラスター全体の移行に最適です。 |
手動移行 | 移行対象のデータベースおよびテーブルを細かく制御できます。 | 操作が複雑であり、メタデータの手動移行が必要です。 |
|
操作手順
コンソール移行
考慮事項
移行中の動作
移行対象のデータベースおよびテーブルのマージ処理は、ターゲットクラスター上で一時停止されますが、セルフマネージドクラスターでは継続されます。
説明移行タスクの実行時間が長すぎると、ターゲットクラスターに過剰な量のメタデータが蓄積される可能性があります。そのため、移行タスクの実行時間は5 日以内に収めるよう推奨します。5 日を超えて実行されたタスクは自動的にキャンセルされます。
ターゲットクラスターは
defaultクラスターを使用する必要があります。セルフマネージドクラスターで異なるクラスター名を使用している場合、分散テーブルのクラスター定義はシステムによって自動的にdefaultに変換されます。
移行範囲
移行プロセスでは、一部のエンジンのデータベースおよびテーブルスキーマが変換されます。詳細については、以下の表をご参照ください。
データベーススキーマ:以下のデータベースエンジンがサポートされています。
エンジン名
エンジン変換
Atomic
Replicated データベースに置き換えられます
Replicated
変更なし
Ordinary
Replicated データベースに置き換えられます
テーブルスキーマ:以下のテーブルエンジンがサポートされています。
エンジン名
エンジン変換
MaterializedView
変更なし
View
GenerateRandom
Buffer
URL
Null
Merge
SharedMergeTree
SharedVersionedCollapsingMergeTree
SharedSummingMergeTree
SharedReplacingMergeTree
SharedAggregatingMergeTree
SharedCollapsingMergeTree
SharedGraphiteMergeTree
MergeTree
SharedMergeTree に置き換えられます
ReplicatedMergeTree
VersionedCollapsingMergeTree
SharedVersionedCollapsingMergeTree に置き換えられます
ReplicatedVersionedCollapsingMergeTree
SummingMergeTree
SharedSummingMergeTree に置き換えられます
ReplicatedSummingMergeTree
ReplacingMergeTree
SharedReplacingMergeTree に置き換えられます
ReplicatedReplacingMergeTree
AggregatingMergeTree
SharedAggregatingMergeTree に置き換えられます
ReplicatedAggregatingMergeTree
ReplicatedCollapsingMergeTree
SharedCollapsingMergeTree に置き換えられます
CollapsingMergeTree
GraphiteMergeTree
SharedGraphiteMergeTree に置き換えられます
ReplicatedGraphiteMergeTree
データ:MergeTree ファミリーのテーブルのデータは増分で移行されます。
上記のデータベースおよびテーブルスキーマは自動的に移行されます。それ以外のすべてのデータベースおよびテーブルスキーマは、発生した警告またはエラーに基づいて手動で対応する必要があります。
データがこれらの要件を満たさない場合は、手動移行をご利用ください。
クラスターへの影響
セルフマネージドクラスター
移行タスクがセルフマネージドクラスターからデータを読み取る際、CPU 使用率およびメモリ使用率が上昇します。
DDL 操作は許可されていません。
ターゲットクラスター
移行タスクがターゲットクラスターにデータを書き込む際、CPU 使用率およびメモリ使用率が上昇します。
移行対象のデータベースおよびテーブルに対しては DDL 操作が許可されていません。ただし、移行対象外のデータベースおよびテーブルにはこの制限は適用されません。
移行中のデータベースおよびテーブルのマージ処理は停止されますが、それ以外のデータベースおよびテーブルには影響しません。
移行完了後、クラスターは一定期間、頻繁なマージ処理を実行し、I/O 使用率が上昇し、ビジネスリクエストのレイテンシーが増加する可能性があります。リクエストレイテンシーへの潜在的影響を計画するため、移行後のマージ時間の算出を推奨します。
ステップ 1:セルフマネージドクラスターの確認およびシステムテーブルの有効化
増分移行を行う場合、セルフマネージドクラスターの config.xml ファイルを更新し、system.part_log および system.query_log を設定する必要があります。
system.part_log および system.query_log が有効になっていない場合
system.part_log と system.query_log を有効にしていない場合は、config.xml ファイルに以下の構成を追加してください。
system.part_log
<part_log>
<database>system</database>
<table>part_log</table>
<partition_by>event_date</partition_by>
<order_by>event_time</order_by>
<ttl>event_date + INTERVAL 15 DAY DELETE</ttl>
<flush_interval_milliseconds>7500</flush_interval_milliseconds>
</part_log>system.query_log
<query_log>
<database>system</database>
<table>query_log</table>
<partition_by>event_date</partition_by>
<order_by>event_time</order_by>
<ttl>event_date + INTERVAL 15 DAY DELETE</ttl>
<flush_interval_milliseconds>7500</flush_interval_milliseconds>
</query_log>system.part_log および system.query_log が有効になっている場合
config.xml ファイル内の
system.part_logおよびsystem.query_logの構成を、以下の内容と比較します。不整合がある場合は、構成を一致するように変更してください。そうしないと、移行が失敗するか、または遅く進行する可能性があります。system.part_log
<part_log> <database>system</database> <table>part_log</table> <partition_by>event_date</partition_by> <order_by>event_time</order_by> <ttl>event_date + INTERVAL 15 DAY DELETE</ttl> <flush_interval_milliseconds>7500</flush_interval_milliseconds> </part_log>system.query_log
<query_log> <database>system</database> <table>query_log</table> <partition_by>event_date</partition_by> <order_by>event_time</order_by> <ttl>event_date + INTERVAL 15 DAY DELETE</ttl> <flush_interval_milliseconds>7500</flush_interval_milliseconds> </query_log>設定を修正した後、
drop table system.part_logおよびdrop table system.query_logステートメントを実行します。system.part_logおよびsystem.query_logテーブルは、ビジネステーブルにデータを挿入すると自動的に再作成されます。
ステップ 2:ターゲットクラスターの互換性設定
ターゲットクラスターの動作をセルフマネージドクラスターとできる限り互換性のある状態にするために、「ターゲットクラスターへの接続」を行い、compatibility パラメーターを変更して、ターゲットクラスターとセルフマネージドクラスターのバージョン番号を一致させます。
compatibility を以前のバージョンに設定すると、ParallelRepica などの新機能が利用できなくなります。
例:
SELECT currentProfiles(); // ユーザーが使用するプロファイルを取得します。
SELECT
profile_name,
setting_name,
value
FROM system.settings_profile_elements
WHERE (setting_name = 'compatibility') AND (profile_name = 'xxxx'); // compatibility 設定値を照会します。
ALTER PROFILE XXXX SETTINGS compatibility = '23.8'; // プロファイルを変更します。ステップ 3:移行タスクの作成
ApsaraDB for ClickHouse コンソール にログインします。クラスターリスト ページで、Enterprise Edition インスタンスのリスト を選択し、ターゲットクラスターの ID をクリックします。
左側のナビゲーションウィンドウで、 をクリックします。
移行タスクの作成 をクリックします。
ソースおよびターゲットインスタンスの選択
パラメーター
説明
例
タスク名
移行タスクの名前です。名前には大文字、小文字、数字のみ使用できます。名前は一意である必要があり、大文字と小文字は区別されません。
MigrationTask1229
配信元インスタンスクラスター名
セルフマネージドインスタンスのクラスター名は、
SELECT * FROM system.clusters;を実行することで取得できます。default
VPC IP アドレス
クラスター内の各シャードの IP および PORT アドレスはカンマで区切ります。形式:
IP:PORT,IP:PORT,....セルフマネージドクラスターの IP アドレスおよびポートを取得するには、以下の SQL ステートメントを使用します:
SELECT shard_num, replica_num, host_address as ip, port FROM system.clusters WHERE cluster = '<cluster_name>' and replica_num = 1;パラメーター:
cluster_name:セルフマネージドクラスターの名前。
replica_num=1は最初のレプリカを選択します。他のレプリカセットを選択したり、各シャードから 1 つのレプリカを選択したりすることもできます。
重要ClickHouse の VPC ドメイン名または SLB アドレスは使用できません。
ネットワークアドレス変換 (NAT) を使用する場合は、シャードのパブリック側の IP アドレスおよびポートを指定します。
192.168.0.5:9000,192.168.0.6:9000
データベースアカウント
セルフマネージドクラスターのデータベースアカウントです。
test
データベースパスワード
セルフマネージドクラスターのデータベースアカウントのパスワードです。
test******
ソースインスタンスのカーネルバージョン
バージョン取得 をクリックします。
22.8.5.29
取得したソースインスタンスのバージョンに基づき、以下のいずれかの操作を行います:
ソースインスタンスのバージョンが 22.10 以降の場合、次のステップ をクリックします。
ソースインスタンスのバージョンが 22.10 より前の場合、プロンプトに従って ターゲットインスタンス情報 を入力し、その後 次のステップ をクリックします。
バージョンの取得に失敗した場合:取得失敗の原因として、ソースインスタンス情報の誤りやネットワーク接続の問題が考えられます。プロンプトに従って問題を解決し、再度 バージョン取得 をクリックします。
説明コミュニティ版の以前のバージョンと Enterprise Edition の間でパラメーターの互換性がないため、ソースインスタンスのバージョンが 22.10 より前の場合、ソースからターゲットへのデータのプッシュによる同期を行う必要があります。これには、ターゲットクラスターの IP アドレスをセルフマネージドネットワークからルーティング可能にする必要があります。セルフマネージドネットワークと Enterprise Edition インスタンスが同一の VPC 内にある場合、または VPC ピアリング接続で接続されている場合、元の IP アドレスを直接使用できます。
接続性および構成の確認
確認の開始 をクリックします。
確認中に、右上隅の
アイコンをクリックしてリアルタイムの進行状況を確認できます。確認が完了したら、結果に応じて後続の操作を実行します。
結果レベル および確認項目を選択し、
ボタンをクリックして対応する確認結果を表示できます。結果の説明は以下のとおりです。成功:すべての確認が通過した場合、次のステップ をクリックして続行します。
警告:ブロッキングではない問題を示します。警告がビジネスまたは移行に影響を与えるかどうかを判断する必要があります。警告メッセージに基づいて問題を無視するか、解決してから再度 確認の開始 をクリックできます。
エラー:ブロッキングとなる問題を示します。エラーメッセージに基づいてエラーを解決し、再度 確認の開始 をクリックする必要があります。
エラーメッセージおよび解決策については、「よくある質問」をご参照ください。
データベースおよびテーブルスキーマの確認
確認の開始 をクリックします。
確認中に、右上隅の
アイコンをクリックしてリアルタイムの進行状況を確認できます。確認が完了したら、結果に応じて後続の操作を実行します。
確認結果の説明については、ステップ 6 をご参照ください。
データベースおよびテーブルスキーマの移行
移行の開始 をクリックします。
移行中は、右上隅の
アイコンをクリックしてリアルタイムの進行状況を確認できます。確認が完了したら、結果に応じて後続の操作を実行します。
確認結果の説明については、ステップ 6 をご参照ください。
(任意)SQL 互換性の確認
SQL 互換性チェックでは、セルフマネージドインスタンスから取得した SQL ステートメントをターゲットインスタンスで再生し、異なるカーネルバージョン間の構文互換性を検証します。このステップを実行するかどうかは、お客様のニーズに応じて決定できます。
このステップをスキップする場合は、スキップ をクリックします。
このステップを実行する場合は、リクエスト再生時間 を選択し、その後 確認の開始 をクリックします。チェックが通過した場合は、次のステップ をクリックします。チェックが失敗した場合は、ステップ 6 を参照して対応してください。
重要このチェックは構文互換性のみを検証し、インスタンスのデータベースおよびテーブル内のデータを必要としません。データが必要な場合は、まず次のステップに進んで一部のデータを移行できます。
SQL を再生するクライアントのバージョンがターゲットインスタンスと一致していない場合、誤検知が発生する可能性があります。例外が発生した場合は、SQL ステートメントを手動で実行してエラーを確認してください。
同期の開始
同期の開始 をクリックします。
同期中は、右上隅の
アイコンをクリックしてリアルタイムの進行状況を確認できます。データの移行 ステップが実行中の場合、データの移行 タブに切り替え、
ボタンをクリックして 移行の進行状況 および 残り推定時間 を表示します。重要移行の進行状況 をターゲットタスクで厳密に監視する必要があります。残り推定時間 を基に、セルフマネージドクラスターへの書き込みを停止し、Kafka および RabbitMQ エンジンのテーブルを処理します。
現在の最大移行時間しきい値は5 日に設定されています。移行が5 日間継続した場合、システムが移行タスクを自動的にキャンセルします。移行タスクにさらに長い時間がかかる場合は、技術サポートに連絡するためチケットを送信してください。
移行の進行状況 が 100 % に達し、ソースインスタンスへの書き込みが停止したことを確認した後、停止 ボタンをクリックして移行プロセスを終了し、次のステップに進みます。

同期が完了したら、終了 をクリックします。
重要"同期の開始" ステップが完了した後、移行タスクはロックされ、移行フローを変更することはできません。移行ステップの実行結果を表示するには、前のステップ、次のステップ、または リフレッシュ ボタンを使用できます。
ステップ 4:MergeTree 以外のテーブルからのデータ移行
MergeTree 以外のテーブルの場合、移行タスクはテーブルスキーマのみを移行する(例:MySQL テーブル)か、まったくサポートしない(例:Log テーブル)かのいずれかです。したがって、移行タスクが完了した後、ターゲットクラスターにはスキーマはあるがビジネスデータがないテーブルが存在する可能性があります。このようなビジネスデータは、以下の手順に従って手動で移行する必要があります:
セルフマネージドクラスター にログインし、データの移行が必要な MergeTree 以外のテーブルを表示します。
SELECT `database` AS database_name, `name` AS table_name, `engine` FROM `system`.`tables` WHERE (`engine` NOT LIKE '%MergeTree%') AND (`engine` != 'Distributed') AND (`engine` != 'MaterializedView') AND (`engine` NOT IN ('Kafka', 'RabbitMQ')) AND (`database` NOT IN ('system', 'INFORMATION_SCHEMA', 'information_schema')) AND (`database` NOT IN ( SELECT `name` FROM `system`.`databases` WHERE `engine` IN ('MySQL', 'MaterializedMySQL', 'MaterializeMySQL', 'Lazy', 'PostgreSQL', 'MaterializedPostgreSQL', 'SQLite') ))[ターゲットクラスター] にログオンし、データ移行 を [リモート関数] を使用して実行します。
手動移行
ApsaraDB for ClickHouse Enterprise Edition では、ソーステーブルにシャードやレプリカがあるかどうかに関わらず、対応するターゲットテーブルを 1 つ作成するだけで済みます。このテーブルでは、Engine パラメーターを省略できます。これは、システムが自動的に SharedMergeTree テーブルエンジンを使用するためです。ApsaraDB for ClickHouse Enterprise Edition クラスターは、垂直および水平スケーリングを自動的に処理するため、レプリケーションおよびシャーディングの具体的な実装を心配する必要はありません。
概要
セルフマネージド ClickHouse クラスターから ApsaraDB for ClickHouse Enterprise Edition クラスターへの移行の手順は以下のとおりです。
ソースクラスターに読み取り専用ユーザーを追加します。
ソーステーブルスキーマをターゲットクラスターに複製します。
ソースクラスターがパブリックにアクセス可能であれば、そのデータをターゲットクラスターにプルできます。そうでない場合は、ソースクラスターからデータをプッシュする必要があります。
(任意)ソースクラスターの IP アドレスをターゲットクラスターから削除します。
ソースクラスターから読み取り専用ユーザーを削除します。
手順
ソースクラスター(ソーステーブルにすでにデータが含まれている)で、以下の操作を行います:
テーブル db.table に読み取り専用ユーザーを追加します。
CREATE USER exporter IDENTIFIED WITH SHA256_PASSWORD BY 'password-here' SETTINGS readonly = 1;GRANT SELECT ON db.table TO exporter;ソーステーブルスキーマをコピーします。
SELECT create_table_query FROM system.tables WHERE database = 'db' and table = 'table'
ターゲットクラスターで、以下の操作を行います。
データベースを作成します。
CREATE DATABASE dbソースデータテーブルの
CREATE TABLEステートメントを使用して、送信先データテーブルを作成します。説明CREATE TABLEステートメントを実行する際は、ENGINE を SharedMergeTree に変更しますが、パラメーターは含めません。これは、ApsaraDB for ClickHouse Enterprise Edition クラスターが常にテーブルをレプリケーションし、正しいパラメーターを提供するためです。ORDER BY、PRIMARY KEY、PARTITION BY、SAMPLE BY、TTL、およびSETTINGS句は、テーブルの構造およびメタデータを定義します。ターゲットの ApsaraDB for ClickHouse Enterprise Edition クラスターでテーブルが正しく作成されるように、これらの句を保持してください。CREATE TABLE db.table ...Remote関数を使用してデータを読み取るか、プッシュします。説明ソース ClickHouse サーバーが外部ネットワークからアクセスできない場合、
Remote関数は select および insert 操作をサポートしているため、読み取りではなくプッシュを行うことができます。ターゲットクラスターで、
Remote関数を使用して、ソースクラスターのソーステーブルからデータを読み取ります。
INSERT INTO db.table SELECT * FROM remote('source-hostname:9000', db, table, 'exporter', 'password-here')Remote関数を使用して、ソースクラスターからターゲットクラスターへデータをプッシュします。
説明Remote関数が ApsaraDB for ClickHouse Enterprise Edition クラスターに接続できるようにするには、ソースクラスターの IP アドレスをターゲットクラスターの許可リストに追加する必要があります。「許可リストの設定」をご参照ください。INSERT INTO FUNCTION remote('target-hostname:9000', 'db.table', 'default', 'PASS') SELECT * FROM db.table
よくある質問
接続性および構成の確認エラー
エラーメッセージ | 説明 | 解決策 |
| セルフマネージドクラスターへのネットワーク接続がタイムアウトしました。 | エラーメッセージに基づいてネットワークの問題をトラブルシューティングします。 |
| 移行タスクで指定されたクラスターが、セルフマネージドクラスターに存在しません。 | SQL ステートメントを実行してセルフマネージドクラスター内のクラスターを照会し、移行タスクの構成を更新します。 |
| 以下のいずれかのシステムテーブルがセルフマネージドクラスターに存在しません: | セルフマネージドクラスターに必要なシステムテーブルを作成します。 |
| セルフマネージドクラスターのタイムゾーンがターゲットクラスターと一致していません。 | タイムゾーン設定を調整し、両方のクラスターが同一のタイムゾーンを使用するようにします。 |
| ターゲットクラスターの | ターゲットクラスターの 重要
|
データベースおよびテーブルスキーマの確認エラー
エラーメッセージ | 説明 | 解決策 |
| セルフマネージドクラスター内のノード間で、データベースまたはテーブルの定義が一貫していません。 | セルフマネージドクラスターの各ノード上のデータベースおよびテーブルを確認し、不整合を解消します。 |
| データベースまたはテーブルスキーマで定義されたパスワードが非表示になっています。 |
注:この操作には display_secrets_in_show_and_select 権限が必要です。 |
| セルフマネージドクラスターのデータベースエンジンは、移行に対応していません。 | ターゲットクラスターでサポートされているデータベースエンジンに変更することを検討してください。 |
| セルフマネージドクラスターのデータベースエンジンは、移行に対応していません。 | システムが、移行例外を回避するために、サポートされていないデータベースエンジンを自動的に Replicated データベースに置き換えます。 |
| セルフマネージドクラスターのデータベースエンジンは、移行に対応していません。 | Data Transmission Service (DTS) を使用してデータ同期を行い、またはターゲットクラスターに同名のデータベースを作成してこのチェックをバイパスします。 |
| セルフマネージドクラスターのデータベースエンジンは、移行に対応していません。 | このサポートされていないエンジンを使用するデータベースは、移行中に自動的に無視されます。 |
| Distributed テーブルエンジンは、ApsaraDB for ClickHouse Enterprise Edition インスタンスでは推奨されていません。 | セルフマネージドクラスターで分散テーブルを削除します。移行後は、基盤となる MergeTree テーブルを直接照会します。 |
| この警告は、外部データベースエンジンへのアクセス可能性に関する潜在的な問題を示しています。 | 参照された IP アドレスがターゲットクラスターからアクセス可能であることを確認する必要があります。アクセスできない場合は、ネットワーク接続を確立し、IP アドレスをクラスターの許可リストに追加します。 |
| 特定のデータベースエンジンは、スキーマ移行のみをサポートし、データ移行はサポートしていません。 |
|
| 特定のデータベースエンジンを使用するテーブルは、移行に対応していません。 | ターゲットクラスターに同名の MergeTree テーブルを手動で作成し、その後データを移行します。 |
| 特定のデータベースエンジンを使用するテーブルは、移行に対応していません。 | 「操作手順」セクションのステップ 4 をご参照ください。 |
| データベースおよびテーブルスキーマの確認中に、ターゲットクラスターの対応するテーブルは空である必要があります。 | ターゲットクラスターの対応するテーブルからすべてのデータを削除します。 |
| ユーザー定義関数 | ターゲットクラスターに必要な関数を手動で作成します。 |
その他の問題
その他の移行に関する問題の解決策については、「よくある質問」をご参照ください。
