clickhouse 搭建副本集
一 原理:
依赖ZK,ZK的基础上,共享同一个ZK路径的节点,会相互同步数据
二 注意点:
1 不会同步DDL操作,所以要预先创建表
2 会进行双向全量同步,但是数据写入只会在单点写入,类似mysql的双主单写架构
3 ZK配置文件要写在config文件中,其他写入在/etc/metrika.xml中
4 复制引擎为ReplicatedMergeTree
三 配置文件 /etc/metrika.xml
<remote_servers incl="clickhouse_remote_servers" >
<remote_servers>
<distable>
<shard>
<!-- Optional. Shard weight when writing data. Default: 1. -->
<weight>1</weight>//权重
<!-- Optional. Whether to write data to just one of the replicas. Default: false (write data to all replicas). -->
<internal_replication>true</internal_replication>//单向写表
<replica>
<host>ip1</host>
<port>9000</port>
</replica>
<replica>
<host>ip2</host>
<port>9001</port>
</replica>
</shard>
</distable>
</remote_servers>
</remote_servers>
<clickhouse_compression> //压缩
<case>
<min_part_size>10000000000</min_part_size>
<min_part_size_ratio>0.01</min_part_size_ratio>
<method>lz4</method>
</case>
</clickhouse_compression>
配置文件/etc/config
<zookeeper>
<node index="1">
<host>ZK_IP</host>
<port>2181</port>
</node>
</zookeeper>
这里一定要写在config里.不然不生效.我也是测试之后才发现的。。
四 创建复制引擎表
节点1
CREATE TABLE aa ENGINE = ReplicatedMergeTree('/clickhouse/tables/01-01/aa','IP1') ORDER BY id AS SELECT * FROM mysql('IP:prot', 'db', 'table', 'user', 'password') ;
因为create表操作不会同步
所以
根据/data/clickhouse/metadata/db/table.sql
节点2
CREATE TABLE aa
(
id UInt32,
uid UInt32,
repay_date Date,
repay_amount String,
type Int8,
loan_id String
)
ENGINE = ReplicatedMergeTree('/clickhouse/tables/01-01/aaa', 'IP1')//这里的IP1改成IP2
ORDER BY id
SETTINGS index_granularity = 8192;
clickhouse -d db < table.sql
然后观察即可,可以发现速度很快,这也是clickhouse的优势,同步秒级
五 ReplicatedMergeTree 引擎介绍
非同步选项
CREATE,DROP,ATTACH,DETACH and RENAME(针对分区表操作)
同步选项
insert 大部分DDL操作,包括列的操作,delete操作(只针对int类型)
六 监控
select table,zookeeper_path,active_replicas,total_replicas from replicas;
通过对比table和total_replicas的对比,可以发现哪些表没有同步
通过对比active_replicas,total_replicas 可以发现集群服务是否都正常
七 伸缩节点
对于clickhouse副本集的节点伸缩需要同时修改配置文件,不太方便,所以初期最好规划化
八 补充
1 副本集可以扩展成分片集群.需要定义shard标签
2 对于不同步的语句要记得双向操作
3 对于单节点引擎的效率对比,明天将会给出结果