ClickHouse集群安装与部署

news2024/11/25 16:33:47

这是一篇关于讲解如何安装部署ClickHouse集群的参考文章,希望通过此,大家都能了解ClickHouse,都能学会安装配置ClickHouse以及它的使用。

什么是ClickHouse?

ClickHouse是Yandex于2016年开源的列式存储数据库(DBMS),主要用于在线分析处理查询(OLAP),能够使用SQL查询实时生成分析数据报告。

集群安装

1.准备工作

准备3台Linux操作系统的虚拟机用于部署集群,上传ClickHouse集群相关安装包至每台服务器上的指定目录,这边以/data/soft目录为例。
image.png

1.1 修改文件打开限制

在/etc/security/limits.conf、/etc/security/limits.d/20-nproc.conf这2个文件调整和追加如下内容:
命令:vim /etc/security/limits.conf

# End of file

#* hard nofile 65536
#* soft nofile 65536
* soft nofile 655365
* hard nofile 655365
* soft nproc 128000
* hard nproc 128000

*表示所有用户都设置
命令:vim /etc/security/limits.d/20-nproc.conf
修改为:

*          soft    nproc     128000
root       soft    nproc     unlimited

1.2 禁用SELinux

命令:vim /etc/selinux/config
image.png

1.3 关闭防火墙

检查是否安装防火墙
命令:rpm -qa|grep iptables

查看防火墙状态
命令:systemctl status firewalld.service


关闭防火墙
命令:
systemctl disable firewalld.service
systemctl stop firewalld.service

2.单机安装

参考网址
官网:https://clickhouse.yandex/
下载地址:http://repo.red-soft.biz/repos/clickhouse/stable/el6/
中文参考: https://clickhouse.tech/docs/zh/

2.1 上传安装文件至/data/soft

clickhouse-client-20.8.11.17-1.el7.x86_64.rpm        
clickhouse-server-20.8.11.17-1.el7.x86_64.rpm
clickhouse-common-static-20.8.11.17-1.el7.x86_64.rpm  
clickhouse-server-common-20.8.11.17-1.el7.x86_64.rpm

2.2 安装rpm

命令:rpm -ivh clickhouse-server-common-20.8.11.17-1.el7.x86_64.rpm
命令:rpm -ivh clickhouse-common-static-20.8.11.17-1.el7.x86_64.rpm
命令:rpm -ivh clickhouse-server-20.8.11.17-1.el7.x86_64.rpm
命令:rpm -ivh clickhouse-client-20.8.11.17-1.el7.x86_64.rpm

2.3 Clickhouse目录结构

1./etc/clickhouse-server : 服务端的配置文件目录,包括全局配置config.xml 和用户配置users.xml,其中如需要外网访问则需要打开config.xml中更改配置
其中需要放开<listen_host>::</listen_host>的注释即可
2. /var/lib/clickhouse/ : 默认的数据存储目录,通常会修改,将数据保存到大容量磁盘路径中
3. /var/log/clickhouse-server/clickhouse-server.log : 默认保存日志的目录,通常会修改,将数据保存到大容量磁盘路径中
注:;<tmp_path></tmp_path>;<user_files_path></user_files_path> 等存储目录都可以自行修改

2.4 Clickhouse用户管理

Clickhouse用户管理在/etc/clickhouse-server/users.xml配置
在中添加对应用户信息即可
可以定义属性并在用户上关联:
比如定义只读用户可以先在profiles添加

<readonly>
<readonly>1</readonly>
</readonly>
<max_memory_usage>86000000000</max_memory_usage> <max_partitions_per_insert_block>200</max_partitions_per_insert_block>

3.集群安装

3.1 分片与副本

在实际应用中,为了缓解单机压力和数据安全,项目上都会采用集成安装,集成安装模式即采用多分片多副本模式。副本(replica) 是指两个相同数据的表或表一部分,作用是为了数据备份与安全分片(shard) 是指不同的服务器存储同一张表的不同部分,作用是为了水平切分表,缓解单一服务的压力。

3.2 多实例部署

按2.单机安装,分别在三台服务器安装clickhouse
注:只有三台机器,多一个实例相当于多一台机器,下面以单机器多实例部署为例。Clickhouse集成管理采用zookeeper servers管理,本文采用hadoop自带zookeeper servers,没有zookeeper servers服务请自行安装。
每台机器增加一个实例
将/etc/clickhouse-server/config.xml文件拷贝一份改名
命令:cp /etc/clickhouse-server/config.xml /etc/clickhouse-server/config_replica.xml
编辑/etc/clickhouse-server/ config_replica.xml更改以下内容将两个服务区分开来(加粗为源文件值)

