概述
ClickHouse
的部署方式,在官方文档有详细的教程。根据安装包格式的不同,分为rpm
部署、deb
包部署,以及tgz
方式部署。这三种部署都可以做成服务,成为常驻进程的daemon
程序。用得最为广泛的是rpm
部署方式,deb包部署只是安装命令上 有所区别,和rpm
方式大同小异。
本文主要讲解如何通过tgz
方式对clickhouse
进行部署。并演示单节点如何部署成功,至于如何搭建clickhouse
集群,只要单节点可以成功安装,只是修改配置的事,本文就不多做展开。
官方tgz方式部署
安装包可以从https://packages.clickhouse.c...处下载,建议下载LTS
版本,本文演示的安装包版本为22.3.6.5
,主要下载三个包:
官方的安装手册在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 start
tar -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.tgz
tar -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
解压完后就是安装,按照官方手册,直接执行doinst.sh
脚本即可。
安装时有两点需要注意:
doinst.sh
脚本安装需要root
权限,因此,需要使用root
用户或具有sudo
权限的普通用户。- 注意安装顺序,先安装
common
,然后安装server
和client
,server
和client
安装顺序随意。
执行命令如下:
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
common
和client
直接执行脚本即可。server
在安装时有两个需要与用户交互的地方:
此处需要填写default
用户的密码,当然你也可以直接回车,不填写密码,不设置密码的话不会出现第二次交互,如果输入密码,(如我在此处输入123456
)则会出现下面的交互界面:
此处是询问是否允许远程访问,默认是只允许本机访问,我们选择y
,出现如下界面 ,说明server
已经安装好:
如果你不想在安装时跳出交互页面,可以通过设置环境变量 DEBIAN_FRONTEND=noninteractive
来禁用该功能,那么则默认不会设置default
用户密码:
sudo DEBIAN_FRONTEND=noninteractive clickhouse-server-22.3.6.5/install/doinst.sh
安装完成后,就可以启动clickhouse
服务了,启动命令:
sudo clickhouse start
出现如下提示,说明启动成功:
我们也可以通过客户端连接server
的方式进行验证:
clickhouse-client -m --password=123456
这是通过官方脚本的方式进行安装,事实上,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
部署,因此rpm
和deb
包直接就不用考虑了。对于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))
fi
VERSION=$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
,会在当前文件夹下多出下面这些文件:
重点关注下这两个文件夹下文件是否正确:
以及config.xml
中log
路径和path
路径是否已正确修改过来:
看到上图的提示,就说明安装成功了,可以使用clickhouse status
命令来检查运行状态:
也可以使用client
直接连接数据库,默认安装是没有密码的,如果需要密码,可以修改install
脚本,传入一个密码即可:
总结
本文简单讲述了如何使用tgz
方式安装clickhouse
服务,并介绍了无root
部署的方式安装并启动一个clickhouse
服务,但是一旦服务器宕机,这种安装方式并不能实现开机自启,虽然官方提供的安装包中有systemd
的clickhouse-server.service
和init.d
脚本,但是这二者都依赖root
权限,因此这还是一个无解的问题。所以,一旦出现服务宕机,如果没有root
权限,就只能一台一台去重启了。