Bu yazımda, Redhat tabanlı Rocky Linux üzerinde 3 node’lu ClickHouse Replicated Cluster Kurulumu ve CHProxy yapılandırması nı adım adım anlatacağım. Daha önceki yazımda clickhouse cluster mimarileri hakkında detaylı bilgiler vermiştim okumak için linke tıklayınız.

Yukarıdaki görselde belirttiğim gibi 4 sunucu üzerinde işlemler yapılacaktır. 3 sunucu database, 1 sunuda chproxy için kullanılacaktır. IP ve hostname bilgileri yukarıdaki şekildeki gibi olup kurulum aşamalarında hostname kullanılacaktır.
Sunucu IP ve Hostname Bilgileri:
IP Adresi | Sunucu Adı | Rol |
---|---|---|
192.168.26.111 | clickhouse1 | ClickHouse Node 1 |
192.168.26.112 | clickhouse2 | ClickHouse Node 2 |
192.168.26.113 | clickhouse3 | ClickHouse Node 3 |
192.168.26.104 | chproxy | CHProxy Sunucusu |
/etc/hosts Dosyalarını Düzenleme
Tüm sunucularda /etc/hosts
dosyasına aşağıdaki satırları ekliyoruz:
192.168.26.111 clickhouse1
192.168.26.112 clickhouse2
192.168.26.113 clickhouse3
192.168.26.104 chproxy
Repo ve gerekli paketlerin kurulması
Her bir ClickHouse node’unda (111, 112, 113) aşağıdaki paketlerini kurup ve repo yu ekliyoruz:
sudo yum install -y yum-utils
sudo curl -o /etc/yum.repos.d/clickhouse.repo https://packages.clickhouse.com/rpm/clickhouse.repo
sudo dnf clean all
sudo dnf makecache
Clickhouse ve Client kurulumu
Database sunucularında (clickhouse1,clickhouse2,clickhouse3) aşağıdaki gibi clickhouse-server ve client kurulumunu yapıyoruz:
sudo dnf install -y clickhouse-server clickhouse-client
Data dizini oluşturma:
Database sunucularında (clickhouse1,clickhouse2,clickhouse3) data dizini oluşturulup owner verilir. Veri tabanı data verilerini bu dizinine yönlendireceğiz.
mkdir -p /ch_data/
chown -R clickhouse:clickhouse /ch_data
Clickhouse parametre dosyalarının düzenlenmesi:
Clickhouse da parametreler xml formatındaki dosyalar içerisinde yazılmaktadır. Bu xml dosyaları /etc/clickhouse-server/ dizininin altındaki config.xml de veya /etc/clickhouse-server/config.d nin altına yer alır. Yönetimsel olarak daha esnek olduğu için /etc/clickhouse-server/config.d dizinine configleri yazacağız. Config.d dosyasına oluşturacağımız bazı xml dosyaları ve açıklamaları aşağıda verilmiştir.(3 database sunumuzda da aşağıdaki xml dosyaları oluşturulur.)
- datapath.xml :
Data dizinini yazacağımız config dosyasıdır. Database dosyalarını yazması için /ch_data/ dizini oluşturmuştuk. Bu paramereyi aşağıdaki gibi set ediyoruz.
vi /etc/clickhouse-server/config.d/datapath.xml
<clickhouse>
<custom_cached_disks_base_directory>/ch_data/caches/</custom_cached_disks_base_directory>
<path>/ch_data/clickhouse/</path>
<metadata_path>/ch_data/clickhouse/disks/blob_storage_disk/</metadata_path>
<tmp_path>/ch_data/tmp/</tmp_path>
<user_files_path>/ch_data/user_files/</user_files_path>
<path>/ch_data/access/</path>
<format_schema_path>/ch_data/format_schemas/</format_schema_path>
</clickhouse>
- enable-keeper.xml :
Replicated Cluster da leader yönetimi için Keeper kullanılması gerekiyor. Clickhouse-server kurulumu ile Clickhouse-Keeper servisi defaultta gelmektedir. Bizde defaultta gelen chkeeper ‘ı kullanacağız. Alternatif olarak Zookeeper kullanılabilir.
vi /etc/clickhouse-server/config.d/enable-keeper.xml
<clickhouse>
<keeper_server>
<tcp_port>9181</tcp_port>
<server_id>1</server_id>
<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>trace</raft_logs_level>
</coordination_settings>
<raft_configuration>
<server>
<id>1</id>
<hostname>clickhousedb01</hostname>
<port>9234</port>
</server>
<server>
<id>2</id>
<hostname>clickhousedb02</hostname>
<port>9234</port>
</server>
<server>
<id>3</id>
<hostname>clickhousedb03</hostname>
<port>9234</port>
</server>
</raft_configuration>
</keeper_server>
</clickhouse>
- macros.xml :
Birden fazla sunucu (node) olan bir ClickHouse cluster’da, her sunucuda farklı node adı veya shard numarası olabilir. Bunları her defasında elle yazmak yerine, değişken gibi tanımlayıp otomatik kullanılmasını sağlıyoruz. Cluster da engine kullanarak tablo oluşturacağımızda shard ismi vermemiz gerekiyor. Her defasında manuel yazmak yerine macros ile değişken gibi tanımlıyoruz.
vi /etc/clickhouse-server/config.d/macros.xml
<clickhouse>
<macros>
<shard>1</shard>
<replica>chdb_01</replica>
</macros>
</clickhouse>
- network-and-logging.xml
Logları hangi dizine ve dosyaya yazacağını ve dış networklerden bağlantı sağlayabilmesi için ayarlamaları yapıyoruz. Database port bilgisini de buradan değiştirebilirsiniz.
vi /etc/clickhouse-server/config.d/network-and-logging.xml
<clickhouse>
<logger>
<level>debug</level>
<log>/ch_data/log/clickhouse-server/clickhouse-server.log</log>
<errorlog>/ch_data/log/clickhouse-server/clickhouse-server.err.log</errorlog>
<size>1000M</size>
<count>3</count>
</logger>
<display_name>clickhouse</display_name>
<listen_host>0.0.0.0</listen_host>
<http_port>8123</http_port>
<tcp_port>9000</tcp_port>
<interserver_http_port>9009</interserver_http_port>
</clickhouse>
- remote-servers.xml
Bu dosyamızda cluster adı ve cluster da bulunan diğer node larımız la ilgili bilgileri giriyoruz. Cluster adını mgch_cluster olarak gireceğim siz kendinize göre değiştirebilirsiniz.
vi /etc/clickhouse-server/config.d/remote-servers.xml
<clickhouse>
<remote_servers replace="true">
<mgch_cluster>
<secret>mysecretphrase</secret>
<shard>
<internal_replication>true</internal_replication>
<replica>
<host>clickhouse1</host>
<port>9000</port>
</replica>
<replica>
<host>clickhouse2</host>
<port>9000</port>
</replica>
<replica>
<host>clickhouse3</host>
<port>9000</port>
</replica>
</shard>
</mgch_cluster>
</remote_servers>
</clickhouse>
Oluşturduğumuz bu xml dosyalarının owner ve group clickhouse yapıyoruz.
cd /etc/clickhouse-server/config.d/
chown clickhouse:clickhouse *
- ClickHouse Sunucularını Başlatma:
Kurulum ve konfigurasyonlarımız bitti her bir node’da veri tabanı servisini başlatıyoruz:
systemctl start clickhouse-server.service
Veri Tabanına bağlanıp cluster durumunu kontrol ediyoruz.
[root@clickhouse1 ~]# clickhouse-client
ClickHouse client version 25.3.2.39 (official build).
Connecting to localhost:9000 as user default.
Password for user (default):
Connecting to localhost:9000 as user default.
Connected to ClickHouse server version 25.3.2.
Warnings:
* Available memory at server startup is too low (2GiB).
* Maximum number of threads is lower than 30000. There could be problems with handling a lot of simultaneous queries.
* Linux transparent hugepages are set to "always". Check /sys/kernel/mm/transparent_hugepage/enabled
* Linux threads max count is too low. Check /proc/sys/kernel/threads-max
clickhouse1 :) select * from system.clusters;
SELECT *
FROM system.clusters
Query id: 82eab29e-1a58-4ee3-afd2-deaf796f058a
Row 1:
──────
cluster: mgch_cluster
shard_num: 1
shard_name:
shard_weight: 1
internal_replication: 1
replica_num: 1
host_name: clickhouse1
host_address: 192.168.26.111
port: 9000
is_local: 1
user: default
default_database:
errors_count: 0
slowdowns_count: 0
estimated_recovery_time: 0
database_shard_name:
database_replica_name:
is_active: ᴺᵁᴸᴸ
replication_lag: ᴺᵁᴸᴸ
recovery_time: ᴺᵁᴸᴸ
.
.
.
Cluster da database ve tablo oluşturup cluster da replice olup olmadığını kontrol ediyoruz. Herhangi bir obje oluşturacağımız zaman on cluster kullanmamız gerekiyor eğer yazmazsak sadece bağlı olduğumuz node da objeyi oluşturur.
CREATE DATABASE test1 ON CLUSTER mgch_cluster;
CREATE TABLE test1.test_table2 ON CLUSTER mgch_cluster
(
id UInt64,
name String
)
ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/test_table2', '{replica}')
ORDER BY id;
INSERT INTO test1.test_table2(id, name) VALUES
(10, 'Ali'),
(11, 'Ahmet'),
(12, 'Ayşe');
SELECT * FROM test1.test_table2;
CHProxy Kurulumu ve Config:
CHProxy , ClickHouse istemcilerinin birden fazla sunucuya tek bir giriş noktasından bağlanmasını sağlar. HTTP proxy olarak çalışır (ClickHouse’un HTTP API’sini kullanır). Bağlantıları yönetir ve sorgu önbellekleme yapabilir. Kullanıcı erişim kontrolü sağlar (yetkilendirme, rate limiting).
Alternatif olarak HAProxy , Nginx kullanılabilir. Bu üçü için aşağıdaki gibi bir karşılaştırma yapabiliriz.

