ストレージとコンピュートの分離
概要
このガイドでは、ClickHouseとS3を使用して、ストレージとコンピュートを分離したアーキテクチャを実装する方法を探ります。
ストレージとコンピュートの分離とは、計算リソースとストレージリソースを独立して管理することを意味します。ClickHouseでは、これによりスケーラビリティ、コスト効率、柔軟性が向上します。ストレージとコンピュートリソースを必要に応じて個別にスケールさせ、パフォーマンスとコストの最適化を図ることができます。
ClickHouseをS3でバックアップすることは、「コールド」データに対するクエリパフォーマンスがそれほど重要でないユースケースに特に有用です。ClickHouseは、MergeTree
エンジン用のストレージとしてS3を使用するためのS3BackedMergeTree
をサポートしています。このテーブルエンジンにより、ユーザーはS3のスケーラビリティとコストの利点を享受しながら、MergeTree
エンジンの挿入およびクエリパフォーマンスを維持できます。
ストレージとコンピュートの分離アーキテクチャを実装および管理することは、標準的なClickHouseデプロイよりも複雑であることに注意してください。セルフマネージドのClickHouseでは、本ガイドで説明されているストレージとコンピュートの分離が可能ですが、設定なしでこのアーキテクチャでClickHouseを使用できるClickHouse Cloudの使用をお勧めします。これにより、SharedMergeTree
テーブルエンジンを使用することができます。
このガイドでは、ClickHouseのバージョン22.8以上を使用していることを前提としています。
AWS/GCSライフサイクルポリシーを設定しないでください。これはサポートされておらず、テーブルが壊れる可能性があります。
1. S3をClickHouseディスクとして使用する
ディスクの作成
ストレージ設定を保存するために、ClickHouseのconfig.d
ディレクトリに新しいファイルを作成します:
新しく作成したファイルに以下のXMLをコピーし、データを保存したいAWSバケットの詳細情報でBUCKET
、ACCESS_KEY_ID
、SECRET_ACCESS_KEY
を置き換えます:
S3ディスクに関してさらなる設定(例えばregion
を指定したり、カスタムHTTPheader
を送信するための設定)が必要な場合、関連する設定のリストはこちらで確認できます。
また、access_key_id
とsecret_access_key
を以下のように置き換えることもでき、これにより環境変数とAmazon EC2メタデータから資格情報を取得しようとします:
設定ファイルを作成したら、ファイルのオーナーをclickhouseユーザーとグループに更新する必要があります:
変更を有効にするために、ClickHouseサーバーを再起動できます:
2. S3バックアップのテーブルを作成する
S3ディスクが正しく設定されたかどうかを確認するために、テーブルを作成してクエリを試してみましょう。
新しいS3ストレージポリシーを指定してテーブルを作成します:
エンジンをS3BackedMergeTree
として指定する必要はありません。ClickHouseは、テーブルがS3をストレージとして使用していると検出すると、エンジンタイプを内部的に自動変換します。
正しいポリシーでテーブルが作成されたことを確認します:
次のような結果が表示されるはずです:
次に、新しいテーブルにいくつかの行を挿入しましょう:
行が挿入されたことを確認しましょう:
AWSコンソールで、データがS3に正常に挿入されていれば、ClickHouseが指定したバケットに新しいファイルを作成しているのが見えるはずです。
すべてが成功した場合、あなたは今、ストレージとコンピュートを分離したClickHouseを使用しています!

3. 障害耐性のためのレプリケーションの実装 (オプション)
AWS/GCSライフサイクルポリシーを設定しないでください。これはサポートされておらず、テーブルが壊れる可能性があります。
障害耐性のために、複数のAWSリージョンに分散された複数のClickHouseサーバーノードを使用し、各ノードにS3バケットを持つことができます。
S3ディスクによるレプリケーションは、ReplicatedMergeTree
テーブルエンジンを使用することで実現できます。詳細については、以下のガイドを参照してください: