概述
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
出現如下提示,說明啟動成功:
可透過clickhouse status
命令檢視:
我們也可以透過客戶端連線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
許可權,就只能一臺一臺去重啟了。