一、查看分布式配置

假定4台服务器 10.1.1.1  和 10.1.1.2 和10.1.1.3 和10.1.1.4

设定为 2个分片(s),2个副本(r)

10.1.1.1 是 s1r1  10.1.1.2是s1r2

10.1.1.3是s2r1     10.1.1.4是s2r2

查看本地分片状态位:SELECT *from system.macros;

二、新建分布式表的本地表

新建分布式表依赖于分布式ddl

分布式ddl指的是在一台服务器上执行sql,其他服务器同步执行,需要借助于cluster,如下方

create table tableName on cluster my_shard (id Int8,name String)engine=xxx ;

上面创建的一张表,除了on cluster my_shard以外就是正常的创建表语句,my_shard我们上面配置过,里面一共包含了10.1.1.1-  s1r1 和 10.1.1.2-s1r2 和10.1.1.3-s2r1 和10.1.1.4-s2r2  四个replica,那么在执行的时候,就会到my_shard配置下的所有服务器中执行create table语句.也就是这三台服务器任意一台执行以上sql,三台的表都会创建好,这就是分布式ddl,分布式ddl也需要zookeeper的支持,同样也支持CREATE、DROP、ALTER、RENAME

示例代码:

CREATE TABLE if not exists default.test_cluster_g on cluster my_shard
(

    `UserID` UInt64,

    `PageViews` UInt8,

    `Duration` UInt8,

    `Sign` Int8,

    `Version` UInt8
)
ENGINE = ReplicatedMergeTree
ORDER BY UserID
SETTINGS index_granularity = 8192;

默认新建,副本表会有很多参数,只要在配置文件中加上配置项,就可以在新建表的时候省略这些参数 

ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard_name}/replicaTest3', '{replica_name}')

执行完成分布式DDL后,就可以发现各个分片的各个副本都生成了对应的表。
三、同步数据

1、默认情况下,对test_cluster_g 表进行insert,都是只会在本分片生效,副本间同步。

不会到另一个分片上去。需要新建一个对应的分布式表,对分布式表进行insert,这样会按照一定的规则,把数据分散插入到各个分片上。

2、新建分布式表

Distributed(cluster_name, db_name, table_name[, sharding_key[, policy_name]])

第一个是配置的cluster名称,第二个第三个分别代表代理的数据库,数据表,第四个参数是数据插入分发策略,指定一个字段名(必须是Int类型)或者rand(),第五个参数是策略名称。

示例代码

CREATE TABLE default.test_cluster_g_all on cluster my_shard
(

    `UserID` UInt64,

    `PageViews` UInt8,

    `Duration` UInt8,

    `Sign` Int8,

    `Version` UInt8
)
ENGINE = Distributed('my_shard',
 'default',
 'test_cluster_g',
 rand())

3、insert分布式表

此时insert 分布式表,会将数据分散发送到各个分片。分片内部不同副本,数据由zookeeper进行同步。select分布式表,查询的全部分片

此时就可以使用了分布式了

clickhouse 分布式部署架构 clickhouse 分布式表_数据