分类
标签
ACG AI ai blog Blogging chatgpt chrome clickhouse cloki Customization Demo discuss Example Fuwari game gin git gitalk golang grafana ilogtai index jwt k8s kubectl mac Markdown mazeball metrics mysql PC Privacy Policies prometheus scurity siri software sqlite thanos twikoo vercel Video Windows yaml zookeeper 企划 动漫 实用 容器化 应用部署 技术 日常 智能插座 杂谈 游戏 游戏开发 源码研究 绘图 编程 聊天 运维 集群 音乐
1021 字
5 分钟
clickhouse集群部署指南
起因
网上找到的集群安装博文各个都是复制粘贴,还缺胳膊少腿MD,各种坑,自己梳理下搭建过程。
步骤
zookeeper安装
wget https://downloads.apache.org/zookeeper/stable/apache-zookeeper-3.6.3-bin.tar.gz #注意要下载bin.tar.gz
tar -xvf apache-zookeeper-3.6.3-bin.tar.gz #解压到目录
cp zoo_sample.cfg zoo.cfg #参考下面zoo.cfg配置
mkdir -p /data/zookeeper/{data,logs} #创建数据目录
echo "1" > /data/zookeeper/data/myid #注意myid里的数字一定要和cfg里的server顺序一致
./zkServer.sh start #启动zk
zoo.cfg配置参考
tickTime=2000
dataDir=/data/zookeeper/data
dataLogDir=/data/zookeeper/logs
clientPort=2181
admin.serverPort=2182
initLimit=10
syncLimit=5
server.1=zk1:2888:3888
server.2=zk2:2888:3888
server.3=zk3:2888:3888
clickhouse安装
yum install -y yum-utils
yum-config-manager --add-repo https://packages.clickhouse.com/rpm/clickhouse.repo
yum install -y clickhouse-server clickhouse-client
chmod a+x /etc/clickhouse-server/*
配置
- 新建一个
/etc/clickhouse-server/metrika.xml
文件,添加zookeeper和集群配置
<yandex>
<clickhouse_remote_servers>
<!--自定义集群名称-->
<ck_cluster>
<!--定义集群的分片数量-->
<shard>
<internal_replication>true</internal_replication>
<replica>
<host>ck1</host>
<port>9000</port>
<user>default</user> <!--默认是default用户-->
<password>xxxxxxxxx</password> <!--你在user.xml里配置的密码-->
</replica>
</shard>
<shard>
<internal_replication>true</internal_replication>
<replica>
<host>ck2</host>
<port>9000</port>
<user>default</user>
<password>xxxxxxxxx</password>
</replica>
</shard>
<shard>
<internal_replication>true</internal_replication>
<replica>
<host>ck3</host>
<port>9000</port>
<user>default</user>
<password>xxxxxxxxx</password>
</replica>
</shard>
</ck_cluster>
</clickhouse_remote_servers>
<networks>
<ip>::</ip>
</networks>
<macros>
<replica>ck1</replica> <!--此处填写各个节点名称,唯一值,不能重复-->
</macros>
<zookeeper-servers>
<node index="1"> <!--index 是你部署zookeeper的时候设置的myid-->
<host>zk1</host>
<port>2181</port>
</node>
<node index="2">
<host>zk2</host>
<port>2181</port>
</node>
<node index="3">
<host>zk3</host>
<port>2181</port>
</node>
</zookeeper-servers>
<clickhouse_compression> <!--可加可不加-->
<case>
<min_part_size>10000000000</min_part_size>
<min_part_size_ratio>0.01</min_part_size_ratio>
<method>lz4</method>
</case>
</clickhouse_compression>
</yandex>
- 修改
/etc/clickhouse-server/config.xml
文件,把listen_host
标签取消注释,并新增标签启用metrika的配置,如果默认有相关标签就注释掉,prometheus的标签可以用来监控集群状态。
<listen_host>::</listen_host>
<include_from>/etc/clickhouse-server/metrika.xml</include_from>
<macros incl="macros" optional="true"/>
<!-- <zookeeper incl="zookeeper-servers" optional="true" /> --># 这个是用来指定metrika里的clickhouse_remote_servers标签,如果是用clickhouse-keeper则不需要
<remote_servers incl="clickhouse_remote_servers"/> # 这个是用来指定metrika里的clickhouse_remote_servers标签
#辅助zookeeper,如果同步的数据量太大,一个zookeeper同步不过来,经常出现readonly表,则可以加多几个辅助zookeeper,只需要在表引擎地址前指定zookeeper名称即可,例如
#ENGINE = ReplicatedReplacingMergeTree('zookeeper2:/clickhouse/tables/samples/{shard}', '{replica}')
#但不能和主zookeeper一样,可以用自带的clickhouse-keeper,zookeeper用来做辅助
<auxiliary_zookeepers>
<zookeeper2>
<node>
<host>10.0.0.1</host>
<port>2181</port>
</node>
<node>
<host>10.0.0.2</host>
<port>2181</port>
</node>
<node>
<host>10.0.0.3</host>
<port>2181</port>
</node>
</zookeeper2>
</auxiliary_zookeepers>
<prometheus>
<endpoint>/metrics</endpoint>
<port>9363</port>
<metrics>true</metrics>
<events>true</events>
<asynchronous_metrics>true</asynchronous_metrics>
<status_info>true</status_info>
</prometheus>
- 在config.d目录里新增
keeper.xml
文件:
<?xml version="1.0" ?>
<yandex>
<keeper_server>
<tcp_port>9181</tcp_port>
<server_id>1</server_id> #这里也要记得不同服务器要不一样
<log_storage_path>/data/clickhouse/coordination/log</log_storage_path>
<snapshot_storage_path>/data/clickhouse/coordination/snapshots</snapshot_storage_path>
<raft_configuration>
<server>
<id>1</id>
<hostname>10.0.0.1</hostname>
<port>9444</port>
</server>
<server>
<id>2</id>
<hostname>10.0.0.2</hostname>
<port>9444</port>
</server>
<server>
<id>3</id>
<hostname>10.0.0.3</hostname>
<port>9444</port>
</server>
</raft_configuration>
</keeper_server>
<zookeeper>
<node>
<host>10.0.0.1</host> #不同服务器这个ip要换,尽量指定自己的zookeeper,防止都集中到单个一样的zookeeper里
<port>9181</port>
</node>
</zookeeper>
<distributed_ddl>
<path>/clickhouse/cluster/task_queue/ddl</path>
</distributed_ddl>
</yandex>
- 如果需要添加密码的话修改
/etc/clickhouse-server/user.xml
文件,把明文密码加到password标签中即可,或者也可以使用SHA256加密后的密码,请将其放置在 password_sha256_hex 配置段。
#shell生成加密密码的示例
PASSWORD=$(base64 < /dev/urandom | head -c8); echo "$PASSWORD"; echo -n "$PASSWORD" | sha256sum | tr -d '-'
最后启动clickhouse-server.service service clickhouse-server restart
启动后可以lsof -i:8123
查看端口是否有启动,service clickhouse-server status
服务是否正常启动,/var/log/clickhouse-server/clickhouse-server.err.log
相关日志是否都正常,没有报错。
8123是默认客户端端口,用于接收客户端的连接和处理来自客户端的查询请求。 9000是默认数据端口,用于处理 ClickHouse 数据节点之间的内部通信。
没问题后执行clickhouse-client
后即可登陆clickhouse。
- 登陆clickhouse后
select * from system.clusters\G;
看下是否节点都可以正常,在服务器里echo stat | nc 127.0.0.1 9181
检查9181端口的keeper是否也正常,如果都显示正常那就搭建完毕啦!
ps: users.xml
里也可以配置一些自定义的配置,具体可以参考官方文档,下面是一些我这边用到的:
<default>
<load_balancing>random</load_balancing> #负载均衡
<distributed_product_mode>global</distributed_product_mode> #分布式表一定得改成global,默认好像是local,只查询自己
<group_by_overflow_mode>throw</group_by_overflow_mode> #如果内存查爆了,直接中断查询丢出报错,默认是throw,也可以改成不报错,丢出部分查询数据
<max_memory_usage>64000000000</max_memory_usage> #单个查询最大能使用多大内存,这里是60g左右
<max_bytes_before_external_group_by>32000000000</max_bytes_before_external_group_by> #group_by如果聚合大于30g,则溢出到磁盘了,用io代替内存
<max_bytes_before_external_sort>32000000000</max_bytes_before_external_sort>#order_by如果聚合大于30g,则溢出到磁盘了,用io代替内存
</default>
clickhouse集群部署指南
https://blog.ikeno.top/posts/clickhouse_cluster_install/