概述:部署clickhouse三台节点的集群用作数据写入暂存库
-
节点:
- Master 节点 :1.0.0.6
- Followe节点:1.0.0.7
- Followe节点:1.0.0.8
流程关系如下:
安装包准备
clickhouse 官网: https://clickhouse.yandex/
clickhouse github:https://github.com/ClickHouse/ClickHouse/releases
-
由于我是离线安装,所以需要提前准备安装包。打开github下载对应的包:这里建议选择版本后缀stable的稳定版,下载ck需要以下三个。我这里下载的是rpm包。
clickhouse-client:包含clickhouse-client客户端,它是交互式ClickHouse控制台客户端
clickhouse-common:含一个ClickHouse可执行文件
-
clickhouse-server:包含要作为服务端运行的ClickHouse配置文件
开始部署
部署声明:需要在群集的所有机器上安装ClickHouse服务端
-
创建安装目录
mkdir /opt/clickhouse
-
创建用户
useradd clickhouse passwd clickhouse
- 配置映射:事实上ck是虽然可以指定master主节点,但是一般都是不需要指定的,我这里只是习惯于与这个配置成这个主机名,但是在后面配置ck的时候并没有配置106.6位master节点
vim /etc/hosts
1.0.0.6 ck_Master
1.0.0.7 ck_Followe_node1
1.0.0.8 ck_Followe_node2
- 配置sudo权限
vi /etc/sudoers
%wheel ALL=(ALL) ALL
%clickhouse ALL=(ALL) ALL
- 查看依赖
rpm -qpR clickhouse-server-23.7.5.30.x86_64.rpm
clickhouse-common-static = 23.7.5.30 #这里查看依赖看到需要先安装common
-
安装ck-common(在三台机器安装)
yum localinstall lickhouse-common-static-23.7.5.30.x86_64.rpm ................. Installed: clickhouse-common-static-23.7.5.30-1.x86_64 Complete!
-
安装ck-server(在三台机器安装)
yum localinstall clickhouse-server-23.7.5.30.x86_64.rpm ................ Installed: clickhouse-server-23.7.5.30-1.x86_64 Complete!
-
安装ck-client(在三台机器安装)
yum localinstall clickhouse-client-23.7.5.30.x86_64.rpm ................ Installed: clickhouse-client-23.7.5.30-1.x86_64 Complete!
-
验证是否安装成功
systemctl start clickhouse-server.service systemctl status clickhouse-server.service ........ Active: active (running) since Wed 2023-09-06 12:22:51 CST; 1s ago ........ 显示正常
ClickHouse主配置文件是
/etc/clickhouse-server/config.xml
。user.xm这个文件是用户配置,里面可以修改账户密码,其余文件须在目录/etc/clickhouse-server/config.d
这里需要注意的是:ck支持支持多配置文件管理,也就是说可以直接在conf.d目录下做配置,ck在启动时会读conf.d
目录下的所有配置文件,conf.d
目录下的配置与config.xml
冲突,那么conf.d
中的配置将覆盖config.xml
中的配置。-
配置监听地址
<?xml version="1.0" ?> <clickhouse> <listen_host>0.0.0.0</listen_host> </clickhouse>
-
配置zookeeper集群信息
<?xml version="1.0" ?> <clickhouse> <zookeeper> <node> <host>1.0.0.3</host> <port>2181</port> </node> <node> <host>1.0.0.2</host> <port>2181</port> </node> <node> <host>1.0.0.1</host> <port>2181</port> </node> <session_timeout_ms>30000</session_timeout_ms> </zookeeper> </clickhouse>
配置存储路径
<?xml version="1.0" ?>
<clickhouse>
<!-- 主数据目录,存储所有的表数据、索引、系统文件等 -->
<path>/opt/clickhouse/date/</path>
<!-- 临时目录,用于存储临时数据文件和部分中间计算结果 -->
<tmp_path>/opt/clickhouse/date/tmp</tmp_path>
<!-- 用户文件目录,用于存储用户上传的文件,例如在文件函数中使用的 -->
<user_files_path>/opt/clickhouse/date/user_files</user_files_path>
<!-- 格式化模式的路径,用于存储自定义的输入/输出数据格式模式 -->
<format_schema_path>/opt/clickhouse/date/format_schemas</format_schema_path>
</clickhouse>
- 配置集群信息
这里只配置了单个分片(shard)如果需要配置的多个分片需要注意一个分片的副本中的机器,不能跨副本成为其他分片的副本,也就是说不通的分片,需要不同的机器做副本
<clickhouse>
<remote_servers>
<zz_cluster> <!-- 集群名称 -->
<!-- 一个分片 -->
<shard>
<internal_replication>true</internal_replication>
<!-- 第一个副本 -->
<replica>
<host>1.0.0.6</host>
<port>9000</port>
<user>clickhouse</user>
<password>passwd</password>
</replica>
<!-- 第二个副本 -->
<replica>
<host>1.0.0.7</host>
<port>9000</port>
<user>clickhouse</user>
<password>passwd</password>
</replica>
<!-- 第三个副本 -->
<replica>
<host>1.0.0.8</host>
<port>9000</port>
<user>clickhouse</user>
<password>passwd</password>
</replica>
</shard>
</zz_cluster>
</remote_servers>
</clickhouse>
-
配置宏
<?xml version="1.0" ?> <clickhouse> <macros> <cluster>mycluster</cluster> <!-- 集群名称,保持一致 --> <shard>shard1</shard> <!-- 分片名称,保持一致 --> <server_id>01</server_id> <!-- 服务器ID,每台服务器不同 --> <server_name>ck_Master</server_name> <!-- 主机名,每台服务器不同 --> <replica>ck_Followe_node1</replica> <!-- 这里我是master机器配了follow_node1,如果是ck_Followe_node1就配置成ck_Followe_node2,ck_Followe_node2配置成ck_master --> </macros> </clickhouse>
-
三台服务都启动后 需要测试clickhouse的集群状态
select * from system.clusters
-
优化配置编辑user.xml
<!-- 查询的最大内存使用量,以字节为单位 --> <max_memory_usage>28000000000</max_memory_usage> <!-- 用于执行任务的后台线程数 为服务器CPU核数*2 --> <background_pool_size>32</background_pool_size> <!-- 外部 GROUP BY 操作之前允许的最大字节数 --> <max_bytes_before_external_group_by>16000000000</max_bytes_before_external_group_by> <!-- 外部排序操作之前允许的最大字节数 --> <max_bytes_before_external_sort>23000000000</max_bytes_before_external_sort <!-- 用于调度后台任务的线程数 为服务器CPU核数*2 --> <background_schedule_pool_size>32</background_schedule_pool_size> <!-- 用于分布式环境中调度后台任务的线程数 为服务器CPU核数*2 --> <background_distributed_schedule_pool_size>32</background_distributed_schedule_pool_size>
到此 重启ck服务后,已经可以正常使用了