ClickHouse基于复制的故障恢复测试

2017-12-18  本文已影响719人  JackpGao

在之前的博客中,我们讨论了ClickHouse的最佳架构,其中考虑了两点

  1. 扩展性,即集群机器越多,性能越高,集群性能=∑单机性能

  2. 可靠性,通过使用复制机制,来抵抗单机宕机、机房宕机风险

其中第二点,依赖ClickHouse的复制引擎,即ReplicatedMergeTree引擎
在ZK的基础上,共享同一个ZK路径的节点,会相互同步数据

本测试主要用来做灾难恢复测试,即集群中某个分片对应的某2个节点挂了一个,新增一个节点,存量数据同步情况和效率

为了保证测试有价值,找了一个15亿行数据的表,数据文件22GB

测试环境

Snip20171218_9.png

预期假设

测试过程

Node3'上的情况

# 22GB数据文件

root@10.xx.xx.x:/data1/clickhouse/data/ck_test  # du -sh * 
22G     dagger
4.0K    dagger_all


# 15亿数据
:) select count(*)/100000000 from dagger;

SELECT count(*) / 100000000
FROM dagger

┌─divide(count(), 100000000)─┐
│                15.02450289 │
└────────────────────────────┘

1 rows in set. Elapsed: 0.170 sec. Processed 1.50 billion rows, 1.50 GB (8.85 billion rows/s., 8.85 GB/s.)

新增节点Node3'',观察复制情况

# 之前只有分布式表,没有本地表
root@10.xx.xx.xx:/data1/clickhouse/data/ck_test  # du -sh *
4.0K    dagger_all

# 新建本地表后,数据文件不断增加,同步开始
root@10.xx.xx.xx:/data1/clickhouse/data/ck_test  # du -sh *
471M    dagger
4.0K    dagger_all

root@10.xx.xx.xx:/data1/clickhouse/data/ck_test  # du -sh *
565M    dagger
4.0K    dagger_all

root@10.xx.xx.xx:/data1/clickhouse/data/ck_test  # du -sh *
3.8G    dagger
4.0K    dagger_all
root@10.xx.xx.xx:/data1/clickhouse/data/ck_test  # du -sh *
4.0G    dagger
4.0K    dagger_all

root@10.xx.xx.xx:/data1/clickhouse/data/ck_test  # date
Mon Dec 18 10:44:43 CST 2017

root@10.xx.xx.xx:/data1/clickhouse/data/ck_test  # du -sh *
5.7G    dagger
4.0K    dagger_all

root@10.xx.xx.xx:/data1/clickhouse/data/ck_test  # du -sh *
16G     dagger
4.0K    dagger_all

root@10.xx.xx.xx:/data1/clickhouse/data/ck_test  # date
Mon Dec 18 10:46:30 CST 2017
root@10.xx.xx.xx:/data1/clickhouse/data/ck_test  # date 
Mon Dec 18 10:46:42 CST 2017

root@10.xx.xx.xx:/data1/clickhouse/data/ck_test  # du -sh *
17G     dagger
4.0K    dagger_all

root@10.xx.xx.xx:/data1/clickhouse/data/ck_test  # date    
Mon Dec 18 10:47:36 CST 2017

root@10.xx.xx.xx:/data1/clickhouse/data/ck_test  # du -sh *
22G     dagger
4.0K    dagger_all

最终数据量

# 15亿,与其他节点保持一致

:) select count(*)/100000000 from dagger;

SELECT count(*) / 100000000
FROM dagger 

┌─divide(count(), 100000000)─┐
│                15.02450289 │
└────────────────────────────┘

复制过程带宽和日志

Snip20171218_5
Snip20171218_6
Snip20171218_8

结论

Snip20171218_13.png
上一篇 下一篇

猜你喜欢

热点阅读