Clickhouse集群部署(3分片1副本)

news2025/1/8 2:24:25

Clickhouse集群部署

3台Linux服务器,搭建Clickhouse集群3分片1副本模式

1、安装Java、Clickhouse、Zookeeper

dpkg -i clickhouse-client_23.2.6.34_amd64.deb
dpkg -i clickhouse-common-static_23.2.6.34_amd64.deb
dpkg -i clickhouse-server_23.2.6.34_amd64.deb
# 默认安装在/etc文件夹下,/etc/clickhouse-server /etc/clickhouse-client,傻瓜式安装即可

tar -zxvf apache-zookeeper-3.7.0-bin.tar.gz # zookeeper解压启动即可

2、修改Clickhouse配置文件config.xml,加入到clickhouse标签内,尽量是加入到主配置文件中,单独配置然后在包含进主配置,容易因为一些权限问题导致集群部署不成功

3、修改Zookeeper配置文件,zoo.cfg

4、重启Clickhouse、zookeeper

systemctl restart clickhouse-server

./ZkServer.sh stop/start

5、配置application-pro.yml

clickhouse:  # Clickhouse集群,3分片每个分片一个副本
  driver-class-name: ru.yandex.clickhouse.ClickHouseDriver #具体看pom文件中引用的是哪个
  jdbc-url: jdbc:clickhouse://192.168.3.19:8123,192.168.3.20:8123,192.168.3.21:8123/ck_cluster #集群名称
  username: jane
  password: 123456

hikari:
  connection-timeout: 20000
  maximum-pool-size: 60
  minimum-idle: 60
config.xml
<!--新增-->
	<!--ck集群节点-->
	<remote_servers>
		<!-- 集群名称,可以修改-->
		<ck_cluster>
			<!-- 配置三个分片, 每个分片对应一台机器, 为每个分片配置一个副本 -->
			<!--分片1-->
			<shard>
				<!-- 权重:新增一条数据的时候有多大的概率落入该分片,默认值:1 -->
				<weight>1</weight>
				<internal_replication>true</internal_replication>
				<replica>
					<host>192.168.3.19</host>
					<port>9000</port> <!-- 注意集群内部之间通讯用9000端口 -->
					<user>default</user>
					<password>Jane</password>
					<compression>true</compression>
				</replica>
			</shard>
			<!--分片2-->
			<shard>
				<weight>1</weight>
				<internal_replication>true</internal_replication>
				<replica>
					<host>192.168.3.20</host>
					<port>9000</port> <!-- 注意集群内部之间通讯用9000端口 -->
					<user>default</user>
					<password>Jane</password>
					<compression>true</compression>
				</replica>
			</shard>
			<!--分片3-->
			<shard>
				<weight>1</weight>
				<internal_replication>true</internal_replication>
				<replica>
					<host>192.168.3.21</host>
					<port>9000</port> <!-- 注意集群内部之间通讯用9000端口 -->
					<user>default</user>
					<password>Jane</password>
					<compression>true</compression>
				</replica>
			</shard>
		</ck_cluster>
	</remote_servers>

	<!--zookeeper相关配置-->
	<zookeeper>
		<node index="1">
			<host>192.168.3.19</host>
			<port>2181</port>
		</node>
		<node index="2">
			<host>192.168.3.20</host>
			<port>2181</port>
		</node>
		<node index="3">
			<host>192.168.3.21</host>
			<port>2181</port>
		</node>
	</zookeeper>

	<macros>
      	<shard>1</shard> <!--当前所属哪个分片-->
		<replica>192.168.3.19</replica> <!--分片所属副本的编号,可以是数字也可以是IP,在创建表时会用到-->
	</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>
			<!--压缩算法lz4压缩⽐zstd快, 更占磁盘-->
		</case>
	</clickhouse_compression>
zoo.cfg --增加
dataDir=/data/zookeeper #zookeeper数据文件存储路径
server.1=192.168.3.19:2888:3888
server.2=192.168.3.20:2888:3888
server.3=192.168.3.21:2888:3888

验证

