Clickhouse集群部署(3分片1副本)
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: janepassword: 123456hikari:connection-timeout: 20000maximum-pool-size: 60minimum-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 │ 1 │ 1 │ 192.168.3.19 │ 192.168.3.19 │ │
│ ck_cluster │ 2 │ 1 │ 192.168.3.20 │ 192.168.3.20 │ │
│ ck_cluster │ 3 │ 1 │ 192.168.3.21 │ 192.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 │
│ default │ cycle │ 192.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_localENGINE = 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
相关文章:
Clickhouse集群部署(3分片1副本)
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…...
刷服务器固件
猫眼淘票票 大麦 一 H3C通用IP 注:算力服务器不需要存储 二 刷服务器固件 1 登录固定IP地址 2 升级BMC版本 注 虽然IP不一致但是步骤是一致的 3 此时服务器会出现断网现象,若不断网等上三分钟ping一下 4 重新登录 5 断电拔电源线重新登录查看是否登录成功...
数据结构C语言描述9(图文结合)--二叉树和特殊书的概念,二叉树“最傻瓜式创建”与前中后序的“递归”与“非递归遍历”
前言 这个专栏将会用纯C实现常用的数据结构和简单的算法;有C基础即可跟着学习,代码均可运行;准备考研的也可跟着写,个人感觉,如果时间充裕,手写一遍比看书、刷题管用很多,这也是本人采用纯C语言…...
CSS——2.书写格式一
<!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title></head><body><!--css书写中:--><!--1.css 由属性名:属性值构成--><!--style"color: red;font-size: 20px;&quo…...
Elasticsearch 创建索引 Mapping映射属性 索引库操作 增删改查
Mapping Type映射属性 mapping是对索引库中文档的约束,有以下类型。 text:用于分析和全文搜索,通常适用于长文本字段。keyword:用于精确匹配,不会进行分析,适用于标签、ID 等精确匹配场景。integer、long…...
【NLP高频面题 - 分布式训练篇】ZeRO主要为了解决什么问题?
【NLP高频面题 - 分布式训练篇】ZeRO主要为了解决什么问题? 重要性:★★ 零冗余优化器技术由 DeepSpeed 代码库提出,主要用于解决数据并行中的模型冗余问题,即每张 GPU 均需要复制一份模型参数。 ZeRO的全称是Zero Redundancy …...
kubernetes-循序渐进了解coredns
文章目录 概要基础知识Kubernetes 集群中对对象名称的 DNS 流量解析 Kubernetes 集群外的名称的 DNS 流量CoreDNS 如何确定向哪个本地 DNS 请求解析?修改 CoreDNS 的配置 概要 CoreDNS 是 Kubernetes 的核心组件之一。只有在 Kubernetes 集群中安装了 容器网络接口…...
mysql8 从C++源码角度看 客户端发送的sql信息 mysql服务端从网络读取到buff缓存中
MySQL 8 版本中的客户端-服务器通信相关,特别是在接收和解析网络请求的数据包时。以下是对代码各个部分的详细解释,帮助您更好地理解这些代码的作用。 代码概述 这段代码主要负责从网络读取数据包,它包含了多个函数来处理网络数据的读取、缓…...
pygame飞机大战
飞机大战 1.main类2.配置类3.游戏主类4.游戏资源类5.资源下载6.游戏效果 1.main类 启动游戏。 from MainWindow import MainWindow if __name__ __main__:appMainWindow()app.run()2.配置类 该类主要存放游戏的各种设置参数。 #窗口尺寸 #窗口尺寸 import random import p…...
【Vim Masterclass 笔记08】第 6 章:Vim 中的文本变换及替换操作 + S06L20:文本的插入、变更、替换,以及合并操作
文章目录 Section 6:Transforming and Substituting TextS06L21 Inserting, Changing, Replacing, and Joining1 定位到行首非空字符,并启用插入模式2 在紧挨光标的下一个字符位置启动插入模式3 定位到一行末尾,并启用插入模式4 定位到光标的…...
Tailwind CSS 实战:动画效果设计与实现
在现代网页设计中,动画效果就像是一位优秀的舞者,通过流畅的动作为用户带来愉悦的视觉体验。记得在一个产品展示网站项目中,我们通过添加精心设计的动画效果,让用户的平均停留时间提升了 35%。今天,我想和大家分享如何使用 Tailwind CSS 打造优雅的动画效果。 设计理念 设计动…...
【动手学电机驱动】STM32-MBD(3)Simulink 状态机模型的部署
STM32-MBD(1)安装 Simulink STM32 硬件支持包 STM32-MBD(2)Simulink 模型部署入门 STM32-MBD(3)Simulink 状态机模型的部署 【动手学电机驱动】STM32-MBD(3)Simulink 状态机模型部署…...
Linux 服务器启用 DNS 加密
DNS 加密的常用协议包括 DNS over HTTPS (DoH)、DNS over TLS (DoT) 和 DNSCrypt。以下是实现这些加密的步骤和工具建议: 1. 使用 DoH (DNS over HTTPS) 工具推荐: cloudflared(Cloudflare 提供的客户端)doh-client(…...
PyTorch不同优化器比较
常见优化器介绍 - SGD(随机梯度下降):是最基本的优化器之一,通过在每次迭代中沿着损失函数的负梯度方向更新模型参数。在大规模数据集上计算效率高,对于凸问题和简单模型效果较好。但收敛速度慢,容易陷入局…...
stm32的掉电检测机制——PVD
有时在一些应用中,我们需要检测系统是否掉电了,或者要在掉电的瞬间需要做一些处理。 STM32内部自带PVD功能,用于对MCU供电电压VDD进行监控。 STM32就有这样的掉电检测机制——PVD(Programmable Voltage Detecter),即可编程电压检…...
Nginx 文件名逻辑漏洞(CVE-2013-4547)
目录 漏洞原理 影响版本 漏洞复现 漏洞原理 CGI:是一种协议,定义了web服务器传递的数据格式。 FastCGI:优化版的CGI程序 PHP-CGI:PHP解释器,能够对PHP文件进行解析并返回相应的解析结果 PHP-FPM:Fas…...
Java 21 优雅和安全地处理 null
在 Java 21 中,判断 null 依然是开发中常见的需求。通过使用现代 Java 提供的工具和特性,可以更加优雅和安全地处理 null。 1. 使用 Objects.requireNonNull Objects.requireNonNull 是标准的工具方法,用于快速判断并抛出异常。 示例 import java.util.Objects;public c…...
AWS Glue基础知识
AWS Glue 是一项完全托管的 ETL(提取、转换、加载)服务,与考试相关,尤其是在数据集成、处理和分析方面。 1.数据集成和 ETL(提取、转换、加载) AWS Glue 主要用于构建 ETL 管道以准备数据以进行分析。作为…...
Kubernetes——part4-1 Kubernetes集群 服务暴露 Nginx Ingress Controller
Kubernetes集群 服务暴露 Nginx Ingress Controller 一、ingress控制器 1.1 ingress控制器作用 (类似于slb,做代理服务) ingress controller可以为kubernetes 集群外用户访问Kubernetes集群内部pod提供代理服务。 提供全局访问代理访问流程…...
Flutter入门,Flutter基础知识总结。
Flutter是Google推出的一种移动应用开发框架,它允许开发者使用一套代码库同时开发Android和iOS应用。以下是对Flutter知识点的详细总结: 一、Flutter概述 特点:跨平台、高保真、高性能。 编程语言:使用Dart语言编写。 设计理念&…...
以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
return this;返回的是谁
一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请,不同级别的经理有不同的审批权限: // 抽象处理者:审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...
算法:模拟
1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) 遍历字符串:通过外层循环逐一检查每个字符。遇到 ? 时处理: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: 与…...
【Redis】笔记|第8节|大厂高并发缓存架构实战与优化
缓存架构 代码结构 代码详情 功能点: 多级缓存,先查本地缓存,再查Redis,最后才查数据库热点数据重建逻辑使用分布式锁,二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...
C#学习第29天:表达式树(Expression Trees)
目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...
