LS同学分享了一篇关于搭建ClickHouse集群的文章,详细介绍了如何搭建一个包含3节点、3分片、1副本的ClickHouse集群。文章涵盖了准备工作(包括ZooKeeper安装、系统要求、CPU检查等)、版本选择与下载、配置文件(config.xml、metrika.xml)的修改、用户与权限设置、集群启动与验证、以及复制表和分布式表的测试等步骤。该文章为CK初学者提供了宝贵的搭建和避坑经验。
大家好,今天给大家分享LS同学根据亲身经历整理的一篇关于搭建ClickHouse集群的文章。
该篇文章主要讲述ClickHouse之3节点3分片1副本的集群搭建过程,也算是避坑指南,希望对大家有帮助,特别是CK初学者。
准备工作
安装环境
ZooKeeper版本要求
Zookeeper 安装3节点,版本要求在 ZooKeeper 3.4.5 或更高版本.
你可以配置任何现有的 ZooKeeper 集群,系统会使用里面的目录来存取元数据(该目录在创建可复制表时指定)。
如果配置文件中没有设置 ZooKeeper ,则无法创建复制表,并且任何现有的复制表都将变为只读。
在 ClickHouse 中,ZooKeeper 不参与任何实质性的数据传输。ZooKeeper 在 ClickHouse 中主要用在副本表数据的同步(ReplicatedMergeTree引擎)以及分布式表(Distributed)的操作上。
系统要求
ClickHouse可以在任何具有x86_64,AArch64或PowerPC64LE CPU架构的Linux,FreeBSD或Mac OS X上运行。
官方预构建的二进制文件通常针对x86_64进行编译,并利用SSE 4.2指令集,因此,除非另有说明,支持它的CPU使用将成为额外的系统需求。下面是检查当前CPU是否支持SSE 4.2的命令:
安装的3台机器都需要做验证!!!
# grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 supported" || echo "SSE 4.2 not supported"
输出结果如下
CPU是否支持SSE 4.2验证结果图
磁盘占用情况结果图2、在 /data1 目录下创建个ClickHouse,然后授权给CK。
3台机器都要执行:
cd /data1
mkdir clickhouse
chownd -R clickhouse:clickhouse /data1/clickhouse
版本选择和下载
ClickHouse的版本分类
testing :测试版本 prestable:预发稳定版 stable:稳定版 lts(长期支持)
我们此处选择stable:22.2.2.1-2 版本,具体细节官网有介绍:https://clickhouse.com/docs/en/faq/operations/production/
下载
rpm下载:
https://packages.clickhouse.com/rpm/stable/
由于我们的机器都是生产环境,所以此处选择了rpm的方式安装,提前把安装包下载好,放到安装包下载目录下 (此处我们的机器已经创建无需考虑)(3台机器都需要)
解压后文件目录
安装
台机器都要执行:
rpm -ivh clickhouse-common-static-22.2.2.1-2.x86_64.rpm
rpm -ivh clickhouse-server-22.2.2.1-2.noarch.rpm
rpm -ivh clickhouse-client-22.2.2.1-2.noarch.rpm
在安装 server 时,会提醒输入密码:此处确保3台机器的密码一致,我们密码设置为 root ,后续在配置时需要用到此处的密码。
配置文件
CK的配置主要为config.xml、user.xml 和 metrika.xml这三个。
配置 config.xml
配置文件的 config.xml更改的点,确保3台机器都要改动,并且改动的参数一致。
<?xml version="1.0"?>
<!-- CH的config是热部署的 -->
<clickhouse>
<!-- 端口配置 -->
<http_port>8123</http_port>
<tcp_port>9000</tcp_port>
<interserver_http_port>9009</interserver_http_port>
<!--取消该注释,开启远程访问--> <listen_host>::</listen_host>
<!-- 指定数据存储路径 -->
<path>/data1/clickhouse/</path>
<tmp_path>/data1/clickhouse/tmp/</tmp_path>
<!--
user_files_path:包含用户文件的目录,在表函数file()中使用。--> <user_files_path>
/data1/clickhouse/user_files/ </user_files_path>
<!--用来存储创建的用户和角色--><access_control_path>/data1/clickhouse/access/</access_control_path><!--包含输入格式文件--><format_schema_path>/data1/clickhouse/format_schemas/<format_schema_path><!-- 远程服务器,分布式表引擎和集群表功能使用的集群的配置 -->
<remote_servers incl="clickhouse_remote_servers" />
<distributed_ddl>
<!-- 在ZooKeeper中与DDL查询队列的路径 -->
<path>/clickhouse/task_queue/ddl</path>
</distributed_ddl>
<!-- zk启动 -->
<zookeeper incl="zookeeper-servers" optional="true" />
<!-- 启动macros,并指定地址 -->
<macros incl="macros" optional="true" />
<!--引入metrika.xml-->
<include_from>/etc/clickhouse-server/config.d/metrika.xml</include_from></clickhouse>
配置metrika.xml
在 /etc/clickhouse-server/config.d/ 下面vim 一个metrika.xml ,然后复制粘贴下面的配置。配置文件的 metrika.xml更改的点,确保3台机器都要改动,并且改动的参数一致。
<?xml version="1.0"?>
<clickhouse>
<!--新版的clickhouse集群的首个标签必须是clickhouse,而不是yandex --><!-- 集群配置 -->
<clickhouse_remote_servers>
<!-- 集群名称,确保和config.xml中的<remote_servers incl="clickhouse_remote_servers" />
的incl的中的参数一致-->
<perftest_3shards_1replicas>
<shard>
<!-- 建议一个台机器一个节点,避免资源争夺 -->
<!-- 表示是否只将数据写入其中一个副本,默认为false,表示写入所有副本,在复制表的情况下可能会导致重复和不一致,所以这里一定要改为true。-->
<internal_replication>true</internal_replication>
<!-- 副本配置,ch没有主备之分 -->
<replica>
<host>BD-P-GP01</host>
<port>9000</port>
<user>default</user>
<password>root</password>
</replica>
</shard>
<shard>
<internal_replication>true</internal_replication>
<replica>
<host>BD-P-GP02</host>
<port>9000</port>
<user>default</user>
<password>root</password>
</replica>
</shard>
<shard>
<internal_replication>true</internal_replication>
<replica>
<host>BD-P-GP03</host>
<port>9000</port>
<user>default</user>
<password>root</password>
</replica>
</shard>
</perftest_3shards_1replicas>
</clickhouse_remote_servers>
<!-- 本节点副本名称replica,配置后能方便后续创建复制表时不用指定zk路径,每台机器的配置不一样,确保和每台机器的host名称一致 -->
<macros>
<shard>01</shard> <replica>BD-P-GP01</replica>
</macros>
<!-- ZK配置 -->
<zookeeper-servers>
<node index="1">
<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>
</clickhouse>
配置 user.xml
use.xml此处不做改动。使用ACL语句创建用户和授权,此处应该在机器成功启动后再去创建用户 每个节点都要执行:
create database if not exists tutorial;
CREATE ROLE dba;
GRANT all ON *.* TO dba;
CREATE USER dba_u@'%' IDENTIFIED WITH sha256_password BY '密码';
GRANT dba TO dba_u;
GRANT all ON tutorial.* TO 'dba_u';
启动并验证
启动,使用root用户
systemctl start clickhouse-server
查看状态
systemctl status clickhouse-server
看到success 证明启动成功!
客户端连接
使用ClickHouse的客户端
-m 代表可以输入多行
clickhouse-client --password 'root' -m
然后进入到 ClickHouse 的客户端,使用 sql 语句,查看系统表
select * from system.clusters;
在查看系统表中能够查看到 perftest_3shards_1replicas 这个集群名称,证明安装成功。
复制表和分布式表测试
创建复制表:
CREATE TABLE default.perftest31r_local ON CLUSTER perftest_3shards_1replicas
(
`id` Int32,
`website` String,
`wechat` String,
`FlightDate` Date,
`Year` UInt16
)
ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/perftest31r_local', '{replica}', FlightDate, (Year, FlightDate), 8192)
创建分布式表(在BD-P-GP01实例上):
CREATE TABLE perftest31r_allAS cluster32r_local ENGINE = Distributed(perftest_3shards_1replicas
, default, cluster32r_local, rand());
插入数据:
INSERT INTO default.perftest31r_all(id,website,wechat,FlightDate,Year)values(1,'https://noah.com/','理财师','2022-11-28',2020);
INSERT INTO default.perftest31r_all(id,website,wechat,FlightDate,Year)values(2,'http://www.baidu.con/','java','2021-11-28',2020);
INSERT INTO default.perftest31r_all(id,website,wechat,FlightDate,Year)values(3,'http://www.xxxxx.cn/','xxxxx','2022-11-28',2020);
查看分布式表和本地表:
select count(*) from default.perftest31r_all; ---3
select count(*) from default.cluster32r_local; ---1 这个数据不固定
总结
以上就是LS同学上周搭建CK集群的经历总结,如果大家在实际搭建过程中遇到问题,可以文末留言或加我微信交流。
文章来源:微信公众号【志明】
发布于 数据智能 社群
推荐阅读