#转载# ClickHouse Zookeeper依赖优化

#转载# ClickHouse Zookeeper依赖优化

ClickHouse zk依赖优化

ClickHouse 集群严重依赖zookeeper,clickhouse集群服务会在zk上存储大量的信息,例如数据库表metadata、blocksr、replicas等信息,znode节点和数据量/数据表呈线性相关。

ClickHouse把zk当做三种服务的结合,协调服务,日志服务、数据表catalog service。同时clickhouse在启动时还会对存在本地表的schema信息和存在zk上的schema信息做校验,如果两者存在差异则启动异常。

当前我们没有能力针对clickhouse做源码定制化,只能通过一些优化手段,让zk不至于成为整个系统的瓶颈。

第一原则是clickhouse依赖的zk不要和其他组件公用,其次是zk的各种参数调优。线上我们有个ClickHouse集群依赖的zk和其他组件公用,并且该zk还数据还存在机械盘上,严重影响到了ClickHouse集群的性能。ClickHouse从老的公用zookeeper中迁移到新的zookeeper的一些流程:

  1. 新部署一个zookeeper组件,把zk组件的dataDir和dataLogDir存放固盘,如果条件允许的话这两个目录最好不要存放在同一个固盘;
  1. 从老Zookeeper中获取最新的snapshot,并且传输到新zookeeper中myid最大的三台机器上(假设zk节点为5);
  1. 增大新zookeeper的syncLimit和initLimit配置项,避免zookeeper在leader选举时同步snapshot超时,导致leader选举失败,因为clickhouse在zookeeper上创建的节点很多,并且snapshot文件挺大;
  1. 新zookeeper部署完成后,检测clickhouse在zk上的znode节点是否和老节点一致;
  1. 更改clickhouse配置文件中zk相关的设置,涉及到的主要配置文件:

    /etc/clickhouse-server/metrika.xml

    /etc/clickhouse-server-wingman/metrika.xml

    /etc/clickhouse-server/config-preprocessed.xml

  1. 停止入库到clickhouse的程序,例如logkit、zabbix to clickhouse程序
  1. 停止clickhouse各个分片服务

    service clickhouse-server stop

    service clickhouse-server-wingman stop

其次是zookeeper参数调优,可以参考官方文档:

Java虚拟机参数调优: