ClickHouse集群应用、分片、复制
数据分片
分片,就像是把鸡蛋放到多个篮子里,降低整体风险,结果可能是部分数据不可用,虽然一定程度上起到了「高可用」的作用,但分片的目的是为了提速。况且,比较严格的场景下,部分不可用也是不可用。
1.建数据表
先创建本地表ontime_local:
CREATE TABLE ontime_local (FlightDate Date,Year UInt16) ENGINE = MergeTree(FlightDate, (Year, FlightDate), 8192);
然后建分布式表ontime_all:
CREATE TABLE ontime_all AS ontime_local ENGINE = Distributed(bip_ck_cluster, ck, ontime_local, rand());
说明:Distributed(集群名字,数据库名,数据表名,分片原则)
2.插入数据
INSERT INTO ontime_all SELECT * FROM ontime;
把ontime的数据插入到ontime_all,ontime_all会随机插入到三个节点的ontime_local里。
说明:如果配置文件的weight为1的话,会按照这个权重分配数据到各个节点。
3.查询
导入完成后,查看总数据量:
再看下每个节点的数据:
可以看到,每个节点大概有1/3的数据。
4.性能对比
不分片
分片
数据备份
数据备份与分片没有必然联系,这是两方面的问题。但是在ClickHouse中,replica是挂在shard上的,因此要用多副本,必须先定义shard。
最简单的情况:1个分片多个副本
1.添加集群
像之前一样,再配置一个集群,叫做cluster_1shards_2replicas,表示1分片2副本,配置信息如下(不用再另建集群):
注意,如果配置文件没有问题,是不用重启clickhouse-server的,会自动加载!
2.建数据表
表名为ontime_local_2,在三台机器分别执行。
3.建分布式表
表名是ontime_all_2,使用cluster_1shards_2replicas集群,数据为ontime_local_2。
4.导入数据
5.查询
查询ontime_local_2,两个节点都有全量数据。关掉一个服务器,仍能查询全量数据,数据副本已经生效。
- 点赞
- 收藏
- 关注作者
评论(0)