使用 docker 搭建 clickhouse 集群

轉載來自 blog.miaoji.io/?p=57

寫在前面

你好,歡迎瀏覽我的博客,這篇文章將記錄我使用docker搭建clickhouse集群的過程

工具準備 服務器準備

這裡我們準備三臺服務器,

分別配置hostname為server01、server02、server03

所有服務器的/etc/hosts都加上

$ip1 server01 $ip2 server02 $ip3 server03 複製代碼

注意: 這裡的$ip1、$ip2、$ip3代表的是你三臺服務器的ip,記得以實際值寫入到/etc/hosts文件中哦

安裝 docker

執行命令 yum list | grep docker

返回結果應該如圖所示

注意 docker 的版本

一致了之後執行yum install -y docker

-y參數是為了在待輸入yes的時候直接自動輸入yes

安裝 clickhouse-server 和 clickhouse-client

執行命令 yum list | grep clickhouse 返回結果應該如圖所示

我們裝的是前兩個

接下來我們執行下面兩條命令進行安裝

yum pull docker.io/yandex/clickhouse-server; yum pull docker.io/yandex/clickhouse-client; 複製代碼 安裝 zookeeper 集群

可以參照Zookeeper 集群搭建

啟動clickhouse-server 創建對應本地路徑

在三臺服務器

創建配置存儲目錄: mkdir /etc/clickhouse-server

創建數據存儲目錄: mkdir /opt/clickhouse

獲取配置

在server01服務器

採用非docker方式安裝都是有默認配置的,這個時候我們沒有默認配置怎麼辦?

我們可以先按照官方教程的docker命令啟動一下

docker run -d --name clickhouse-server --ulimit nofile=262144:262144 --volume=/opt/clickhouse/:/var/lib/clickhouse yandex/clickhouse-server

-d參數:當前容器在後臺啟動

--name參數:當前容器的名字,不傳的話docker會隨機生成

--ulimit參數:這個參數還不清楚,有了解的朋友可以在評論區告訴我一下

--volume參數:將冒號兩側的路徑建立映射,當容器服務讀取冒號後面的虛擬機內路徑時,會去讀冒號前面的本機路徑。加這個參數的作用是自定義配置

啟動完成了後,我們需要複製容器內的配置文件到本機目錄下

docker cp clickhouse-server:/etc/clickhouse-server/ /etc/clickhouse-server/

配置集群

在server01服務器

編輯config.xml

執行命令vim /etc/clickhouse-server/config.xml編輯config.xml文件

在remote_servers這個xml標籤後添加如下配置

<include>/etc/clickhouse-server/metrika.xml/<include> 複製代碼 新增metrika.xml

執行命令vim /etc/clickhouse-server/metrika.xml新增metrika.xml文件

輸入如下文本

<yandex> <clickhouse> <cluster> <shard> <internal>false/<internal> <replica> <host>server01/<host> <port>9000/<port> <user>default/<user> <password> /<replica> /<shard> <shard> <internal>false/<internal> <replica> <host>server02/<host> <port>9000/<port> <user>default/<user> <password> /<replica> /<shard> <shard> <internal>false/<internal> <replica> <host>server03/<host> <port>9000/<port> <user>default/<user> <password> /<replica> /<shard> /<cluster> /<clickhouse> <zookeeper-servers> <node> <host>server01/<host> <port>2181/<port> /<node> <node> <host>server02/<host> <port>2181/<port> /<node> <node> <host>server03/<host> <port>2181/<port> /<node> /<zookeeper-servers> <networks> ::/0 /<networks> <clickhouse> <case> 10000000000 0.01 <method>lz4/<method> /<case> /<clickhouse> /<yandex> 複製代碼 傳遞配置文件

到這裡我們的關於集群的配置就全部完成了,接下來要做的是把我們在server01上的配置文件傳輸到其它服務器上 執行命令

scp -r /etc/clickhouse-server server02:/etc/clickhouse-server scp -r /etc/clickhouse-server server03:/etc/clickhouse-server 複製代碼

可以去對應服務器驗證一下

啟動集群

分別在三臺服務器

執行docker啟動腳本

docker run -d \\ --name cs \\ --ulimit nofile=262144:262144 \\ --volume=/opt/clickhouse/:/var/lib/clickhouse \\ --volume=/etc/clickhouse-server/:/etc/clickhouse-server/ \\ --add-host server01:$ip1 \\ --add-host server02:$ip2 \\ --add-host server03:$ip3 \\ --hostname $current_hostname \\ -p 9000:9000 \\ -p 8123:8123 \\ -p 9009:9009 \\ yandex/clickhouse-server 複製代碼

注意1: 這裡的 $ip1、$ip2、$ip3 記得替換為實際值

注意2: $current_hostname 為當前服務器的hostname

--add-host參數:因為我們在配置文件中使用了hostname來指代我們的服務器,為了讓容器能夠識別,所以需要加此參數

--hostname參數:clickhouse中的system.clusters表會顯示集群信息,其中is_local的屬性如果不配置hostname的話clickhouse無法識別是否是當前本機。is_local都為0的話會影響集群操作,比如create table on cluster cluster_2s_1r .....

--p參數:暴露容器中的端口到本機端口中。容器端口

驗證集群搭建

分別查看三臺服務器的system.clusters,應該顯示集群中三臺服務器的信息,且is_local為正確值

啟動 clickhouse-client

在任意服務器

docker run -it \\ --rm \\ --add-host server01:$ip1 \\ --add-host server02:$ip2 \\ --add-host server03:$ip3 \\ yandex/clickhouse-client \\ --host server01 \\ --port 9000 複製代碼

--host參數:相當於我們通過yum安裝clickhouse時,執行命令clickhouse-client --host server01後面接的參數host,指定用於連接的clickhouse-server的host

--port參數:相當於我們通過yum安裝clickhouse時,執行命令clickhouse-client --port 9000後面接的參數port,指定用於連接的clickhouse-server的port

寫在最後

使用docker搭建服務和我們平時在服務器上搭建的思路有些不太一樣,需要時刻注意我們使用docker啟動的服務是在一個虛擬機裡的,可以理解為“面向虛擬機部署”

一開始部署集群的時候我的is_local這個屬性值就一直不正常,後來看了這篇文章,想著用他的方式試一下

發現is_local的值好了!我一開始還以為是docker中network的問題,後來在改配置的過程中才意識到是參數hostname起到了關鍵的作用

歡迎關注,會陸續發佈一些知識點總結,減少你的讀書時間,一起交流面試經驗!每月隨機抽取20名粉絲進入高級技術交流群(大量資料、BAT員工)!

div class="pgc-img">使用 docker 搭建 clickhouse 集群


分享到:


相關文章: