一、ClickHouse介绍
1.1 ClickHouse简介
ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统,专注于大规模数据分析和实时查询。采用了一种高效的列式存储引擎和并行计算架构,能够快速处理大规模数据,并支持复杂的分析查询。
ClickHouse官网 https://clickhouse.com/docs/en/intro#/ 有比较详细的介绍,本文就多做赘述。
ClickHouse与主流的关系型数据库Oracle和MySQL的存在一些差异,主要集中在行列存储方面,下面列举了一下它们之间的差异。
1) 存储方式:
- Oracle和MySQL是行式数据库,数据按行存储在磁盘上,适合事务处理和OLTP场景。
- ClickHouse是列式数据库,数据按列存储在磁盘上,适合大规模数据分析和OLAP场景。
2)数据访问方式:
- 行式数据库适合单行读写操作,适用于事务处理。
- 列式数据库适合批量数据读写和聚合计算,适用于复杂分析查询。
3)查询效率:
- 列式数据库在数据分析和聚合计算方面具有明显优势,能够快速处理大量数据并支持复杂的分析查询。
- 行式数据库在单行读写操作和事务处理方面表现较好,但在大规模数据分析场景下性能不如列式数据库。
4)数据压缩:
- 列式数据库通常具有更好的数据压缩率,因为相同类型的数据在列中具有更高的重复性。
- 行式数据库通常需要更多的存储空间,因为每行数据包含所有字段信息。
二、环境规划
2.1 环境规划
根据官网介绍, ClickHouse 可以在任何具有 x86-64、ARM 或 PowerPC64LE CPU 架构的 Linux、FreeBSD 或 macOS 上运行。
本次参照生产环境,搭建两套ClickHouse物理集群,两个物理集群组成一个大的逻辑集群。
因为本次测试环境有限,我选择将其中的一套ClickHouse物理集群部署和两台ZooKeeper服务器共用。
环境规划如下:
| 物理集群名称 | 逻辑集群名称 | IP地址 | ClickHouse版本 | 操作系统版本 |
|---|---|---|---|---|
| prod_ab_cluster | prod_ck_lg_cluster | 10.110.5.132 | 22.8.5.29 | CentOS 7.9.2009 |
| prod_ab_cluster | prod_ck_lg_cluster | 10.110.5.133 | 22.8.5.29 | CentOS 7.9.2009 |
| prod_cd_cluster | prod_ck_lg_cluster | 10.110.5.135 | 22.8.5.29 | CentOS 7.9.2009 |
| prod_cd_cluster | prod_ck_lg_cluster | 10.110.5.136 | 22.8.5.29 | CentOS 7.9.2009 |
2.2 系统配置
2.2.1 不禁用overcommit_memory
-- 查看各CK节点overcommit_memory值,若不是0,需置为0,参照如下命令: [root@xxxxx-ck ~]# echo 0 | sudo tee /proc/sys/vm/overcommit_memory 注:/proc/sys/vm/overcommit_memory 中的 overcommit_memory 参数控制了系统在内存分配时是否允许超过实际可用内存的情况。它有三个可能的取值: 0: 默认值,允许传统的内存过度分配机制。系统会允许分配的内存总量超过实际可用内存,但只有在使用时才会分配物理内存。 1: 始终允许内存过度分配。即使系统实际可用内存不足,系统也会继续分配内存,可能导致OOM。 2: 禁用内存过度分配。当内存请求无法满足时,系统会拒绝分配内存。 根据系统需求选择合适的取值,通常建议使用默认值0。
2.2.2 关闭透明大页
**性能影响:**大页(Transparent HugePages)旨在提高应用程序性能,但对于数据库系统如ClickHouse,THP可能引发性能不稳定,特别是在处理大量小型随机访问时。大页可能导致内存碎片和延迟增加,因为操作系统需要更多时间来管理大页内存。
**推荐配置:**ClickHouse等数据库系统建议禁用THP,以提高内存管理效率和整体性能。
可以参照如下方式临时和永久关闭透明大页。
-- root用户,所有CK节点都需操作 echo never > /sys/kernel/mm/transparent_hugepage/enabled echo never > /sys/kernel/mm/transparent_hugepage/defrag echo 'echo never > /sys/kernel/mm/transparent_hugepage/defrag' >> /etc/rc.d/rc.local echo 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' >> /etc/rc.d/rc.local sudo chmod +x /etc/rc.d/rc.local
2.2.3 关闭SWAP
**延迟和性能:**Swap空间速度较慢,对性能敏感的数据库应用程序如ClickHouse,依赖swap可能导致性能下降和延迟增加。
**稳定性和预测性:**依赖swap会使数据库性能变得不可预测,过度使用swap还可能导致系统整体响应缓慢。
**推荐配置:**为保证ClickHouse集群性能和稳定性,建议禁用swap空间,确保足够的物理内存以避免性能问题。
可以参照如下方式临时和永久关闭swap。
-- root用户,所有节点操作 -- 临时关闭 swapoff -a -- 永久关闭 vim /etc/fstab 注释 /dev/mapper/centos-swap swap swap defaults 0 0 这一行 重启生效 free 查看 swap为0即为生效
2.3 配置免密登录
为避免ckman部署clickhouse集群到各节出现hostname are the same错误,计划在部署ckman的服务器配置免密登录到其它服务器的权限,操作如下。
-- 检查各节点是否安装sshpass,若未安装且服务器已配置yum源,可使用如下方式安装 sudo yum install sshpass -- 在ckman服务器参照如下命令配置sshlogin.sh脚本。 cat << 'EOF' | tee /root/sshlogin.sh > /dev/null #!/bin/bash # 定义目标服务器的IP地址 servers=( "10.110.5.135" "10.110.5.136" "10.110.5.132" "10.110.5.133" ) # SSH密钥的路径 sshKeyPath="$HOME/.ssh/id_rsa" # 检查是否存在SSH密钥对,如果不存在则创建 if [ ! -f "$sshKeyPath" ]; then echo "SSH密钥对不存在,创建密钥对..." ssh-keygen -t rsa -b 2048 -f "$sshKeyPath" -q -N "" echo "SSH密钥对创建完成." else echo "SSH密钥对已存在." fi # 循环遍历每台服务器 for server in "${servers[@]}"; do echo "正在处理 $server ..." # 使用sshpass和ssh-copy-id复制公钥到目标服务器 # 注意:以下命令需要您已经安装了sshpass # 替换'root'为实际的root用户密码 sshpass -p 'root' ssh-copy-id -i "${sshKeyPath}.pub" -o StrictHostKeyChecking=no root@"$server" if [ $? -eq 0 ]; then echo "成功配置 $server 的SSH免密登录。" else echo "配置 $server 的SSH免密登录失败。" fi done echo "所有服务器的SSH互信免密登录配置完成。" EOF -- 为脚本赋权 chmod +x /root/sshlogin.sh -- 执行脚本 /root/sshlogin.sh [root@ivorysqldb ~]# sh /root/sshlogin.sh -- 验证ssh 互信 [root@ivorysqldb ~]# ssh 10.110.5.135/136/132/133