<log>/var/log/clickhouse-server/clickhouse-server-replica.log</log> 
**<!--/var/log/clickhouse-server/clickhouse-server.log-->**
<errorlog>/var/log/clickhouse-server/clickhouse-server-replica.err.log</errorlog> 
**<!--/var/log/clickhouse-server/clickhouse-server.err.log-->**
<http_port>8124</http_port>  **<!--8123-->**
<tcp_port>9012</tcp_port>   **<!--9000-->**
<mysql_port>9005</mysql_port>  **<!--9004-->**
<interserver_http_port>9010</interserver_http_port> **<!--9009-->**
<path>/data/clickhouse-replica/</path>  **<!--/data/clickhouse/-->**
<tmp_path>/data/clickhouse-replica/tmp/</tmp_path>  <!--/data/clickhouse/tmp/-->
<user_files_path>/data/clickhouse-replica/user_files/</user_files_path>  
**<!--/data/clickhouse /user_files/-->**
<access_control_path>/data/clickhouse-replica/access/</access_control_path> 
**<!--/data/clickhouse/access/-->**
<include_from>/etc/clickhouse-server/metrika_replica.xml</include_from>    
**<!--/etc/clickhouse-server/metrika.xml-->**

3.3 创建对应目录并更改所属用户组

命令:
mkdir -p /data/ clickhouse-replica
chown -R clickhouse:clickhouse /data/clickhouse-replica

3.4 增加实例对应的服务启动脚本

命令:
cp /etc/init.d/clickhouse-server /etc/init.d/clickhouse-server-replica
vim /etc/init.d/clickhouse-server-replica
调整内容如下:
调整后内容:
CLICKHOUSE_CONFIG= C L I C K H O U S E C O N F D I R / c o n f i g r e p l i c a . x m l C L I C K H O U S E P I D F I L E = " CLICKHOUSE_CONFDIR/config_replica.xml CLICKHOUSE_PIDFILE=" CLICKHOUSECONFDIR/configreplica.xmlCLICKHOUSEPIDFILE="CLICKHOUSE_PIDDIR/$PROGRAM-replica.pid"

调整前内容:
CLICKHOUSE_CONFIG= C L I C K H O U S E C O N F D I R / c o n f i g . x m l C L I C K H O U S E P I D F I L E = " CLICKHOUSE_CONFDIR/config.xml CLICKHOUSE_PIDFILE=" CLICKHOUSECONFDIR/config.xmlCLICKHOUSEPIDFILE="CLICKHOUSE_PIDDIR/$PROGRAM.pid"

3.4 Clickhouse集群配置

配置6个metrika*.xml (三个metrika.xml,三个metrika_replica.xml)并上传至/etc/clickhouse-server/
以下为metrika*.xml 共同部分

<yandex>
<clickhouse_remote_servers>
    <xxxx>  <!—集群名字,可自定义-->
	    <shard>
            <internal_replication>true</internal_replication>
            <replica>
                <host>xxx.xxx.xxx.100</host>
                <port>9000</port>
            </replica>
			
			<replica>
                <host>xxx.xxx.xxx.101</host>
                <port>9012</port>
            </replica>
        </shard>
        <shard>
		    <weight>1</weight>
            <internal_replication>true</internal_replication>
            <replica>
                <host>xxx.xxx.xxx.101</host>
                <port>9000</port>
            </replica>
			
			<replica>
                <host>xxx.xxx.xxx.102</host>
                <port>9012</port>
            </replica>
        </shard>
        <shard>
            <replica>
                <internal_replication>true</internal_replication>
                <host>xxx.xxx.xxx.102</host>
                <port>9000</port>
            </replica>
			<replica>
                <internal_replication>true</internal_replication>
                <host>xxx.xxx.xxx.100</host>
                <port>9012</port>
            </replica>
        </shard>
        
    </xxxx>
</clickhouse_remote_servers>

<!-- zookeeper-servers 采用HADOOP插件中的zookeeper-->
<zookeeper-servers>
  <node index="1">
    <host>xxx.xxx.xxx.xxx</host>
    <port>2181</port>
  </node>

  <node index="2">
    <host>xxx.xxx.xxx.xxx</host>
    <port>2181</port>
  </node>
  <node index="3">
    <host>xxx.xxx.xxx.xxx</host>
    <port>2181</port>
  </node>
