集群部署ClickHouse

一、部署前提

  • 需要一个Zookeeper集群
    • 搭建clickhouse集群时,需要使用Zookeeper去实现集群副本之间的同步,所以这里需要zookeeper集群,zookeeper集群安装后可忽略此步骤。
  • 需要三个节点部署单机的ClickHouse【重复单机部署的操着即可,密码也可以改】

二、集群部署ClickHouse

1.1、3节点增加配置文件 【/etc/clickhouse-server/config.d】

  • 在metrika.xml中我们配置后期使用的clickhouse集群中创建分布式表时使用3个分片,每个分片有1个副本,配置如下:

  • vim /etc/clickhouse-server/config.d/metrika.xml

<yandex>
    <remote_servers>
        <clickhouse_cluster_3shards_1replicas>
            <shard>
                <internal_replication>true</internal_replication>
                <replica>
                    <host>master</host>
                    <port>9000</port>
                </replica>
            </shard>
            <shard>
                <internal_replication>true</internal_replication>
                <replica>
                    <host>slave1</host>
                    <port>9000</port>
                </replica>
            </shard>
            <shard>
                <internal_replication>true</internal_replication>
                <replica>
                    <host>slave2</host>
                    <port>9000</port>
                </replica>
            </shard>
        </clickhouse_cluster_3shards_1replicas>
    </remote_servers>
   
    <zookeeper>
        <node index="1">
            <host>master</host>
            <port>2181</port>
        </node>
        <node index="2">
            <host>slave1</host>
            <port>2181</port>
        </node>
        <node index="3">
            <host>slave2</host>
            <port>2181</port>
        </node>
    </zookeeper>
    <macros>
        <shard>01</shard> 
        <replica>master</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>

对以上配置文件中配置项的解释如下:

  • remote_servers:

clickhouse集群配置标签,固定写法。注意:这里与之前版本不同,之前要求必须以clickhouse开头,新版本不再需要。

  • clickhouse_cluster_3shards_1replicas:

配置clickhouse的集群名称,可自由定义名称,注意集群名称中不能包含点号。这里代表集群中有3个分片,每个分片有1个副本。

分片是指包含部分数据的服务器,要读取所有的数据,必须访问所有的分片。

副本是指存储分片备份数据的服务器,要读取所有的数据,访问任意副本上的数据即可。

  • shard:

分片,一个clickhouse集群可以分多个分片,每个分片可以存储数据,这里 分片可以理解为clickhouse机器中的每个节点,1个分片只能对应1服务节点 。这里可以配置一个或者任意多个分片,在每个分片中可以配置一个或任意多个副本,不同分片可配置不同数量的副本。如果只是配置一个分片,这种情况下查询操作应该称为远程查询,而不是分布式查询。

  • replica:

每个分片的副本,默认每个分片配置了一个副本。也可以配置多个,副本的数量上限是由clickhouse节点的数量决定的。如果配置了副本,读取操作可以从每个分片里选择一个可用的副本。如果副本不可用,会依次选择下个副本进行连接。该机制利于系统的可用性。

  • internal_replication:

默认为false,写数据操作会将数据写入所有的副本,设置为true,写操作只会选择一个正常的副本写入数据,数据的同步在后台自动进行。

  • zookeeper:

配置的zookeeper集群,注意:与之前版本不同,之前版本是“zookeeper-servers”。

  • macros:

区分每台clickhouse节点的宏配置,macros中标签代表当前节点的分片号,标签代表当前节点的副本号,这两个名称可以随意取,后期在创建副本表时可以动态读取这两个宏变量。注意:每台clickhouse节点需要配置不同名称。

  • networks:

这里配置ip为“::/0”代表任意IP可以访问,包含IPv4和IPv6。

注意:允许外网访问还需配置/etc/clickhouse-server/config.xml 参照第三步骤。

  • clickhouse_compression:

MergeTree引擎表的数据压缩设置,min_part_size:代表数据部分最小大小。min_part_size_ratio:数据部分大小与表大小的比率。method:数据压缩格式。

注意:需要在每台clickhouse节点上配置metrika.xml文件,并且修改每个节点的 macros配置名称。

#node2节点修改metrika.xml中的宏变量如下:
    <macros>
        <shard>02</replica> 
        <replica>slave1</replica>
    </macros>

#node3节点修改metrika.xml中的宏变量如下:
    <macros>
        <shard>03</replica> 
        <replica>slave2</replica>
    </macros>

1.2、在每台节点上启动/查看/重启/停止clickhouse服务

#每台节点启动Clickchouse服务
service clickhouse-server start

#每台节点查看clickhouse服务状态
service clickhouse-server status

#每台节点重启clickhouse服务
service clickhouse-server restart

#每台节点关闭Clikchouse服务
service clickhouse-server stop

1.3、验证集群状态

  • 在node1、node2、node3任意一台节点进入clickhouse客户端,查询集群配置
#选择三台clickhouse任意一台节点,进入客户端
clickhouse-client --password 

#查询集群信息,看到如下所示即代表集群配置成功。
master :) select * from system.clusters;

#查询集群信息,也可以使用如下命令
master :) select cluster,host_name from system.clusters;

SELECT
    cluster,
    host_name
FROM system.clusters

Query id: 97f53b80-89ed-4f98-93cf-d37bf4a3f1a9

