概述
Clickhouse支持cluster坐漏,支持shard及replication。這里介紹replication碧信。
replication只適用于MergeTree引擎類型table赊琳,作用于單個表。而不是整個server砰碴。一臺server上面可以同時存在replicated表和非replicated表躏筏。
基本配置
1.在多臺節(jié)點上安裝clickhouse-server
2.分別在每臺server上面配置zookeeper,默認配置文件位置/etc/clickhouse-server/config.xml呈枉,示例如下:
<zookeeper>
<node>
<host>10.190.60.230</host>
<port>2181</port>
</node>
<node>
<host>10.190.60.228</host>
<port>2181</port>
</node>
<node>
<host>10.190.60.231</host>
<port>2181</port>
</node>
</zookeeper>
3.在配置文件中配置宏(macro)趁尼,這里的參數(shù)在建表的時候會被引用到埃碱。
<macros>
<shard>01</shard>
<replica>02</replica>
</macros>
shard是分片標識,replication模式采用一個分片酥泞,不同server分片相同
replica是副本標識砚殿,不同副本該值不能相同,可以配置為本機的hostname
4.分別在不同的server上面執(zhí)行建表語句
CREATE TABLE default.flow_provider_replicated
(
deviceType String,
providerCode String,
thirdCategoryId UInt32,
brandId UInt32,
divisionId String,
browserUniqId String,
pv UInt64,
date Date,
ver UInt32
) ENGINE = ReplicatedReplacingMergeTree('/clickhouse/tables/{shard}/flow', '{replica}', date, (providerCode, date, brandId, thirdCategoryId, divisionId, deviceType, browserUniqId), 8192, ver)
這里有幾點說明:
-其中{shard}和{replica}的值會被宏中所配置的值代替
-table engins必須使用MergeTree族芝囤,并且加上Replicated前綴似炎,如:ReplicatedReplacingMergeTree
-第一個參數(shù)'/clickhouse/tables/{shard}/flow'是表在zookeeper上的路徑,第二個參數(shù)即副本名稱
導入數(shù)據(jù)
在不同的server建好表以后悯姊,就可以往表中寫入數(shù)據(jù)了羡藐,可以使用insert方式向replicated表中寫入數(shù)據(jù),也可以通過clickhouse-client的文件導入方式寫入悯许。只需要往其中一臺server的replicated表中寫數(shù)即可仆嗦,clickhouse會自動將數(shù)據(jù)同步到其他server上面,同步數(shù)據(jù)和寫入數(shù)據(jù)的過程是異步的先壕。
其他事項
-clickhouse的cluster環(huán)境中欧啤,每臺server的地位是等價的,即不存在master-slave之說启上,是multi-master模式
-各replicated表的宿主server上要在hosts里配置其他replicated表宿主server的ip和hostname的映射
-上面描述的是在不同的server上建立全新的replicated模式的表邢隧, 如果在某臺server上已經(jīng)存在一張replicated表,并且表中已經(jīng)有數(shù)據(jù)冈在,這時在另外的server上執(zhí)行完replicated建表語句后倒慧,已有數(shù)據(jù)會自動同步到其他server上面
-如果zookeeper掛掉,replicated表會切換成read-only模式包券,不再進行數(shù)據(jù)同步纫谅,系統(tǒng)會周期性的嘗試與zk重新建立連接
-如果在向一張replicated表insert數(shù)據(jù)的時候zookeeper掛掉,這時候會拋一個異常溅固,等到與zk重新建立連接以后付秕,系統(tǒng)(其他replicated表所在server)會檢查本地文件與預期文件(保存在zk上)的差別,如果是輕微的差別侍郭,直接同步覆蓋询吴,如果發(fā)現(xiàn)有數(shù)據(jù)塊損壞或者識別不了,則將這些數(shù)據(jù)文件移動到“detached”子目錄亮元,然后重新根據(jù)zk所記錄的文件信息進行副本的同步
-drop掉某一臺server上的replicated表猛计,不會對其他server上面的replicated表造成影響