前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ClickHouse实战-ReplicatedMergeTree分布式表

ClickHouse实战-ReplicatedMergeTree分布式表

原创
作者头像
程序猿梦工厂
修改2020-12-17 14:35:56
9.3K0
修改2020-12-17 14:35:56
举报
文章被收录于专栏:程序猿梦工厂程序猿梦工厂

如果我们需要使用ClickHouse的ReplicatedMergeTree表同步功能我们需要做一些配置操作

修改集群配置


  • 修改配置文件支持读取外部配置信息

我们只需要修改/etc/clickhouse-server/config.xml集群配置文件,在该文件中增加类似以下配置信息

代码语言:txt
复制
<macros incl="macros" optional="true" />

一般此配置默认在ClickHouse中存在的

  • 创建配置信息,一般我们可一使用include方式或者在/etc/clickhouse-server/config.d文件夹下创建,默认该文件夹不存在,我们使用第二种方式配置

创建新的配置文件macros-ck-cluster.xml

代码语言:txt
复制
mkdir /etc/clickhouse-server/config.d/
touch /etc/clickhouse-server/config.d/macros-ck-cluster.xml

在改配置文件中输入以下内容(注意每个节点的配置信息不相同,比如我们在ck1节点中操作,ck1节点的备份是ck2,那么ck1的配置信息如下):

代码语言:txt
复制
<yandex>
    <macros>
        <replica>ck2</replica>
        <shard>1</shard>
        <layer>ck_cluster</layer>
    </macros>
</yandex>
  • replica 配置当前节点的备份同步节点信息
  • shard 指定的是集群分片信息中的配置,在集群我配置的是shard_1
  • layer 指定我们的集群标志,或者使用cluster关键字

创建ReplicatedMergeTree表


  • 使用以下建表语句创建数据表
代码语言:txt
复制
CREATE TABLE default.test ON CLUSTER mycluster_1
(
    `id` Int64,
    `ymd` Int64
)
ENGINE = ReplicatedMergeTree('/clickhouse/tables/replicated/{shard}/test', '{replica}')
PARTITION BY ymd
ORDER BY id

我们在创建表的时候指定了ReplicatedMergeTree(xxxx),里面传递了两个参数,我们对这两个参数一一描述

  • /clickhouse/tables/ 这一部分指定的是在ZK上创建的路径地址,可随意变换只要记得即可
  • {shard} 指的是分片的标志,同一个分片内的所有机器应该保持相同。建议使用使用的是集群名+分片名的配置也就是{layer}-{shard},这里的数据就是在macros中配置的属性
  • test 建议使用表名称
  • {replica} 参数建议在macros配置成机器的hostname,因为每台机器的hostname都是不一样的,因此就能确保每个表的识别符都是唯一的了
  • 登录ClickHouse客户端执行SQL创建数据表返回如下及创建成功
代码语言:txt
复制
CREATE TABLE default.test ON CLUSTER mycluster_1
(
    `id` Int64,
    `ymd` Int64
)
ENGINE = ReplicatedMergeTree('/clickhouse/tables/replicated/{shard}/test', '{replica}')
PARTITION BY ymd
ORDER BY id

Query id: 63135671-8f24-4846-a0a8-471abf608305

┌─host──────────────────┬─port─┬─status─┬─error─┬─num_hosts_remaining─┬─num_hosts_active─┐
│ ck1 │ 9000 │      0 │       │                   1 │                1 │
└───────────────────────┴──────┴────────┴───────┴─────────────────────┴──────────────────┘
┌─host──────────────────┬─port─┬─status─┬─error─┬─num_hosts_remaining─┬─num_hosts_active─┐
│ ck2 │ 9000 │      0 │       │                   0 │                0 │
└───────────────────────┴──────┴────────┴───────┴─────────────────────┴──────────────────┘

2 rows in set. Elapsed: 0.301 sec.

测试ReplicatedMergeTree数据表


  • 在ck1节点中插入数据到test表
代码语言:txt
复制
insert into default.test values('1', '20201112');

返回类似如下信息标志插入成功

代码语言:txt
复制
INSERT INTO default.test VALUES

Query id: 1333b8ce-74e2-4d67-a4b8-0183304bd661

Ok.

1 rows in set. Elapsed: 0.032 sec.
  • 使用ClickHouse客户端连接ck1查询数据
代码语言:txt
复制
clickhouse-client -h ck1 --port 9000 --multiquery --query="select * from test"

返回如下内容

代码语言:txt
复制
1	20201112
  • 使用ClickHouse客户端连接ck2查询数据查看数据是否同步
代码语言:txt
复制
clickhouse-client -h ck2 --port 9000 --multiquery --query="select * from test"

返回如下内容

代码语言:txt
复制
1	20201112

两台节点数据返回一致说明我们的分布式表创建成功。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 修改集群配置
  • 创建ReplicatedMergeTree表
  • 测试ReplicatedMergeTree数据表
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档