clickhouse运维篇(二):多机器手动部署ck集群

news2024/11/5 1:48:03

熟悉流程并且有真正部署需求可以看一下我的另一篇简化部署的文章,因为多节点配置还是比较麻烦的先要jdk、zookeeper,再ck,还有各种配置文件登录不同机器上手动改配置文件还挺容易出错的。
clickhouse运维篇(三):生产环境一键生成配置并快速部署ck集群

多机器手动部署ck集群

  • 1、 安装jdk
  • 2、 zookeeper集群搭建(选举机制,奇数节点部署)
  • 3、 clickhouse集群规划
  • 4、 clickhouse集群搭建
  • 5、 配置nginx代理
  • 6、 集群验证
  • 7、 分布式,本地表测试

1、 安装jdk

上传jdk安装包到各节点

1、解压安装包 (这里举例解压到/opt/jdk8u333)

2、 执行 sh setup.sh install

3、 修改环境变量

vi /etc/profile

vi /etc/profile

在文件末尾加

#java
export JAVA_HOME=/opt/jdk8u333
export CLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}
export PATH=$PATH:${JAVA_HOME}/bin

4、 执行指令生效

source /etc/profile

2、 zookeeper集群搭建(选举机制,奇数节点部署)

举例三个节点:

172.168.1.206

172.168.1.207

172.168.1.208

上传安装包到各节点

解压安装包(这里举例解压到/opt/app/zookeeper-3.7.2)

1、创建目录

mkdir /opt/app/zookeeper-3.7.2/zkData

2、 复制zoo_sample.cfg文件命名为 zoo.cfg

cp zoo_sample.cfg zoo.cfg

3、 在各个节点创建一个id(距离下边在206、207、208三个节点的zkData目录下分别创建)

echo 1 >/opt/app/zookeeper-3.7.2/zkData/myid
echo 2 >/opt/app/zookeeper-3.7.2/zkData/myid
echo 3 >/opt/app/zookeeper-3.7.2/zkData/myid

4、修改zoo.cfg文件

vi zoo.cfg

clientPort为16871

dataDir为上边创建的zkData

server.后边的1、2、3为机器节点id;

server.1=172.168.1.206:2888:3888

server.2=172.168.1.207:2888:3888

server.3=172.168.1.208:2888:3888

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/opt/app/zookeeper-3.7.2/zkData
clientPort=16871
server.1=172.168.1.206:2888:3888
server.2=172.168.1.207:2888:3888
server.3=172.168.1.208:2888:3888

5、 在其余节点重复以上操作,在bin目录下执行启动脚本

sh zkServer.sh start

6、 查看集群状态

./zkServer.sh status

说明集群搭建完成,172.168.1.208是主节点

3、 clickhouse集群规划

在这里插入图片描述

  1. 根据集群部署分配的服务器进行预先考虑

a. 需要多少个分片 【多少台机器多少个分片,最好一个机器不要多分片,会导致查询的负载不平衡,导致短筒效应 (保证分片数<=机器数最佳)】

b. 每个分片多少个副本 【默认同一个分片的副本不要在同一个机器上,不能起到容灾作用,一般情况一个分片内两个实例即可,一主一副】

  1. 同一个实例不能既是主分片又是副本分片,想要部署m分片每个分片内n个实例的集群就需要部署 m*n 个clickhouse实例。

  2. 例如,所以如果只有三台机器,想部署3分片每个分片2实例的集群就需要3*2=6个 实例【遵循上面1.a中 分片数<=机器数】。 如果机器1上有了shard1的分片,副本实例就最好启动在机器2或者机器3上【遵循上面1.b中 同一分片副本不在相同机器】
    在这里插入图片描述

4、 clickhouse集群搭建

举例三个节点:

172.168.1.206

172.168.1.207

172.168.1.208

上传安装包到各节点

1、解压安装包 (这里举例解压到/opt/app/clickhouse-23.4.2.9)

2、 修改配置文件,打开config目录

cd config
vi config.xml

3、 修改config.xml文件

设置clickhouse端口16860

打开所有地址监听

tcp端口默认9000(可以按需修改)

<http_port>16860</http_port>
<listen_host>::</listen_host>
<tcp_port>9000</tcp_port>

添加集群节点信息 【三机器两分片、每个分片两个实例的配置文件】