┌─cluster──────────────────────────────────────┬─host_name─┐
│ clickhouse_cluster_3shards_1replicas         │ master    │
│ clickhouse_cluster_3shards_1replicas         │ slave1    │
│ clickhouse_cluster_3shards_1replicas         │ slave2    │
│ test_cluster_two_shards                      │ 127.0.0.1 │
│ test_cluster_two_shards                      │ 127.0.0.2 │
│ test_cluster_two_shards_internal_replication │ 127.0.0.1 │
│ test_cluster_two_shards_internal_replication │ 127.0.0.2 │
│ test_cluster_two_shards_localhost            │ localhost │
│ test_cluster_two_shards_localhost            │ localhost │
│ test_shard_localhost                         │ localhost │
│ test_shard_localhost_secure                  │ localhost │
│ test_unavailable_shard                       │ localhost │
│ test_unavailable_shard                       │ localhost │
└──────────────────────────────────────────────┴───────────┘

13 rows in set. Elapsed: 0.003 sec. 

1.4、 客户端命令行参数

我们可以通过clickhouse client来连接启动的clickhouse服务,连接服务时,我们可以指定以下参数,这里指定的参数会覆盖默认值和配置文件中的配置。

参数 解释
--host, -h 服务端的host名称, 默认是localhost。您可以选择使用host名称或者IPv4或IPv6地址。
--port 连接的端口,默认值:9000。注意HTTP接口以及TCP原生接口使用的是不同端口。
--user, -u 用户名。默认值:default。
--password 密码。默认值:空字符串。
--query,-q 使用非交互模式查询。
--database, -d 默认当前操作的数据库. 默认值:服务端默认的配置(默认是default)。
--multiline, -m 如果指定,允许多行语句查询(Enter仅代表换行,不代表查询语句完结)。
--time, -t 如果指定,非交互模式下会打印查询执行的时间到stderr中。
--stacktrace 如果指定,如果出现异常,会打印堆栈跟踪信息。
--config-file 配置文件的名称。
--multiquery,-n 使用非交互模式查询数据时,可以分号隔开多个sql语句。

Ø --host,-h:

使用-h指定ip或者host名称时,需要在/etc/clickhouse-server/config.xml配置文件中114行配置:<listen_host>::</listen_host> ,代表可以任意ip可访问。配置完成后需要重启当期clickhouse节点生效。

clickhouse-client  -h node1
ClickHouse client version 20.8.3.18.
Connecting to node1:9000 as user default.
Connected to ClickHouse server version 20.8.3 revision 54438.

Ø --query,-q

clickhouse-client -q "show databases"
_temporary_and_external_tables
default
system

Ø --database, -d:

clickhouse-client -d "system" -q "show tables"
aggregate_function_combinators
asynchronous_metric_log
asynchronous_metrics
build_options
... ....

Ø --multiline, -m:

clickhouse-client -m

node1 :) select 
:-] 1+1
:-] ;

SELECT 1 + 1
┌─plus(1, 1)─┐
│          2 │
└────────┘
1 rows in set. Elapsed: 0.004 sec.

Ø --time, -t:

clickhouse-client -t -q "show databases"
_temporary_and_external_tables
default
system
0.004

Ø --stacktrace:

clickhouse-client --stacktrace
ClickHouse client version 20.8.3.18.
Connecting to localhost:9000 as user default.
Connected to ClickHouse server version 20.8.3 revision 54438.

node1 :) use aaa;
USE aaa
Received exception from server (version 20.8.3):
Code: 81. DB::Exception: Received from localhost:9000. DB::Exception: Database aaa doesn't exist. Stack trace:
0.Poco::Exception::Exception(std::__1 ... ....
... ....

Ø --multiquery,-n

[root@node1 ~]# clickhouse-client  -n -q "show databases;use default;"
_temporary_and_external_tables
default
system

1.4、数据类型

ClickHouse提供了许多数据类型,它们可以划分为基础类型、复合类型和特殊类型。我们可以在system.data_type_families表中检查数据类型名称以及是否区分大小写。这个表中存储了ClickHouse支持的所有数据类型。

select * from system.data_type_families limit 10;
SELECT *
FROM system.data_type_families
LIMIT 10

┌─name────────────┬─case_insensitive─┬─alias_to─┐
│ Polygon          │                    0 │            │
│ Ring              │                    0 │            │
│ MultiPolygon    │                    0 │            │
│ IPv6              │                    0 │            │
│ IntervalSecond  │                    0 │            │
│ IPv4              │                    0 │            │
│ UInt32            │                   0 │             │
│ IntervalYear     │                   0 │             │
│ IntervalQuarter │                   0 │             │
│ IntervalMonth    │                   0 │             │
└─────────────────┴──────────────────┴──────────┘

10 rows in set. Elapsed: 0.004 sec.

下面介绍下常用的数据类型,ClickHouse与Mysql、Hive中常用数据类型的对比图如下:

MySQL Hive ClickHouse(区分大小写)
byte TINYINT Int8
short SMALLINT Int16
int INT Int32
long BIGINT Int64
varchar STRING String
timestamp TIMESTAMP DateTime
float FLOAT Float32
double DOUBLE Float64
boolean
posted @ 2022-10-29 16:28  taotaozh  阅读(3852)  评论(0编辑  收藏  举报