- HAProxy ve Nginx gibi genel amaçlı çözümlerden farklı olarak ClickHouse için özel olarak optimize edilmiştir.
CHProxy Kurulumu (192.168.26.104)
Chproxy sunucumuzda aşağıdaki adımlarla kurulumu yapıyoruz.
wget https://github.com/ContentSquare/chproxy/releases/download/v1.27.1/chproxy_1.27.1_linux_amd64.tar.gz
tar -xvf chproxy_1.27.1_linux_amd64.tar.gz
mv chproxy /usr/local/bin/
chmod +x /usr/local/bin/chproxy
Konfigürasyon Dosyasını Oluşturma
config.yml dosyasını oluşturup cluster ismi, nodes, kullanıcı, port bilgilerini,query cache, pooling gibi bilgileri bu yml dosyasına girebiliriz. Biz default olarak aşağıdaki gibi oluşturuyoruz.
mkdir /etc/chproxy
vi /etc/chproxy/config.yml
server:
http:
listen_addr: ":9090"
allowed_networks: ["127.0.0.0/24", "192.168.26.1/24"]
clusters:
- name: "mgch_cluster"
nodes: [
"clickhouse1:8123",
"clickhouse2:8123",
"clickhouse3:8123"
]
users:
- name: "default"
password: ""
max_concurrent_queries: 4
max_execution_time: 1m
users:
- name: "chproxy_user"
password: "clickhouse"
to_cluster: "mgch_cluster"
to_user: "default"
max_concurrent_queries: 2
requests_per_minute: 100
Systemd Servis Oluşturma
Aşağıdaki gibi chproxy servisi oluşturuyoruz.
vi /etc/systemd/system/chproxy.service
[Unit]
Description=CHProxy Service
After=network.target
[Service]
Type=simple
User=nobody
ExecStart=/usr/local/bin/chproxy -config=/etc/chproxy/config.yml
Restart=always
[Install]
WantedBy=multi-user.target
Chproxy servisinin başlatılması
Oluşturduğumuz servisin çalışması için reload, start ve enable yapıyoruz.
systemctl daemon-reload
systemctl start chproxy.service
systemctl enable chproxy.service
systemctl status chproxy.service
Bu yazımızda ClickHouse Replicated Cluster kurulumu ve CHProxy yapılandırması adımlarını tamamladık. Replikasyonunun doğru çalıştığını test edebilir ve CHProxy üzerinden sorgularınızı dağıtabilirsiniz. Bu yapı, yüksek erişilebilirlik ve yük dengeleme açısından oldukça avantajlıdır.
Clickhouse resmi dokümantasyon için tıklayınız.
Chproxy resmi dokümantasyon için tıklayınız.
https://shorturl.fm/dt53K