Clickhouse分布式集群搭建
目标:1分片2副本的集群
所以需要两台机器,分别是:172.31.59.118|172.31.40.79
安装参考dockerfile:
- https://hub.docker.com/r/yandex/clickhouse-client/dockerfile
- https://hub.docker.com/r/yandex/clickhouse-server/dockerfile
安装步骤
Amazon linux 2是centos系的,使用的yum系的安装方式
修改机器时区(不需要重启)
开始安装
安装zookeeper集群,也可以使用现成的,本次使用现成的,配置如下,后续加入配置文件中
设置每台机器clickhouse用户和密码,先生成sha256的密码
添加用户sudo vim /etc/clickhouse-server/users.xml
验证
修改clickhouse时区配置
取消访问来源ip的限制sudo vim /etc/clickhouse-server/config.xml
开始配置集群
配置sudo vim /etc/clickhouse-server/config.xml
配置/etc/clickhouse-server/metrika.xml
,所有机器都一样
配置/etc/clickhouse-server/config.d/macros.xml
,所有机器都不一样,虽然也可以把配置放在metrika.xml中,但是把不同的独立出来更合适
集群配置完成之后重启一下,确保每个机器都能连接成功
使用datagrip连接各个机器,全部成功
验证集群功能
创建以replica结尾的本地表delphi_membership_properties_replica和分布式表delphi_membership_properties
插入数据:在本地表和分布式表插入时在每个replica中都有数据生成
查询数据:停掉一个replica之后仍然能查询出数据
JDBC连接clickhouse cluster
两种方式,一种是使用clickhouse-jdbc连接集群中的每一个节点,另外一种是使用SLB提供一个对外的统一地址
使用BalancedClickhouseDataSource
参考以下clickhouse-jdbc中的代码中的注释:jdbc:clickhouse://localhost:8123,localhost:8123/database?compress=1&decompress=2
使用SLB
使用LB均衡到各个副本,保证应用方查询单host,本次不使用BalancedClickhouseDataSource,从github issue上看BalancedClickhouseDataSource在之前版本出现副本故障时没能故障转移,不知道是否有修复。
配置LB:使用标准JDBC连接时需要映射http协议到clickhouse的8123端口(http监听端口)
验证LB配置是否生效
贴一下在Springboot中使用标准JDBC数据源HikariDataSource÷连接clickhouse的配置:
配置好之后可以使用mybatis查询数据
原生TCP协议连接clickhouse cluster
同样是采用SLB映射到不同的节点上,但是映射的时候需要注意不同之处:
- 映射TCP协议到clickhouse的9000端口
连接方式可以参考clickhouse-driver的连接,也可以直接使用python语言clickhouse-driver库
clickhouse python client的选择
官方没有维护各语言的driver,全部由第三方维护,主要有以下两个,对比参见后面。
结论:选择clickhouse-driver,数仓项目使用orm的意义不大。因为应用层不是python项目,是java项目
clickhouse-driver
GitHub - mymarilyn/clickhouse-driver: ClickHouse Python Driver with native interface support
活跃度高,star数最高。语法主要是执行原生sql
infi.clickhouse_orm
GitHub - Infinidat/infi.clickhouse_orm: A Python library for working with the ClickHouse database (https://clickhouse.yandex/)
活跃度高,star数第二高。是一个为clickhouse封装的orm框架,写起来有django的感觉
参考: