ITPub博客

首页 > 数据库 > 数据库开发技术 > ClickHouse生产运维系列[部署篇]-03_ckman安装部署ClickHouse集群

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

原创 数据库开发技术 作者:oracle_jacky 时间:2024-03-09 09:53:24 0 删除 编辑

一、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属组删除,再执行安装就没报错。


原文作者:尚雷的驿站;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论
现供职于某上市互联网公司担任DBA,荣获 PG ACE称号,拥有 Oracle OCM、AWS等及国产数据库等产品认证。喜欢技术分享,热爱交友,也热爱健身。

注册时间:2024-01-01

  • 博文量
    68
  • 访问量
    45460