三、安装部署
3.1 下载RPM包
可以通过yandex官网或者阿里云镜像两种方式下载RPM包,如下所示:
yandex官网:https://repo.yandex.ru/clickhouse/rpm/stable/x86_64/
阿里镜像: https://mirrors.aliyun.com/clickhouse/rpm/stable/?spm=a2c6h.25603864.0.0.11193e7focs4ow

上述各目录含义如下:
- lts: 长期支持版本,稳定且提供长时间维护。
- prestable: 准备稳定的版本,新功能正在最终测试中。
- stable: 稳定版本,适合大多数用户日常使用。
- testing: 测试版本,含最新功能,可能不够稳定,适合开发者和测试者。
如果是考虑上生产,建议选择到 stable 这个稳定版本目录下去下载,如果是为了研究测试,可以选择 testing 目录下下载最新的软件包。
本次参照生产环境,下载 stable 目录下 2022-09-13 发布的 22.8.5.29 版本,本次下载的三个 rpm 包信息如下:
1) clickhouse-client-22.8.5.29.x86_64.rpm -- 这是ClickHouse的客户端软件包,用于与ClickHouse服务器进行交互。它提供了一个命令行界面,用户可以在这个界面上输入SQL查询并看到查询结果。 2) clickhouse-common-static-22.8.5.29.x86_64.rpm 这是包含ClickHouse的静态库和其他共享资源的软件包。它们被用于构建ClickHouse的服务器和客户端。这个包通常是为了方便开发者使用,一般用户在使用ClickHouse时不需要直接安装这个包。 3) clickhouse-server-22.8.5.29.x86_64.rpm 这是ClickHouse的服务器软件包,用于在服务器上安装和运行ClickHouse服务。这个软件包包含了运行ClickHouse数据库服务所需要的所有组件,包括用于处理查询、存储数据和与客户端通信的组件。
3.2 上传安装包
首先通过 http://xxx.xxx.xxx.xxx:8808/login 登录ckman管理界面,xxx.xxx.xxx.xxx为部署ckman服务器IP地址,登录进入首页后,首先点击右上角 设置 按钮,如下所示。

点击 设置 按钮后,会转到如下页面,提示 上传安装包。

点击 上传安装包 按钮,进入如下界面。

点击上面 上传安装包,找到之前下载的ClickHouse 三个rpm包,进行上传,然后点击 上传 按钮,如下所示。

上传过程中会显示如下界面信息。

上传结束后,会有如下提示。

3.3 创建集群
上述操作完成后,重新回到ckman主界面,点击 创建集群 按钮,如下所示。
然后按照生产环境规划参照如下信息填写。





上述填写完成后,如下所示点击 创建 按钮进行集群创建。

集群创建过程中会显示如下信息,显示物理集群正在创建。

物理集群创建成功后,会显示如下信息。

物理集群成功创建后,会展示如下信息。

参照以上物理集群的创建,又创建了另一个物理集群,两者形成一个逻辑集群,逻辑集群创建成功后,回到ckman首页,显示如下两个物理集群信息。

另:若后期对集群参数进行调整,可在ckman 设置 选项中添加和修改新参数,点击保存生效。
四、附录
4.1 open /etc/ckman/conf/id_rsa: no such file or directory
在使用ckman点击安装时报 host 10.110.5.132 get platform failed: host: 10.110.5.132, cmd: uname -m: : open /etc/ckman/conf/id_rsa: no such file or directory 这错误。

最后排查是因为 /data/clickhouse目录权限和属组有问题,最后为了避免出现其它问题,设置了 777目录权限。
4.2 数据校验失败 Process exited with status 1
在修改了目录权限后,我重新点击安装,还是报错,报如下错误:
数据校验失败: : run ‘su clickhouse -s /bin/bash -c “cd /data/clickhouse/ && echo $?”’ on host 10.110.5.133 fail: : : Process exited with status 1
经排查是因为在前面报错后,安装进程创建了clickhouse用户,但clickhouse用户最开始没权限访问/data/clickhouse目录,我将clickhouse用户删除了,但未将clickhouse的属组删除,导致报错,后来我直接编辑/etc/group文件,将clickhouse属组删除,再执行安装就没报错。
如喜欢文章内容,可关注我公众号:





