ClickHouse
MergeTree テーブルのデータ向けに、RustFS をバックエンドとする S3 ディスクで ClickHouse を実行します。
このガイドでは、リアルタイム OLAP データベースである ClickHouse を、ClickHouse の S3 ディスクストレージポリシーを通じて RustFS に接続します。Docker で ClickHouse サーバーを起動し、パーツを RustFS に保存する MergeTree テーブルを作成して行を挿入し、テーブルデータがバケットにあることを確認します。この流れは clickhouse/clickhouse-server:25.8 と rustfs/rustfs-x86-musl:v2.3.1 で検証済みです。
Docker が必要です。このデプロイはローカルでの統合テストを目的としており、本番環境向けではありません。
アーキテクチャ
rustfs ディスクは、clickhouse-data バケットを指す ClickHouse の S3 ディスクです。対応するストレージポリシーで作成したテーブルは、パーツ(データ、インデックス、チェックサムのファイル)をローカルファイルシステムではなくバケットへ書き込みます。
プロジェクトファイルを作成する
先にバケットを作成します。ClickHouse はバケットを作成しません。
rc alias set rustfs http://<your-rustfs-endpoint>:9000 <your-access-key> <your-secret-key>
rc mb rustfs/clickhouse-data両方の認証情報プレースホルダーを置き換え、ストレージ設定を作成します。
<clickhouse>
<storage_configuration>
<disks>
<rustfs>
<type>s3</type>
<endpoint>http://rustfs:9000/clickhouse-data/</endpoint>
<access_key_id><your-access-key></access_key_id>
<secret_access_key><your-secret-key></secret_access_key>
</rustfs>
</disks>
<policies>
<rustfs_policy>
<volumes>
<main>
<disk>rustfs</disk>
</main>
</volumes>
</rustfs_policy>
</policies>
</storage_configuration>
</clickhouse>エンドポイントは / で終わる必要があり、先頭のパスセグメントにバケット名を含めます。Compose ネットワーク内のホスト名は rustfs です。ホストからは http://localhost:9000/clickhouse-data/ を使います。
設定をマウントして ClickHouse を起動します。
docker run -d --name clickhouse --network oo-rustfs_default \
-p 8123:8123 \
-e CLICKHOUSE_PASSWORD=<your-clickhouse-password> \
-v "$PWD/storage.xml":/etc/clickhouse-server/config.d/storage.xml:ro \
clickhouse/clickhouse-server:25.8S3 ディスク上にテーブルを作成する
HTTP インターフェースを待ち、ストレージポリシー付きのデータベースと MergeTree テーブルを作成します。
curl "http://localhost:8123/?password=<your-clickhouse-password>" \
--data-binary "CREATE DATABASE rustfs_demo"
curl "http://localhost:8123/?password=<your-clickhouse-password>" \
--data-binary "CREATE TABLE rustfs_demo.events
(id UInt32, name String)
ENGINE = MergeTree ORDER BY id
SETTINGS storage_policy = 'rustfs_policy'"
curl "http://localhost:8123/?password=<your-clickhouse-password>" \
--data-binary "INSERT INTO rustfs_demo.events
VALUES (1, 'clickhouse-on-rustfs'), (2, 'second')"行を読み戻し、ClickHouse がパーツを rustfs ディスク上にあると報告することを確認します。
curl "http://localhost:8123/?password=<your-clickhouse-password>" \
--data-binary "SELECT count(), any(name) FROM rustfs_demo.events"
curl "http://localhost:8123/?password=<your-clickhouse-password>" \
--data-binary "SELECT name, disk_name FROM system.parts
WHERE database = 'rustfs_demo' AND active"2 clickhouse-on-rustfs
all_1_1_0 rustfsRustFS 内のオブジェクトを確認する
バケットを一覧します。
rc ls rustfs/clickhouse-data/ -rClickHouse は各パーツをコンテンツアドレス方式のブロブとして書き込みます。出力には複数の小さなオブジェクトが含まれ、パーツが増えると件数も増えます。
dtg/hpsyncexixvdnsgorvseobogcgowg
dzp/zfblobhsatzdveqdrsfqcupkdehja
izg/gvhchqobrizpkdftuvlmakkoutwps
パーツは RustFS にあるため、データはコンテナの再起動後も残ります。
docker restart clickhouse
curl "http://localhost:8123/?password=<your-clickhouse-password>" \
--data-binary "SELECT count() FROM rustfs_demo.events"デプロイを停止またはリセットする
データを残したままサーバーを停止します。
docker rm -f clickhouseパーツは clickhouse-data バケットに残り、次回起動後にテーブルを再びクエリできます。データを削除する場合はバケットを取り除きます。
rc rb rustfs/clickhouse-data --forceトラブルシューティング
すべてのクエリで REQUIRED_PASSWORD が出る
ClickHouse 25.8 のイメージでは、default ユーザーにパスワードが必要です。コンテナに CLICKHOUSE_PASSWORD を設定し、上記のとおり同じ値を password クエリパラメーターとして渡します。
ディスクまたはエンドポイントのエラーでテーブル作成が失敗する
テーブル作成前にバケットが存在すること、エンドポイントが / で終わること、認証情報が RustFS のデプロイと一致することを確認します。根本の S3 エラーはサーバーログで確認します。
docker logs clickhouse | grep -i s3 | tail次のステップ
- 追加の ClickHouse 操作を採用する前に、S3 互換性ノートを確認します。
- アクセスキー管理で、本番用の専用認証情報を作成します。
- キャッシュディスクやホット / コールドの階層ポリシーを追加するには、ClickHouse S3 ディスクのドキュメントに従います。