clickhouse集群部署方案

以三台服务器为例,做3分片0副本部署

主机端口备注10.16.5.21790001分片,0副本10.16.5.21890001分片,0副本10.16.5.21990001分片,0副本

clickhouse安装步骤

安装包下载

​ (1)官网:https://packages.clickhouse.com/rpm/stable/

​ (2) 以23.8.2.7ARM版本为例,下载如下四个rpm安装包

clickhouse-client-23.8.2.7.x86_64.rpm

clickhouse-common-static-23.8.2.7.x86_64.rpm

clickhouse-common-static-dbg-23.8.2.7.x86_64.rpm

clickhouse-server-23.8.2.7.x86_64.rpm

安装

​ (1)安装包上传至服务器(在三台服务器/opt目录下创建clickhouse目录,存放安装包)

mkdir /opt/clickhouse

​ (2)解压安装 (在三台服务器执行如下操作)

rpm -ivh /opt/clickhouse/*.rpm

# 解压后文件存放位置

# bin --> /usr/bin

# conf --> /etc/clickhouse-server

# lib --> /var/lib/clickhouse

# log --> /var/log/clickhouse-server

​ 注:在安装过程中会出现密码输入,可根据需求进行设置

clickhouse配置文件修改

创建目录与文件

(在三台服务器同时进行)

# 数据目录

mkdir /data/clickhouse

# 日志目录

mkdir /data/clickhouse/log/

# 配置文件

touch /etc/clickhouse-server/metrika.xml

编辑config.xml文件

(vim /etc/clickhouse-server/config.xml)

三个服务器同样的操作

/data/clickhouse/

/data/clickhouse/tmp/

/data/clickhouse/log/clickhouse-server.log

/data/clickhouse/log/clickhouse-server.err.log

::1

0.0.0.0

/data/clickhouse/user_files/

/data/clickhouse/access/

/data/clickhouse/format_schemas/

/etc/clickhouse-server/metrika.xml

编辑metrika.xml

(vim /etc/clickhouse-server/metrika.xml 三台服务器有区别)

true

10.16.5.217

9000

true

10.16.5.218

9000

true

10.16.5.219

9000

10.16.5.217

2181

10.16.5.218

2181

10.16.5.219

2181

10000000000

0.01

lz4

::/0

ck_cluster

01

cluster01

ck_cluster

02

cluster02

ck_cluster

03

cluster03

标签解释: : cluster名称,任意填写,在后面通过这个名字引用如 on cluster ck_cluster :分片,有几个分片就配置几个标签 :副本,有几个副本就有几个标签.

修改文件、目录的所属用户与所属组

( 三台服务器同样操作)

chown -R clickhouse:clickhouse /data/clickhouse/

chown -R clickhouse:clickhouse /etc/clickhouse-server/metrika.xml

chown -R clickhouse:clickhouse /etc/clickhouse-server/config.xml

clickhouse启动

三台服务器启动命令

systemctl start clickhouse-server.service # 启动服务

systemctl status clickhouse-server.service # 查看状态

systemctl stop clickhouse-server.service # 关闭服务

访问客户端,查看集群信息

clickhouse-client -m

# 通过系统表可以查看cluster集群信息

SELECT * from system.clusters;

注:查询信息字段 cluster:集群名 shard_num:分片的编号 shard_weight:分片的权重 replica_num:副本的编号 host_name:服务器的host名称 host_address:服务器的ip地址 port:clickhouse集群的端口 is_local:是否为你当前查询本地 user:创建用户

访问客户端,系统配置表查询

select * from system.macros;

clickHouse-Keeper部署

简介

​ ClickHouse服务为了副本和分布式DDL查询执行使用ClickHouse Keeper协调系统

安装

​ 无需额外安装,安装clickhouse时已经携带,只需配置即可!

创建目录

(三台服务器同样操作)

# 创建clickhouse-keeper数据存放目录

mkdir /data/clickhouse-keeper

# 赋予权限

chown -R clickhouse:clickhouse /data/clickhouse-keeper

修改配置文件

(三台服务器同样操作,vim /etc/clickhouse-server/config.xml)

2181

1

/data/clickhouse-keeper/coordination/log

/data/clickhouse-keeper/coordination/snapshots

10000

30000

trace

1

10.16.5.217

9444

2

10.16.5.218

9444

3

10.16.5.219

9444

10.16.5.218、10.16.5.219服务器配置:

2

3

启动clickhouse-keeper

​ (1)正常重启clickhouse即可使用clickhouse-keeper

systemctl restart clickhouse-server.service # 重新启动服务

​ (2)检查clickhouse-keeper是否启动,通过telnet或nc在客户端端口向ClickHouse Keeper发出命令

echo mntr | nc localhost 2181

clickhouse分布式表

基于集群实现分布式 DDL

在默认情况下,创建多张副本表需要在不同服务器上进行创建,这是因为 create、drop、rename和 alter 等 ddl 语句不支持分布式执行,而在集群配置后,就可以使用新的语法实现分布式DDL 执行了

create / drop / rename / alter table on cluster cluster_name

-- cluster_name 对应为配置文件中的汲取名称,clickhouse 会根据集群的配置,去各个节点执行 DDL 语句

分布式创建本地表

-- 在 ck_cluster 集群 创建测试表

CREATE TABLE default.cktest_local ON CLUSTER ck_cluster

(

`id` Int64,

`name` String,

`age` Int32

)

ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/cktest_local', '{replica}')

ORDER BY id

-- clickhouse 会根据 ck_cluster 的配置在 10.16.5.217、10.16.5.218 和 10.16.5.219 中创建 cktest_local 数据表

我们在创建表的时候指定了ReplicatedMergeTree(xxxx),里面传递了两个参数,我们对这两个参数一一描述

/clickhouse/tables/ 这一部分指定的是在ZK上创建的路径地址,可随意变换只要记得即可{shard} 指的是分片的标志,同一个分片内的所有机器应该保持相同。建议使用使用的是集群名+分片名的配置也就是{layer}-{shard},这里的数据就是在macros中配置的属性cktest_local建议使用表名称{replica} 参数建议在macros配置成机器的hostname,因为每台机器的hostname都是不一样的,因此就能确保每个表的识别符都是唯一的了

删除表

-- 删除 cktest_local 表

drop table cktest_local on cluster ck_cluster;

注意: ​ 在日常使用clickhouse的时候,肯定会遇到删除表的操作,删除表的命令:DROP TABLE IF EXISTS default.test。有时候删除后表又想马上重建表,这时候你会发现相同表结构的表创建不了。 ​ ClickHouse分布式表的本质并不是一张表,而是一些本地物理表(分片)的分布式视图,本身并不存储数据。在我们删除本地表和分布式表后,立即重建是没有问题的。唯一有问题的就是复制表,因为复制表需要在zookeeper上建立一个路径,存放相关数据。clickhouse默认的库引擎是原子数据库引擎,删除Atomic数据库中的表后,它不会立即删除。

创建分布式表

Distributed 解析

​ Distributed 表引擎是分布式表的代名词,他自身不存储任何数据,而是作为数据分片的代理,能够自动路由数据至集群中的各个节点,所以 DIstributed 表引擎需要和其他表引擎一起协同工作。 从上图可以看出一个表分为两个部分

本地表:通常以_local后缀进行命名。本地表是承接数据的载体,可以使用 非 Distributed 的任意表引擎分布式表:通常以_all为后缀进行命名,分布式表只能使用 Distributed 表引擎,他们与本地表形成一对多的映射关系,以后通过分布式表代理操作多张本地表。

对于分布式表与本地表之间表结构的一致性检查,Distributed 表引擎采用了读时检查的机制,这意味着如果他们的表结构不兼容,需要在查询时才会抛出异常,而在创建表引擎时不会进行检查,不同 clickhouse 节点上的本地表之间使用不同表引擎也是可行的,但是通常不会这么做,保持他们的结构一致,有利于后期的维护避免造成不可预计的后果。

创建表

-- 创建分布式表 cktest_all 代理 ck_cluster 集群的 drfault.cktest_local 表

CREATE TABLE default.cktest_all ON CLUSTER ck_cluster

(

`id` Int64,

`name` String,

`age` Int32

)

ENGINE = Distributed('ck_cluster', 'default', 'cktest_local', rand())

-- 这里用的是 on cluster 分布式 DDL, 所以在 ck_cluster 集群中每个节点都会创建一张分布式表

-- 写入数据时会根据 rand() 随机函数的取值决定写入那个分片,

查询分类

作用于本地表的查询:对应 select 和 insert 分布式表会以分布式的方式作用于 local 本地表只会影响分布式表自身,不会作用于本地表的查询,分布式表支持部分元数据操作,包括 create、drop、rename 和 alter,其中 alter 并不包括分区的操作(attach partition 和 replace partition等)。这些操作只会修改分布式表自身,并不会修改 local 本地表如果想要彻底删除一张分布式表,需要分别删除分布式表和本地表不支持的操作:分布式表不支持任何的 mutation 类型的操作,包括 alter delete 和 alter update。

-- 删除分布式表

drop table cktest_all on cluster ck_cluster;

-- 删除本地表

drop table cktest_local on cluster ck_cluster;

分片规则

分片键要求返回一个整型类型的取值,包括 Int和 UInt 类型的系列

-- Distributed( 服务器配置文件中的集群名 , 远程数据库名 , 远程表名 , 数据分片键(可选))

-- 分片键可以是一个具体的整型字段

-- 按照用户 ID 划分

Distributed(cluster,database,table,id)

-- 分片键也可以是返回整型的表达式

-- 按照随机数划分

Distributed(cluster,database,table,rand())

-- 按照用户 ID 的散列值划分

Distributed(cluster,database,table,intHash64(userid))

插入数据

-- 10.16.5.217服务 插入全局表数据

insert into cktest_all values(1,'zhang',18),(2,'li',22),(3,'zhao',23),(4,'qian',24),(5,'sun',25),(6,'wang',26),(7,'tian',27),(8,'he',28),(9,'zheng',29),(10,'dong',30);

-- 10.16.5.219服务 插入本地数据

insert into cktest_local values (14,'100',14),(15,'100',15);

-- 10.16.5.218服务 插入本地数据

insert into cktest_local values (11,'100',11),(12,'100',12),(13,'100',13);

查看数据

操作10.16.5.217 服务

-- 查询数据

T-ITARCH-DB-fff17c52 :) SELECT * from cktest_local;

SELECT *

FROM cktest_local

Query id: 6a99ef9a-a394-40d0-8f81-4325ec9401b2

┌─id─┬─name──┬─age─┐

│ 1 │ zhang │ 18 │

│ 8 │ he │ 28 │

└────┴───────┴─────┘

2 rows in set. Elapsed: 0.003 sec.

-- 查询全局表数据

T-ITARCH-DB-fff17c52 :) SELECT * from cktest_all;

SELECT *

FROM cktest_all

Query id: 389b1827-0c89-468e-ad08-bb0177228216

┌─id─┬─name──┬─age─┐

│ 1 │ zhang │ 18 │

│ 8 │ he │ 28 │

└────┴───────┴─────┘

┌─id─┬─name─┬─age─┐

│ 11 │ 100 │ 11 │

│ 12 │ 100 │ 12 │

│ 13 │ 100 │ 13 │

└────┴──────┴─────┘

┌─id─┬─name──┬─age─┐

│ 2 │ li │ 22 │

│ 3 │ zhao │ 23 │

│ 6 │ wang │ 26 │

│ 9 │ zheng │ 29 │

│ 10 │ dong │ 30 │

└────┴───────┴─────┘

┌─id─┬─name─┬─age─┐

│ 4 │ qian │ 24 │

│ 5 │ sun │ 25 │

│ 7 │ tian │ 27 │

└────┴──────┴─────┘

┌─id─┬─name─┬─age─┐

│ 14 │ 100 │ 14 │

│ 15 │ 100 │ 15 │

└────┴──────┴─────┘

15 rows in set. Elapsed: 0.046 sec.

操作10.16.5.218 服务

-- 查询数据

T-ITARCH-DB-acf73179 :) SELECT * from cktest_local;

SELECT *

FROM cktest_local

Query id: 42a85aef-e620-4d08-b69c-43f988d08926

┌─id─┬─name──┬─age─┐

│ 2 │ li │ 22 │

│ 3 │ zhao │ 23 │

│ 6 │ wang │ 26 │

│ 9 │ zheng │ 29 │

│ 10 │ dong │ 30 │

└────┴───────┴─────┘

┌─id─┬─name─┬─age─┐

│ 11 │ 100 │ 11 │

│ 12 │ 100 │ 12 │

│ 13 │ 100 │ 13 │

└────┴──────┴─────┘

8 rows in set. Elapsed: 0.003 sec.

-- 查询全局表数据

T-ITARCH-DB-acf73179 :) SELECT * from cktest_all;

SELECT *

FROM cktest_all

Query id: 8758fb94-2e8b-48e3-ae33-0a473bfde1db

┌─id─┬─name─┬─age─┐

│ 11 │ 100 │ 11 │

│ 12 │ 100 │ 12 │

│ 13 │ 100 │ 13 │

└────┴──────┴─────┘

┌─id─┬─name──┬─age─┐

│ 2 │ li │ 22 │

│ 3 │ zhao │ 23 │

│ 6 │ wang │ 26 │

│ 9 │ zheng │ 29 │

│ 10 │ dong │ 30 │

└────┴───────┴─────┘

┌─id─┬─name──┬─age─┐

│ 1 │ zhang │ 18 │

│ 8 │ he │ 28 │

└────┴───────┴─────┘

┌─id─┬─name─┬─age─┐

│ 14 │ 100 │ 14 │

│ 15 │ 100 │ 15 │

└────┴──────┴─────┘

┌─id─┬─name─┬─age─┐

│ 4 │ qian │ 24 │

│ 5 │ sun │ 25 │

│ 7 │ tian │ 27 │

└────┴──────┴─────┘

操作10.16.5.219 服务

-- 查询数据

T-IS-APP-ae5e913b :) SELECT * from cktest_all;

SELECT *

FROM cktest_all

Query id: a13d570d-0395-463a-83dd-98d667ab37ef

┌─id─┬─name─┬─age─┐

│ 14 │ 100 │ 14 │

│ 15 │ 100 │ 15 │

└────┴──────┴─────┘

┌─id─┬─name─┬─age─┐

│ 4 │ qian │ 24 │

│ 5 │ sun │ 25 │

│ 7 │ tian │ 27 │

└────┴──────┴─────┘

┌─id─┬─name──┬─age─┐

│ 2 │ li │ 22 │

│ 3 │ zhao │ 23 │

│ 6 │ wang │ 26 │

│ 9 │ zheng │ 29 │

│ 10 │ dong │ 30 │

└────┴───────┴─────┘

┌─id─┬─name─┬─age─┐

│ 11 │ 100 │ 11 │

│ 12 │ 100 │ 12 │

│ 13 │ 100 │ 13 │

└────┴──────┴─────┘

┌─id─┬─name──┬─age─┐

│ 1 │ zhang │ 18 │

│ 8 │ he │ 28 │

└────┴───────┴─────┘

15 rows in set. Elapsed: 0.048 sec.

-- 查询全局表数据

T-IS-APP-ae5e913b :) SELECT * from cktest_local;

SELECT *

FROM cktest_local

Query id: 8d32646a-b2d5-4d00-acdf-69fba61a6706

┌─id─┬─name─┬─age─┐

│ 4 │ qian │ 24 │

│ 5 │ sun │ 25 │

│ 7 │ tian │ 27 │

└────┴──────┴─────┘

┌─id─┬─name─┬─age─┐

│ 14 │ 100 │ 14 │

│ 15 │ 100 │ 15 │

└────┴──────┴─────┘

5 rows in set. Elapsed: 0.003 sec.

参考链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: