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

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

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

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

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

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

ソーステーブルが分片されているか、レプリカ構成になっているか、あるいはその両方であるかに関わらず、ClickHouse Cloud では宛先テーブルを作成するだけで済みます(このテーブルでは Engine パラメータを省略できます。自動的に ReplicatedMergeTree テーブルになります)。 ClickHouse Cloud が垂直方向および水平方向のスケーリングを自動的に処理します。テーブルをどのようにレプリケーションや分片を行うかを、利用者側で検討する必要はありません。

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

概要

手順は次のとおりです。

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

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

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

ソース側の 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 関数は SELECT と INSERT の両方で動作するため、データをプルするのではなくプッシュすることができます。次のオプションを参照してください。

  • 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 へプルされます。プッシュすることもできますが、ここでは読み取り専用ユーザーを利用するため、プルの方法を示します。

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

移行は、次の手順で行います:

  1. 一方の ClickHouse Cloud サービスを source、もう一方を destination として指定する
  2. source サービスに読み取り専用ユーザーを追加する
  3. destination サービス上に、source と同じテーブル構造を作成する
  4. 一時的に source サービスへの IP アクセスを許可する
  5. source から destination へデータをコピーする
  6. destination の IP アクセスリストを再設定する
  7. source サービスから読み取り専用ユーザーを削除する

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

  • ソーステーブル(この例では 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 アクセスリストを再設定する

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

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

DROP USER exporter
  • サービスの IP アクセスリストを変更してアクセスを制限します