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系統的打頭,
▼-----------------------------------------▼-----------------------------------------▼
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/549257.html
標籤:其他
