Ubuntu 20.04 安裝ClickHouse集群

来源:https://www.cnblogs.com/kawhi187/archive/2023/04/06/17291506.html
-Advertisement-
Play Games

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的優勢和缺點:

    • 優勢:

      1. 支持高併發:ClickHouse 使用並行處理機制來處理查詢請求,可以支持高併發場景。
      2. 數據壓縮空間大:ClickHouse 採用數據壓縮技術,可以減少數據的存儲空間,同時也減少了 I/O 傳輸。
      3. 索引是類似跳錶結構:ClickHouse 的索引是類似跳錶結構,不需要滿足最左原則,非常適合聚合計算。
      4. 寫入速度快:ClickHouse 的寫入速度非常快,特別適合寫本地表而不是 All 表。
      5. 採用了並行處理機制:ClickHouse 使用並行處理機制來處理查詢請求,可以充分利用伺服器的計算資源。
      6. 支持多種數據類型:ClickHouse 支持多種數據類型,包括數字、字元串、日期、時間、二進位等。
      7. 支持多種編程語言:ClickHouse 支持多種編程語言,包括 SQL、Python、R 等。
      8. 易於管理和維護:ClickHouse 採用面向對象的設計思想,使得管理和維護變得更加容易。
    • 缺點:

      1. 不支持事務:ClickHouse是一種面向分析的資料庫,不支持像MySQL或PostgreSQL這樣的事務。
      2. 不支持更新和刪除操作:ClickHouse是一種列式資料庫,不支持行級別的更新和刪除操作。
      3. 存儲格式限制:ClickHouse只支持列式存儲,不支持行式存儲。
      4. 操作複雜: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的配置文件中添加集群配置
        <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>
      
      集群配置添加完成後確認集群在任意一臺機器上執行下麵的命令登錄資料庫,確認集群配置,我是使用的3拖6的集群配置;
        # 登錄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系統的打頭。

學不完的技術,寫不完的代碼。QQ群:773595012
▼-----------------------------------------▼-----------------------------------------▼
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 數據管理技術的發展 第一節 資料庫技術發展概述 數據模型是資料庫系統的核心和基礎 以數據模型的發展為主線,資料庫技術可以相應地分為三個發展階段: 第一代的網狀、層次資料庫系統 第二代的關係資料庫系統 新一代的資料庫系統 一、第一代資料庫系統 層次資料庫系統 層次模型 網狀資料庫系統 網狀模型 層次模 ...
  • ORACLE資料庫中ORACLE_SID與INSTANCE_NAME在概念和意義上有什麼異同呢?下麵簡單來總結概況一下,很多時候,不少人都搞不清楚兩者的異同,甚至認為兩者是等價的。 ORACLE_SID與INSTANCE_NAME的異同 ORACLE_SID參數是操作系統的環境變數,用於和操作系統進 ...
  • 最近寫了幾個簡單的spark structured streaming 的代碼實例。 目的是熟悉spark 開發環境搭建, spark 代碼開發流程。 開發環境: 系統:win 11 java : 1.8 scala:2.13 工具:idea 2022.2 ,maven 3, git 2.37 sp ...
  • 在日常工作中,我們會遇見一些慢SQL,在分析這些慢SQL時,我們通常會看下SQL的執行計劃,驗證SQL執行過程中有沒有走索引。通常我們會調整一些查詢條件,增加必要的索引,SQL執行效率就會提升幾個數量級。我們有沒有思考過,為什麼加了索引就會能提高SQL的查詢效率,為什麼有時候加了索引SQL執行反而會... ...
  • navicat15安裝破解教程 一.navicati15安裝 參考教程 安裝包文件查找過程不再這裡贅述了,大家自行百度,相關經驗帖很多。 二. 破解 啟動破解工具,並點擊Patch 點擊後選擇我們安裝navicat的目錄 註意第二步的相關配置 點擊Generate生成key 打開navicat15, ...
  • 摘要:本文主要介紹GaussDB(DWS)雲原生數倉架構、產品能力,幫助開發者快速瞭解GaussDB(DWS)雲原生數倉相關信息與能力。 本文分享自華為雲社區《直播回顧 | GaussDB(DWS)雲原生數倉技術解析》,作者:胡辣湯。 在本期《GaussDB(DWS)雲原生數倉技術解析》的主題直播中 ...
  • 2017年,美國信用評級機構 Equifax 遭受黑客攻擊,導致1.4億個人的敏感信息泄露; 2020年,發生了 SolarWinds 公司的軟體供應鏈遭受惡意代碼攻擊事件,涉及多個行業和國家; 2022年,網信辦依據《數據安全法》等法律法規,對滴滴公司開出人民幣80.26億元的巨額罰款,對互聯網企 ...
  • Mysql 01 使用CMD連接資料庫 -- 在控制台連接資料庫(需將位置切換到mysql所在地址) mysql -u root -p password:12345 -- 修改mysql賬戶密碼及許可權,安裝配置完後慎用 update mysql.user set authentication_str ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...