メインコンテンツへスキップ
メインコンテンツへスキップ

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

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

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

自前運用の ClickHouse から ClickHouse Cloud への移行

自前運用の ClickHouse からの移行
注記

ソーステーブルがシャーディングされている場合やレプリケートされている場合でも、ClickHouse Cloud では宛先テーブルを 1 つ作成するだけで構いません(このテーブルでは Engine パラメータを省略できます。自動的に ReplicatedMergeTree テーブルになります)。 ClickHouse Cloud が垂直・水平スケーリングを自動的に処理するため、テーブルをどのようにレプリケートしたりシャーディングしたりするかを意識する必要はありません。

この例では、自前運用の ClickHouse サーバーが ソース、ClickHouse Cloud サービスが 宛先 になります。

概要

手順は次のとおりです。

  1. ソース側のサービスに読み取り専用ユーザーを追加する
  2. 宛先側のサービスに、ソーステーブルと同じ構造のテーブルを作成する
  3. ソースのネットワーク到達性に応じて、ソースから宛先へデータをプルするか、ソースからデータをプッシュする
  4. (該当する場合)宛先側の IP アクセスリストからソースサーバーを削除する
  5. ソース側のサービスから読み取り専用ユーザーを削除する

あるシステムから別のシステムへのテーブルの移行

この例では、1 つのテーブルを自前運用の ClickHouse サーバーから ClickHouse Cloud に移行します。

ソース側の ClickHouse システム(現在データを保持しているシステム)での作業

  • ソーステーブル(この例では 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'

宛先側の ClickHouse Cloud システム上で:

  • 宛先データベースを作成します。
CREATE DATABASE db
  • ソースの CREATE TABLE ステートメントを使用して、移行先のテーブルを作成します。
ヒント

CREATE ステートメントを実行する際は、ENGINE をパラメータなしの ReplicatedMergeTree に変更してください。ClickHouse Cloud は常にテーブルをレプリケートし、正しいパラメータを自動で設定します。ただし、ORDER BYPRIMARY KEYPARTITION BYSAMPLE BYTTLSETTINGS 句はそのまま保持してください。

CREATE TABLE db.table ...
  • セルフマネージドのソースからデータを取得するために、remoteSecure 関数を使用します
セルフマネージド ClickHouse の移行
INSERT INTO db.table SELECT * FROM
remoteSecure('source-hostname', db, table, 'exporter', 'password-here')
注記

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

  • remoteSecure 関数を使用して、データを ClickHouse Cloud サービスにプッシュします
Migrating Self-managed ClickHouse
Add the remote system to your ClickHouse Cloud service IP Access List

remoteSecure 関数が ClickHouse Cloud サービスに接続できるようにするには、リモートシステムの IP アドレスを IP Access List で許可する必要があります。詳細については、この tip の下にある Manage your IP Access List を展開してください。

IP アクセスリストを管理する

ClickHouse Cloud のサービス一覧から対象のサービスを選択し、Settings に切り替えます。IP アクセスリストに、ClickHouse Cloud サービスへ接続する必要があるリモートシステムの IP アドレスまたはアドレス範囲が含まれていない場合は、Add IPs を使用して解決できます。

サービスが IP アクセスリストで自分の IP アドレスからのトラフィックを許可しているかを確認する

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

自分の現在の IP アドレスを ClickHouse Cloud の IP アクセスリストに追加する
INSERT INTO FUNCTION
remoteSecure('HOSTNAME.clickhouse.cloud:9440', 'db.table',
'default', 'PASS') SELECT * FROM db.table

ClickHouse Cloud サービス間での移行

自己管理型 ClickHouse の移行

ClickHouse Cloud サービス間でデータを移行する主なユースケースとしては、次のようなものがあります:

  • 復元したバックアップからのデータ移行
  • 開発サービスからステージングサービスへのデータコピー(またはステージングから本番環境へのコピー)

この例では 2 つの ClickHouse Cloud サービスがあり、それぞれを ソースデスティネーション と呼びます。データはソースからデスティネーションへプルされます。必要であればプッシュすることもできますが、ここでは読み取り専用ユーザーを利用できるため、プルの方法を示します。

自己管理型 ClickHouse の移行

移行には次のステップがあります:

  1. 一方の ClickHouse Cloud サービスを ソース、もう一方を デスティネーション として選定する
  2. ソースサービスに読み取り専用ユーザーを追加する
  3. デスティネーションサービス上に、ソースと同じテーブル構造を複製する
  4. 一時的にソースサービスへの IP アクセスを許可する
  5. ソースからデスティネーションへデータをコピーする
  6. デスティネーション上で IP Access List を再設定する
  7. ソースサービスから読み取り専用ユーザーを削除する

ソースサービスに読み取り専用ユーザーを追加する

  • ソーステーブル(この例では 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 文を使用して、デスティネーション側にテーブルを作成します。

    デスティネーションで、ソースの select create_table_query... の出力を使ってテーブルを作成します:

    CREATE TABLE db.table ...
    

ソースサービスへのリモートアクセスを許可する

ソースからデスティネーションへデータをプルするには、ソースサービスが接続を許可している必要があります。ソースサービス上で一時的に「IP Access List」機能を無効化します。

ヒント

今後もソースの ClickHouse Cloud サービスを使い続ける場合は、「どこからでもアクセス可能」に切り替える前に、既存の IP Access List を JSON ファイルにエクスポートしておいてください。これにより、データ移行後にそのアクセスリストを再インポートできます。

許可リストを編集し、一時的に Anywhere からのアクセスを許可します。詳細については IP Access List ドキュメントを参照してください。

ソースからデスティネーションへデータをコピーする

  • remoteSecure 関数を使用して、ソースの ClickHouse Cloud サービスからデータをプルします。 デスティネーションに接続し、デスティネーション側の ClickHouse Cloud サービスで次のコマンドを実行します:

    INSERT INTO db.table SELECT * FROM
    remoteSecure('source-hostname', db, table, 'exporter', 'password-here')
    
  • デスティネーションサービス上のデータを確認します

ソース上で IP Access List を再設定する

以前にアクセスリストをエクスポートしている場合は、Share を使って再インポートできます。エクスポートしていない場合は、アクセスリストにエントリを再度追加してください。

読み取り専用ユーザー exporter を削除する

DROP USER exporter
  • サービスの IP アクセスリストを切り替えてアクセスを制限する