9.0 KiB
sidebar_position | sidebar_label | slug |
---|---|---|
10 | ClickHouseからClickHouse Cloudへの移行 | /ja/cloud/migration/clickhouse-to-cloud |
import AddARemoteSystem from '@site/docs/ja/_snippets/_add_remote_ip_access_list_detail.md';
セルフマネージドのClickHouseからClickHouse Cloudへの移行
<img src={require('./images/self-managed-01.png').default} class="image" alt="セルフマネージドのClickHouseの移行" style={{width: '80%', padding: '30px'}}/>
このガイドでは、セルフマネージドのClickHouseサーバーからClickHouse Cloudへの移行方法、およびClickHouse Cloudサービス間の移行方法を示します。SELECT
およびINSERT
クエリでremoteSecure
関数を使用すると、リモートのClickHouseサーバーへのアクセスが可能となり、テーブルの移行がINSERT INTO
クエリにSELECT
を埋め込むだけで簡単になります。
セルフマネージドのClickHouseからClickHouse Cloudへの移行
<img src={require('./images/self-managed-02.png').default} class="image" alt="セルフマネージドのClickHouseの移行" style={{width: '30%', padding: '30px'}}/>
:::note ソーステーブルがシャードされているかレプリケートされているかに関係なく、ClickHouse Cloudでは宛先テーブルを作成するだけです(このテーブルに対するエンジンパラメータは省略可能で、自動的にReplicatedMergeTreeテーブルになります)。ClickHouse Cloudは垂直および水平スケーリングを自動的に処理します。レプリケーションやシャードの管理について考える必要はありません。 :::
この例では、セルフマネージドのClickHouseサーバーがソースであり、ClickHouse Cloudサービスが宛先です。
概要
プロセスは以下の通りです:
- ソースサービスに読み取り専用ユーザーを追加
- 宛先サービスにソーステーブル構造を複製
- ソースから宛先にデータを取り込むか、ネットワークの可用性に応じてソースからデータをプッシュ
- 宛先のIPアクセスリストからソースサーバーを削除 (該当する場合)
- ソースサービスから読み取り専用ユーザーを削除
システム間でのテーブル移行:
この例では、セルフマネージドの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文を使用して宛先を作成。
:::tip
CREATE文を実行するとき、ENGINEをパラメータなしのReplicatedMergeTreeに変更します。ClickHouse Cloudは常にテーブルをレプリケートし、正しいパラメータを提供します。ただし、ORDER BY
、PRIMARY KEY
、PARTITION BY
、SAMPLE BY
、TTL
、SETTINGS
句は保持してください。
:::
CREATE TABLE db.table ...
remoteSecure
関数を使用して、セルフマネージドのソースからデータを取得
<img src={require('./images/self-managed-03.png').default} class="image" alt="セルフマネージドのClickHouseの移行" style={{width: '30%', padding: '30px'}}/>
INSERT INTO db.table SELECT * FROM
remoteSecure('source-hostname', db, table, 'exporter', 'password-here')
:::note
ソースシステムが外部ネットワークから利用できない場合は、データをプルするのではなくプッシュすることができます。remoteSecure
関数はSELECTとINSERTの両方で機能します。次のオプションをご覧ください。
:::
remoteSecure
関数を使用して、データをClickHouse Cloudサービスにプッシュ
<img src={require('./images/self-managed-04.png').default} class="image" alt="セルフマネージドのClickHouseの移行" style={{width: '30%', padding: '30px'}}/>
:::tip リモートシステムをClickHouse CloudサービスのIPアクセスリストに追加する
remoteSecure
関数がClickHouse Cloudサービスに接続できるように、リモートシステムのIPアドレスをIPアクセスリストで許可する必要があります。このチップの下のIPアクセスリストの管理を展開して詳細を確認してください。
:::
INSERT INTO FUNCTION
remoteSecure('HOSTNAME.clickhouse.cloud:9440', 'db.table',
'default', 'PASS') SELECT * FROM db.table
ClickHouse Cloudサービス間の移行
<img src={require('./images/self-managed-05.png').default} class="image" alt="セルフマネージドのClickHouseの移行" style={{width: '80%', padding: '30px'}}/>
ClickHouse Cloudサービス間でデータを移行する際の例:
- 復元したバックアップからデータを移行
- 開発サービスからステージングサービスへのデータのコピー (またはステージングから本番へ)
この例では、二つのClickHouse Cloudサービスがあり、それらはソースと宛先と呼ばれます。データはソースから宛先にプルされます。プッシュすることもできますが、ここでは読み取り専用ユーザーを使用するプルを示します。
<img src={require('./images/self-managed-06.png').default} class="image" alt="セルフマネージドのClickHouseの移行" style={{width: '80%', padding: '30px'}}/>
移行にはいくつかのステップがあります:
- 一つのClickHouse Cloudサービスをソースとして識別し、他方を宛先として識別
- ソースサービスに読み取り専用ユーザーを追加
- 宛先サービスにソーステーブル構造を複製
- 一時的にソースサービスのIPアクセスを許可
- ソースから宛先にデータをコピー
- 宛先で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文を使用して宛先を作成。
宛先でソースからの
select create_table_query...
の出力を使用してテーブルを作成します:CREATE TABLE db.table ...
ソースサービスへのリモートアクセスを許可
ソースから宛先へデータをプルするには、ソースサービスが接続を許可する必要があります。一時的にソースサービスの「IPアクセスリスト」機能を無効にします。
:::tip ソースClickHouse Cloudサービスを引き続き使用する場合、データを移行する前に既存のIPアクセスリストをJSONファイルにエクスポートすると、移行後にアクセスリストをインポートできます。 :::
許可リストを変更し、一時的にAnywhereからのアクセスを許可します。IPアクセスリストのドキュメントで詳細を確認してください。
ソースから宛先へのデータコピー
-
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アクセスリストをスイッチしてアクセスを制限