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は、クラスター調整を必要としないスタンドアロンインスタンスとして実行されます。開発、テスト、およびシングルテナントの分析ワークロードに適しています。

  1. パッケージをインストールします。

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
  1. サーバーを起動します。

sudo systemctl enable clickhouse-server
sudo systemctl start clickhouse-server

サーバーが実行されていることを確認します。

sudo systemctl status clickhouse-server
  1. ClickHouseコマンドラインクライアントを使用して接続します。

clickhouse-client

デフォルトでは、default ユーザーにはパスワードがありません。設定するには、接続した後に次を実行します。

ALTER USER default IDENTIFIED BY yourpassword;

次に、次のように接続します。

clickhouse-client --password
  1. バージョン文字列を確認して、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

パッケージのインストール#

  1. すべてのノードで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
  1. 各ノードにロールに適切なパッケージをインストールします。

各サーバーノードで

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ノードを使用します。

  1. 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を定義するクラスター構成が必要です。

  1. 各サーバーノードで/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>

サービスの開始#

  1. すべてのKeeperノードでKeeperを起動します。各Keeperノードで

sudo systemctl enable clickhouse-keeper
sudo systemctl start clickhouse-keeper
  1. 各Keeperノードが正常であることを確認します。各Keeperノードで次を実行します。正常なノードはimok で応答します。

clickhouse-keeper-client -h 127.0.0.1 -p 9181 -q "ruok"
__OUTPUT__
imok
  1. クォーラムが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
  1. すべてのサーバーノードでサーバーを起動します。

sudo systemctl enable clickhouse-server
sudo systemctl start clickhouse-server
  1. サーバーが各サーバーノードで実行されていることを確認します。

sudo systemctl status clickhouse-server

クラスターへの接続#

  1. edb-clickhouse-client がインストールされているホストから任意のサーバーノードに接続します。

clickhouse-client -h <server-node-ip>

デフォルトでは、default ユーザーにはパスワードがありません。設定するには、接続した後に次を実行します。

ALTER USER default IDENTIFIED BY yourpassword;

次に、次のように接続します。

clickhouse-client -h <server-node-ip> --password
  1. すべてのサーバーノードが登録されていることを確認します。 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 テーブルを作成します。いくつかの行を挿入し、両方のテーブルを照会して、各シャード内でレプリケーションが機能していること、および分散テーブルがすべてのシャードのデータを集計することを確認します。

  1. ローカルストレージテーブルを作成します。 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;
  1. 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());
  1. events_dist を介していくつかの行を挿入します。 rand() シャーディングキーは、各行をシャード全体に分散します。

INSERT INTO events_dist VALUES
    (1, 101, login,    now()),
    (2, 102, purchase, now()),
    (3, 103, logout,   now()),
    (4, 104, login,    now());
  1. 任意のサーバーノードのローカルテーブルを照会します。各ノードは、そのシャードの行のみを結果ます。特定の行は、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    │
└──────────┴─────────┴────────────┴────────────────────────┘
  1. 任意のノードから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    │
└──────────┴─────────┴────────────┴────────────────────────┘