赞
踩
以三台服务器为例,做3分片0副本部署
主机 | 端口 | 备注 |
---|---|---|
10.16.5.217 | 9000 | 1分片,0副本 |
10.16.5.218 | 9000 | 1分片,0副本 |
10.16.5.219 | 9000 | 1分片,0副本 |
(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
注:在安装过程中会出现密码输入,可根据需求进行设置
(在三台服务器同时进行)
# 数据目录
mkdir /data/clickhouse
# 日志目录
mkdir /data/clickhouse/log/
# 配置文件
touch /etc/clickhouse-server/metrika.xml
(vim /etc/clickhouse-server/config.xml)
<!-- 修改 --> <path>/data/clickhouse/</path> <tmp_path>/data/clickhouse/tmp/</tmp_path> <log>/data/clickhouse/log/clickhouse-server.log</log> <errorlog>/data/clickhouse/log/clickhouse-server.err.log</errorlog> <listen_host>::1</listen_host> <listen_host>0.0.0.0</listen_host> <user_files_path>/data/clickhouse/user_files/</user_files_path> <user_directories> <local_directory> <path>/data/clickhouse/access/</path> </local_directory> </user_directories> <!-- incl="remote_servers" 与 metrika.xml 标签对应 --> <remote_servers incl="remote_servers"> <!-- 添加incl="remote_servers",清空内容 --> </remote_servers> <format_schema_path>/data/clickhouse/format_schemas/</format_schema_path> <!-- 添加 --> <zookeeper incl="zookeeper-servers" optional="true"></zookeeper> <include_from>/etc/clickhouse-server/metrika.xml</include_from> <macros incl="macros" optional="true"></macros>
(vim /etc/clickhouse-server/metrika.xml 三台服务器有区别)
<yandex> <!--集群分片副本配置 3分片1副本 --> <remote_servers> <!-- ck_cluster是我自己建的集群名 --> <ck_cluster> <!-- 第1个分片 --> <shard> <!-- 是否写入1副本,然后集群间数据同步 默认为false--> <internal_replication>true</internal_replication> <!-- 1分片的1副本 --> <replica> <host>10.16.5.217</host> <port>9000</port> </replica> </shard> <shard> <internal_replication>true</internal_replication> <replica> <host>10.16.5.218</host> <port>9000</port> </replica> </shard> <shard> <internal_replication>true</internal_replication> <replica> <host>10.16.5.219</host> <port>9000</port> </replica> </shard> </ck_cluster> </remote_servers> <!--zookeeper配置--> <zookeeper-servers> <node index="1"> <host>10.16.5.217</host> <port>2181</port> </node> <node index="2"> <host>10.16.5.218</host> <port>2181</port> </node> <node index="3"> <host>10.16.5.219</host> <port>2181</port> </node> </zookeeper-servers> <!--压缩策略--> <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> <!-- 本机绑定地址 --> <networks> <ip>::/0</ip> </networks> <!-- 注:macros配置三台服务器不同 --> <!-- 10.16.5.217 --> <!-- 配置分片macros变量,在用client创建表的时候回自动带入 --> <macros> <layer>ck_cluster</layer> <!-- 集群标识 上述定义的集群名--> <shard>01</shard> <!-- 集群分片标识 --> <replica>cluster01</replica> <!--集群副本标识 当前集群节点的名字或者IP --> </macros> <!-- 10.16.5.218 --> <macros> <layer>ck_cluster</layer> <shard>02</shard> <replica>cluster02</replica> </macros> <!-- 10.16.5.219 --> <macros> <layer>ck_cluster</layer> <shard>03</shard> <replica>cluster03</replica> </macros> </yandex>
标签解释:
<ck_cluster>
: cluster名称,任意填写,在后面通过这个名字引用如 on cluster ck_cluster
<shard>
:分片,有几个分片就配置几个<shard>
标签
<replica>
:副本,有几个副本就有几个<replica>
标签.
( 三台服务器同样操作)
chown -R clickhouse:clickhouse /data/clickhouse/
chown -R clickhouse:clickhouse /etc/clickhouse-server/metrika.xml
chown -R clickhouse:clickhouse /etc/clickhouse-server/config.xml
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服务为了副本和分布式DDL查询执行使用ClickHouse Keeper协调系统
无需额外安装,安装clickhouse时已经携带,只需配置即可!
(三台服务器同样操作)
# 创建clickhouse-keeper数据存放目录
mkdir /data/clickhouse-keeper
# 赋予权限
chown -R clickhouse:clickhouse /data/clickhouse-keeper
(三台服务器同样操作,vim /etc/clickhouse-server/config.xml)
<!-- 包裹在 <clickhouse></clickhouse> 标签中 --> <!-- 添加 --> <keeper_server> <!-- 与metrika.xml文件内zookeeper-servers的port一致 --> <tcp_port>2181</tcp_port> <!-- 注:server_id 配置三台服务器不同 --> <!-- 10.16.5.219、10.16.5.218与10.16.5.217配置的其它相同,只需更改此项 --> <server_id>1</server_id> <log_storage_path>/data/clickhouse-keeper/coordination/log</log_storage_path> <snapshot_storage_path>/data/clickhouse-keeper/coordination/snapshots</snapshot_storage_path> <coordination_settings> <operation_timeout_ms>10000</operation_timeout_ms> <session_timeout_ms>30000</session_timeout_ms> <raft_logs_level>trace</raft_logs_level> </coordination_settings> <raft_configuration> <server> <id>1</id> <hostname>10.16.5.217</hostname> <port>9444</port> </server> <server> <id>2</id> <hostname>10.16.5.218</hostname> <port>9444</port> </server> <server> <id>3</id> <hostname>10.16.5.219</hostname> <port>9444</port> </server> </raft_configuration> </keeper_server>
10.16.5.218、10.16.5.219服务器配置:
<!-- 10.16.5.218与10.16.5.217其它相同,只需更改此项 -->
<server_id>2</server_id>
<!-- 10.16.5.219与10.16.5.217其它相同,只需更改此项 -->
<server_id>3</server_id>
(1)正常重启clickhouse即可使用clickhouse-keeper
systemctl restart clickhouse-server.service # 重新启动服务
(2)检查clickhouse-keeper是否启动,通过telnet或nc在客户端端口向ClickHouse Keeper发出命令
echo mntr | nc localhost 2181
在默认情况下,创建多张副本表需要在不同服务器上进行创建,这是因为 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 表引擎需要和其他表引擎一起协同工作。
从上图可以看出一个表分为两个部分
_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() 随机函数的取值决定写入那个分片,
-- 删除分布式表
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);
-- 查询数据 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.
-- 查询数据 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 │ └────┴──────┴─────┘
-- 查询数据 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.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。