</zookeeper-servers>
<!—差异部分,请按下文提示自行修改-->
<macros>
        <layer>01</layer>
        <shard>01</shard>
        <replica>cluster01-01-1</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>

以下为不同部分
xxx.xxx.xxx.100实例1(端口:9000)对应metrika.xml调整:

01 <!—第一个集成–>
01<!—第一个分片–>
cluster01-01-1 <!—自命名–>

xxx.xxx.xxx.100 实例2(端口:9012)对应metrika_replica.xml调整:

01 <!—第一个集成–>
03<!—第三个分片–>
cluster01-03-2 <!—自命名–>

xxx.xxx.xxx.101(端口:9000)对应metrika.xml调整:

01 <!—第一个集成–>
02<!—第二个分片–>
cluster01-02-1 <!—自命名–>

xxx.xxx.xxx.101实例2(端口:9012)对应metrika_replica.xml调整:

01 <!—第一个集成–>
01<!—第一个分片–>
cluster01-01-2 <!—自命名–>

xxx.xxx.xxx.102实例1(端口:9000)对应metrika.xml调整:

01 <!—第一个集成–>
03<!—第三个个分片–>
cluster01-03-1 <!—自命名–>

xxx.xxx.xxx.102实例2(端口:9012)对应metrika_replica.xml调整:

01 <!—第一个集成–>
02<!—第二个分片–>
cluster01-02-2 <!—自命名–>

注:其中layer是双级分片设置,这里是01;然后是shard表示分片编号;最后是replica是副本标识。
这里使用了cluster{layer}-{shard}-{replica}的表示方式,比如cluster01-02-1表示cluster01集群的02分片下的1号副本,这样既非常直观的表示又唯一确定副本。
至此三节点6实例已完成配置 通过以下脚本可以启动各实例
实例1服务启动命令:service clickhouse-server start
实例2服务启动命令:service clickhouse-server-replica start

4.chproxy安装

4.1 什么是chproxy?

从名字就能了解ch代表clickhouse,proxy为代理,即专为clickhouse使用的代理。在clickhouse集群中,每一台机器都是单独的实例,我们可以使用其中的一台作为查询机器。此时如何更好的完成负载均衡是我们所关注的,chproxy即是这么一个工具。选择一台服务器安装该程序即可。

4.1 安装包准备

mkdir -p /data/chproxy
上传安装文件 chproxy-linux-amd64-1.13.0.tar.gz
解压 tar -xzvf chproxy-linux-amd64-1.13.0.tar.gz

4.2 配置chproxy

创建config文件目录 mkdir config
创建config.yml文件并上传,配置中的用户名密码请自行设置并与clickhouse中的用户名密码相对应。

server:
  http:
      listen_addr: ":8125"  #对外暴露的端口
      allowed_networks: ["xx.xx.0.0/16","127.0.0.0/8","xx.xx.0.0/16"] #网络访问控制
      read_timeout: 5m
      write_timeout: 5m
      idle_timeout: 20m
users:
  - name: "root" #访问时需要写的用户名
    to_cluster: "distributed-write" #当前用户对应的集群
    to_user: "root"
    password: "xxx"
  - name: "queryonly"
    to_cluster: "distributed-read"
    to_user: "queryonly"
    password: "xxx" 
clusters:
  - name: "distributed-write"
    replicas:
      - name: "replica1"
        nodes: ["xxx.xxx.xxx.100:8123", "xxx.xxx.xxx.101:8123", "xxx.xxx.xxx.102:8123"]
      - name: "replica2"
        nodes: ["xxx.xxx.xxx.100:8124", "xxx.xxx.xxx.101:8124", "xxx.xxx.xxx.102:8124"]
    users:
      - name: "root"
        password: "xxx"
  - name: "distributed-read"
    replicas:
      - name: "replica1"
        nodes: ["xxx.xxx.xxx.100:8123", "xxx.xxx.xxx.101:8123", "xxx.xxx.xxx.102:8123"]
      - name: "replica2"
        nodes: ["xxx.xxx.xxx.100:8124", "xxx.xxx.xxx.101:8124", "xxx.xxx.xxx.102:8124"]
    users:
      - name: "queryonly"
        password: "xxx"