// clickhose xml需要修改的内容
    <remote_servers>
        <!-- 可自定义clickhouse集群名 -->
        <ck_cluster>
            <!-- 数据分片1  -->
            <shard>
                <internal_replication>true</internal_replication>
                <!-- 副本1 -->
                <replica>
                    <host>172.168.1.206</host>
                    <port>9000</port>
                    <user>default</user>
                    <password>my_password</password>
                </replica>
                <!-- 副本2 -->
                <replica>
                    <host>172.168.1.207</host>
                    <port>9000</port>
                    <user>default</user>
                    <password>my_password</password>
                </replica>
            </shard>
            <!-- 数据分片2  -->
            <shard>
                <internal_replication>true</internal_replication>
                <replica>
                    <host>172.168.1.207</host>
                    <port>9001</port>
                    <user>default</user>
                    <password>my_password</password>
                </replica>
                <replica>
                    <host>172.168.1.208</host>
                    <port>9000</port>
                    <user>default</user>
                    <password>my_password</password>
                </replica>
            </shard>

        </ck_cluster>
    </remote_servers>

    <macros>
        <shard>02</shard>
        <replica>replica_208</replica>
    </macros>

    <zookeeper>
        <!-- index内容为server.id -->
        <node index="1">
            <host>172.168.1.206</host>
            <port>16871</port>
        </node>
        <node index="2">
            <host>172.168.1.207</host>
            <port>16871</port>
        </node>
        <node index="3">
            <host>172.168.1.208</host>
            <port>16871</port>
        </node>
    </zookeeper>

		<!-- 如果一个机器上部署多个实例这几个端口不要冲突 -->
    <http_port>16860</http_port>
    <tcp_port>9000</tcp_port>
    <interserver_http_host>172.168.1.208</interserver_http_host>
		<interserver_http_port>9009</interserver_http_port>
    <http>
        <max_connections>1024</max_connections>
        <async_insert>1</async_insert> <!-- 启用异步插入 -->
    </http>

		<!-- vim下输入 /clickhouse-23.4  查找path相关tag是否配置正确		-->										<path>/opt/app/my_app-2.4/clickhouse-23.4.2.9/data/</path>
		  <format_schema_path>/opt/app/my_app-2.4/clickhouse-23.4.2.9/data/format_schemas/</format_schema_path>
		    <log>/opt/app/my_app-2.4/clickhouse-23.4.2.9/log/clickhouse-server/clickhouse-server.log</log>
		    <errorlog>/opt/app/my_app-2.4/clickhouse-23.4.2.9/log/clickhouse-server/clickhouse-server.err.log</errorlog>
		    <tmp_path>/opt/app/my_app-2.4/clickhouse-23.4.2.9/tmp/</tmp_path>
		    <user_files_path>/opt/app/my_app-2.4/clickhouse-23.4.2.9/data/user_files/</user_files_path>

4、修改users.xml文件

设置default账号的密码

<password>my_password</password>

5、其余节点重复以上步骤,然后启动服务(注意修改config.xml中的值)

/opt/app/my_app-2.4/clickhouse-23.4.2.9/bin/clickhouse server --config-file /opt/app/my_app-2.4/clickhouse-23.4.2.9/config/config.xml --pid-file /opt/app/my_app-2.4/clickhouse-23.4.2.9/clickhouse.pid --daemon

5、 配置nginx代理

编辑nginx配置文件底部加入clickhouse反向代理供web服务调用

$ vim  /opt/app/my_app-2.4/nginx/conf/my_app.conf

upstream clickhouse_cluster {
    server 172.168.1.206:16860;
    server 172.168.1.207:16860;
    server 172.168.1.207:16861;    
    server 172.168.1.208:16860;
}

# 新增的 ClickHouse 反向代理并配置相应的黑白名单策略, 入的流量应该是访问ck集群的流量,
# 所以应该是访问源的网段也就是my_app对应的网段或者ip
server {
    listen 1442;
    allow localhost;
	 allow 192.168.13.0/24;
	 allow 10.1.5.0/16;    
    deny all;

    location / {
        proxy_pass http://clickhouse_cluster;
    }
}

● nginx反向代理验证

[root@localhost ~]# curl localhost:1442
Ok.

6、 集群验证

这里使用dbever工具验证

1、执行sql,查看ck集群节点状态

SELECT * from system.clusters;

