暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

ClickHouse生产运维系列[部署篇]-03_ckman安装部署ClickHouse集群

1861

一、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

image20240306142103793.png

三、安装部署

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

image20240306110400240.png

上述各目录含义如下:

  • 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地址,登录进入首页后,首先点击右上角 设置 按钮,如下所示。

image20240306143158116.png

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

image20240306143431864.png

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

image-20240306143431864

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

image20240306143644647.png

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

image20240306143703972.png

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

image20240306143745639.png

3.3 创建集群

上述操作完成后,重新回到ckman主界面,点击 创建集群 按钮,如下所示。

然后按照生产环境规划参照如下信息填写。

image20240306163554857.png
image20240306163648038.png
image20240306165928283.png
image20240306171515401.png
image20240306163845859.png

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

image20240306231446518.png

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

image20240306171205998.png

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

image20240306171328957.png

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

image20240306173150416.png

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

image20240306231622976.png

另:若后期对集群参数进行调整,可在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 这错误。

image-20240306182025314

最后排查是因为 /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属组删除,再执行安装就没报错。


如喜欢文章内容,可关注我公众号:

image.png

最后修改时间:2024-03-11 10:08:13
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论