前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ClickHouse 集群搭建

ClickHouse 集群搭建

作者头像
Yunjie Ge
发布2022-04-24 09:22:44
1K0
发布2022-04-24 09:22:44
举报
文章被收录于专栏:数据库与编程数据库与编程

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);

任何一台机器均可查询到。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-01-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 山东Oracle用户组 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档