2、执行sql,查看zookeeper中/clickhouse的节点是否存在

SELECT * FROM system.zookeeper WHERE path = '/clickhouse';

如果截图如上则表示分布式集群部署成功
查看各个节点状态,关注最后一列可以看出各个节点的与集群的连接状况【比如第三行数字22就是实例与cluster连接有问题】

7、 分布式,本地表测试

  • 语句加on cluster ck_cluster 就是在所有实例上执行

创建一个表

-- 删除本地表
DROP TABLE IF EXISTS test_table_local on cluster ck_cluster SYNC;

-- 创建本地表
CREATE TABLE test_table_local ON CLUSTER ck_cluster
(
    `tenantId`        UInt64 CODEC (Delta(8), ZSTD(1)),
    `alarmId`         String,
    `grade`           Int32,
) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{uuid}/{shard}/audit_log_local', '{replica}');


-- 删除分布式表
DROP TABLE IF EXISTS test_table_all on cluster ck_cluster SYNC;
-- 创建分布式表
CREATE TABLE test_table_all ON CLUSTER ck_cluster as test_table_local ENGINE = Distributed('ck_cluster', 'default', 'test_table_local', rand());

分布式表测试

SELECT count(*) FROM test_table_all;

本地表测试

INSERT INTO test_table_local (id, name, grade) VALUES (1,'jack',60);

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

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

相关文章

RabbitMQ交换机类型

RabbitMQ交换机类型 1、RabbitMQ工作模型2、RabbitMQ交换机类型2.1、Fanout Exchange&#xff08;扇形&#xff09;2.1.1、介绍2.1.2、示例2.1.2.1、生产者2.1.2.2、消费者2.1.2.3、测试 2.2、Direct Exchange&#xff08;直连&#xff09;2.2.1、介绍2.2.2、示例2.2.2.1、生产…

MoonNet基准测试更新

基准测试 引言&#xff1a;为了展示MoonNet网络库支持的动态负载均衡功能&#xff0c;我进行了吞吐量测试&#xff0c;以突出其性能表现。由于该库的动态负载均衡策略包括动态线程调度&#xff0c;测试中的线程数变化是不稳定的。这种动态调整使得直接与其他库采用固定线程数的…

RHCE——笔记

nfs服务器 一、简介 NFS&#xff08;网络文件系统&#xff09; 允许网络中的计算机&#xff08;不同的计算机、不同的操作系统&#xff09;之间通过TCP/IP网络共享资源&#xff0c;主要在unix系列操作系统上使用。在NFS的应用中&#xff0c;本地NFS的客户端应用可以透明地读…

2023年SCRM系统排名分析及市场趋势解读

内容概要 当前&#xff0c;SCRM&#xff08;社交客户关系管理&#xff09;系统在企业运营中的重要性日益凸显&#xff0c;尤其是在快速发展的数字经济环境中。2023年的SCRM市场展现出多元化与专业化的趋势&#xff0c;不同企业在客户关系管理方面的需求各有不同&#xff0c;这…

上云管理之Git/GitHub/GitLab 详解(一)