SELECT * FROM system.zookeeper WHERE path = '/clickhouse';
GRANT CREATE TABLE ON . TO 'default' WITH GRANT OPTION;
GRANT ALTER TABLE, DROP TABLE ON . TO 'default' WITH GRANT OPTION;
SHOW GRANTS FOR 'default';
SELECT * FROM system.clusters;
dpkg -i clickhouse-client_23.2.6.34_amd64.deb
./clickhouse-client --host="192.168.3.19" --port="9000" --user="default" --password="Jane"
--在各个节点建库、本地表
create database testdb;
--在各个节点建分布表
CREATE TABLE person_local
(
    `ID` Int8,
    `Name` String,
    `BirthDate` Date
)
ENGINE = MergeTree()
PARTITION BY toYYYYMM(BirthDate)
ORDER BY (Name, BirthDate)
SETTINGS index_granularity=8192;

--分布表(Distributed)本⾝不存储数据,相当于路由,需要指定集群名、数据库名、数据表名、分⽚KEY. 这⾥分⽚⽤rand()函数,表⽰随机分⽚。
CREATE TABLE person_all AS person_local
ENGINE = Distributed(ck_cluster, testdb, person_local, rand());

1、检查集群状态


登录Clickhouse集群某一节点数据库
cd /usr/bin
./clickhouse-client --host='192.168.3.19' --port='9000' --user='Jane' --password='Jane1234'
select * from system.cluster; # 查看集群信息,有输出
┌─cluster────┬─shard_num─┬─replica_num─┬─host_name──┬─host_address─┬─default_database─┐
│ ck_cluster │         11192.168.3.19192.168.3.19   │                  │
│ ck_cluster │         21192.168.3.20192.168.3.20   │                  │
│ ck_cluster │         31192.168.3.21192.168.3.21   │                  │
└────────────┴───────────┴─────────────┴────────────┴──────────────┴──────────────────┘
select database,table,is_readonly,replica_name,replica_path from system.replicas; # 了解每个副本的同步情况和状态,从而进行相应的管理和优化操作。
┌─database─┬─table─────────┬─replica_name─┬─replica_path───────────────────────────────────────────┐
│ default  │ channelLog    │ 192.168.3.19/clickhouse/tables/1/channelLog/replicas/192.168.3.19    │
│ defaultcycle192.168.3.19/clickhouse/tables/1/cycle/replicas/192.168.3.19         │
│ default  │ info          │ 192.168.3.19/clickhouse/tables/1/info/replicas/192.168.3.19          │
│ default  │ newChannelLog │ 192.168.3.19/clickhouse/tables/1/newChannelLog/replicas/192.168.3.19 │
│ default  │ record        │ 192.168.3.19/clickhouse/tables/1/record/replicas/192.168.3.19        │
│ default  │ step          │ 192.168.3.19/clickhouse/tables/1/step/replicas/192.168.3.19          │
│ default  │ test_ck       │ 192.168.3.19/clickhouse/tables/1/test_ck/replicas/192.168.3.19       │
└──────────┴───────────────┴──────────────┴─────────────────────────────────────────────────────

select * from system.macros;  # 查看分片|副本信息
┌─macro───┬─substitution─┐
│ replica │ 192.168.3.19   │
│ shard   │ 1            │
└─────────┴──────────────┘

2、检查ZooKeeper配置
如果使用ZooKeeper,可以直接在ClickHouse数据库中输入命令来验证ZooKeeper配置是否正确:

SELECT * FROM system.zookeeper WHERE path = '/clickhouse'; #可以实时监控ZooKeeper节点的状态和数据,确保集群的协调和同步正常进行.

3、创建ReplicatedMergeTree测试表

在任一节点上创建一个使用ReplicatedMergeTree引擎的测试表,以测试ZooKeeper同步功能是否正常:

4、创建Distributed引擎测试表/验证数据同步
创建一个Distributed引擎的测试表,并进行数据插入和查询操作,以验证集群的分布式功能是否正常工作。

# 创建一个分布式测试表测试数据分片是否正常。已经配置了zookeeper,所以创建表的DDL语句也会同步到其他节点上
CREATE TABLE test_local ON CLUSTER ck_cluster (
                         id Int32,
                         name String
                     ) ENGINE = MergeTree()
                     ORDER BY id;

CREATE TABLE test ON CLUSTER ck_cluster AS test_local
                     ENGINE = Distributed(ck_cluster, default, test_local, rand());
