最近有一个业务需要使用clickhouse,所以研究了一下clickhouse,也踩了一些坑,在此记录一下。
写在前面
clickhouse中文文档比较齐全,入门之前建议先看下官方文档,可以减少踩坑和降低学习成本,如果官方文档上找不到的再去搜索别的文章看看有没有什么具体案例。
clickhouse中文文档地址:
https://clickhouse.com/docs/zh/getting-started/tutorial/
本地安装部署
我的电脑是mac m1的,采用的是下载源码自己构建的方式在本地运行clickhouse的
mac m1安装部署我是参考的如下这篇文章进行安装部署的,实测可用:
https://www.cnblogs.com/Hearter/articles/15450696.html
这篇文章有如下几个点要注意一下,首先是第4步拉取源码,这一步我一开始没复制他的代码,我直接使用的git clone拉的,没有加--recursive参数,下载源码的时候切记要按照文章里的命令去下代码,不然编译的时候会报错。
然后第5步原文作者提供了3种方式构建clickhouse,我按照作者的推荐直接用了第二种方式,即使用homebrew的clang编译器进行构建,这种方式构建我自己试了,没啥问题,其他2种我没试过。
最后附上官方关于mac os构建clickhouse的链接:
https://clickhouse.com/docs/zh/development/build-osx/
centos安装部署
采用tgz的方式安装
本地运行完clickhouse,然后需求在开发环境再部署一套clickhouse来使用,开发环境的机器是centos 7.
官网上安装部署有比较详细的说明,具体文档地址如下,支持deb、rpm、tgz、docker等安装部署方式
https://clickhouse.com/docs/zh/getting-started/install/
由于我司开发环境有网络环境隔离,下载rpm包的方式走不通,同样因为网络隔离的原因,官方的tgz包无法通过curl下载,我选择的是手动下载tgz包,然后通过别的方式将下载的tgz包上传到服务器。
tgz包下载地址:
https://packages.clickhouse.com/tgz/
https://github.com/ClickHouse/ClickHouse/releases
下载完之后就可以按照官方文档的指导进行解压安装了。
如果网络没问题,可以直接按照官方文档上的说明使用curl进行下载安装。
我下载的版本是22.1.3.7,以此版本为例,tgz包上传到同一个目录下,执行以下操作
tar -xzvf "clickhouse-common-static-22.1.3.7.tgz"
sudo "clickhouse-common-static-22.1.3.7、install/doinst.sh"
tar -xzvf "clickhouse-common-static-dbg-22.1.3.7.tgz"
sudo "clickhouse-common-static-dbg-22.1.3.7/install/doinst.sh"
tar -xzvf "clickhouse-server-22.1.3.7.tgz"
sudo "clickhouse-server-22.1.3.7/install/doinst.sh"
tar -xzvf "clickhouse-client-22.1.3.7.tgz"
sudo "clickhouse-client-22.1.3.7/install/doinst.sh"
这样就完成了使用tgz包安装clickhouse
启动server
关于tgz安装的时候这条命令
sudo /etc/init.d/clickhouse-server start
如果你安装完之后,使用root用户启动,会发现启动不了,具体的启动日志如下:
2022.03.29 17:39:13.912767 [ 6012 ] {} <Information> Application: Will watch for the process with pid 6013
2022.03.29 17:39:13.912900 [ 6013 ] {} <Information> Application: Forked a child process to watch
2022.03.29 17:39:13.913400 [ 6013 ] {} <Information> SentryWriter: Sending crash reports is disabled
2022.03.29 17:39:13.913547 [ 6013 ] {} <Trace> Pipe: Pipe capacity is 1.00 MiB
2022.03.29 17:39:14.193544 [ 6014 ] {} <Trace> BaseDaemon: Received signal -2
2022.03.29 17:39:14.193603 [ 6014 ] {} <Information> BaseDaemon: Stop SignalListener thread
2022.03.29 17:39:14.206283 [ 6012 ] {} <Information> Application: Child process exited normally with code 233.
2022.03.29 17:39:44.409085 [ 6067 ] {} <Information> Application: Will watch for the process with pid 6068
2022.03.29 17:39:44.409167 [ 6068 ] {} <Information> Application: Forked a child process to watch
2022.03.29 17:39:44.409619 [ 6068 ] {} <Information> SentryWriter: Sending crash reports is disabled
2022.03.29 17:39:44.409768 [ 6068 ] {} <Trace> Pipe: Pipe capacity is 1.00 MiB
2022.03.29 17:39:44.664700 [ 6069 ] {} <Trace> BaseDaemon: Received signal -2
2022.03.29 17:39:44.664762 [ 6069 ] {} <Information> BaseDaemon: Stop SignalListener thread
2022.03.29 17:39:44.677423 [ 6067 ] {} <Information> Application: Child process exited normally with code 233
然后检查clickhouse相关的用户目录,会发现用户和组都是clickhouse
发现/var/lib/clickhouse目录下的文件权限为root,如果以普通用户起的话,可以将/var/lib/clickhouse下的文件全部更改为clickhouse
chown -R clickhouse:clickhouse /var/lib/clickhouse/
如果因为用户权限问题导致启动不了,可以检查下启动时的用户以及clickhouse相关的文件夹的用户和组
/var/lib/clickhouse/
/var/log/clickhouse-server/
/etc/clickhouse-server
#和server无关,和客户端有关
/etc/clickhouser-client
然后用clickhouse用户来启动clickhouse server
sudo -u clickhouse clickhouse-server --config-file=/etc/clickhouse-server/config.xml
上面说的是以普通用户的方式启动,更粗暴一点的方式是将和clickhouse相关的全部设置成root
chown -R root:root /var/lib/clickhouse /var/log/clickhouse-server /etc/clickhouse-server /etc/clickhouse-client
然后用root用户,使用以下命令启动
nohup clickhouse-server --config-file=/etc/clickhouse-server/config.xml &
密码
clickhouse安装的时候会让你输入默认密码,默认密码在/etc/clickhouse-server/users.d/default-password.xml 里,如果忘记了或者想换一个密码,可以删掉default-password.xml,在/etc/clickhouse-server/users.xml中设置新的密码
clickhouse用户的密码在users.xml,比如你想将default用户的密码设置成123456,可以找到default用户的配置,修改password的配置为123456
<password>123456</password>
如果需要将密码加密,clickhouse也支持sha256的方式,修改password_sha256_hex的配置
<password_sha256_hex>8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92</password_sha256_hex>
还支持其他的几种校验方式,具体可以见users.xml中的注释文件
修改完密码之后,重启clickhouse server进程,密码就生效了
clickhouse版本升级
我是使用tgz包的方式安装的,我自己使用的方式是下载对应版本的包,重新执行下安装命令,然后再启动的时候就是你想要升级的版本了,rpm的包升级我没试,需要自行寻找
比如要从22.1.3.7升级到22.3.2.2,先下载对应的包,然后再走一遍流程
tar -xzvf "clickhouse-common-static-22.3.2.2.tgz"
sudo "clickhouse-common-static-22.3.2.2/install/doinst.sh"
tar -xzvf "clickhouse-common-static-dbg-22.3.2.2.tgz"
sudo "clickhouse-common-static-dbg-22.3.2.2/install/doinst.sh"
tar -xzvf "clickhouse-server-22.3.2.2.tgz"
sudo "clickhouse-server-22.3.2.2/install/doinst.sh"
tar -xzvf "clickhouse-client-22.3.2.2.tgz"
sudo "clickhouse-client-22.3.2.2/install/doinst.sh"
需要再重新解决一下用户权限问题,可以参考上边的clickhouse用户或者root用户启动,启动之后clickhouse server版本就变成了22.3.2.2了