上云管理之Git/GitHub/GitLab 详解(一&#xff09; 引言1. GIT软件安装2.初始化配置与提交代码2.1. 初始化配置2.2 本地仓库代码提交2.2.1 初始化仓库并提交代码2.2.2 再次提交已修改的代码2.2.3 文件夹层次结构代码提交 2.3 GIT 的文件状态 3.GIT 分支3.1. 分支的切换与删除3.…

10款录屏软件来助你视频回放!!

现在互联网的普及&#xff0c;实时在线视频交流已是家常便饭&#xff0c;有时我们需要进行视频回顾&#xff0c;这就需要借助录屏软件。不管是用于游戏录制、课程制作、教学培训还是项目汇报等&#xff0c; 一款好的录屏软件都能起到事半功倍的效果。今天&#xff0c;我就来跟大…

Python复习2

一、封装函数 #自己封装len函数 s1 "hello,python" print(f"s1的长度为{len(s1)}")def my_len(data):count0for i in data:count 1print(f"{data}的长度为{count}")my_len(s1) 二、容器的排序&#xff08;排序之后的结果都会变成列表&#xf…

利用EasyExcel实现简易Excel导出

目标 通过注解形式完成对一个方法返回值的通用导出功能 工程搭建 pom <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance&qu…

基于java+SpringBoot+Vue的校园资料分享平台设计与实现

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; Springboot mybatis Maven mysql5.7或8.0等等组成&#x…

VuePress文档初始化请求过多问题探讨

1. 背景 公司有部门使用VuePress 1.0搭建平台的帮助文档&#xff0c;前期文档不是很多&#xff0c;所以没有暴露出特别明显的问题。但随着文档的逐步迭代和内容的增多&#xff0c;出现了大量的并发请求&#xff0c;总共有218个请求&#xff0c;导致服务器带宽耗尽、响应速度下降…

入门 | Kafka数据使用vector消费到Loki中使用grafana展示

一、Loki的基本介绍 1、基本介绍 Loki 是由 Grafana Labs 开发的一款水平可扩展、高性价比的日志聚合系统。它的设计初衷是为了有效地处理和存储大量的日志数据&#xff0c;与 Grafana 生态系统紧密集成&#xff0c;方便用户在 Grafana 中对日志进行查询和可视化操作。 从架构…

C语言 运算符

时间&#xff1a;2024.11.4 一、学习内容 1、算数运算符&#xff08;加、减、乘、除法和取余&#xff09; 通用细节&#xff1a; 1.整数计算&#xff0c;结果一定是一个整数 2.小数计算&#xff0c;结果一定是一个小数 3.整数和小数计算&#xff0c;结果一定是一…

LLM | 论文精读 | AAAI | EarthVQA:向可查询地球迈进的多模态视觉问答研究

论文标题: EarthVQA: Towards Queryable Earth via Relational Reasoning-Based Remote Sensing Visual Question Answering 作者: Junjue Wang, Zhuo Zheng, Zihang Chen, Ailong Ma, Yanfei Zhong 期刊: The Thirty-Eighth AAAI Conference on Artificial Intelligence (AA…

总结拓展十五:SAP物料分割评估

一、概述 在SAP中&#xff0c;物料的分割评估是指&#xff0c;对同一个物料做不同的价值设置。即&#xff0c;根据不同的条件&#xff0c;核算其价格及记录价格的相关属性。 二、物料主数据设置 1、物料主数据-会计1视图 只有价格控制“V”可以分割评估。 2、设置评估类型…

ai翻唱部分步骤

模型部署 我是用的RVC进行的训练&#xff0c;也可以使用so-vits-svc。 通过百度网盘分享的文件&#xff1a;RVC-beta 链接&#xff1a;https://pan.baidu.com/s/1c99jR2fLChoqUFqf9gLUzg 提取码&#xff1a;4090 以Nvida显卡为例&#xff0c;分别下载“RVC1006Nvidia”和…

[综述笔记]Deep learning for brain disorder diagnosis based on fMRI images

论文网址&#xff1a;Deep learning for brain disorder diagnosis based on fMRI images - ScienceDirect 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向…

HarmonyOS:UIAbility组件概述

一、概述 UIAbility组件是一种包含UI的应用组件&#xff0c;主要用于和用户交互。 UIAbility的设计理念&#xff1a; 原生支持应用组件级的跨端迁移和多端协同。支持多设备和多窗口形态。 UIAbility划分原则与建议&#xff1a; UIAbility组件是系统调度的基本单元&#xff0c…

jeecgbootvue2菜单路由配置静态文件夹(public)下的html

需求:想要在菜单配置src/assets/iconfont/chart.html显示页面(目的是打包上线以后运维依然可以修改数据) 官网没有相关数据&#xff1a;菜单配置说明 JeecgBoot 开发文档 看云 问题现象: 我把文件放在src/assets/iconfont/chart.html然后在vue中作为 iframe 的 src 属性&am…

【Vue框架】基础语法练习(1)

其实更多知识点已经在Vue.js官网十分清楚了&#xff0c;大家也可以去官网进行更细节的学习 https://cn.vuejs.org/ 说明&#xff1a;目前最新是Vue3版本的&#xff0c;但是Vue2已经深得人心&#xff0c;所以就是可以支持二者合用。它们最大的区别就是Vue3是组合式API&#xf…

爬虫学习4

from threading import Thread#创建任务 def func(name):for i in range(100):print(name,i)if __name__ __main__:#创建线程t1 Thread(targetfunc,args("1"))t2 Thread(targetfunc, args("2"))t1.start()t2.start()print("我是诛仙剑")from …