# 参数含义:ck_cluster集群名称,default数据库,test_local表,rand()分布式表采用的分配算法,除了这个还有sipHash64(字段名)
# 注意:分布式表是基于已经存在的本地表来实现的,分布式表相当于视图,本身并不存储数据,写分布式表,分布式表会将数据发送到各个机器上。查分布式表,会聚合所有机器的数据显示)
INSERT INTO test (id, name) VALUES (1, 'Alice'), (2, 'Bob'); # 在某个节点上执行插入操作
select * from test; # 在任一Clickhouse节点,直接查询分布式表可以看到这些数据,数据存在,则表示数据同步配置成功
select * from test_local; # 在其他Clickhouse节点上查询,只能看到自己本地的数据
SHOW databases;
show tables;
SELECT currentDatabase();

5、检查服务状态

在每台节点上启动/查看/重启/停止ClickHouse服务,以确保服务运行正常:

service clickhouse-server start # 或者systemctl restart clickhouse-server
service clickhouse-server status
service clickhouse-server restart
service clickhouse-server stop

通过以上步骤,可以全面验证ClickHouse集群是否部署成功并且正常运行

参考文章:

https://blog.csdn.net/weixin_44123540/article/details/119042654

https://blog.csdn.net/clearlxj/article/details/121774940

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

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

相关文章

【mybatis】Mybatis整体架构解析

从本篇开始我们开始学习mybatis的系列源码&#xff0c;主要的主题可能就是四个方面 从整体把握mybatis系统架构通过一个查询SQL 源码解析核心流程mybatis的缓存机制-源码级别mybatis的插件机制-源码级别spring是如何整合的mybatis框架的 1.整体架构 上述是mybatis的源码&…

stm32 智能语音电梯系统

做了个stm32智能语音控制的电梯模型&#xff0c;总结一下功能&#xff0c;源码用ST的HAL库写的&#xff0c;整体流程分明。 实物图 这个是整个板子的图片&#xff0c;逻辑其实并不复杂&#xff0c;只是功能比较多&#xff0c;在我看来都是一些冗余的功能&#xff0c;但也可能是…

Git 部署

参考&#xff1a;手把手教你入门Git — Git使用指南&#xff08;Linux&#xff09; 需要说明的是&#xff1a; 1、服务器linux系统中一般使用master分支&#xff0c;但github现在流行的是main分支&#xff1b; 解决方案是修改master分支位main分支 git branch -m master mai…

【业务场景】sql server从Windows迁移到Linux

目录 1.背景 2.Linux安装sql server 3.服务器不开端口的问题 4.数据库导入导出问题 1.背景 博主在24年年底接手运维了一个政府的老系统&#xff0c;整个应用和数据库单点部署在一台Windows Server服务器上&#xff0c;数据库选型是经典的老项目标配——sql server。随着近…

《Vue3实战教程》35:Vue3测试

如果您有疑问&#xff0c;请观看视频教程《Vue3实战教程》 测试​ 为什么需要测试​ 自动化测试能够预防无意引入的 bug&#xff0c;并鼓励开发者将应用分解为可测试、可维护的函数、模块、类和组件。这能够帮助你和你的团队更快速、自信地构建复杂的 Vue 应用。与任何应用一…

字玩FontPlayer开发笔记6 Tauri2设置菜单

字玩FontPlayer开发笔记6 Tauri2设置菜单 字玩FontPlayer是笔者开源的一款字体设计工具&#xff0c;使用Vue3 ElementUI开发&#xff0c;源代码&#xff1a; github: https://github.com/HiToysMaker/fontplayer gitee: https://gitee.com/toysmaker/fontplayer 笔记 字玩目…

我用AI学Android Jetpack Compose之开篇

最近突发奇想&#xff0c;想学一下Jetpack Compose&#xff0c;打算用Ai学&#xff0c;学最新的技术应该要到官网学&#xff0c;不过Compose已经出来一段时间了&#xff0c;Ai肯定学过了&#xff0c;用Ai来学&#xff0c;应该问题不大&#xff0c;学习过程记录下来&#xff0c;…

Zookeeper是如何保证事务的顺序一致性的?

大家好&#xff0c;我是锋哥。今天分享关于【Zookeeper是如何保证事务的顺序一致性的?】面试题。希望对大家有帮助&#xff1b; Zookeeper是如何保证事务的顺序一致性的? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Zookeeper 通过多个机制来保证事务的顺序一…

机器人手眼标定

机器人手眼标定 一、机器人手眼标定1. 眼在手上标定基本原理2. 眼在手外标定基本原理 二、眼在手外标定实验三、标定精度分析 一、机器人手眼标定 要实现由图像目标点到实际物体上抓取点之间的坐标转换&#xff0c;就必须拥有准确的相机内外参信息。其中内参是相机内部的基本参…

