Ubuntu 20.04 安裝ClickHouse集群 引言 因為筆者最近一直想實現一個自己的APM服務端,但是看了很多APM服務端系統沒有使用.Net Core來寫的,都是採用Java或者Go,筆者是寫C#的,但是筆者認為.Net Core的性能在現在對比Go和Java很有優勢,所以筆者才有想法使 ...
Ubuntu 20.04 安裝ClickHouse集群
-
引言
因為筆者最近一直想實現一個自己的APM服務端,但是看了很多APM服務端系統沒有使用.Net Core來寫的,都是採用Java或者Go,筆者是寫C#的,但是筆者認為.Net Core的性能在現在對比Go和Java很有優勢,所以筆者才有想法使用.Net Core來實現一個APM的服務端;最近在研究SkyWalking APM服務端的實現,在研究下來SkyWalking存儲使用的是MySql、PgSql、ES用來存儲數據,筆者本想使用MySql來進行存儲但是看了很多文章都不推薦使用,原因是因為MySql吞吐量太低,對於大量數據提交並無法支撐,但是筆者不想是用ES,眾所周知ES的配置相當麻煩而且也很吃記憶體,筆者配置了幾次但是因為伺服器是自己家裡的機器,有時候會存在關機的情況,就會導致莫名其妙的無法啟動ES,所以筆者在研究了一些其他類型的資料庫,筆者經過對比MongDB、ClickHouse 最終選擇了ClickHouse;在筆者看來放棄MongoDB的原因也是因為他的吞吐量太低,因為MongDB並不是適合APM數據存儲,MongoDB本身是一個適用於存儲非結構化數據和半結構化數據。ClickHouse是一種列式資料庫,適用於存儲和分析大量結構化數據,而且他的寫入速度快,適合APM這種級別的寫入效率。實現APM服務端的話那麼它必然需要高性能的寫入,所以筆者選擇了ClickHouse。
-
ClickHouse簡介
ClickHouse是一種高性能、開源、列式資料庫管理系統(DBMS),被設計用於線上分析處理(OLAP)環境下的大規模數據倉庫。以下是ClickHouse的優勢和缺點:
-
優勢:
- 支持高併發:ClickHouse 使用並行處理機制來處理查詢請求,可以支持高併發場景。
- 數據壓縮空間大:ClickHouse 採用數據壓縮技術,可以減少數據的存儲空間,同時也減少了 I/O 傳輸。
- 索引是類似跳錶結構:ClickHouse 的索引是類似跳錶結構,不需要滿足最左原則,非常適合聚合計算。
- 寫入速度快:ClickHouse 的寫入速度非常快,特別適合寫本地表而不是 All 表。
- 採用了並行處理機制:ClickHouse 使用並行處理機制來處理查詢請求,可以充分利用伺服器的計算資源。
- 支持多種數據類型:ClickHouse 支持多種數據類型,包括數字、字元串、日期、時間、二進位等。
- 支持多種編程語言:ClickHouse 支持多種編程語言,包括 SQL、Python、R 等。
- 易於管理和維護:ClickHouse 採用面向對象的設計思想,使得管理和維護變得更加容易。
-
缺點:
- 不支持事務:ClickHouse是一種面向分析的資料庫,不支持像MySQL或PostgreSQL這樣的事務。
- 不支持更新和刪除操作:ClickHouse是一種列式資料庫,不支持行級別的更新和刪除操作。
- 存儲格式限制:ClickHouse只支持列式存儲,不支持行式存儲。
- 操作複雜:ClickHouse相對於其他資料庫系統可能需要更長的學習和調試時間,因為它有許多不同的特性和配置選項。
-
結論
總的來說,ClickHouse是一種專門為大規模數據分析而設計的高性能資料庫,可以處理海量數據且速度非常快。但是,它不支持事務和行級別的更新和刪除操作,並且需要更複雜的配置和調試,因此需要更多的學習和使用時間。
-
-
1、安裝ClickHouse
官網安裝clickhouse命令:https://clickhouse.com/docs/zh/getting-started/install
sudo apt-get install -y apt-transport-https ca-certificates dirmngr sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 8919F6BD2B48D754 echo "deb https://packages.clickhouse.com/deb stable main" | sudo tee \ /etc/apt/sources.list.d/clickhouse.list sudo apt-get update # 安裝命令 sudo apt-get install -y clickhouse-server clickhouse-client # 啟動服務端 sudo systemctl start clickhouse-server # 查看狀態 sudo systemctl status clickhouse-server # 停止服務 sudo systemctl stop clickhouse-server # 重新啟動服務端 sudo systemctl restart clickhouse-server # 連接服務端 clickhouse-client # or "clickhouse-client --password" if you've set up a password.
-
2、ClickHouse添加自定義用戶名
-
2.1、通過配置 sudo nano /etc/clickhouse-server/users.xml文件配置賬號密碼
推薦使用這種方式<!-- Users and ACL. --> <users> <kawhi> <!--<password></password>--> <password_sha256_hex>896f566e6b8731559d49b0744bdbdb3274ed3eaed2ed494f44da6f8957a6590d</password_sha256_hex> <networks> <ip>::/0</ip> </networks> <!-- Settings profile for user. --> <profile>default</profile> <!-- Quota for user. --> <quota>default</quota> <!-- User can create other users and grant rights to them. --> <!-- <access_management>1</access_management> --> </kawhi> </users>
-
2.2、進入ClickHouse-server以後創建自己的用戶
clickhouse-client --password create user kawhi identified with sha256_password by 'abcdefg' host any; GRANT ALL ON *.* TO kawhi WITH GRANT OPTION; show grants for kawhi
-
-
3、修改預設配置
-
3.1、修改預設數據存儲目錄
建議在所有安裝完成以後直接先修改目錄,這樣我們還沒有任何數據進來,避免遺漏或者丟失數據
# 創建目錄 mkdir /clickhouse sudo chown clickhouse:clickhouse -R 你的目錄 # 打開配置文件 sudo nano /etc/clickhouse-server/config.xml # 找到<path>/var/lib/clickhouse/<path> 修改成以下 <path>你的目錄<path> # 例如: <path>/home/kawhi/clickhouse/</path>
-
3.2、打開遠程訪問
紅框內的那段代碼預設是被註釋掉的,將其取消註釋。
# 重新啟動服務端 sudo systemctl restart clickhouse-server
-
-
4、clickhouse配置集群
-
4.1、在你所有的clickhouse機器上重覆以上步驟
-
4.2、添加集群配置
在/etc/clickhouse-server/config.xml的配置文件中添加集群配置
集群配置添加完成後確認集群在任意一臺機器上執行下麵的命令登錄資料庫,確認集群配置,我是使用的3拖6的集群配置;<remote_servers> <!--集群名稱《可自行修改》--> <luck_click_house_cluster> <!-- replica定義分片的副本數量,這裡只配置了一個,如果需要配置多個,追加replica即可 --> <shard> <!--weight表示每個分片的寫入權重值--> <weight>1</weight> <!--internal_replication表示是否啟用內部複製--> <internal_replication>true</internal_replication> <!-- replica定義分片的副本數量,這裡只配置了一個,如果需要配置多個,追加replica即可 --> <replica> <host>192.168.31.20</host> <port>9000</port> <user>default</user> <password>wzw0126..</password> </replica> <replica> <host>192.168.31.20</host> <port>9000</port> <user>default</user> <password>wzw0126..</password> </replica> </shard> <!-- replica定義分片的副本數量,這裡只配置了一個,如果需要配置多個,追加replica即可 --> <shard> <!--weight表示每個分片的寫入權重值--> <weight>1</weight> <!--internal_replication表示是否啟用內部複製--> <internal_replication>true</internal_replication> <!-- replica定義分片的副本數量,這裡只配置了一個,如果需要配置多個,追加replica即可 --> <replica> <host>192.168.31.21</host> <port>9000</port> <user>default</user> <password>wzw0126..</password> </replica> <replica> <host>192.168.31.21</host> <port>9000</port> <user>default</user> <password>wzw0126..</password> </replica> </shard> <!-- replica定義分片的副本數量,這裡只配置了一個,如果需要配置多個,追加replica即可 --> <shard> <!--weight表示每個分片的寫入權重值--> <weight>1</weight> <!--internal_replication表示是否啟用內部複製--> <internal_replication>true</internal_replication> <!-- replica定義分片的副本數量,這裡只配置了一個,如果需要配置多個,追加replica即可 --> <replica> <host>192.168.31.22</host> <port>9000</port> <user>default</user> <password>wzw0126..</password> </replica> <replica> <host>192.168.31.22</host> <port>9000</port> <user>default</user> <password>wzw0126..</password> </replica> </shard> </luck_click_house_cluster> </remote_servers>
# 登錄clickhouse服務端 clickhouse-client -u 你的用戶名 # 查詢集群命令 select * from system.clusters;
-
-
5.3、結語
在配置ClickHouse時遇到了很多問題,例如不知道集群如何設置,所以花費了將近一天的時間,但是如果你們公司有專門的DBA這件事情完全不用你操心,或者可以選擇雲服務商的ClickHouse,筆者純粹是想學習以下ClickHouse的集群配置,所以會花費一些時間來進行研究,但是重點仍然是APM服務端的實現。在看過SkyWalking的表設計之後,筆者是被震驚到了,他有287張表,甚是驚訝。畢竟SkyWalking已經是一個成熟的APM項目,所以還是有很多值得學習的。本篇只講瞭如何配置ClickHouse集群,但是筆者在創建分散式資料庫和表時發現ClickHouse想使用分散式的資料庫或者表還需要Zookeeper,所以ClickHouse會出至少兩篇文章,下一篇將記錄ClickHouse如何使用Zookeeper集群來建立分散式資料庫或者表。ClickHouse系列是APM系統的打頭。
▼-----------------------------------------▼-----------------------------------------▼