セルフマネージド ClickHouse と ClickHouse Cloud 間の移行

このガイドでは、セルフマネージドの ClickHouse サーバーから ClickHouse Cloud への移行方法と、ClickHouse Cloud サービス間での移行方法について説明します。remoteSecure 関数は、リモートの ClickHouse サーバーへのアクセスを可能にするために SELECT および INSERT クエリ内で使用されます。これにより、テーブルの移行は、SELECT を埋め込んだ INSERT INTO クエリを書くだけで行えるようになります。
セルフマネージド ClickHouse から ClickHouse Cloud への移行

ソーステーブルが分片されているか、レプリカ構成になっているか、あるいはその両方であるかに関わらず、ClickHouse Cloud では宛先テーブルを作成するだけで済みます(このテーブルでは Engine パラメータを省略できます。自動的に ReplicatedMergeTree テーブルになります)。 ClickHouse Cloud が垂直方向および水平方向のスケーリングを自動的に処理します。テーブルをどのようにレプリケーションや分片を行うかを、利用者側で検討する必要はありません。
この例では、セルフマネージドの ClickHouse サーバーがソースであり、ClickHouse Cloud サービスが宛先となります。
概要
手順は次のとおりです。
- ソースサービスに読み取り専用ユーザーを追加する
- 宛先サービスにソーステーブルの構造を複製する
- ソースのネットワーク到達性に応じて、宛先からソースのデータをプルするか、ソースから宛先へデータをプッシュする
- (該当する場合)宛先側の IP アクセスリストからソースサーバーを削除する
- ソースサービスから読み取り専用ユーザーを削除する
あるシステムから別のシステムへのテーブルの移行:
この例では、セルフマネージドの ClickHouse サーバーから ClickHouse Cloud にテーブルを 1 つ移行します。
ソース側の ClickHouse システム(現在データをホストしているシステム)
- ソーステーブル(この例では
db.table)を読み取り可能な読み取り専用ユーザーを追加します
- テーブル定義をコピー
移行先の ClickHouse Cloud システム上で:
- 移行先データベースを作成します。
- ソースの CREATE TABLE ステートメントを使用して、移行先テーブルを作成します。
CREATE ステートメントを実行する際は、ENGINE をパラメータなしの ReplicatedMergeTree に変更してください。ClickHouse Cloud ではテーブルが常にレプリケートされ、適切なパラメータが自動的に設定されます。ただし、ORDER BY、PRIMARY KEY、PARTITION BY、SAMPLE BY、TTL、SETTINGS 句は残しておいてください。
- セルフマネージドソースからデータを取得するには
remoteSecure関数を使用します

ソースシステムが外部ネットワークからアクセスできない場合、remoteSecure 関数は SELECT と INSERT の両方で動作するため、データをプルするのではなくプッシュすることができます。次のオプションを参照してください。
remoteSecure関数を使用してデータを ClickHouse Cloud サービスにプッシュする

remoteSecure 関数が ClickHouse Cloud サービスに接続できるようにするには、リモートシステムの IP アドレスを IP Access List で許可する必要があります。詳細については、この tip の下にある Manage your IP Access List セクションを展開してください。
IP アクセスリストを管理する
ClickHouse Cloud のサービス一覧から対象のサービスを選択し、Settings に切り替えます。IP アクセスリストに、ClickHouse Cloud サービスへ接続する必要があるリモートシステムの IP アドレスまたはアドレス範囲が含まれていない場合は、Add IPs を使用して解決できます。

ClickHouse Cloud サービスに接続する必要がある個々の IP アドレス、またはアドレス範囲を追加します。必要に応じてフォームを編集し、Save をクリックします。

ClickHouse Cloud サービス間での移行

ClickHouse Cloud サービス間でデータを移行する代表的なユースケースは次のとおりです:
- 復元したバックアップからデータを移行する
- 開発用サービスからステージング用サービスへ(またはステージングから本番環境へ)データをコピーする
この例では 2 つの ClickHouse Cloud サービスがあり、それぞれを source と destination と呼びます。データは source から destination へプルされます。プッシュすることもできますが、ここでは読み取り専用ユーザーを利用するため、プルの方法を示します。

移行は、次の手順で行います:
- 一方の ClickHouse Cloud サービスを source、もう一方を destination として指定する
- source サービスに読み取り専用ユーザーを追加する
- destination サービス上に、source と同じテーブル構造を作成する
- 一時的に source サービスへの IP アクセスを許可する
- source から destination へデータをコピーする
- destination の IP アクセスリストを再設定する
- source サービスから読み取り専用ユーザーを削除する
ソースサービスに読み取り専用ユーザーを追加する
-
ソーステーブル(この例では
db.table)を読み取る権限だけを持つ読み取り専用ユーザーを追加する -
テーブル定義をコピーする
宛先サービス側でテーブル構造を複製する
宛先側で、まだ存在しない場合はデータベースを作成します。
-
宛先データベースを作成します。
-
送信元の
CREATE TABLE文を使用して、宛先側にテーブルを作成します。宛先側で、送信元の
select create_table_query...の出力を使ってテーブルを作成します。
ソースサービスへのリモートアクセスを許可する
ソースからデスティネーションへデータを取得するためには、ソースサービスが接続を許可している必要があります。ソースサービスで「IP Access List」機能を一時的に無効にします。
ソースの ClickHouse Cloud サービスを今後も継続して使用する場合は、「どこからでもアクセスを許可」に切り替える前に、既存の IP Access List を JSON ファイルにエクスポートしてください。これにより、データ移行後にアクセスリストをインポートし直すことができます。
許可リストを変更し、Anywhere からのアクセスを一時的に許可します。詳細については IP Access List のドキュメントを参照してください。
ソースから宛先へデータをコピーする
-
remoteSecure関数を使用して、ソースの ClickHouse Cloud サービスからデータを取得します。
宛先に接続し、宛先側の ClickHouse Cloud サービス上で次のコマンドを実行します: -
宛先サービス内のデータを確認します。
ソース側で IP アクセスリストを再設定する
以前にアクセスリストをエクスポートしている場合は、Share を使って再インポートできます。そうでない場合は、アクセスリストにエントリを再度追加してください。
読み取り専用の exporter ユーザーを削除する
- サービスの IP アクセスリストを変更してアクセスを制限します