caches:
  - name: "shortterm"
    dir: "/data/chproxy/cache/shortterm"
    max_size: 300Mb
    expire: 100s

创建日志目录 mkdir logs
启动命令:nohup ./chproxy-linux-amd64 -config=./config/config.yml >> ./logs/chproxy.out 2>&1 &
ps -ef | grep chproxy 查看进程是否运行
至此,安装全部完成,可以通过连接chproxy服务器8125端口连接。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/616408.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【String字符串之前篇】

目录 1.什么是字符串2.常用字符串的写法3.String字符串的底层原理3.字符串的比较3.1双等号和equals3.2 compareTo(String s) 方法3.3compareToIgnoreCase方法 4.String查找方法5.字符串的转换5.1字符串与数字转换5.2 大小写转换5.3 字符串与数组的转换 1.什么是字符串 对于&quo…

项目经理提升领导力的6个重点

1、以身作则 作为团队的领导者&#xff0c;要想更好地调动团队的积极性&#xff0c;最直接简单的方法就是以身作则&#xff0c;做团队的榜样。在要求团队成员之前&#xff0c;自己先做好&#xff0c;关键时候需身先士卒。 项目经理提升领导力的6个重点 2、共同目标 项目团队的共…

DataSecurity Plus:数字化时代的数据安全护卫者

引言&#xff1a; 在数字化时代&#xff0c;数据成为企业和个人生活中不可或缺的资产。然而&#xff0c;随之而来的是日益增长的数据安全威胁。为了保护数据的机密性、完整性和可用性&#xff0c;数据安全解决方案——DataSecurity Plus应运而生。本文将深入探讨DataSecurity …

嵌入式Android系统耳机驱动基本知识

开发项目的时候&#xff0c;接手的第一个驱动就是android平台下耳机的插拔检测和按键检测​。这部分涉及的硬件知识比较简单&#xff0c;但是软件上对中断的处理&#xff0c;软件检测的鲁棒性&#xff0c;都有比较高的要求&#xff0c;涉及到驱动开发中经常使用的中断申请&…

Linux下Python脚本的编写解析fio测试log(四)

在我们平常的测试盘的过程中,fio是一款业界最为通用的工具&#xff0c;通过Fio可以只知道一个盘具体的带宽,iops,延迟等等.比如下面这段fio的log 这里边需要拿出log里的一些参数 做成表格 如下&#xff1a; 下面说下如何用Python解析log并做成表格 1 同样是用到Python中文件…

【裸机驱动LED】使用汇编代码驱动LED(二)—— 汇编代码编写篇

上一部分我们已经整理出了所需寄存器的基地址、初始值&#xff0c;因为我们要给寄存器赋值&#xff0c;其实就是向指定地址写入内容。下面所有用到的基地址和初始化值都在上一篇总结好了。 【裸机驱动LED】使用汇编代码驱动LED&#xff08;一&#xff09;—— 寄存器解析篇_仲…

Nginx+Tomcat负载均衡,动静分离

文章目录 一.Nginx应用1.1Nginx负载均衡实现原理1.2Nginx动静分离实现原理 二.NginxTomcat负载均衡、动静分离&#xff08;七层实例&#xff09; 一.Nginx应用 Nginx是一款非常优秀的HTTP服务软件 支持高达50000个并发连接数的响应拥有强大的静态资源处理能力运行稳定内存、C…

spring.factories

Spring Boot 如何管理第三方Bean 首先抛出一个问题&#xff1a;如果想要被Spring容器管理的Bean的路径不再Spring Boot 的包扫描路径下&#xff0c;怎么办呢&#xff1f;也就是如何去加载第三方的Bean 呢&#xff1f;换句话说:在 Spring Boot 项目中&#xff0c;如果你想要被 …

使用 PicX 创建免费的图床神器

写博客文章时&#xff0c;图片的上传和存放是一个问题&#xff0c;我们也许会在不同的平台发布同一篇文章&#xff0c;这样一来每个平台都要上传图片。为了解决这些问题&#xff0c;做法是把图片统一上传到一个在线的第三方静态资源库中&#xff0c;我们把这个资源库称为图床。…

【博学谷学习记录】超强总结,用心分享丨人工智能 AI项目 ROUGE评估算法简记

