无root方式部署clickhouse浅探

概述 ClickHouse的部署方式,在官方文档有详细的教程。根据安装包格式的不同,分为rpm部署、deb包部署,以及tgz方式部署。这三种部署都可以做成服务,成为常驻进程的daemon程序。用得最为广泛的是rpm部署方式,deb包部署只是安装命令上 有所区别,和rpm方式大同小异。
本文主要讲解如何通过tgz方式对clickhouse进行部署。并演示单节点如何部署成功,至于如何搭建clickhouse集群,只要单节点可以成功安装,只是修改配置的事,本文就不多做展开。
官方tgz方式部署 安装包可以从https://packages.clickhouse.c...处下载,建议下载LTS版本,本文演示的安装包版本为22.3.6.5,主要下载三个包:

  • https://packages.clickhouse.c...
  • https://packages.clickhouse.c...
  • https://packages.clickhouse.c...
官方的安装手册在Installation | ClickHouse Docs ,我从文档中摘要出命令如下:
LATEST_VERSION=$(curl -s https://packages.clickhouse.com/tgz/stable/ | \ grep -Eo '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' | sort -V -r | head -n 1) export LATEST_VERSION curl -O "https://packages.clickhouse.com/tgz/stable/clickhouse-common-static-$LATEST_VERSION-amd64.tgz" curl -O "https://packages.clickhouse.com/tgz/stable/clickhouse-common-static-dbg-$LATEST_VERSION-amd64.tgz" curl -O "https://packages.clickhouse.com/tgz/stable/clickhouse-server-$LATEST_VERSION-amd64.tgz" curl -O "https://packages.clickhouse.com/tgz/stable/clickhouse-client-$LATEST_VERSION-amd64.tgz"tar -xzvf "clickhouse-common-static-$LATEST_VERSION-amd64.tgz" sudo "clickhouse-common-static-$LATEST_VERSION/install/doinst.sh"tar -xzvf "clickhouse-common-static-dbg-$LATEST_VERSION-amd64.tgz" sudo "clickhouse-common-static-dbg-$LATEST_VERSION/install/doinst.sh"tar -xzvf "clickhouse-server-$LATEST_VERSION-amd64.tgz" sudo "clickhouse-server-$LATEST_VERSION/install/doinst.sh" sudo /etc/init.d/clickhouse-server starttar -xzvf "clickhouse-client-$LATEST_VERSION-amd64.tgz" sudo "clickhouse-client-$LATEST_VERSION/install/doinst.sh"

dbg包是调试版本,我们不需要。接下来 ,我们按照这个步骤来安装。
首先,下载安装包并解压:
wget https://packages.clickhouse.com/tgz/lts/clickhouse-client-22.3.6.5-amd64.tgz wget https://packages.clickhouse.com/tgz/lts/clickhouse-common-static-22.3.6.5-amd64.tgz wget https://packages.clickhouse.com/tgz/lts/clickhouse-server-22.3.6.5-amd64.tgztar -xzvf clickhouse-client-22.3.6.5-amd64.tgz tar -xzvf clickhouse-common-static-22.3.6.5-amd64.tgz tar -xzvf clickhouse-server-22.3.6.5-amd64.tgz

如下所示:
无root方式部署clickhouse浅探
文章图片

解压完后就是安装,按照官方手册,直接执行doinst.sh脚本即可。
安装时有两点需要注意:
  • doinst.sh脚本安装需要root权限,因此,需要使用root用户或具有sudo权限的普通用户。
  • 注意安装顺序,先安装common,然后安装serverclientserverclient安装顺序随意。
执行命令如下:
sudo clickhouse-common-static-22.3.6.5/install/doinst.sh sudo clickhouse-server-22.3.6.5/install/doinst.sh sudo clickhouse-client-22.3.6.5/install/doinst.sh

commonclient直接执行脚本即可。server在安装时有两个需要与用户交互的地方:
无root方式部署clickhouse浅探
文章图片

此处需要填写default用户的密码,当然你也可以直接回车,不填写密码,不设置密码的话不会出现第二次交互,如果输入密码,(如我在此处输入123456)则会出现下面的交互界面:
无root方式部署clickhouse浅探
文章图片

此处是询问是否允许远程访问,默认是只允许本机访问,我们选择y,出现如下界面 ,说明server已经安装好:
无root方式部署clickhouse浅探
文章图片

如果你不想在安装时跳出交互页面,可以通过设置环境变量 DEBIAN_FRONTEND=noninteractive来禁用该功能,那么则默认不会设置default用户密码:
sudo DEBIAN_FRONTEND=noninteractive clickhouse-server-22.3.6.5/install/doinst.sh

安装完成后,就可以启动clickhouse服务了,启动命令:
sudo clickhouse start

出现如下提示,说明启动成功:
无root方式部署clickhouse浅探
文章图片

可通过clickhouse status命令查看:
无root方式部署clickhouse浅探
文章图片

我们也可以通过客户端连接server的方式进行验证:
clickhouse-client -m --password=123456

无root方式部署clickhouse浅探
文章图片

这是通过官方脚本的方式进行安装,事实上,clickhouse也提供了install命令,放在clickhouse-common-static-22.3.6.5/usr/bin目录下 ,通过该命令可以执行其安装的路径和用户。不过你同样需要root权限才能正确安装。
[eoi@ck14 clickhouse]$ ./clickhouse-common-static-22.3.6.5/usr/bin/clickhouse install -h Usage: sudo ./clickhouse-common-static-22.3.6.5/usr/bin/clickhouse install [options] -h [ --help ]produce help message --prefix arg (=/)prefix for all paths --binary-path arg (=usr/bin)where to install binaries --config-path arg (=etc/clickhouse-server) where to install configs --log-path arg (=var/log/clickhouse-server) where to create log directory --data-path arg (=var/lib/clickhouse) directory for data --pid-path arg (=var/run/clickhouse-server) directory for pid file --user arg (=clickhouse)clickhouse user to create --group arg (=clickhouse)clickhouse group to create

clickhouse-server-22.3.6.5/lib/systemd/system下,有一个clickhouse-server.service文件,将该文件拷贝到/etc/systemd/system目录下,即可将clickhouse作为一个服务进行管理,你就可以通过systemctl对其进行管理操作了。
clickhouse-server-22.3.6.5/etc/init.d目录下,有一个clickhouse-server文件,将其拷贝到/etc/init.d下,就可以实现clickhouse-server的开机自启动。
无root部署 官方的tgz方式的安装教程虽然简单易操作,但是需要一个前提,就是一切安装、启动等操作,都必须使用root权限。但是实际上,很多线上运维人员并不会直接持有root权限,很多时候都是IT分配一个普通账户,并不能通过sudo进行上述操作,因此,如何无root方式部署安装clickhouse,也是运维人员需要考虑的问题之一。
由于是无root部署,因此rpmdeb包直接就不用考虑了。对于tgz,虽然官方提供的安装方式也需要sudo提权,但究其原理,无非是执行二进制文件,因此,我们可以不依赖官方的安装脚本,直接将解压后的二进制文件通过一定的包装,完成普通用户不依赖root权限也能正常执行。
思路大致如下 :
仍然是这三个安装包,我们只需要其中的配置文件和可执行文件,官方安装之所以需要root权限,主要是日志、配置文件、可执行文件以及进程锁文件都是分布在系统目录之下的,必须要root用户才能访问得到,同时需要创建clickhouse用户。
所以在这里,我们需要把上述涉及到系统目录的操作都改到普通用户有权限操作的目录下完成。如:我目前使用的账户为eoi,假设该账户没有sudo权限,我们在 /home/eoi下创建clickhouse文件夹 ,作为clickhouse运行的工作目录 ,并做如下划分:
  • etc目录:配置文件
  • log目录:日志文件
  • bin目录:可执行文件
  • run目录:进程锁文件
  • data目录:存放数据
于是我们可以创建安装脚本如下:
#install.sh CWD=$1 if [ x$CWD = "x" ]; then CWD=$(dirname $(cd "$(dirname "$0")" && pwd)) fiVERSION=$2 if [ x$VERSION = "x" ]; then VERSION=$(curl -s https://packages.clickhouse.com/tgz/stable/ | \ grep -Eo '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' | sort -V -r | head -n 1) fi curl -O "https://packages.clickhouse.com/tgz/stable/clickhouse-common-static-$VERSION-amd64.tgz" curl -O "https://packages.clickhouse.com/tgz/stable/clickhouse-server-$VERSION-amd64.tgz" curl -O "https://packages.clickhouse.com/tgz/stable/clickhouse-client-$VERSION-amd64.tgz"tar -xzf "clickhouse-common-static-$VERSION-amd64.tgz" tar -xzf "clickhouse-server-$VERSION-amd64.tgz" tar -xzf "clickhouse-client-$VERSION-amd64.tgz" mkdir -p $CWD/etc/clickhouse-server/config.d$CWD/etc/clickhouse-server/users.d $CWD/etc/clickhouse-client $CWD/log/clickhouse-server $CWD/bin $CWD/run $CWD/data/clickhouse cp -rf clickhouse-common-static-$VERSION/usr/bin $CWD cp -rf clickhouse-server-$VERSION/usr/bin $CWD cp -rf clickhouse-client-$VERSION/usr/bin $CWD cp -rf clickhouse-server-$VERSION/etc/clickhouse-server $CWD/etc cp -rf clickhouse-client-$VERSION/etc/clickhouse-client $CWD/etc#修改配置文件路径 sed -i "s#/var/log#$PWD/log#g" $PWD/etc/clickhouse-server/config.xml sed -i "s#/var/lib#$PWD/data#g" $PWD/etc/clickhouse-server/config.xml

以上命令基本就能在用户自己的工作目录下安装好clickhouse,然后可以做一个start.sh用来启动clickhouse-server
#start.sh DIR=$(cd "$(dirname "$0")" && pwd) #log路径由于已经通过配置文件指定了,因此无需再在命令行指定 $DIR/bin/clickhouse-server --config-file=$DIR/etc/clickhouse-server/config.xml --pid-file=$HDIR/run/clickhouse-server.pid --daemon

停止的脚本也很简单 :
#stop.sh DIR=$(cd "$(dirname "$0")" && pwd) ps -ef|grep $DIR/bin/clickhouse-server |grep -v grep |awk '{print $2}' |xargs kill

tgz方式部署就不存在升级和卸载的操作了。升级就是重新安装,卸载直接删除工作目录即可。
实战演练:
/home/eoi/clickhouse目录下运行./install.sh . 22.3.6.5,会在当前文件夹下多出下面这些文件:
无root方式部署clickhouse浅探
文章图片

重点关注下这两个文件夹下文件是否正确:
无root方式部署clickhouse浅探
文章图片

以及config.xmllog路径和path路径是否已正确修改过来:
无root方式部署clickhouse浅探
文章图片

如果以上各项检查都没有问题,就可以启动了。
无root方式部署clickhouse浅探
文章图片

看到上图的提示,就说明安装成功了,可以使用clickhouse status命令来检查运行状态:
无root方式部署clickhouse浅探
文章图片

也可以使用client直接连接数据库,默认安装是没有密码的,如果需要密码,可以修改install脚本,传入一个密码即可:
无root方式部署clickhouse浅探
文章图片

总结 【无root方式部署clickhouse浅探】本文简单讲述了如何使用tgz方式安装clickhouse服务,并介绍了无root部署的方式安装并启动一个clickhouse服务,但是一旦服务器宕机,这种安装方式并不能实现开机自启,虽然官方提供的安装包中有systemdclickhouse-server.serviceinit.d脚本,但是这二者都依赖root权限,因此这还是一个无解的问题。所以,一旦出现服务宕机,如果没有root权限,就只能一台一台去重启了。

    推荐阅读