clickhouse单节点以及集群的安装
创始人
2024-02-20 18:07:51
0

安装

因为clickHouse很消耗cpu资源,所以需要修改:用户可打开的文件数量和最大进程数:

 vim /etc/security/limits.conf * soft nofile  65536
* hard nofile  65536
* soft nproc  131072
* hard nproc  131072//第一列代表用户用户组,*代表所有,正常应该是“用户名@用户组”
//第二列soft代表软限制(正常生效状态),hard代表硬限制(最大)
//第三列 nofile代表文件数量,nproc代表进程数

另外还需要在limits.d/20-nproc.conf 中修改配置,防止覆盖上述的配置

vim /etc/security/limits.d/20-nproc.conf * soft nofile  65536
* hard nofile  65536
* soft nproc  131072
* hard nproc  131072

使用ulimit -a,可以查看配置是否生效

安装相应的依赖

yum install -y libtoolyum install -y *unixODBC*

Centos取消SELINUX(linux的一种安全机制,非常强大,但是也非常麻烦),是内核级别的东西,必须重启,也可以设置为临时生效,等下次服务器维护重启,配置自然也生效了

vim /etc/selinux/config SELINUX=disabled

准备好安装包,官网:https://clickhouse.com/docs/en/install
21.7.3.14 链接:https://pan.baidu.com/s/1pCU41L4K2rUbQIZe6V8TjQ?pwd=qycr
提取码:qycr

全部安装
rpm -ivh *.rpm默认用户是:default密码:123456确认是否都安装成功
rpm -qa |grep clickhouse

rpm安装文件的位置

配置文件默认位置
cd /etc/clickhouse-server/默认lib文件
cd /var/lib/clickhouse/默认bin文件
cd /usr/bin默认log文件:
cd /var/log/clickhouse-server数据文件:
cd /var/lib/clickhouse/

clickHouse默认只有本机可以访问,把下图第一行注释去掉,就代表不做限制
在这里插入图片描述
启动:下面两种启动方式都可以

 systemctl status clickhouse-server.service clickhouse  status重启clickhouse restartclickhouse-client --password

clickhouse默认就是开机自启的

单机版可以不用启动zk,但是集群是需要zk来调度的

副本

​ 为了保证高可用,就需要做集群

​ 在clickhouse集群中,没有主从一说,所有的节点都是主,相互之间互为副本,某一个节点的数据发生变化,就会提交写日志给zookeeper,其他节点就会从zookeeper监听到数据发生了变化,然后从数据发生变化的节点同步数据

接入zookeeper

可以在/etc/clickhouse-server/config.xml 中直接修改配置
在这里插入图片描述
根据自己的zookeeper更改为:

vim /etc/clickhouse-server/config.xml192.168.158.1582181192.168.158.1592181192.168.158.1602181

给不同的clickhouse节点分别配置本机ip

vim /etc/clickhouse-server/config.xml192.168.158.155
192.168.158.156
192.168.158.157

副本间的同步默认是9009端口,需要开放端口

9009firewall-cmd --zone=public --add-port=9009/tcp --permanentfirewall-cmd --reload

副本只针对合并树家族

CREATE TABLE test (name String,age UInt8 TTL ctime+interval 10 SECOND,ctime Date
) ENGINE = ReplicatedMergeTree('/clickhouse/table/01/test','test-01')
ORDER BY (name,ctime);CREATE TABLE test (name String,age UInt8 TTL ctime+interval 10 SECOND,ctime Date
) ENGINE = ReplicatedMergeTree('/clickhouse/table/01/test','test-02')
ORDER BY (name,ctime);-- 两张表路径需要一样,名字必须不一样
-- ReplicatedMergeTree(路径,名称)

建表成功,给其中一张表插入数据,另一张会自动同步

分片集群

副本可以提高数据的可用性,降低了数据丢失的风险,但是服务器需要容纳全量的数据,如果数据量很大或者想要横向扩展,就需要分片了

Distributed分布式表,表引擎本身不存储数据,类似于中间件,通过分布式逻辑来写入、分发和路由来操作多台节点不同分片的分布式数据,是表级别的

内部同步

internal_replication(内部同步)

  • 如果内部同步为true,客户端发出命令,向分布式表写入,分布式表通知分片写入,然后由分片自己向自己的副本同步
  • 如果内部同步为false,客户端发出命令,向分布式表写入,分布式表通知分片和副本写入,这种情况有可能出现副本间的数据一致性的问题

客户端发出读请求,优先选择errors_count(错误数)小的副本,如果错误数相同,还有:随机、顺序或者host名称近似等方式

分片,下面是资源不够用的情况,只有3个节点,没有副本

vim /etc/clickhouse-server/config.xml
	   true 

中编辑

#默认的通信端口

9000
 true192.168.158.1559000default123456true192.168.158.1569000default123456true192.168.158.1579000default123456
	01clickhouse-1-302clickhouse-2-303clickhouse-3-1
firewall-cmd --zone=public --add-port=9000/tcp --permanentfirewall-cmd --reload

建表语句

create table 表名 on cluster 集群名 (id UInt32,sku_id String,total_amount Decimal(16,2),create_time Datetime
) engine 
-- 这里的两个变量对应配置文件中的变量
=ReplicatedMergeTree('/clickhouse/tables/{shard}/st_order_mt','{replica}')partition by toYYYYMMDD(create_time)primary key (id)order by (id,sku_id);-- on cluster 会在指定的集群建立本地表create table st_order_mt on cluster colony_test (id UInt32,sku_id String,total_amount Decimal(16,2),create_time Datetime
) engine 
=ReplicatedMergeTree('/clickhouse/tables/{shard}/st_order_mt','{replica}')partition by toYYYYMMDD(create_time)primary key (id)order by (id,sku_id);

先有本地表,再建立分布式表

create table st_order_mt_all2 on cluster colony_test
(id UInt32,sku_id String,total_amount Decimal(16,2),create_time Datetime
)engine = Distributed(colony_test,default, st_order_mt,hiveHash(sku_id));-- 参数含义:
-- Distributed(集群名称,库名,本地表名,分片键)
-- 分片键必须是整型数字,所以用 hiveHash(取hash值) 函数转换,也可以 rand()

然后向分布式表插入数据

insert into st_order_mt_all2 values
(201,'sku_001',1000.00,'2020-06-01 12:00:00') ,
(202,'sku_002',2000.00,'2020-06-01 12:00:00'), 
(203,'sku_004',2500.00,'2020-06-01 12:00:00'),
(204,'sku_002',2000.00,'2020-06-01 12:00:00'),
(205,'sku_003',600.00,'2020-06-02 12:00:00');

可以看到数据会根据分片的键,插入到了不同的本地表中

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
【Ctfer训练计划】——(三... 作者名:Demo不是emo  主页面链接:主页传送门 创作初心ÿ...