環境說明:三台centos7服務器+clickhouse20.8.3.18+jdk1.8
架構圖:
機器准備:
IP | 端口 | 服務 | 配置文件 |
192.168.85.126(local126) | 2181 | zookeeper | zoo.cfg |
192.168.85.127(local127) | 2181 | zookeeper | zoo.cfg |
192.168.85.128(local128) | 2181 | zookeeper | zoo.cfg |
192.168.85.126(local126) | 29000/28123 | clickhouse客戶端、服務端 | config.xml、users.xml、metrika.xml |
192.168.85.126(local126) | 29002/28124 | clickhouse客戶端、服務端 | config2.xml、users2.xml、metrika2.xml |
192.168.85.127(local127) | 29000/28123 | clickhouse客戶端、服務端 | config.xml、users.xml、metrika.xml |
192.168.85.127(local127) | 29002/28124 | clickhouse客戶端、服務端 | config2.xml、users2.xml、metrika2.xml |
192.168.85.128(local128) | 29000/28123 | clickhouse客戶端、服務端 | config.xml、users.xml、metrika.xml |
192.168.85.128(local128) | 29002/28124 | clickhouse客戶端、服務端 | config2.xml、users2.xml、metrika2.xml |
1. 准備工作(三台機器同步)
1)關閉firewalld和SELINUX
systemctl stop firewalld && systemctl disable firewalld
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
2)配置hosts域名解析,方便后續使用主機名
vim /etc/hosts,如:
#為利於服務器間文件傳輸,可進一步做免密登錄
2. 搭建zookeeper集群(三台機器同步)
1)官網下載地址:http://mirror.bit.edu.cn/apache/zookeeper/
tar -zxvf zookeeper-3.4.14.tar.gz -C /usr/local //文件解壓 cd /usr/local/ && mv zookeeper-3.4.14 zookeeper //文件夾重命名 cd zookeeper && mkdir data logs //創建數據目錄和日志目錄 cd conf/ && cp zoo_sample.cfg zoo.cfg //進入conf文件夾下將 zoo_sample.cfg 文件復制並重命名為 zoo.cfg 文件
2)編輯zoo.cfg文件,我的配置如下:
參數說明:
- tickTime:基本事件單元,這個時間是作為Zookeeper服務器之間或客戶端與服務器之間維持心跳的時間間隔,每隔tickTime時間就會發送一個心跳;最小 的session過期時間為2倍tickTime
- dataDir:存儲內存中數據庫快照的位置,除非另有說明,否則指向數據庫更新的事務日志。
- dataLogDir: 該配置需手動添加,用於存儲產生的日志,使用專用的日志存儲設備能夠大大提高系統的性能。
- client:監聽客戶端連接的端口。
- initLimit:允許follower連接並同步到Leader的初始化連接時間,以tickTime為單位。當初始化連接時間超過該值,則表示連接失敗。
- syncLimit:表示Leader與Follower之間發送消息時,請求和應答時間長度。如果follower在設置時間內不能與leader通信,那么此follower將會被丟棄。
-
server.A=B:C:D
A:其中 A 是一個數字,表示這個是服務器的編號;
B:是這個服務器的 ip 地址;
C:Zookeeper服務器之間的通信端口;
D:Leader選舉的端口。
優化自動清理snapshot和事務日志的功能:
autopurge.purgeInterval=1 //這個參數指定了清理頻率,單位是小時,需要填寫一個1或更大的整數,默認是0,表示不開啟自己清理功能。 autopurge.snapRetainCount=48 //這個參數指定了需要保留的文件數目。默認是保留3個。
3)創建myid文件
cd /usr/local/zookeeper/data //進入zookeeper數據目錄 echo 1 > myid //里面的配置和zoo.cfg的server.x配置保持一致,如本機器編號為1
4)啟動zookeeper
cd /usr/local/zookeeper/bin/ ./zkServer.sh start //啟動服務 ./zkServer.sh status //查看狀態
#./zkServer.sh stop //停止服務
#./zkServer.sh restart //重啟服務
如圖,可以看到,三台機器,一主兩從。
3. 搭建clickhouse集群
1)下載並安裝clickhouse包
直接點擊下載或用如下命令下載
wget --content-disposition https://packagecloud.io/Altinity/clickhouse/packages/el/7/clickhouse-common-static-20.8.3.18-1.el7.x86_64.rpm/download.rpm wget --content-disposition https://packagecloud.io/Altinity/clickhouse/packages/el/7/clickhouse-server-common-20.8.3.18-1.el7.x86_64.rpm/download.rpm wget --content-disposition https://packagecloud.io/Altinity/clickhouse/packages/el/7/clickhouse-server-20.8.3.18-1.el7.x86_64.rpm/download.rpm wget --content-disposition https://packagecloud.io/Altinity/clickhouse/packages/el/7/clickhouse-client-20.8.3.18-1.el7.x86_64.rpm/download.rpm
安裝軟件包
rpm -ivh clickhouse-common-static-20.8.3.18-1.el7.x86_64.rpm rpm -ivh clickhouse-server-common-20.8.3.18-1.el7.x86_64.rpm rpm -ivh clickhouse-server-20.8.3.18-1.el7.x86_64.rpm rpm -ivh clickhouse-client-20.8.3.18-1.el7.x86_64.rpm //按順序安裝
2)創建數據目錄、日志目錄、臨時目錄
默認的目錄為:
/var/lib/clickhouse //數據目錄 /var/lib/clickhouse/tmp //臨時目錄 /var/log/clickhouse-server //日志目錄
實際生產環境中,這些目錄通常放在數據盤而不是系統盤,如下創建目錄:
mkdir -p /weblogic/clickhouse/{data1,data2,logs1,logs2,tmp1,tmp2} //單台機器運行兩個節點,故創建兩份目錄 chown -R clickhouse:clickhouse /weblogic/clickhouse/ //給目錄賦權
3)修改調整配置
vim /etc/clickhouse-server/config.xml,如下僅供參考:
- 目錄修改
- 端口修改,不與現有程序沖突即可
- 對外開放IP
- 調整metrika.xml文件地址,默認為/etc/metrika.xml
- 分布式DDL語句在zookeeper中的目錄:
- 不管多大的分區表都可以刪除(應用於需要刪除表或分區的情況,默認是刪除50GB以上的分區表會報錯)
- 最大並發處理數(包括insert、select等,默認為100,根據機器性能調整)
vim /etc/clickhouse-server/users.xml,如下僅供參考:
<mc> //在default用戶下新建一個用戶 <password>mc123</password> <access_management>1</access_management> <networks incl="networks" replace="replace"> <ip>::/0</ip> </networks> <profile>default</profile> <quota>default</quota> </mc>
4)擴展配置文件metrika.xml(三台機器同步創建,酌情修改)
vim /etc/clickhouse-server/metrika.xml
<yandex> <clickhouse_remote_servers> <perftest_3shards_2replicas> //集群名,可自行調整 <shard> <internal_replication>true</internal_replication> //同一時刻是否只將數據寫入其中一個副本 <replica> <host>local126</host> <port>29000</port> </replica> <replica> <host>local127</host> <port>29002</port> </replica> </shard> <shard> <replica> <internal_replication>true</internal_replication> <host>local127</host> <port>29000</port> </replica> <replica> <host>local128</host> <port>29002</port> </replica> </shard> <shard> <internal_replication>true</internal_replication> <replica> <host>local128</host> <port>29000</port> </replica> <replica> <host>local126</host> <port>29002</port> </replica> </shard> </perftest_3shards_2replicas> </clickhouse_remote_servers> <!--zookeeper相關配置--> <zookeeper-servers> <node index="1"> <host>local126</host> <port>2181</port> </node> <node index="2"> <host>local127</host> <port>2181</port> </node> <node index="3"> <host>local128</host> <port>2181</port> </node> </zookeeper-servers> <macros> //如下是引擎參數的變量 <share>01</share> //分片名稱,相同值則互為副本 <replica>local126-01</replica> //副本名稱,每個節點不同 </macros> <networks> <ip>::/0</ip> //對外開放所有地址 </networks> <clickhouse_compression> <case> <min_part_size>10000000000</min_part_size> <min_part_size_ratio>0.01</min_part_size_ratio> <method>lz4</method> </case> </clickhouse_compression> </yandex>
注意:為什么要新建一個metrika.xml擴展文件,其實如果仔細看過clickhouse的配置文件/etc/clickhouse-server/config.xml就能明白
<!-- If element has 'incl' attribute, then for it's value will be used corresponding substitution from another file. By default, path to file with substitutions is /etc/metrika.xml. It could be changed in config in 'include_from' element. Values for substitutions are specified in /yandex/name_of_substitution elements in that file. --> //如果元素具有'incl'屬性,則對其值將使用來自另一個文件的相應替換。默認情況下,替換文件的路徑是/etc/metrika.xml。它可在'include_from'元素的配置中更改。替換的值在該文件的/yandex/name_of_substitution元素中指定。
5)為節點2復制相關文件
cd /etc/clickhouse-server/ && cp users.xml users2.xml && cp config.xml config2.xml && cp metrika.xml metrika2.xml //為節點2復制配置文件 cd /etc/init.d && cp clickhouse-server clickhouse-server2 //為節點2復制一份啟動腳本 vim clickhouse-server2 //編輯修改節點2的啟動腳本
更改配置:
- CLICKHOUSE_CONFIG=$CLICKHOUSE_CONFDIR/config2.xml
- CLICKHOUSE_PIDFILE="$CLICKHOUSE_PIDDIR/$PROGRAM-2.pid"
6)為節點2修改配置文件
vim /etc/clickhouse-server/metrika2.xml
//修改該段配置 <macros> <share>03</share> //分片名稱,填與其互為副本的節點所在的分片名 <replica>local126-02</replica> //副本名稱,每個節點不同 </macros>
vim /etc/clickhouse-server/config2.xml
- 目錄修改
sed -i 's/data1/data2/g;s/logs1/logs2/g;s/tmp1/tmp2/g' /etc/clickhouse-server/config2.xml
- users.xml文件目錄調整
- metrka.xml文件目錄調整
- 修改端口
sed -i 's/28123/28124/g;s/29000/29002/g;s/29004/29005/g;s/29009/29010/g' /etc/clickhouse-server/config2.xml
7)啟動節點
/etc/init.d/clickhouse-server start && /etc/init.d/clickhouse-server2 start /etc/init.d/clickhouse-server status && /etc/init.d/clickhouse-server2 status ps -ef|grep clickhouse
如上每台機器啟動有兩個節點。
4.客戶端連接測試
clickhouse-client -h local126 --port 29000 -u mc --password -m
參數說明:
-h //IP或主機名 --port //客戶端監聽端口 -u //用戶名 --password //密碼 -m //支持回車換行,以`;`結束sql