clickhouse分佈式集羣搭建

clickhouse屬於OLAP數據庫,讀遠遠多於寫[]

 

根據[1]

Clickhouse 僅支持 Linux 操作系統,且機器 CPU 必須支持 SSE 4.2 指令集。

引擎 介紹
MergeTree 是CK裏最Advanced的引擎,性能超高,單機寫入可以達到50w峯值,查詢性能非常快
ReplicatedMergeTree 基於MergeTree,同時引入ZK,做了複製
Distributed 分佈式引擎,本身不存儲數據,可認爲就是一張View,如果寫入,會把請求丟到集羣裏的節點(有算法控制),如果查詢,會幫你做查詢轉發再聚合返回

 

一些常用技巧歸納:

技巧 方法
clickhouse試用(官方提供了一個節點) https://play.clickhouse.tech/
集羣clickhouse報錯信息地址(必須使用root權限才能看到log信息,否則空白一片) /var/log/clickhouse-server/*
查看進程

service clickhouse-server status

 


#-----------------clickhouse應用場景[1]---------------------------

  1. 絕大多數請求都是用於讀訪問的
  2. 數據需要以大批次(大於1000行)進行更新,不是單行更新;或者根本沒有更新操作
  3. 數據只是添加到數據庫,沒有必要修改
  4. 讀取數據時,會從數據庫中提取出大量的行,但只用到一小部分列
  5. 表很“寬”,即表中包含大量的列
  6. 查詢頻率相對較低(通常每臺服務器每秒查詢數百次或更少)
  7. 對於簡單查詢,允許大約50毫秒的延遲
  8. 列的值是比較小的數值和短字符串(例如,每個>URL只有60個字節)
  9. 在處理單個查詢時需要高吞吐量(每臺服務器每秒>高達數十億行)
  10. 不需要事務
  11. 數據一致性要求較低
  12. 每次查詢中只會查詢一個大表。除了一個大表,其>餘都是小表
  13. 查詢結果顯著小於數據源。即數據有過濾或聚合。返回結果不超過單個服務器內存大小

 

#-------------clickhouse的限制[1]------------------------------

  1. 支持真正的刪除/更新支持 不支持事務(期待後續版本支>持)
  2. 不支持二級索引
  3. 有限的SQL支持,join實現與衆不同
  4. 不支持窗口功能
  5. 元數據管理需要人工干預維護

#------------------------------------------------------

簡單分佈式方案[1]

MergeTree + Distributed

 

CREATE TABLE db.tb (date Date, ……) ENGINE = MergeTree(date, (date, hour, datetime), 8192)

CREATE TABLE db.tb_all (date Date, ……) ENGINE = Distributed(bip_ck_cluster, 'ck_test', 'dagger', rand())"
建表語句 備註
CREATE TABLE db.tb (date Date, ……) ENGINE = MergeTree(date, (date, hour, datetime), 8192) db.tb爲本地表,數據只是在本地
CREATE TABLE db.tb_all (date Date, ……) ENGINE = Distributed(bip_ck_cluster, 'ck_test', 'dagger', rand())" db.tb_all爲分佈式表,查詢這個表,引擎自動把整個集羣數據計算後返回

#------------------------------------------------------

[2]clickhouse的集羣涉及到三個文件,如果是自己一個人負責,

那麼config.xml和users.xml是不需要修改的,因爲都是性能參數,而不是架構部署相關的參數.

配置文件 作用
config.xml 全局信息配置文件(可選)
users.xml 用戶信息配置文件(可選)
metrika.xml 集羣信息配置文件(必須配置)

zookeeper按照[3]先搭建好,

 

一個簡易的clickhouse分佈式架構如下:

role

shard1

shard2

集羣

replica

192.168.1.1(Desktop)

192.168.1.3(Laptop)

集羣1

replica

192.168.1.2

192.168.1.4

集羣2

上述圖和表格是互相對應的(務必看懂),我的手上是一臺臺式機(Desktop)和一臺筆記本(Laptop),

所以兩個節點就可以搭建分佈式clickhouse集羣了.

配置時注意,不要無腦拷貝配置文件,配置文件中每一句話都要看懂

#-------------------配置文件中一個不太好理解的地方-------------------

metrika.xml中有個不太好理解的地方[5]:

<macros>

<layer>01</layer>

<shard>03</shard> <!--表示cluster01集羣的03分片下的1號副本-->

<replica>cluster01-03-1</replica>

</macros>

 

上面的配置什麼意思?

01集羣的03號分片,

這個分片名字叫做cluster01-03-1

本節點保存這個分片.

同一個{layer}-{shard}下面的表互爲備份,會自動同步[6]
replica是備份序號的識別符,必須互不相同,可以設置爲與該節點hostname相同[6]

#--------------------完整metrika.xml如下-----------------------

這裏分片不打算備份(節省資源)

<yandex>
    <!--ck集羣節點-->
    <clickhouse_remote_servers>
    <clickhouse_cluster_name>



    <!--分片1:一個節點的兩次:原件和複印件-->
    <shard>
    <weight>1</weight>
    <internal_replication>true</internal_replication>
    <replica>
        <host>Desktop</host>
        <port>9500</port>
        <user>appleyuchi</user>
        <password>appleyuchi</password>
        <compression>true</compression>
    </replica>
    <!--複製集1:複印件,資源有限,所以這裏註釋掉-->
<!--     <replica>
    <host>192.68.1.2</host>
    <port>9000</port>
    <user>default</user>
    <password>password</password>
    </replica> -->

    </shard>

<!-- 一個節點對應一個分片以及分片備份 -->

    <!--分片2-->
    <shard>
    <weight>1</weight>
    <internal_replication>true</internal_replication>
    <replica>
        <host>Laptop</host>
        <port>9500</port>
        <user>appleyuchi</user>
        <password>appleyuchi</password>
    <compression>true</compression>
    </replica>
    <!--複製集2:複印件,資源有限,所以這裏註釋掉-->
<!--     <replica>
    <host>192.68.1.4</host>
    <port>9000</port>
    <user>default</user>
    <password>password</password>
    </replica>
     -->
    </shard>
    </clickhouse_cluster_name>
    </clickhouse_remote_servers>
    <!--zookeeper相關配置-->



    <zookeeper-servers>
    <node index="1">
    <host>Desktop</host>
    <port>2181</port>
    </node>
    <node index="2">
    <host>Laptop</host>
    <port>2182</port>
    </node>
    <node index="3">
    <host>Laptop</host>
    <port>2183</port>
    </node>
    </zookeeper-servers>


<!-- 兩級分片,下面這個東西就是上面shard的一個身份ID,只是做個標記-->
    <macros>
    <layer>01</layer>
    <shard>01</shard> <!--分片號-->
    <replica>Desktop</replica> <!--當前節點IP-->
    </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> <!--壓縮算法lz4壓縮比zstd快, 更佔磁盤-->
    </case>
    </clickhouse_compression>

    </yandex>

 上述配置文件的內容主要就是集羣的各個分片(shard)所保存的節點數據(replica).

在Laptop節點,上述內容需要修改以下部分:

    <macros>
    <layer>01</layer>
    <shard>01</shard> <!--分片號-->
    <replica>Desktop</replica> <!--當前節點IP-->
    </macros>

#------------------------------------------------------

/etc/clickhouse-server/config.xml中加入

<yandex>

.....  

  <include_from>/etc/clickhouse-server/metrika.xml</include_from>
</yandex>

#------------------------------------------------------

在集羣中各個節點,分別執行

service clickhouse-server start

#------------------------------------------------------

啓動時集羣中各個節點必須有的進程:

域名 jps
Desktop 6576 NameNode
7601 ResourceManager
6757 DataNode
7847 NodeManager
72826 Jps
7324 QuorumPeerMain
Laptop 2243 NodeManager
2133 QuorumPeerMain
2038 DataNode
9550 Jps
2287 QuorumPeerMain

 

#-----------啓動時集羣中各個節點的服務狀態-----------------------

root@Desktop:/home/appleyuchi# service clickhouse-server status
● clickhouse-server.service - ClickHouse Server (analytic DBMS for big data)
   Loaded: loaded (/etc/systemd/system/clickhouse-server.service; enabled; vendor preset: enabled)
   Active: active (running) since Fri 2020-06-19 17:08:13 CST; 4min 11s ago
 Main PID: 70583 (clickhouse-serv)
    Tasks: 68 (limit: 4915)
   Memory: 1.9G
   CGroup: /system.slice/clickhouse-server.service
           └─70583 /usr/bin/clickhouse-server --config=/etc/clickhouse-server/config.xml --pid-file=/run/clickhouse-server/clickhouse-server.

6月 19 17:08:13 Desktop clickhouse-server[70583]: Including configuration file '/etc/clickhouse-server/metrika.xml'.
6月 19 17:08:13 Desktop clickhouse-server[70583]: Logging trace to /var/log/clickhouse-server/clickhouse-server.log
6月 19 17:08:13 Desktop clickhouse-server[70583]: Logging errors to /var/log/clickhouse-server/clickhouse-server.err.log
6月 19 17:08:13 Desktop clickhouse-server[70583]: Processing configuration file '/etc/clickhouse-server/users.xml'.
6月 19 17:08:13 Desktop clickhouse-server[70583]: Merging configuration file '/etc/clickhouse-server/users.d/default-password.xml'.
6月 19 17:08:13 Desktop clickhouse-server[70583]: Include not found: networks
6月 19 17:08:13 Desktop clickhouse-server[70583]: Saved preprocessed configuration to '/var/lib/clickhouse//preprocessed_configs/users.xml'.
6月 19 17:08:16 Desktop clickhouse-server[70583]: Processing configuration file '/etc/clickhouse-server/config.xml'.
6月 19 17:08:16 Desktop clickhouse-server[70583]: Including configuration file '/etc/clickhouse-server/metrika.xml'.
6月 19 17:08:16 Desktop clickhouse-server[70583]: Saved preprocessed configuration to '/var/lib/clickhouse//preprocessed_configs/config.xml'.

#------------------------------------------------------

連接命令:

clickhouse-client --host localhost  -u default  --password

查看集羣信息命令:

SELECT * FROM system.clusters

集羣信息如下:

表中每一行表示一個節點的信息,

第一列表示,如果兩行的第一列名字相同,那麼這兩行所代表的節點屬於同一個集羣

 

最後,關於上述配置的很多解釋性的信息可以[9]中找到

############################################################################################

來自釘釘羣的一些答疑解惑:

 

 

Reference:

[1]Clickhouse快速搭建高可用集羣

[2]ClickHouse 分佈式高可用集羣搭建(轉載)

[3]hbase的HA模式配置和維護

[4]ClickHouse分佈式高可用集羣搭建

[5]ClickHouse 高可用集羣安裝測試

[6]深入理解ClickHouse之5-ClickHouse集羣的replica實現方式

[7]Clickhouse 入門教程(一)—— 安裝與啓動

[8]ClickHouse深度揭祕

[9]Data Replication

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章