clickhouse之replication配置及使用

概述

Clickhouse支持cluster,支持shard及replication。这里介绍replication。

replication只适用于MergeTree引擎类型table,作用于单个表。而不是整个server。一台server上面可以同时存在replicated表和非replicated表。

基本配置

1.在多台节点上安装clickhouse-server
2.分别在每台server上面配置zookeeper,默认配置文件位置/etc/clickhouse-server/config.xml,示例如下:


    
        10.190.60.230
        2181
    
    
        10.190.60.228
        2181
    
    
        10.190.60.231
        2181
    

3.在配置文件中配置宏(macro),这里的参数在建表的时候会被引用到。


    01
    02

shard是分片标识,replication模式采用一个分片,不同server分片相同
replica是副本标识,不同副本该值不能相同,可以配置为本机的hostname

4.分别在不同的server上面执行建表语句

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
-第一个参数'/clickhouse/tables/{shard}/flow'是表在zookeeper上的路径,第二个参数即副本名称

导入数据

在不同的server建好表以后,就可以往表中写入数据了,可以使用insert方式向replicated表中写入数据,也可以通过clickhouse-client的文件导入方式写入。只需要往其中一台server的replicated表中写数即可,clickhouse会自动将数据同步到其他server上面,同步数据和写入数据的过程是异步的。

其他事项

-clickhouse的cluster环境中,每台server的地位是等价的,即不存在master-slave之说,是multi-master模式
-各replicated表的宿主server上要在hosts里配置其他replicated表宿主server的ip和hostname的映射
-上面描述的是在不同的server上建立全新的replicated模式的表, 如果在某台server上已经存在一张replicated表,并且表中已经有数据,这时在另外的server上执行完replicated建表语句后,已有数据会自动同步到其他server上面
-如果zookeeper挂掉,replicated表会切换成read-only模式,不再进行数据同步,系统会周期性的尝试与zk重新建立连接
-如果在向一张replicated表insert数据的时候zookeeper挂掉,这时候会抛一个异常,等到与zk重新建立连接以后,系统(其他replicated表所在server)会检查本地文件与预期文件(保存在zk上)的差别,如果是轻微的差别,直接同步覆盖,如果发现有数据块损坏或者识别不了,则将这些数据文件移动到“detached”子目录,然后重新根据zk所记录的文件信息进行副本的同步
-drop掉某一台server上的replicated表,不会对其他server上面的replicated表造成影响

你可能感兴趣的:(clickhouse之replication配置及使用)