ClickHouse集群部署实践—3分片2副本集群

未完待续。。。 喜欢的先点赞收藏!!

由于我们准备部署的是3分片2副本的集群,现在来解释一下配置参数的意思:

shard标签代表分片的意思,如上图我们有3个分片,clickhouse集群中每个分片会存储整个集群一部分的数据,每个分片中有这个标签:

代表副本的意思,什么是副本?比如我只有三台机器做三个分片,那么每个分片中只有这一台机器作为副本,这台机器存储这个分片的所有数据,若这台机器挂掉了,那么数据就丢了。
那如果我们有6台机器或者更多,每个分片里就可以配置两个副本机器,这两个副本存储的数据是一摸一样的,集群读取数据时会随机从其中选择一个读取。这样即使一台机器挂掉了,也不会影响正常使用,而且对业务来说是无感的,数据一切正常。

还有最重要的这个标签:
<internal_replication>true</internal_replication>

因为我们和zookeeper配合使用,internal_replication必须设置为true,原因等下解释。

2.基于Cluster的复制方式:
大致说一下这种方式,包括官方在内都不推荐这种方式。这种方式不需要配置zookeeper。
如果我们想使用这种方式,需要打开配置文件:
/etc/clickhouse-server/config.xml
找到<remote_servers>这个标签,下面的所有信息就是我们配置集群的配置信息,和上边基本一致,但这个标签<internal_replication>false</internal_replication>不一样,里面要写false
详细说一下:
(1)internal_replication=false时:
往分布式表(注意分布式表只是本地表的view,是不存放任何实体数据的)里面写入数据时,表层面自动同步开启,数据会写入所有备份中(同属一个shard内的表数据相同),但是这个时候是不校验数据一致性的(比如说写入server1的时候成功了,但是写入server1的备份server2的时候有一些没有写入成功,那么这两个互为备份的表就不一致了),也就是说,有可能出现两个备份数据略微不一致的情况,虽然这种可能性很小,另外出现了不一致的时候表之间不会自动同步需要自己手动。这种被官方称为poor man’s replication,如果喜欢简单而且特别讨厌配置zookeeper的话可以使用
(2)internal_replication=true,且没有zookeeper的配合:
不使用zookeeper,那么往分布式表写入数据时,是只写入一组备份中的(也就是说同一个shard内部只有一个表写入了数据,其他的表均不会写入数据,除非有一个宕机另外的作为补充下入,但是这个时候表之间的数据就不同了,需要人工手动统一(备份合并就是shard总体)。实际测试中,当向分布式表写入数据时,replica group 1 被写入了数据,replica group 2 没有被写入数据。在此种条件下(internal_replication=true时且不使用zookeeper),存在海量风险,极其不建议使用: 实际测试中,所有节点均正常工作的情况下,使用分布式表查询,同样的sql语句会出现前后结果不一致的情况 当有节点挂掉时候,那么挂掉之前的数据是写入备份A,挂掉之后数据写入了备份B(此时集群还是正常工作的),当你去使用分布表查询数据时,是肯定会得到错误结果的,因为分布表的查询方式是每个shard中选取一个表来查询并合并结果,由于备份A和备份B之间没同步,那么你查询的只是一部分数据。这种方法切记不能使用!
(3)internal_replication=true时:
使用ReplicatedMergeTree表引擎+zookeeper,这种方案看起来配置很多但是也是最稳定的方案。

三、总结:
对比clickhouse集群部署提供的两种方案,基于zookeeper的部署方案更稳重更安全。所以建议采用这种。
另外在搭建完成后,我们创建了分布式表和本地表,在上述实验中,我们是直接写分布式表,分布式表会将数据发送到其他机器的本地表上。有人建议不要直接这么做,我查阅了很多文章,总结一下原因:
1.数据量很大时:
当每天数据量很大时,比如每天上亿级别或以上。由于分布式表的逻辑简单,仅仅是转发请求,所以在转发安全性上,会有风险,并且rand的方式,可能会造成不均衡,而且Distributed表在写入时会在本地节点生成临时数据,会产生写放大,所以会对CPU及内存造成一些额外消耗,分布式表接收到数据后会将数据拆分成多个parts, 并转发数据到其它服务器, 会引起服务器间网络流量增加、服务器merge的工作量增加, 导致写入速度变慢, 并且增加了Too many parts的可能性。因此数据量大时建议通过轮询的方式写本地表,这样最保险和均衡,这也是很多人建议使用的。

1.数据量并不大时:
直接写分布式表和轮询写本地表都差不多,想用哪种方式都可以。
其实分布式表的本质就是一个视图,设计的目的就是为了查询的,虽然数据量不大时没有什么影响。

2.综上所述,我觉得集群部署使用的最佳建议:
(1)采用基于zookeeper的方式部署集群
(2)每个分片最少有两个副本来保证数据一致性
(3)读分布式表,分布式表只做查询
(4)通过负载均衡的方式写本地表
(5)尽量做1000条以上批量的写入,避免逐行insert或小批量的insert,update,delete操作,因为ClickHouse底层会不断的做异步的数据合并,会影响查询性能。

报错信息1:

moban 😃 CREATE TABLE test_ck ON CLUSTER ck_cluster (EventDate DateTime, Number UInt32, id UInt32 ) ENGINE = ReplicatedMergeTree(‘/clickhouse/tables/{shard}/test_ck’, ‘{replica}’) PARTITION BY toYYYYMM(EventDate) ORDER BY (Number, EventDate, intHash32(id)) SAMPLE BY intHash32(id);

CREATE TABLE test_ck ON CLUSTER ck_cluster
(
EventDate DateTime,
Number UInt32,
id UInt32
)
ENGINE = ReplicatedMergeTree(‘/clickhouse/tables/{shard}/test_ck’, ‘{replica}’)
PARTITION BY toYYYYMM(EventDate)
ORDER BY (Number, EventDate, intHash32(id))
SAMPLE BY intHash32(id)

Query id: b190fcda-108c-4d1a-8dfd-c56326b14701

0 rows in set. Elapsed: 0.002 sec.

Received exception from server (version 21.7.3):
Code: 139. DB::Exception: Received from localhost:9000. DB::Exception: There is no Zookeeper configuration in server config.

问题解决:
上面的报错 是由于config.xml listen_host配置错误问题。

报错信息2:

Code: 210, e.displayText() = DB::NetException: Connection refused (bta2:9000) (version 21.7.3.14 (official build))

问题解决:
上面的报错 是由于config.xml listen_host配置错误问题。

报错信息3:
clickhouse误删同步表,重新创建时 报副本已经存在。

解决方案:
使用 ZooKeeper 客户端直接清理

连接到 ZooKeeper

zkCli.sh -server <zk_host>:2181

删除残留路径(替换实际路径)

rmr /clickhouse/tables/your_table_path

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity_VR_Pico开发手册

文章目录一、配置开发环境1.下载PICO Unity Integration SDK2.安装 Unity 编辑器&#xff08;添加安卓开发平台模块&#xff09;3.导入下载的SDK4.项目配置和切换开发平台5.导入 XR Interaction Toolkit6.安装 Universal RP(通用渲染管线)并设置 (选做)二、调试环境搭建&#x…

Linux系统之Docker命令与镜像、容器管理

目录 一、 Docker命令 docker命令帮助 docker常用子命令&#xff08;必须背会&#xff09; docker管理子命令(暂时不需要) swarm集群管理子命令&#xff08;不需要&#xff09; docker容器管理子命令&#xff08;必须背会&#xff09; docker全局选项 二、 docker镜像管…

比亚迪第五代DM技术:AI能耗管理的深度解析与实测验证

比亚迪第五代DM技术&#xff1a;AI能耗管理的深度解析与实测验证 &#xff08;面向新能源汽车研发/测试工程师&#xff09;目录 技术背景与核心突破AI能耗管理系统架构解析关键技术创新点 2.1 动力域三脑合一控制2.2 全温域热管理协同2.3 导航数据深度耦合 实测数据与场景验证 …

sqli-labs通关笔记-第37关POST宽字符注入(单引号闭合 手工注入+脚本注入 3种方法)

目录 一、宽字符注入 二、sqlmap之unmagicquotes 三、addslashes与mysqli_real_escape_string 四、源码分析 1、代码审计 2、SQL注入安全性分析 五、渗透实战 1、进入靶场 2、正确用户名密码探测 3、手工注入&#xff08;方法1&#xff09; &#xff08;1&#xff…

Kubernetes 集群密钥与机密管理方案对比分析:Vault、Sealed Secrets 与 AWS KMS

Kubernetes 集群密钥与机密管理方案对比分析&#xff1a;Vault、Sealed Secrets 与 AWS KMS 在容器化与编排环境中&#xff0c;机密&#xff08;Secrets&#xff09;管理是确保应用安全性的重要环节。对于 Kubernetes 集群而言&#xff0c;内置的 Secret 对象存在明文存储的风…

Java基础-TCP通信单服务器接受多客户端

目录 案例要求&#xff1a; 实现思路&#xff1a; 代码&#xff1a; User类&#xff1a;用户端 Client类&#xff1a;服务端 ServerReader类&#xff1a;多线程通信类 总结&#xff1a; 案例要求&#xff1a; TCP通信下,正常的写法只能单个服务器和单个客户端进行通信&a…

electron:vue3+vite打包案例

1、安装electron 首先设置镜像源&#xff0c;否则安装会非常非常慢。 打开npm的配置文件。 npm config edit 修改配置项。 registryhttps://registry.npmmirror.com electron_mirrorhttps://cdn.npmmirror.com/binaries/electron/ electron_builder_binaries_mirrorhttp…

traceroute命令调试网络

文章目录 @[toc] 一、核心原理与参数解析 1. 工作原理 2. 关键参数 二、六大运维场景实战 场景1:内网服务器无法访问公网 场景2:跨国访问延迟高(电商业务卡顿) 场景3:VPN分流异常(流量泄露) 场景4:检测DNS劫持 场景5:防火墙规则验证 场景6:云服务跨区延迟优化 三、高…

自己本地搭建的服务器怎么接公网?公网IP直连服务器方法,和只有内网IP直接映射到互联网

​ 你是不是也遇到过这样的问题&#xff1a;在家里或者公司搭建了一个服务器&#xff0c;但是不知道怎么通过公网IP直接访问它&#xff1f;别急&#xff0c;其实很简单&#xff01;今天就给大家分享几种方法&#xff0c;手把手教你如何实现公网IP直连服务器&#xff0c;和无公网…

MATLAB中文乱码的解决方法

文章目录问题描述解决方法问题描述 对于matlab脚本输出乱码&#xff1a; ‘ʮ&#xfffd;&#xfffd;&#xfffd;&#xfffd;Ф&#xfffd;&#xfffd;&#xfffd;&#xfffd;һ&#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;й&#xfffd;&#xff…

工业场景反光衣识别准确率↑32%:陌讯多模态融合算法实战解析

原创声明本文为原创技术解析&#xff0c;核心数据与算法逻辑引用自《陌讯技术白皮书》&#xff0c;禁止任何形式的未经授权转载。一、行业痛点&#xff1a;反光衣识别的场景难题在建筑施工、道路养护、仓储物流等工业场景中&#xff0c;作业人员反光衣穿戴规范检测是安全生产的…

北京JAVA基础面试30天打卡05

一、Redis 的持久化机制有哪些&#xff1f;** Redis 提供两种主要的持久化机制&#xff1a; ✅ RDB&#xff08;Redis DataBase&#xff09;快照持久化 定期将 Redis 中的数据以“快照”的形式写入磁盘&#xff08;生成 .rdb 文件&#xff09;。启动 Redis 时会加载 .rdb 文件恢…

深入理解 Maven POM 文件:核心配置详解

前言 在 Java 开发领域&#xff0c;Apache Maven 是一个强大的项目管理和构建自动化工具。而pom.xml文件&#xff0c;作为 Maven 项目的“心脏”&#xff0c;定义了项目的方方面面。本文将带你深入了解pom.xml中最常用和最重要的配置项&#xff0c;帮助你快速掌握 Maven 的核心…

嵌入式学习的第四十天-51单片机

一、基本框架第一阶段&#xff1a;1980年、Intel英特尔MCS-51系列&#xff1a;8051型号单片机、工业控制领域、由MCU市场->CPU市场。1、CPU&#xff08;Central Processing Unit&#xff0c;中央处理单元&#xff09;‌是计算机的核心部件&#xff0c;负责执行计算机指令和处…

Linux(17)——Linux进程信号(上)

目录 一、信号速识 ✍️生活中的信号 ✍️技术上的信号 ✍️信号的发送和记录 ✍️信号处理概述 二、产生信号 ✍️通过终端产生信号 ✍️通过函数发送信号 ✍️通过软件产生信号 ✍️通过硬件产生信号 一、信号速识 ✍️生活中的信号 你在网上买了很多件商品&…

使用pytest对接口进行自动化测试

上篇博客中讲述了什么是接口测试&#xff0c;已经自动化接口测试流程&#xff0c;这篇博客总结如何实现接口自动化测试&#xff08;一&#xff09;requestsrequests库是Python对HTTP通信的一个工具&#xff0c;将http协议操作封装成简单的接口&#xff0c;能够让我们高效的编写…

信息安全及防火墙总结

1.1 信息安全现状及挑战信息安全概述 信息安全&#xff1a;防止任何对数据进行未授权访问的措施&#xff0c;或者防止造成信息有意无意泄漏、破坏、 丢失等问题的发生&#xff0c;让数据处于远离危险、免于威胁的状态或特性。 网络安全&#xff1a;计算机网络环境下的信息安全。…

20250808组题总结

A - A Pak Chanek 有一个包含 nnn 个正整数的数组aaa。由于他正在学习如何计算两个数字的向下取整平均值&#xff0c;他希望在他的数组 aaa 上进行练习。当数组 aaa 至少有两个元素时&#xff0c;Pak Chanek 将执行以下三步操作&#xff1a; ∙\bullet∙选择两个不同的索引 ii…

【Python 语法糖小火锅 · 第 5 涮 · 完结】

一、糖味一句话 Python 3.10 的 match-case 把「类型 值 嵌套」一次性拆开&#xff0c; 可读性 10&#xff0c;bug 数 10&#xff0c;if-elif 可以安心退休了。二、1 行示例 3 连发 # ① 值匹配 match status:case 200: msg "ok"case 404: msg "not found&q…

写 SPSS文件系统

写入 SPSS 系统文件&#xff08;.sav、.zsav&#xff09; 以下为相关的 SPSS 命令&#xff08;以大写形式 CAPS 呈现&#xff09; savFileName : str SPSS 数据文件的文件名 以 .sav 结尾的文件使用旧版压缩方案压缩。 以 _uncompressed.sav 结尾的文件不压缩&#xff0c;这在需…