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

remoteSecure を使用したセルフマネージド ClickHouse と ClickHouse Cloud 間の移行

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

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

セルフマネージド ClickHouse から ClickHouse Cloud への移行

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

元のテーブルが分片されているか、レプリカ構成か、あるいはその両方かに関わらず、ClickHouse Cloud では宛先テーブルを作成するだけで十分です(このテーブルについては Engine パラメータを省略できます。テーブルエンジンとしては SharedMergeTree が自動的に選択されます)。 ClickHouse Cloud が垂直方向および水平方向のスケーリングを自動的に処理します。 テーブルをどのようにレプリケートおよび分片するかを考える必要はありません。

この例では、セルフマネージドの ClickHouse サーバーが ソース であり、ClickHouse Cloud サービスが 宛先 です。

概要

手順は以下のとおりです。

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

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

この例では、セルフマネージド ClickHouse サーバーから ClickHouse Cloud へ 1 つのテーブルを移行する方法を示します。

互換性

セルフホスト型の ClickHouse デプロイメントと ClickHouse Cloud サービスの間で動作に違いが見られる場合、 それは互換性設定に関連している可能性があります。 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 ...
  • セルフマネージドな ClickHouse からデータを取得するために remoteSecure 関数を使用します
セルフマネージド ClickHouse の移行
INSERT INTO db.table SELECT * FROM
remoteSecure('source-hostname', db, table, 'exporter', 'password-here')
注記

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

  • remoteSecure 関数を使用して、データを ClickHouse Cloud サービスにプッシュします
セルフマネージド 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 サービスがあり、それぞれを sourcedestination と呼びます。データは source から destination へプルされます。必要であればプッシュすることもできますが、ここでは read-only ユーザーを利用するため、プルの方法を示します。

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

移行手順は次のとおりです:

  1. どちらか一方の ClickHouse Cloud サービスを source、もう一方を destination として決める
  2. source サービスに read-only ユーザーを追加する
  3. destination サービス上に source と同じテーブル構造を作成する
  4. 一時的に source サービスへの IP アクセスを許可する
  5. source から destination へデータをコピーする
  6. destination 上で IP Access List を再設定する
  7. source サービスから read-only ユーザーを削除する

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

  • ソーステーブル(この例では 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 ファイルとしてエクスポートしておいてください。これにより、データ移行後にそのアクセスリストをインポートできます。

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

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

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

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

ソース側で IP アクセスリストを再設定する

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

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

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