Clickhouse-副本
[toc]
# 副本写入流程
- 数据写入A,B会同步;数据写入B,A也会同步
- A和B存储了两份一模一样的数据
- 拉取数据通过Zookeeper进行通知
# 配置步骤
- 启动Zookeeper集群
- 在Clickhouse配置Zookeeper地址这里有两种方法
方法1(Zookeeper配置文件单独文件配置):
在Clickhouse
安装目录下的config.d
目录下创建一个名为 metrika.xml
(这个名称可以自定义,官方建议叫这个名称)的配置文件,内容如下:
<?xml version="1.0"?>
<yandex>
<zookeeper-servers>
<node index="1">
<host>hadoop102</host>
<port>2181</port>
</node>
<node index="2">
<host>hadoop103</host>
<port>2181</port>
</node>
<node index="3">
<host>hadoop104</host>
<port>2181</port>
</node>
</zookeeper-servers>
</yandex>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
将配置文件同步修改的副本服务器
在/etc/clickhouse-server/config.xml
配置文件中新增
<zookeeper incl="zookeeper-servers" optional="true" />
<include_from>/etc/clickhouse-server/config.d/metrika.xml</include_from>
1
2
2
将配置文件同步修改的副本服务器
方法2(直接在config.xml中修改):
# vim config.xml
<zookeeper>
<node>
<host>172.16.24.174</host>
<port>2181</port>
</node>
<node>
<host>172.16.24.175</host>
<port>2181</port>
</node>
<node>
<host>172.16.24.176</host>
<port>2181</port>
</node>
</zookeeper>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
- 所有节点重启服务
clickhouse restart
1
# Replicate表引擎包括
所有MergeTree表引擎都支持Replicated,其他表引擎不支持
- ReplicatedMergeTree
- ReplicatedSummingMergeTree
- ReplicatedReplacingMergeTree
- ReplicatedAggregatingMergeTree
- ReplicatedCollapsingMergeTree
- ReplicatedVersionedCollapsingMergeTree
- ReplicatedGraphiteMergeTree
# 验证测试
副本只能同步数据,不能同步表结构,所以我们需要在每台机器上自己手动建表
第一台服务器执行
create table t_order_rep2 (
id UInt32,
sku_id String,
total_amount Decimal(16,2),
create_time Datetime
) engine =ReplicatedMergeTree('/clickhouse/table/01/t_order_rep','rep_102')
partition by toYYYYMMDD(create_time)
primary key (id)
order by (id,sku_id);
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
第二台服务器执行
create table t_order_rep2 (
id UInt32,
sku_id String,
total_amount Decimal(16,2),
create_time Datetime
) engine =ReplicatedMergeTree('/clickhouse/table/01/t_order_rep','rep_103')
partition by toYYYYMMDD(create_time)
primary key (id)
order by (id,sku_id);
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
参数说明
ReplicatedMergeTree 中,
第一个参数是分片的 zk_path 一般按照:/clickhouse/table/{shard}/{table_name} 的格式写,如果只有一个分片就写 01 即可。
第二个参数是副本名称,相同的分片副本名称不能相同。
在第一台服务器上执行
insert into t_order_rep2 values
(101,'sku_001',1000.00,'2020-06-01 12:00:00'),
(102,'sku_002',2000.00,'2020-06-01 12:00:00'),
(103,'sku_004',2500.00,'2020-06-01 12:00:00'),
(104,'sku_002',2000.00,'2020-06-01 12:00:00'),
(105,'sku_003',600.00,'2020-06-02 12:00:00');
1
2
3
4
5
6
2
3
4
5
6
在两台服务器上分别 查询
select * from t_order_rep2;
1
第一台结果
:) select * from t_order_rep2;
SELECT *
FROM t_order_rep2
Query id: e8290fbc-74be-4906-852d-4aec63568191
┌──id─┬─sku_id──┬─total_amount─┬─────────create_time─┐
│ 105 │ sku_003 │ 600.00 │ 2020-06-02 12:00:00 │
└─────┴─────────┴──────────────┴─────────────────────┘
┌──id─┬─sku_id──┬─total_amount─┬─────────create_time─┐
│ 101 │ sku_001 │ 1000.00 │ 2020-06-01 12:00:00 │
│ 102 │ sku_002 │ 2000.00 │ 2020-06-01 12:00:00 │
│ 103 │ sku_004 │ 2500.00 │ 2020-06-01 12:00:00 │
│ 104 │ sku_002 │ 2000.00 │ 2020-06-01 12:00:00 │
└─────┴─────────┴─────────��────┴─────────────────────┘
5 rows in set. Elapsed: 0.005 sec.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
第二台结果
:) select * from t_order_rep2;
SELECT *
FROM t_order_rep2
Query id: c63640b1-9a4b-4ced-9d2d-48f857ceeb7a
┌──id─┬─sku_id──┬─total_amount─┬─────────create_time─┐
│ 105 │ sku_003 │ 600.00 │ 2020-06-02 12:00:00 │
└─────┴─────────┴──────────────┴─────────────────────┘
┌──id─┬─sku_id──┬─total_amount─┬─────────create_time─┐
│ 101 │ sku_001 │ 1000.00 │ 2020-06-01 12:00:00 │
│ 102 │ sku_002 │ 2000.00 │ 2020-06-01 12:00:00 │
│ 103 │ sku_004 │ 2500.00 │ 2020-06-01 12:00:00 │
│ 104 │ sku_002 │ 2000.00 │ 2020-06-01 12:00:00 │
└─────┴─────────┴─────────��────┴─────────────────────┘
5 rows in set. Elapsed: 0.006 sec.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
上次更新: 2023/03/10, 17:30:33