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
<yandex><clickhouse_remote_servers> <perftest_3shards_1replicas> <shard> <internal_replication>true</internal_replication> <replica> <host>db_server_01</host> <port>9000</port> </replica> </shard> <shard> <replica> <internal_replication>true</internal_replication> <host>db_server_02</host> <port>9000</port> </replica> </shard> <shard> <internal_replication>true</internal_replication> <replica> <host>db_server_03</host> <port>9000</port> </replica> </shard> </perftest_3shards_1replicas></clickhouse_remote_servers><zookeeper-servers> <node index="1"> <host>192.168.0.30</host> <port>2181</port> </node></zookeeper-servers><macros> <replica>192.168.0.10</replica></macros><networks> <ip>::/0</ip></networks><clickhouse_compression><case>
<min_part_size>10000000000</min_part_size> <min_part_size_ratio>0.01</min_part_size_ratio> <method>lz4</method></case>
</clickhouse_compression></yandex>3台机器的在/etc/metrika.xml配置文件都一样,唯一有区别的是下面的这个位置IP换成每个机器自己的ip:
<macros> <replica>192.168.0.10</replica></macros>其中集群中需用到zookeeper,请自行安装,这里我将zookeeper装在了192.168.0.30这台虚机上,在/etc/metrika.xml的配置文件中,配置为以下内容:
<zookeeper-servers> <node index="1"> <host>192.168.0.30</host> <port>2181</port> </node></zookeeper-servers>zookeeper是安装在30的机器上面的,只安装了一个实例,生产环境肯定要放到单独的机器,并且配置成集群。
配置文件修改好以后3台服务器重启。
三、简单测试
1. 下面创建本地表,再创建Distributed表(3台机器都创建)。
CREATE TABLE ontime_local (FlightDate Date,Year UInt16) ENGINE = MergeTree(FlightDate, (Year, FlightDate), 8192);CREATE TABLE ontime_all AS ontime_local ENGINE = Distributed(perftest_3shards_1replicas, default, ontime_local, rand());2. 随便一台机器插入数据。
:) insert into ontime_all (FlightDate,Year) values ('2001-10-12',2001);INSERT INTO ontime_all (FlightDate, Year) VALUESOk.1 rows inset. Elapsed: 0.013 sec. :) insert into ontime_all (FlightDate,Year) values ('2002-10-12',2002);INSERT INTO ontime_all (FlightDate, Year) VALUESOk.1 rows inset. Elapsed: 0.004 sec. :) insert into ontime_all (FlightDate,Year) values ('2003-10-12',2003);INSERT INTO ontime_all (FlightDate, Year) VALUESOk.3. 下面任何一台机器查询:
:) select * from ontime_all;SELECT * FROM ontime_all ┌─FlightDate─┬─Year─┐│ 2001-10-12 │ 2001 │└────────────┴──────┘┌─FlightDate─┬─Year─┐│ 2002-10-12 │ 2002 │└────────────┴──────┘┌─FlightDate─┬─Year─┐│ 2003-10-12 │ 2003 │└────────────┴──────┘→ Progress: 3.00 rows, 12.00 B (48.27 rows/s., 193.08 B/s.) 3 rows inset. Elapsed: 0.063 sec. :) 当在其中一台机器上面查询的时候,抓包其他机器可以看见是有请求的。
tcpdump -i any -s 0 -l -w - dst port 9000下面进行数据复制的测试,zk已经配置好了,直接建表测试(3台机器都创建):
CREATE TABLE ontime_replica (FlightDate Date,Year UInt16) ENGINE = ReplicatedMergeTree('/clickhouse_perftest/tables/ontime_replica','{replica}',FlightDate,(Year, FlightDate),8192);插入数据测试:
insert into ontime_replica (FlightDate,Year) values ('2018-10-12',2018);任何一台机器均可查询到。