美文网首页
ClickHouse副本同步验证及副本添加

ClickHouse副本同步验证及副本添加

作者: 淡淡的小番茄 | 来源:发表于2023-01-03 15:18 被阅读0次

    背景

    我们部署方式比较简单,采用的是一分片,多副本的机制。使用副本表进行数据的同步。由于整体查询的压力比较大,为了提升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表来查看同步的进度:

    同步的进度完全取决于你机器的配置及网络带宽。我们的虚拟机,整体的性能较差,下面是同步时候的磁盘监控信息:

    整体磁盘写入的速率在20M/S左右,性能还是非常一般的。

    添加新副本

    在node3上,搭建CH示例,作为第三个副本。执行如下的操作:

    1、node3上将副本信息配置完整(1分片3副本),搭建好后执行如下命令启动ch。

    systemctl start clickhouse-server.service

    配置好的集群信息如下:

    2、将node1和node2上的集群配置信息修改为与node3一致。

    无需重启CH实例,CH会自动加载配置。

    3、然后在节点node3上,执行建表语句。

    CH会自动将数据同步到node3上,作为第三份副本。

    相关文章

      网友评论

          本文标题:ClickHouse副本同步验证及副本添加

          本文链接:https://www.haomeiwen.com/subject/xihlcdtx.html