目录 ROUGE核心思想评价标准ROUGE-NROUGE-L ROUGE ROUGE的全称是Recall-Oriented Understudy for Gisting Evaluation, 是一种基于召回率指标的评价算法. 核心思想 由多个专家分别生成人工摘要, 构成标准摘要集. 将模型生成的自动摘要和人工摘要做对比, 通过统计两者之间重叠…

C++ 结构体声明(定义)以及不同写法的差异

定义方式总结 在C中&#xff0c;结构体&#xff08;struct&#xff09;的定义主要有多种形式&#xff0c;&#xff0c;你还可以在定义结构体时直接初始化它的成员&#xff0c;或者在定义后创建结构体的实例。以下是一些例子&#xff1a; 定义并初始化结构体&#xff1a; str…

gitlab基本操作

1.gitlab 基本操作 git branch // 查看分支 git branch dev //新建dev 分支 git checkout dev //切换到dev 分支修改 **** git status // 查看哪些文件被修改 git add . //修改了文件需要提交添加上去&#xff08;注意 . 点号&#xff09; git commit -m “update”…

重温数据结构与算法之A star 算法

文章目录 前言一、原理1.1 网格距离1.2 宽度优先搜索1.3 Dijkstra 算法1.4 最佳优先搜索1.5 A*算法 二、代码实现2.1 伪码2.2 python 实现2.3 可视化 三、优缺点分析3.1 优点3.2 缺点 参考 前言 A*(A-Star)算法是一种静态路网中求解最短路径有效的直接搜索方法&#xff0c;也是…

uniapp(三) 之 表单提交

更换UI库 经过我昨天仔细看了下ThorUI&#xff0c;里面有个会员组件&#xff0c;好像有用的组件都是会员组件一样&#xff0c;作为一个白嫖怪&#xff0c;我决定今天再换一个UI库 引入后&#xff0c;根据组件位置自行调整位置 好了现在使用UNI-UI了 但是我的语法是vue3,官网范…

Hadoop数据仓库的主要特征有哪些?

数据仓库(英语&#xff1a;Data Warehouse&#xff0c;简称数仓、DW),是一个用于存储、分析、报告的数据系统。数据仓库的目的是构建面向分析的集成化数据环境&#xff0c;分析结果为企业提供决策支持(Decision Support)。 数据仓库本身并不“生产”任何数据&#xff0c;其数据…

Nebula分布式集群

2022年9月15日18:47:38文章目录 Nebula1.安装:2.数据模型3.NebulaGraph 架构总览4.基本命令文档4.0 数据类型4.1 spaces图空间CREATE SPACEDROP SPACECLEAR SPACESHOW SPACESDESC SPACE 4.2 Tag4.3 edge4.4 点语句INSERT VERTEXDELETE VERTEXUPDATE VERTEXUPSERT VERTEX 4.5 边…

day11 -- 存储过程+触发器+事物处理

学习内容 什么是存储过程 如何使用存储过程 学习记录 存储过程 经常会有一个完整的操作需要多条语句才能完成。 此外&#xff0c;需要执行的具体语句及其次序也不是固定的&#xff0c;它们可能会根据条件而选择性的执行。 那应该怎么办呢&#xff1f;可以创建存储过程。 存储…

工业镜头分类、相关参数含义

一、工业镜头参数 1、焦距/后焦距 焦距是像方主面到像方焦点的距离。后焦距指光线离开镜头最后一片镜片表面到sensor感光面的距离&#xff0c;如8mm&#xff0c;16mm&#xff0c;25mm等&#xff1b; 焦距的大小决定着视角大小&#xff0c;焦距数值小&#xff0c;视角大&#…

4个月完成职位申请并CSC改派出国|新加坡南洋理工大学访学申请记

由于原访学国家签证被拒&#xff0c;O老师期望能申请手续便捷且容易通过签证的国家&#xff0c;最终我们成功申请到世界名校新加坡南洋理工大学的国家教育研究学院。从获得邀请函、办理CSC改派及派出、顺利签证直至出国等全套手续&#xff0c;仅仅4个月。 O老师背景&#xff1a…

腾讯应用宝 - 微下载

首次接触微下载这个概念&#xff0c;故简单记录一下 产品&#xff1a;微下载配置好了吗&#xff1f; Me&#xff1a; 嗯&#xff1f;什么微下载&#xff1f; 基础认知微下载是什么&#xff1f;微下载在哪里使用&#xff1f;微下载链接获取方式&#xff1f;个性化功能&#xff…