数据挖掘——聚类

数据挖掘——聚类 聚类K-meansKNN VS K-meansK-Nearest Neighbors (KNN)K-means K中心算法PAM算法 K-modes算法——解决数据敏感的问题KMeans算法 ——解决初始点选择问题K-中心点层次方法AGNES算法——最小距离单链接全链接平均链接 聚类评估K均值和K中心点的优缺点层次化聚类…

web实操9——session

概念 数据保存在服务器HttpSession对象里。 session也是域对象&#xff0c;有setAttribute和getAttribute方法 快速入门 代码 获取session和塞入数据&#xff1a; 获取session获取数据&#xff1a; 请求存储&#xff1a; 请求获取&#xff1a; 数据正常打印&#xff1a…

GPT系统重大升级,开创国内先河:o1支持图片识别功能正式上线

文章目录 零、前言一、授权码登录体验优化&#xff1a;一步直达聊天界面二、全新“项目”功能&#xff1a;让工作更有条理三、语音功能升级&#xff1a;全新交互体验四、o1支持图片识别五、总结 零、前言 我是虚竹哥&#xff0c;目标是带十万人玩转ChatGPT。 亲爱的用户&…

unity 播放 序列帧图片 动画

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、方法一&#xff1a;代码控制播放序列帧1、设置图片属性2、创建Image组件3、简单的代码控制4、挂载代码并赋值 二、方法二&#xff1a;直接使用1.Image上添加…

VisionPro软件Image Stitch拼接算法

2D图像拼接的3种情景 1.一只相机取像位置固定&#xff0c;或者多只相机固定位置拍图&#xff0c;硬拷贝拼图&#xff0c;采用CopyRegion工具实现 2.一只或多只相机在多个位置拍照&#xff0c;相机视野互相重叠&#xff0c;基于Patmax特征定位后&#xff0c;无缝 拼图&#xff…

【大模型】7 天 AI 大模型学习

今天终于来到大模型学习的实战课了&#xff08;虽然前面跳了2天的课&#xff09;&#xff0c;今天我们会一起学习 Llama 模型的运行、部署、微调 ~ 一、Llama 介绍 Llama 模型官网&#xff1a;官网 Llama 论文&#xff1a;论文 Llama 代码&#xff1a;代码 理念&#xff1a;Th…

小程序学习08—— 系统参数获取和navBar组件样式动态设置

一 系统信息的概念 uni-app提供了异步(uni.getSystemInfo)和同步(uni.getSystemInfoSync)的2个API获取系统信息。 success 返回参数说明&#xff1a; 参数分类说明statusBarHeight手机状态栏的高度system操作系统名称及版本。。。 二 自定义navbar 2.1 获取系统参数 代码展示…

STM32的LED点亮教程:使用HAL库与Proteus仿真

学习目标&#xff1a;掌握使用STM32 HAL库点亮LED灯&#xff0c;并通过Proteus进行仿真验证&#xff01; 建立HAL库标准工程 1.新建工程文件夹 新建工程文件夹建议路径尽量为中文。建立文件夹的目的为了更好分类去管理项目工程中需要的各类工程文件。 首先需要在某个位置建立工…

密码学原理技术-第十一章-Hash Functions

文章目录 总结Why we need hash functionsDigital Signature with a Hash FunctionBasic Protocol for Digital Signatures with a Hash FunctionPrincipal input–output behavior of hash functions Security propertiesThe three security requirements of hash functionsWh…

【AI大模型系列】AI Agent与LangChain框架介绍(七)

目录 一、什么是AI Agent 二、什么是LangChain 三、LangChain的重要模块 3.1 Model I/O&#xff08;模块输入输出&#xff09; 3.2 Retrieval&#xff08;检索&#xff09; 3.3 Chains&#xff08;链式调用&#xff09; 3.4 Agents 3.5 Memory&#xff08;记忆&#xff…

RabbitMQ 架构介绍:深入理解与应用

RabbitMQ 是一个开源的消息代理&#xff08;Message Broker&#xff09;软件&#xff0c;它实现了高级消息队列协议&#xff08;AMQP&#xff09;&#xff0c;并提供了可靠的消息传递机制。RabbitMQ 广泛应用于分布式系统中&#xff0c;用于解耦系统组件、异步处理任务和实现消…