EDB distributes ClickHouse as RPM packages for Rocky Linux 9 and 10 on x86_64, aarch64, and ppc64le, and as DEB packages for Debian 13 (trixie) on amd64, arm64, and ppc64el. The following packages are available on both:
| Package | Description | Install on |
|---|---|---|
edb-clickhouse-server | ClickHouse server engine, systemd services, and default configuration files. Includes clickhouse-keeper.service, so server nodes can run Keeper alongside the server without an additional package. | Server nodes |
edb-clickhouse-client | clickhouse-client, clickhouse-local, clickhouse-benchmark, and related tools. | Server nodes, remote client hosts |
edb-clickhouse-common-static | Compiled ClickHouse binary, required by the server and client packages. dnf and apt-get install and update it automatically as a dependency, so you don't need to list it explicitly. | All server and client nodes |
edb-clickhouse-keeper | Standalone Keeper binary for dedicated coordination nodes. Only needed for multi-node deployments that run Keeper on separate nodes. | Dedicated Keeper nodes only |
For an explanation of node roles and deployment topologies, see Architecture.
Prerequisites
- Rocky Linux 9, Rocky Linux 10, or Debian 13 (trixie)
sudoor root access- An EDB subscription token, available from the EDB customer portal
Deploying a single node
ClickHouse runs as a standalone instance with no cluster coordination required. Suitable for development, testing, and single-tenant analytical workloads.
Install the packages:
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-server \ edb-clickhouse-client
export EDB_SUBSCRIPTION_TOKEN=<your-token> export EDB_SUBSCRIPTION_PLAN=clickhouse curl -1sSLf "https://downloads.enterprisedb.com/$EDB_SUBSCRIPTION_TOKEN/$EDB_SUBSCRIPTION_PLAN/setup.deb.sh" | sudo -E bash sudo apt-get install -y \ edb-clickhouse-server \ edb-clickhouse-client
The package manager pulls in
edb-clickhouse-common-staticautomatically as a dependency.Start the server:
sudo systemctl enable clickhouse-server sudo systemctl start clickhouse-server
Verify the server is running:
sudo systemctl status clickhouse-serverConnect using the ClickHouse command-line client:
clickhouse-client
By default, the
defaultuser has no password. To set one, run the following after connecting:ALTER USER default IDENTIFIED BY 'yourpassword';
Then connect with:
clickhouse-client --passwordVerify the EDB build by checking the version string:
SELECT version();
The output includes the EDB release version, for example
26.3.37.3+1edb1.
Deploying a cluster
A cluster deployment distributes data across multiple server nodes using sharding, replication, or both. Replication requires ClickHouse Keeper running on at least three nodes. For an explanation of sharding, replication, and Keeper roles, see Architecture.
The following steps walk through a five-node deployment: four server nodes across two shards with two replicas each, with Keeper co-located on node-1 and node-2 and running as a dedicated service on node-5. Adjust the configuration for your own topology.
| 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 |
Installing packages
Set up the EDB repository on every node:
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
export EDB_SUBSCRIPTION_TOKEN=<your-token> export EDB_SUBSCRIPTION_PLAN=clickhouse curl -1sSLf "https://downloads.enterprisedb.com/$EDB_SUBSCRIPTION_TOKEN/$EDB_SUBSCRIPTION_PLAN/setup.deb.sh" | sudo -E bash
Install the role-appropriate packages on each node.
On each server node:
sudo dnf install -y \ edb-clickhouse-server \ edb-clickhouse-client
sudo apt-get install -y \ edb-clickhouse-server \ edb-clickhouse-client
For co-located deployments,
edb-clickhouse-serveralready includesclickhouse-keeper.service, so no additional package is needed.On each dedicated Keeper node:
sudo dnf install -y edb-clickhouse-keeper
sudo apt-get install -y edb-clickhouse-keeper
Configuring Keeper
Configure all Keeper nodes before starting any service. Use a minimum of three Keeper nodes to tolerate one node failure.
The package installs a default
/etc/clickhouse-keeper/keeper_config.xml. Replace its contents on each Keeper node with the following, setting<server_id>to a unique integer (1,2,3) per node:<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>
Configuring the servers
Each server node needs a cluster configuration that defines the remote servers, Keeper endpoints, and the node's own shard and replica identity.
Create
/etc/clickhouse-server/config.d/cluster.xmlon each server node, adjusting the<shard>and<replica>values in the<macros>section for each node: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>
Starting services
Start Keeper on all Keeper nodes. On each Keeper node:
sudo systemctl enable clickhouse-keeper sudo systemctl start clickhouse-keeper
Verify each Keeper node is healthy. Run the following on each Keeper node. A healthy node responds with
imok:clickhouse-keeper-client -h 127.0.0.1 -p 9181 -q "ruok"
Outputimok
Confirm quorum is formed from any one Keeper node. A value of
2means two followers are synced to the leader, confirming all three Keeper nodes have formed a quorum:clickhouse-keeper-client -h 127.0.0.1 -p 9181 -q "mntr" | grep zk_synced_followers
Outputzk_synced_followers 2
Start the server on all server nodes:
sudo systemctl enable clickhouse-server sudo systemctl start clickhouse-server
Verify the server is running on each server node:
sudo systemctl status clickhouse-server
Connecting to the cluster
Connect to any server node from a host with
edb-clickhouse-clientinstalled:clickhouse-client -h <server-node-ip>
By default, the
defaultuser has no password. To set one, run the following after connecting:ALTER USER default IDENTIFIED BY 'yourpassword';
Then connect with:
clickhouse-client -h <server-node-ip> --password
Confirm all server nodes are registered.
system.clusterslists server nodes only, so the dedicated Keeper node-5 doesn't appear:SELECT cluster, shard_num, replica_num, host_name FROM system.clusters WHERE cluster = 'my_cluster';
Output