無root方式部署clickhouse淺探

禹鼎侯發表於2022-05-23

概述

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

如下所示:
image.png

解壓完後就是安裝,按照官方手冊,直接執行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在安裝時有兩個需要與使用者互動的地方:
image.png

此處需要填寫default使用者的密碼,當然你也可以直接回車,不填寫密碼,不設定密碼的話不會出現第二次互動,如果輸入密碼,(如我在此處輸入123456)則會出現下面的互動介面:

image.png

此處是詢問是否允許遠端訪問,預設是隻允許本機訪問,我們選擇y,出現如下介面 ,說明server已經安裝好:

image.png

如果你不想在安裝時跳出互動頁面,可以透過設定環境變數 DEBIAN_FRONTEND=noninteractive來禁用該功能,那麼則預設不會設定default使用者密碼:

sudo DEBIAN_FRONTEND=noninteractive clickhouse-server-22.3.6.5/install/doinst.sh

安裝完成後,就可以啟動clickhouse服務了,啟動命令:

sudo clickhouse start

出現如下提示,說明啟動成功:

image.png

可透過clickhouse status命令檢視:
image.png

我們也可以透過客戶端連線server的方式進行驗證:

clickhouse-client -m --password=123456

image.png

這是透過官方指令碼的方式進行安裝,事實上,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))
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,會在當前資料夾下多出下面這些檔案:

image.png

重點關注下這兩個資料夾下檔案是否正確:

image.png

以及config.xmllog路徑和path路徑是否已正確修改過來:

image.png

如果以上各項檢查都沒有問題,就可以啟動了。
image.png

看到上圖的提示,就說明安裝成功了,可以使用clickhouse status命令來檢查執行狀態:
image.png

也可以使用client直接連線資料庫,預設安裝是沒有密碼的,如果需要密碼,可以修改install指令碼,傳入一個密碼即可:
image.png

總結

本文簡單講述瞭如何使用tgz方式安裝clickhouse服務,並介紹了無root部署的方式安裝並啟動一個clickhouse服務,但是一旦伺服器當機,這種安裝方式並不能實現開機自啟,雖然官方提供的安裝包中有systemdclickhouse-server.serviceinit.d指令碼,但是這二者都依賴root許可權,因此這還是一個無解的問題。所以,一旦出現服務當機,如果沒有root許可權,就只能一臺一臺去重啟了。

相關文章