Skip to main content

概要

このガイドでは、ClickHouse と S3 を使用して、ストレージとコンピュートを分離したアーキテクチャを実装する方法を説明します。 ストレージとコンピュートの分離とは、コンピュートリソースとストレージリソースをそれぞれ独立して管理することを意味します。ClickHouse では、これによりスケーラビリティ、コスト効率、柔軟性が向上します。必要に応じてストレージリソースとコンピュートリソースを個別にスケールできるため、パフォーマンスとコストを最適化できます。 S3 をバックエンドストレージとして利用する ClickHouse は、特に「コールド」データに対するクエリ性能がそれほど重要ではないユースケースで有効です。ClickHouse は、S3BackedMergeTree を使用して、MergeTree engine のストレージとして S3 を利用する機能をサポートしています。このテーブルエンジンにより、MergeTree engine の insert とクエリ性能を維持しながら、S3 のスケーラビリティとコスト面での利点を活用できます。 ストレージとコンピュートを分離したアーキテクチャの実装と運用は、標準的な ClickHouse デプロイメントに比べて複雑になる点に注意してください。このガイドで説明するように、セルフマネージドの ClickHouse でもストレージとコンピュートの分離は可能ですが、設定不要でこのアーキテクチャで ClickHouse を利用できる SharedMergeTree テーブルエンジン を備えた ClickHouse Cloud の利用を推奨します。 このガイドは、ClickHouse バージョン 22.8 以降を使用していることを前提としています。
AWS/GCS のライフサイクルポリシーは設定しないでください。これはサポートされておらず、table が破損するおそれがあります。
1

S3 を ClickHouse のディスクとして使用する

ディスクの作成

ストレージ構成を保存するため、ClickHouse の config.d ディレクトリに新しいファイルを作成します。
新しく作成したファイルに次の XML をコピーし、BUCKETACCESS_KEY_IDSECRET_ACCESS_KEY を、データの保存先となる AWS バケット の詳細に置き換えます。
S3 ディスクの設定をさらに細かく指定する必要がある場合は、たとえば region を指定したり、カスタム HTTP header を送信したりできます。関連する設定の一覧はこちらを参照してください。また、access_key_idsecret_access_key は以下のものに置き換えることもできます。これにより、環境変数と Amazon EC2 メタデータから認証情報の取得が試行されます。
設定ファイルを作成したら、ファイルの所有者を clickhouse ユーザーおよびグループに変更する必要があります:
これで、変更を反映するために ClickHouse server を再起動できます:
2

S3 をバックエンドにするテーブルを作成する

S3 ディスクが正しく設定されていることを確認するため、テーブルを作成してクエリできるか試します。新しい S3 ストレージポリシーを指定して、テーブルを作成します。
エンジンを S3BackedMergeTree として指定する必要がなかったことに注意してください。テーブルがストレージに S3 を使用していることを検出すると、ClickHouse は内部的にエンジンタイプを自動的に変換します。テーブルが正しいポリシーで作成されたことを確認します:
以下の結果が表示されるはずです:
それでは、新しいテーブルにいくつかの行を挿入してみましょう:
行が挿入されていることを確認しましょう:
AWS コンソールで、データが正常に S3 に挿入されていれば、指定したバケット内に ClickHouse が新しいファイルを作成していることを確認できます。すべて正常に動作していれば、これでストレージとコンピュートを分離した ClickHouse を利用できています!
3

フォールトトレランスのためにレプリケーションを実装する(任意)

AWS/GCS のライフサイクルポリシーは設定しないでください。これはサポートされておらず、テーブルが壊れるおそれがあります。
耐障害性を確保するには、複数の AWS リージョンに分散配置した複数の ClickHouse server ノードと、各ノードに対応する S3 バケットを使用できます。S3 ディスクでのレプリケーションは、ReplicatedMergeTree テーブルエンジンを使用することで実現できます。詳細は次のガイドを参照してください。

参考資料

最終更新日 2026年7月23日