你可以在集群的所有机器上创建分布式表。这将允许在任何机器上运行分布式查询。除了分布式表外,还可以使用“remote”表函数。 我们来运行INSERT SELECT语句,往分布式表中插入数据,将表扩展到多个服务器。 INSERTINTOontime_all SELECT* FROMontime; 值得注意的是,上面介绍的方法不适合那些大表分片。请使用内置的分片特性。 如你所料,重量级查询在3台服务器上的执行速度比在1台机器上快N倍: 这个例子中我们使用了包含3个分片的集群,每个分片包含了一个副本。 在生产环境中为了提供数据恢复能力,我们建议每个分片最好有2-3个副本分布到多个数据中心之间。Clickhouse支持无限数量的副本。 下面是一个分片包含三个副本的集群配置: <remote_servers>... <perftest_1shards_3replicas><shard><replica><host>example-perftest01j.yandex.ru </host><port>9000 </port></replica><replica><host>example-perftest02j.yandex.ru </host><port>9000 </port></replica><replica><host>example-perftest03j.yandex.ru </host><port>9000 </port></replica></shard></perftest_1shards_3replicas> </remote_servers> 要实现数据复制,ZooKeeper必不可少。Clickhouse会照顾到所有副本数据的一致性,在运行故障发生后能自动恢复程序。建议吧ZooKeeper集群部署到独立的服务器上。 简单起见,你可能自己写程序代码将数据写到所有副本中来完成数据复制,那么这就不需要ZooKeeper了。这种做法我们不推荐,因为这种情况下Clickhouse不能保证所有副本的数据一致性。看你啰!搞砸了我不负责! 在配置文件中设置ZooKeeper的位置: <zookeeper-servers><node><host>zoo01.yandex.ru </host><port>2181 </port></node><node><host>zoo02.yandex.ru </host><port>2181 </port></node><node><host>zoo03.yandex.ru </host><port>2181 </port></node> </zookeeper-servers> 我们还需要设置确定分片和副本的宏,这在创建表的时候会用到。 <macros><shard>01 </shard><replica>01 </replica> </macros> 如果复制表在创建的时候没有副本,首个新的副本将会被实例化。如果已经有过副本,新的副本将从已存在的副本中克隆。你可以先创建所有复制表,再向其中插入数据;也可以创建若干副本,再在数据插入期间或之后加入其它副本。 CREATETABLEontime_replica (...) ENGINE= ReplicatedMergeTree( '/clickhouse_perftest/tables/{shard}/ontime', '{replica}',FlightDate, (Year, FlightDate), 8192); 这里我们使用的是ReplicatedMergeTree表类型。在参数中我们指定Zookeeper的路径,其中包含了分片和副本标示符。 INSERTINTOontime_replica SELECT* FROMontime; (责任编辑:本港台直播) |