背景
我们部署方式比较简单,采用的是一分片,多副本的机制。使用副本表进行数据的同步。由于整体查询的压力比较大,为了提升TPS,打算在此基础上增加1-2个副本。由于数据量比较大(百亿规模),为了保证方案的可靠性,特验证下CH的副本同步机制。一分片两副本,一共两台机器:node1和node2。
数据的准备
使用Star Schema Benchmark来进行测试集的生成。
编译 dbgen:
$ git clone git@github.com:vadimtk/ssb-dbgen.git
$ cd ssb-dbgen
$ make
使用-s 100dbgen 将生成 6 亿行数据(67GB), 如果使用-s 1000它会生成 60 亿行数据(这需要很多时间))
$ ./dbgen -s 1000 -T c
$ ./dbgen -s 1000 -T l
创建表:
CREATE TABLE lineorder
(
LO_ORDERKEY UInt32,
LO_LINENUMBER UInt8,
LO_CUSTKEY UInt32,
LO_PARTKEY UInt32,
LO_SUPPKEY UInt32,
LO_ORDERDATE Date,
LO_ORDERPRIORITY LowCardinality(String),
LO_SHIPPRIORITY UInt8,
LO_QUANTITY UInt8,
LO_EXTENDEDPRICE UInt32,
LO_ORDTOTALPRICE UInt32,
LO_DISCOUNT UInt8,
LO_REVENUE UInt32,
LO_SUPPLYCOST UInt32,
LO_TAX UInt8,
LO_COMMITDATE Date,
LO_SHIPMODE LowCardinality(String)
)ENGINE = ReplicatedMergeTree('/clickhouse/tables/{layer}-{shard}/lineorder','{replica}') PARTITION BY toYear(LO_ORDERDATE) ORDER BY (LO_ORDERDATE, LO_ORDERKEY);
CREATE TABLE customer
(
C_CUSTKEY UInt32,
C_NAME String,
C_ADDRESS String,
C_CITY LowCardinality(String),
C_NATION LowCardinality(String),
C_REGION LowCardinality(String),
C_PHONE String,
C_MKTSEGMENT LowCardinality(String)
)ENGINE = ReplicatedMergeTree('/clickhouse/tables/{layer}-{shard}/customer','{replica}') ORDER BY (C_CUSTKEY);
导入数据:
clickhouse-client -h node1 --port 9000 --query "INSERT INTO lineorder FORMAT CSV" < lineorder.tbl
clickhouse-client -h node2 --port 9000 --query "INSERT INTO customer FORMAT CSV" < customer.tbl
副本表同步
直接在副本节点上创建副本表即可,我们在node2上执行建表语句后。CH会基于ZK做数据同步的。这块大家可以根据自己的数据量、机器配置情况来决定是并行还是串行来处理。如果数据量比较大的情况,建议还是一张表一张表的同步。可以通过查询系统库的`system`.replication_queue表来查看同步的进度:
![](https://img.haomeiwen.com/i24023302/921f0eae523281c8.png)
同步的进度完全取决于你机器的配置及网络带宽。我们的虚拟机,整体的性能较差,下面是同步时候的磁盘监控信息:
![](https://img.haomeiwen.com/i24023302/8eafeaa6b8649f1b.png)
整体磁盘写入的速率在20M/S左右,性能还是非常一般的。
添加新副本
在node3上,搭建CH示例,作为第三个副本。执行如下的操作:
1、node3上将副本信息配置完整(1分片3副本),搭建好后执行如下命令启动ch。
systemctl start clickhouse-server.service
配置好的集群信息如下:
![](https://img.haomeiwen.com/i24023302/118902f5c0062eee.png)
2、将node1和node2上的集群配置信息修改为与node3一致。
无需重启CH实例,CH会自动加载配置。
![](https://img.haomeiwen.com/i24023302/4202a00ef439f17c.png)
3、然后在节点node3上,执行建表语句。
CH会自动将数据同步到node3上,作为第三份副本。
网友评论