部署規格
部署clickhouse需要同一內網的機器三臺,本文將以三臺VM虛擬機172.30.129.171(以下稱爲171)、172.30.129.172(以下稱爲172)、172.30.129.173(以下稱爲173)三臺機器爲示例演示安裝,虛擬機搭建可參考我的文章基於VMware的Ubuntu開發環境搭建 - CyberGhost - OSCHINA - 中文開源技術交流社區。
安裝ZooKeeper
ZooKeeper安裝參考我的文章Zookeeper集羣安裝 - CyberGhost - OSCHINA - 中文開源技術交流社區
安裝Kafka
Kafka安裝參考我的文章Linux搭建Kafka集羣環境 - CyberGhost - OSCHINA - 中文開源技術交流社區
安裝ClickHouse
ClickHouse官方發佈了支持各大主流系統安裝的rpm、deb甚至是windows安裝包,這種安裝比較無聊所以不選擇,這裏選擇官方預編譯的通用linux安裝包。
ClickHouse的安裝包分爲三部分,分別是客戶端、服務器、中間件,可以從ClickHouse安裝包歸檔獲取對應的安裝包。
- https://packages.clickhouse.com/tgz/lts/clickhouse-server-22.8.16.32-*.tgz
- https://packages.clickhouse.com/tgz/lts/clickhouse-client-22.8.16.32-*.tgz
- https://packages.clickhouse.com/tgz/lts/clickhouse-common-static-22.8.16.32-*.tgz
- 解壓clickhouse安裝包
mkdir -p /data/third-part/clickhouse
# 解壓JRE
tar zxvf clickhouse-common-static-*.tgz --strip-components 1 -C /data/third-part/clickhouse
tar zxvf clickhouse-client-*.GZ --strip-components 1 -C /data/third-part/clickhouse
tar zxvf clickhouse-server-*.GZ --strip-components 1 -C /data/third-part/clickhouse
- 在
/lib/system/systemd
目錄下新增文件clickhouse-server.service
,爲ClickHouse註冊系統服務。
[Unit]
Description=ClickHouse Server (analytic DBMS for big data)
Requires=network-online.target
After=time-sync.target network-online.target
Wants=time-sync.target
[Service]
Type=simple
Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/data/third-part/clickhouse/usr/bin"
User=root
Group=root
Restart=always
RestartSec=30
RuntimeDirectory=clickhouse-server
ExecStart=/data/third-part/clickhouse/usr/bin/clickhouse-server --config=/data/third-part/clickhouse/etc/clickhouse-server/config.xml
ExecStop=/data/third-part/clickhouse/usr/bin/clickhouse-server stop --config=/data/third-part/clickhouse/etc/clickhouse-server/config.xm
Restart=on-failure
[Install]
# ClickHouse should not start from the rescue shell (rescue.target).
WantedBy=multi-user.target
配置ClickHouse
- 修改配置文件,並創建數據存儲目錄
# 日誌等級
sed -i "s#<level>trace</level>#<level>information</level>#g" /data/third-part/clickhouse/etc/clickhouse-server/config.xml
sed -i "s#<!-- <listen_host>0.0.0.0</listen_host> -->#<listen_host>0.0.0.0</listen_host>#g" /data/third-part/clickhouse/etc/clickhouse-server/config.xml
# 默認密碼
sed -i "s#<password></password>#<password>s3cret</password>#g" /data/third-part/clickhouse/etc/clickhouse-server/users.xml
sed -i "s#<log>/var/log/clickhouse-server/clickhouse-server.log</log>#<log>/data/third-part/clickhouse/log/clickhouse-server/clickhouse-server.log</log>#g" /data/third-part/clickhouse/etc/clickhouse-server/config.xml
sed -i "s#<errorlog>/var/log/clickhouse-server/clickhouse-server.err.log</errorlog>#<errorlog>/data/third-part/clickhouse/log/clickhouse-server/clickhouse-server.err.log</errorlog>#g" /data/third-part/clickhouse/etc/clickhouse-server/config.xml
# 刪掉ck默認設置的集羣,會干擾自己配的集羣
sed -i '721,859d' /data/third-part/clickhouse/etc/clickhouse-server/config.xml
# 臨時數據軟連接,防止撐爆/var
ln -s /data/third-part/clickhouse /var/lib
- 添加環境變量
echo "# ClickHouse Environment Variable" >> ~/.bash_profile
echo "export PATH=/data/third-part/clickhouse/:/data/third-part/clickhouse/usr/bin:\$PATH" >> ~/.bash_profile
- 爲171、172、173三臺機器配置主機名
echo "172.30.129.171 s1r1" >> /etc/hosts
echo "172.30.129.172 s2r2" >> /etc/hosts
echo "172.30.129.173 s3r3" >> /etc/hosts
- 在171、172、173三臺機器上的
/data/third-part/clickhouse/etc/clickhouse-server
目錄下創建配置分片的metrika.xml(三分片三副本)
<?xml version="1.0"?>
<yandex>
<clickhouse_remote_servers>
<ck_cluster>
<!--分片1-->
<shard>
<weight>1</weight>
<internal_replication>true</internal_replication>
<replica>
<host>172.30.129.171</host>
<port>9000</port>
<user>default</user>
<password>s3cret</password>
<compression>true</compression>
</replica>
</shard>
<!--分片2-->
<shard>
<weight>1</weight>
<internal_replication>true</internal_replication>
<replica>
<host>172.30.129.172</host>
<port>9000</port>
<user>default</user>
<password>s3cret</password>
<compression>true</compression>
</replica>
</shard>
<!--分片3-->
<shard>
<weight>1</weight>
<internal_replication>true</internal_replication>
<replica>
<host>172.30.129.173</host>
<port>9000</port>
<user>default</user>
<password>s3cret</password>
<compression>true</compression>
</replica>
</shard>
</ck_cluster>
</clickhouse_remote_servers>
<!--zookeeper相關配置-->
<zookeeper-servers>
<node index="1">
<host>172.30.129.171</host>
<port>2181</port>
</node>
<node index="2">
<host>172.30.129.172</host>
<port>2181</port>
</node>
<node index="3">
<host>172.30.129.173</host>
<port>2181</port>
</node>
</zookeeper-servers>
<macros>
<!--這裏要根據在哪臺機器上部署修改,第一個分片shard就是01,replica就是s1r1和主機名保持一致-->
<shard>01</shard>
<replica>s1r1</replica>
</macros>
<networks>
<ip>::/0</ip>
</networks>
<!--壓縮相關配置-->
<clickhouse_compression>
<case>
<min_part_size>1073741824</min_part_size>
<min_part_size_ratio>0.01</min_part_size_ratio>
<!--壓縮算法lz4壓縮比zstd快, 更佔磁盤-->
<method>lz4</method>
</case>
</clickhouse_compression>
</yandex>
- 修改
/data/third-part/clickhouse/etc/clickhouse-server/config.xml
文件,在720行(具體來說只要在CDDATA標籤後面就行了)加入如下配置
<!--導入分片配置metrika.xml文件-->
<include_from>/data/third-part/clickhouse/etc/clickhouse-server/metrika.xml</include_from>
<!--生效分片配置-->
<remote_servers incl="clickhouse_remote_servers" optional="true"/>
<!--配置zookeeper集羣-->
<zookeeper incl="zookeeper-servers" optional="true"/>
<!--生效宏定義,用於創建分片或副本-->
<macros incl="macros" optional="true"/>
<!--立刻刪除副本,不需要等待480秒-->
<database_atomic_delay_before_drop_table_sec>0</database_atomic_delay_before_drop_table_sec>
啓動ClickHouse
分別登錄171、172、173三臺機器,執行如下命令啓動ClickHouse服務
systemctl daemon-reload
systemctl enable clickhouse-server
systemctl start clickhouse-server