Installing EDB Postgres AI for ClickHouse on Rocky Linux#
EDBは、x86-64上のRocky Linux 10のRPMパッケージとしてClickHouseを配布しています。次のパッケージが利用できます。
Package |
Description |
Install on |
|---|---|---|
edb-clickhouse-server |
ClickHouseサーバーエンジン、systemdサービス、およびデフォルトの構成ファイル。 `clickhouse-keeper.service`が含まれるため、サーバーノードは追加パッケージを使用せずにサーバーと並行してKeeperを実行できます。 |
Server nodes |
edb-clickhouse-client |
clickhouse-client、clickhouse-local、clickhouse-benchmark、および関連ツール |
Server nodes, remote client hosts |
edb-clickhouse-common-static |
コンパイルされたClickHouseバイナリ。サーバーおよびクライアントパッケージに必要です。 |
All server and client nodes |
edb-clickhouse-keeper |
専用調整ノードのスタンドアロンKeeperバイナリ。別のノードでKeeperを実行するマルチノード展開の場合にのみ必要です。 |
Dedicated Keeper nodes only |
ノードのロールと展開トポロジの説明については、 ClickHouse architecture を参照してください。
前提条件#
Rocky Linux 10
sudoまたはrootアクセスEDBサブスクリプショントークン、 EDB customer portal から入手できます。
単一ノードの展開#
ClickHouseは、クラスター調整を必要としないスタンドアロンインスタンスとして実行されます。開発、テスト、およびシングルテナントの分析ワークロードに適しています。
パッケージをインストールします。
export EDB_SUBSCRIPTION_TOKEN=<your-token>
export EDB_SUBSCRIPTION_PLAN=clickhouse
curl -1sSLf "https://downloads.enterprisedb.com/$EDB_SUBSCRIPTION_TOKEN/$EDB_SUBSCRIPTION_PLAN/setup.rpm.sh" | sudo -E bash
sudo dnf install -y \
edb-clickhouse-common-static \
edb-clickhouse-server \
edb-clickhouse-client
サーバーを起動します。
sudo systemctl enable clickhouse-server
sudo systemctl start clickhouse-server
サーバーが実行されていることを確認します。
sudo systemctl status clickhouse-server
ClickHouseコマンドラインクライアントを使用して接続します。
clickhouse-client
デフォルトでは、default
ユーザーにはパスワードがありません。設定するには、接続した後に次を実行します。
ALTER USER default IDENTIFIED BY yourpassword;
次に、次のように接続します。
clickhouse-client --password
バージョン文字列を確認して、EDBビルドを検証します。
SELECT value FROM system.build_options WHERE name = VERSION_OFFICIAL;
出力には、EDBパッケージリリースの(EDB Build) が含まれます。
クラスターの展開#
クラスター展開は、シャーディング、レプリケーション、またはその両方を使用して、複数のサーバーノードにデータを分散します。レプリケーションには、少なくとも3つのノードで実行されているClickHouse Keeperが必要です。シャーディング、レプリケーション、およびKeeperロールの説明については、 ClickHouse architecture を参照してください。
次の手順では、5ノード展開について説明します。それぞれ2つのレプリカを持つ2つのシャードに4つのサーバーノード。Keeperはノード1とノード2に同じ場所にあり、ノード5で専用サービスとして実行されます。独自のトポロジに合わせて構成を調整します。
Node |
Role |
Shard |
Replica |
|---|---|---|---|
node-1 |
ClickHouse server + Keeper |
1 |
1 |
node-2 |
ClickHouse server + Keeper |
1 |
2 |
node-3 |
ClickHouse server |
2 |
1 |
node-4 |
ClickHouse server |
2 |
2 |
node-5 |
Keeper |
パッケージのインストール#
すべてのノードでEDBリポジトリを設定します。
export EDB_SUBSCRIPTION_TOKEN=<your-token>
export EDB_SUBSCRIPTION_PLAN=clickhouse
curl -1sSLf "https://downloads.enterprisedb.com/$EDB_SUBSCRIPTION_TOKEN/$EDB_SUBSCRIPTION_PLAN/setup.rpm.sh" | sudo -E bash
各ノードにロールに適切なパッケージをインストールします。
各サーバーノードで
sudo dnf install -y \
edb-clickhouse-common-static \
edb-clickhouse-server \
edb-clickhouse-client
コロケーション展開の場合、 edb-clickhouse-server
には既にclickhouse-keeper.service
が含まれているため、追加パッケージは必要ありません。
各専用のKeeperノードで
sudo dnf install -y edb-clickhouse-keeper
Keeperの設定#
サービスを開始する前に、すべてのKeeperノードを構成します。 1つのノードの障害を許容するには、少なくとも3つのKeeperノードを使用します。
RPMは、デフォルトの
/etc/clickhouse-keeper/keeper_config.xmlをインストールします。各Keeperノードの内容を次のものに置き換え、<server_id>をノードごとに一意の整数1、2、3に設定します。
<clickhouse>
<listen_host>0.0.0.0</listen_host>
<keeper_server>
<tcp_port>9181</tcp_port>
<server_id>1</server_id><!-- Set to 1, 2, or 3 depending on the node -->
<log_storage_path>/var/lib/clickhouse/coordination/log</log_storage_path>
<snapshot_storage_path>/var/lib/clickhouse/coordination/snapshots</snapshot_storage_path>
<coordination_settings>
<operation_timeout_ms>10000</operation_timeout_ms>
<session_timeout_ms>30000</session_timeout_ms>
<raft_logs_level>information</raft_logs_level>
</coordination_settings>
<raft_configuration>
<server><id>1</id><hostname><node-1-ip></hostname><port>9234</port></server>
<server><id>2</id><hostname><node-2-ip></hostname><port>9234</port></server>
<server><id>3</id><hostname><node-5-ip></hostname><port>9234</port></server>
</raft_configuration>
</keeper_server>
</clickhouse>
サーバーの構成#
各サーバーノードには、リモートサーバー、Keeperエンドポイント、およびノード独自のシャードとレプリカIDを定義するクラスター構成が必要です。
各サーバーノードで
/etc/clickhouse-server/config.d/cluster.xmlを作成し、各ノードの<macros>セクションの<shard>および<replica>値を調整します。
Node |
<shard> |
<replica> |
|---|---|---|
node-1 |
01 |
01 |
node-2 |
01 |
02 |
node-3 |
02 |
01 |
node-4 |
02 |
02 |
<clickhouse>
<listen_host>0.0.0.0</listen_host>
<remote_servers>
<my_cluster>
<shard>
<internal_replication>true</internal_replication>
<replica><host><node-1-ip></host><port>9000</port></replica>
<replica><host><node-2-ip></host><port>9000</port></replica>
</shard>
<shard>
<internal_replication>true</internal_replication>
<replica><host><node-3-ip></host><port>9000</port></replica>
<replica><host><node-4-ip></host><port>9000</port></replica>
</shard>
</my_cluster>
</remote_servers>
<zookeeper>
<node><host><node-1-ip></host><port>9181</port></node>
<node><host><node-2-ip></host><port>9181</port></node>
<node><host><node-5-ip></host><port>9181</port></node>
</zookeeper>
<macros>
<cluster>my_cluster</cluster>
<shard>01</shard><!-- Adjust per node, see table above -->
<replica>01</replica><!-- Adjust per node, see table above -->
</macros>
<distributed_ddl>
<path>/clickhouse/task_queue/ddl</path>
</distributed_ddl>
</clickhouse>
サービスの開始#
すべてのKeeperノードでKeeperを起動します。各Keeperノードで
sudo systemctl enable clickhouse-keeper
sudo systemctl start clickhouse-keeper
各Keeperノードが正常であることを確認します。各Keeperノードで次を実行します。正常なノードは
imokで応答します。
clickhouse-keeper-client -h 127.0.0.1 -p 9181 -q "ruok"
__OUTPUT__
imok
クォーラムが1つのKeeperノードから形成されていることを確認します。
2の値は、2つのフォロワーがリーダーと同期していることを意味し、3つのキーパーノードすべてがクォーラムを形成していることを確認します。
clickhouse-keeper-client -h 127.0.0.1 -p 9181 -q "mntr" | grep zk_synced_followers
__OUTPUT__
zk_synced_followers 2
すべてのサーバーノードでサーバーを起動します。
sudo systemctl enable clickhouse-server
sudo systemctl start clickhouse-server
サーバーが各サーバーノードで実行されていることを確認します。
sudo systemctl status clickhouse-server
クラスターへの接続#
edb-clickhouse-clientがインストールされているホストから任意のサーバーノードに接続します。
clickhouse-client -h <server-node-ip>
デフォルトでは、default
ユーザーにはパスワードがありません。設定するには、接続した後に次を実行します。
ALTER USER default IDENTIFIED BY yourpassword;
次に、次のように接続します。
clickhouse-client -h <server-node-ip> --password
すべてのサーバーノードが登録されていることを確認します。
system.clustersはサーバーノードのみをリストするため、専用のKeeperノード5は表示されません。
SELECT cluster, shard_num, replica_num, host_name
FROM system.clusters
WHERE cluster = my_cluster;
__OUTPUT__
┌─cluster────┬─shard_num─┬─replica_num─┬─host_name───┐
│ my_cluster │ 1 │ 1 │ <node-1-ip> │
│ my_cluster │ 1 │ 2 │ <node-2-ip> │
│ my_cluster │ 2 │ 1 │ <node-3-ip> │
│ my_cluster │ 2 │ 2 │ <node-4-ip> │
└────────────┴───────────┴─────────────┴─────────────┘
レプリケーションとシャーディングのテスト#
ローカルのReplicatedMergeTree テーブルとその上にDistributed
テーブルを作成します。いくつかの行を挿入し、両方のテーブルを照会して、各シャード内でレプリケーションが機能していること、および分散テーブルがすべてのシャードのデータを集計することを確認します。
ローカルストレージテーブルを作成します。
ReplicatedMergeTreeエンジンは、各ノードにデータを物理的に保存し、シャード内でレプリケートします。
CREATE TABLE events ON CLUSTER my_cluster (
event_id UInt32,
user_id UInt32,
event_type String,
created_at DateTime
) ENGINE = ReplicatedMergeTree(/clickhouse/tables/{shard}/events, {replica})
ORDER BY event_id;
eventsの上にDistributedテーブルを作成します。ローカルテーブルとは異なり、データは保存されません。クエリーをすべてのシャードにわたってeventsにルーティングし、結果を集計します。
CREATE TABLE events_dist ON CLUSTER my_cluster (
event_id UInt32,
user_id UInt32,
event_type String,
created_at DateTime
) ENGINE = Distributed(my_cluster, default, events, rand());
events_distを介していくつかの行を挿入します。rand()シャーディングキーは、各行をシャード全体に分散します。
INSERT INTO events_dist VALUES
(1, 101, login, now()),
(2, 102, purchase, now()),
(3, 103, logout, now()),
(4, 104, login, now());
任意のサーバーノードのローカルテーブルを照会します。各ノードは、そのシャードの行のみを結果ます。特定の行は、
rand()がそれらを分散した方法によって異なります。
SELECT * FROM events;
__OUTPUT__
┌─event_id─┬─user_id─┬─event_type─┬─────────────created_at─┐
│ 2 │ 102 │ purchase │ 2026-06-10 14:48:15 │
│ 3 │ 103 │ logout │ 2026-06-10 14:48:15 │
└──────────┴─────────┴────────────┴────────────────────────┘
任意のノードから
events_distを照会して、すべての行がシャードにわたって返されることを確認します。
SELECT * FROM events_dist ORDER BY event_id;
__OUTPUT__
┌─event_id─┬─user_id─┬─event_type─┬─────────────created_at─┐
│ 1 │ 101 │ login │ 2026-06-10 14:48:15 │
│ 2 │ 102 │ purchase │ 2026-06-10 14:48:15 │
│ 3 │ 103 │ logout │ 2026-06-10 14:48:15 │
│ 4 │ 104 │ login │ 2026-06-10 14:48:15 │
└──────────┴─────────┴────────────┴────────────────────────┘