2018年第一天,许下第一份愿望吧,闭上眼睛,双手合十,心中默念,梦想成真。有期待的生活是快乐的,有憧憬的日子是惊喜的。元旦快乐!
上一篇《ClickHouse 单机搭建》中搭建了单机ClickHouse环境,本篇在上一篇的基础上继续进行集群的搭建。
一、环境准备
1. 本群集中包括3台机器。
2. 将3台机器的IP配置如下。(3台机器都绑定hosts)
192.168.0.10 db_server_01
192.168.0.20 db_server_02
192.168.0.30 db_server_03
3.在3台机器,都参照《ClickHouse 单机搭建》安装ClickHouse。
二、修改配置文件
1. 在每台机器上创建配置文件/etc/metrika.xml,完整的代码如下。
vi /etc/metrika.xml
代码语言:javascript复制<yandex>
代码语言:javascript复制<clickhouse_remote_servers>
代码语言:javascript复制 <perftest_3shards_1replicas>
代码语言:javascript复制 <shard>
代码语言:javascript复制 <internal_replication>true</internal_replication>
代码语言:javascript复制 <replica>
代码语言:javascript复制 <host>db_server_01</host>
代码语言:javascript复制 <port>9000</port>
代码语言:javascript复制 </replica>
代码语言:javascript复制 </shard>
代码语言:javascript复制 <shard>
代码语言:javascript复制 <replica>
代码语言:javascript复制 <internal_replication>true</internal_replication>
代码语言:javascript复制 <host>db_server_02</host>
代码语言:javascript复制 <port>9000</port>
代码语言:javascript复制 </replica>
代码语言:javascript复制 </shard>
代码语言:javascript复制 <shard>
代码语言:javascript复制 <internal_replication>true</internal_replication>
代码语言:javascript复制 <replica>
代码语言:javascript复制 <host>db_server_03</host>
代码语言:javascript复制 <port>9000</port>
代码语言:javascript复制 </replica>
代码语言:javascript复制 </shard>
代码语言:javascript复制 </perftest_3shards_1replicas>
代码语言:javascript复制</clickhouse_remote_servers>
代码语言:javascript复制<zookeeper-servers>
代码语言:javascript复制 <node index="1">
代码语言:javascript复制 <host>192.168.0.30</host>
代码语言:javascript复制 <port>2181</port>
代码语言:javascript复制 </node>
代码语言:javascript复制</zookeeper-servers>
代码语言:javascript复制<macros>
代码语言:javascript复制 <replica>192.168.0.10</replica>
代码语言:javascript复制</macros>
代码语言:javascript复制<networks>
代码语言:javascript复制 <ip>::/0</ip>
代码语言:javascript复制</networks>
代码语言:javascript复制<clickhouse_compression>
代码语言:javascript复制<case>
<min_part_size>10000000000</min_part_size>
代码语言:javascript复制 <min_part_size_ratio>0.01</min_part_size_ratio>
代码语言:javascript复制 <method>lz4</method>
代码语言:javascript复制</case>
</clickhouse_compression>
代码语言:javascript复制</yandex>
3台机器的在/etc/metrika.xml配置文件都一样,唯一有区别的是下面的这个位置IP换成每个机器自己的ip:
代码语言:javascript复制<macros>
代码语言:javascript复制 <replica>192.168.0.10</replica>
代码语言:javascript复制</macros>
其中集群中需用到zookeeper,请自行安装,这里我将zookeeper装在了192.168.0.30这台虚机上,在/etc/metrika.xml的配置文件中,配置为以下内容:
代码语言:javascript复制<zookeeper-servers>
代码语言:javascript复制 <node index="1">
代码语言:javascript复制 <host>192.168.0.30</host>
代码语言:javascript复制 <port>2181</port>
代码语言:javascript复制 </node>
代码语言:javascript复制</zookeeper-servers>
zookeeper是安装在30的机器上面的,只安装了一个实例,生产环境肯定要放到单独的机器,并且配置成集群。
配置文件修改好以后3台服务器重启。
三、简单测试
1. 下面创建本地表,再创建Distributed表(3台机器都创建)。
代码语言:javascript复制CREATE TABLE ontime_local (FlightDate Date,Year UInt16) ENGINE = MergeTree(FlightDate, (Year, FlightDate), 8192);
代码语言:javascript复制CREATE TABLE ontime_all AS ontime_local ENGINE = Distributed(perftest_3shards_1replicas, default, ontime_local, rand());
2. 随便一台机器插入数据。
代码语言:javascript复制:) insert into ontime_all (FlightDate,Year) values ('2001-10-12',2001);
代码语言:javascript复制INSERT INTO ontime_all (FlightDate, Year) VALUES
代码语言:javascript复制Ok.
代码语言:javascript复制1 rows inset. Elapsed: 0.013 sec.
代码语言:javascript复制:) insert into ontime_all (FlightDate,Year) values ('2002-10-12',2002);
代码语言:javascript复制INSERT INTO ontime_all (FlightDate, Year) VALUES
代码语言:javascript复制Ok.
代码语言:javascript复制1 rows inset. Elapsed: 0.004 sec.
代码语言:javascript复制:) insert into ontime_all (FlightDate,Year) values ('2003-10-12',2003);
代码语言:javascript复制INSERT INTO ontime_all (FlightDate, Year) VALUES
代码语言:javascript复制Ok.
3. 下面任何一台机器查询:
代码语言:javascript复制:) select * from ontime_all;
代码语言:javascript复制SELECT *
代码语言:javascript复制FROM ontime_all
代码语言:javascript复制┌─FlightDate─┬─Year─┐
代码语言:javascript复制│ 2001-10-12 │ 2001 │
代码语言:javascript复制└────────────┴──────┘
代码语言:javascript复制┌─FlightDate─┬─Year─┐
代码语言:javascript复制│ 2002-10-12 │ 2002 │
代码语言:javascript复制└────────────┴──────┘
代码语言:javascript复制┌─FlightDate─┬─Year─┐
代码语言:javascript复制│ 2003-10-12 │ 2003 │
代码语言:javascript复制└────────────┴──────┘
代码语言:javascript复制→ Progress: 3.00 rows, 12.00 B (48.27 rows/s., 193.08 B/s.)
代码语言:javascript复制3 rows inset. Elapsed: 0.063 sec.
代码语言:javascript复制:)
当在其中一台机器上面查询的时候,抓包其他机器可以看见是有请求的。
代码语言:javascript复制tcpdump -i any -s 0 -l -w - dst port 9000
下面进行数据复制的测试,zk已经配置好了,直接建表测试(3台机器都创建):
代码语言:javascript复制CREATE TABLE ontime_replica (FlightDate Date,Year UInt16) ENGINE = ReplicatedMergeTree('/clickhouse_perftest/tables/ontime_replica','{replica}',FlightDate,(Year, FlightDate),8192);
插入数据测试:
代码语言:javascript复制insert into ontime_replica (FlightDate,Year) values ('2018-10-12',2018);
任何一台机器均可查询到。