Clickhouse通过表数据的冗余存储,来达到防止数据丢失的问题。这也就是常说的数据副本机制,但是副本数据和真实数据都存储了,服务器的容量就不够了,这时我们就需要实现数据的水平切分,来解决单个服务器容量不够的问题。这就是常说的数据分片机制
数据副本机制
ClickHouse依靠ReplicatedMergeTree引擎族与ZooKeeper实现了复制表机制, 成为其高可用的基础.ReplicatedMergeTree引擎族包含如下的表种类
目前阶段只有上面这些表种类支持副本机制。副本是表级别的,不是整个服务器级的。所以,服务器里可以同时有复制表和非复制表。因为Clickhouse复制表机制是通过zookeeper实现的。所以要使用副本,需在配置文件中设置 ZooKeeper 集群的地址。后面会详细介绍下ReplicatedMergeTree表引擎在Clickhouse数据库中是怎么做的。
数据副本的特点
作为数据副本的主要实现载体,ReplicatedMergeTree在设计上有一些显著特点。
下面我们讲解下Clickhouse是如何通过ReplicatedMergeTree来达到数据复制高可用的。
上面说到clickhouse的副本机制是基于ReplicatedMergeTree表实现的. 用户在创建每张表的时候, 可以决定该表是否高可用。
表创建方式
- CREATE TABLE table_name
- (
- EventDate DateTime,
- CounterID UInt32,
- UserID UInt32
- ) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{layer}-{shard}/table_name', '{replica}')
- PARTITION BY toYYYYMM(EventDate)
- ORDER BY (CounterID, EventDate, intHash32(UserID))
- SAMPLE BY intHash32(UserID)