ClickHouse, gerçek zamanlı uygulamalar ve analizler için en hızlı ve kaynakları en verimli kullanan DBMS sistemlerinden biridir. Bileşenlerinden biri olan ClickHouse Keeper, ZooKeeper’a göre çok daha hızlı ve verimli ayrıca özellik açısından zengin bir alternatiftir. meta veri deposu olmasının yanı sıra koordinasyon ve senkronizasyon mekanizmaları sağlıyor..
Neden zookeper yerine Clikhouse keeper kullanmalıyız
Clickhousekeeper zookeper ın bilinen bir çok dezavantajını gidermekte ve aşağıda sayılan avantajları bizlere sunmaktadır
- Snapshot ve loğlar için sıkıştırma kullanarak çok daha az disk kullanımı yapmaktadır
- zookeperda bulunan 1MB paket boyutu için limtileri ortadan kaldırmaktadır
- 2 Milyar işlemde bir zorunlu restart problemini ortadan kaldırmaktadır
- Partition işlemlerinde ve dağıtımında ve recover işlemlerinde daha hızlıdır
- Aynı veri için öçok daha az bellek kullanır (yaklaşık 49 kat)
- Kurulumu kolaydır , JVM Heap ve Garbage gibi problemleri yok (C++)
- ReplicatedMergeTree tablolarında daha hızlı işlemler yapılmasına olanak tanır.
İlk olarak tüm cluster veritabanı durdurulur, ve ilgili rpm paketleri ilgilisunuculara atılır. Sonrasında zookeper lider ve fallower lar tespit edilir , follower lar kapatılır bu sırada lider değiştimi kontrol edilir lider açık bırakılarak diğerleri kapatılacak, en son lider kapatılır.
Zookeper follower ve leader tespiti için;
echo mntr | nc localhost 2181
--bu çalışmazsa
# systemctl status zookeeper.service
● zookeeper.service - SYSV: zookeeper
Loaded: loaded (/etc/rc.d/init.d/zookeeper; generated)
Active: active (running) since Mon 2024-03-18 22:31:01 +03; 4 months 5 days ago
Docs: man:systemd-sysv-generator(8)
Tasks: 274 (limit: 3355442)
Memory: 10.8G
CGroup: /system.slice/zookeeper.service
└─1989 java -Dzookeeper.log.dir=/home/zookeeper/zookeeper/bin/../logs -Dzookeeper.log.file=zookeeper-zookeeper-server-c01.log -XX:+HeapDumpOnOutOfMemoryError -XX:OnOutOfMemoryE
zookeper /home/zookeeper/zookeper dizini altında çalıştığını ststus outpu tundan görmekteyiz buradaki /home/zookeeper/zookeeper/bin dizini altında zkServer.sh status olarak çalıştırdığımızda ilgili zookeper ın leader veya follower olduğunu görebiliriz.
# ./zkServer.sh status
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /home/zookeeper/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower
# ./zkServer.sh status
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /home/zookeeper/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: leader
zookeper snap logları clickhouse keeper tarafındaki snap loglarına convert edilmesi gerekiyor bunun için ; conf dizini altında ki zoo.cfg dosyasında ilgili yer bulunmaktadır, bureda dataDir ve dataLogDir dizinleri bizim için önemlidir.
# pwd
/home/zookeeper/zookeeper/conf
# cat zoo.cfg
tickTime=2000
initLimit=300
syncLimit=10
dataDir=/home/zookeeper/zookeeper_data
dataLogDir=/home/zookeeper/zookeeper_data
clientPort=2181
maxClientCnxns=2000
minSessionTimeout=4000
maxSessionTimeout=60000000
autopurge.purgeInterval=1
autopurge.snapRetainCount=10
quorum.cnxn.threads.size=20
snapCount=500000
preAllocSize=131072
4lw.commands.whitelist=stat
leaderServes=yes
metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider
Bu dizinleri öğrendikten sonra arık convert etmeye geldi sıra Convert işlemi için aşağıdaki komut kullanılır;
# clickhouse keeper-converter --zookeeper-logs-dir /home/zookeeper/zookeeper_data --zookeeper-snapshots-dir /home/zookeeper/zookeeper_data --output-dir /data/chconvert/snapshots
Clickhouse keeper için ilgili dizinler oluşturulur; Yetkileri clickhouse user olacak şekilde düzenlenir.
$ mkdir -p /data/clickhouse-keeper/coordination/log
$ mkdir -p /data/clickhouse-keeper/coordination/snapshots
# mkdir /var/lib/clickhouse-keeper
keeper config yaml dosyası düzenlenir; keeper ayrı bir makinede değil server üzerinde ise ayrıca bir keeper kurulmasına gerek yoktu; /etc/clickhouse-keeper/config.d dizini altında ise enable-keeper.xml aşağıdaki gibi oluşrurulur bu takdirde
<clickhouse>
<prometheus>
<endpoint>/metrics</endpoint>
<port>9363</port>
<metrics>true</metrics>
<events>true</events>
<asynchronous_metrics>true</asynchronous_metrics>
</prometheus>
<logger>
<level>trace</level>
<log>/var/log/clickhouse-keeper/clickhouse-keeper.log</log>
<errorlog>/var/log/clickhouse-keeper/clickhouse-keeper.err.log</errorlog>
<size>1000M</size>
<count>10</count>
</logger>
<max_connections>4096</max_connections>
<listen_host>0.0.0.0</listen_host>
<interserver_listen_host>0.0.0.0</interserver_listen_host>
<keeper_server>
<tcp_port>2181</tcp_port>
<server_id>1</server_id>
<log_storage_path>/data/clickhouse-keeper/coordination/log</log_storage_path>
<snapshot_storage_path>/data/clickhouse-keeper/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>
<hostname_checks_enabled>true</hostname_checks_enabled>
<raft_configuration>
<server>
<id>1</id>
<hostname>hostname01</hostname>
<port>9234</port>
</server>
<server>
<id>2</id>
<hostname>hostname02</hostname>
<port>9234</port>
</server>
<server>
<id>3</id>
<hostname>hostname03</hostname>
<port>9234</port>
</server>
</raft_configuration>
</keeper_server>
</clickhouse>
snapshot logları konfigürasyonda belirtilen dizinlere taşınır;
cp /data/chconvert/snapshots/* /data/clickhouse-keeper/coordination/snapshots
clickhouse keeper ayrı bir makinede ise ayrı servis olarak başlatılır, clickhouse server üzerinde bundle olarak gelen keeper kullanıyorsanız server başladığında keeper otomatik çalışacaktır.
# systemctl daemon-reload
# systemctl enable clickhouse-keeper.service
# systemctl start clickhouse-keeper.service
Bir yanıt yazın