【elastic search】详解elastic search集群
目录
1.与集群有关的一些概念
2.集群搭建
3.集群搭建
4.kibana链接集群
5.选举流程
6.请求流程
7.master的作用
1.与集群有关的一些概念
数据分片:
数据分片(shard),单台服务器的存储容量是有限的,把一份数据切分成很多份,每一份存储到不同的节点上去,从而减少单台的压力。
数据副本:
数据副本(replica),在分布式集群中,如果不做备份,单点故障会硬气数据丢失,应对办法是将一份数据复制成很多份,一份就是一个副本,将副本存储到不同的节点上去。
es在创建索引的时候会指定每个索引的数据分片喝数据副本各自的数量:
put /yx {"settings":{"number_of_shards": 3,//分片数"numbser_of_replicas": 1//副本数} }
2.集群搭建
集群规划:
cluster name,集群名称,同一集群下,所有node的cluster name要相同。
Node Name | cluster name | ip | http | tcp |
---|---|---|---|---|
node-01 | yx-elastic | 127.0.0.1 | 9201 | 9301 |
node-02 | yx-elastic | 127.0.0.1 | 9202 | 9302 |
node-03 | yx-elastic | 127.0.0.1 | 9203 | 9303 |
3.集群搭建
elasticsearch.yml:
三个节点的区别只在于node.name、数据路径、日志路径、http端口、tcp端口不同,其它都相同,此处以node-01为例。
#允许跨名访问 http.cors.enabled: true #当设置允许跨域,默认为, 表示支持所有域名 http.cors.allow-origin: "*" #允许所有节点访问 network.host: 0.0.0.0 #集群的名称,同一个集群下所有节点的集群名称应该一致 cluster.name: yx-elasticsearch #当前节点名称 每个节点不一样 node.name: node-01 #数据的存放路径,每个节点不一样,不同es 服务器对应的data和log存储的路径不能一样 path.data: D:\es\elasticsearch-9301\data #日志的存放路径 path.logs: D:\es\elasticsearch-9301\logs #HTTP协议的对外端口,每个节点不一样,默认: 9200 http.port: 9201 #TCP协议对外端口 每个节点不一样,默认: 9300 transport.tcp.port: 9301 #三个节点相互发现,包含自己,使用TCP协议的端口号 discovery.zen.ping.unicast.hosts: ["127.0.0.1:9301","127.0.0.1:9302","127.0.0.1:9303"] #声明大于几个的投票主节点有效,设置为(nodes / 2) + 1 discovery.zen.minimum_master_nodes: 2 #是否为主节点 node.master: true
4.kibana链接集群
kibana.yml:
elasticsearch.hosts: ["http://localhost:9201"]
5.选举流程
-
Zen Discovery 进程:ES的每个节点都有一个Zen Discovery 组件,这个组件会启动一个Zen Discovery 进程,这个组件是集成在ES中的代码逻辑,它用于记录全局节点的信息,管理集群中节点的发现、加入、离开,以及主节点选举。也就是说每个ES节点上都存着一份全局节点的信息。
-
启动阶段: 当一个节点(Node)启动时,它会加入集群,并尝试与其他节点建立连接。这个节点会发送一个 "join" 请求,广播给当前集群中的所有节点。这个请求包含了节点的信息,比如节点的ID、地址和端口等。
-
选举过程:
首先是master节点的候选资格:
在 Elasticsearch 集群中,有一些节点被标记为 "master-eligible" 节点,这表示它们有资格成为主节点。这些节点在配置文件中的
node.master
属性为 true。接下来是选举过程:
一旦有足够的主节点候选节点发现彼此并形成了一个集群,它们就会开始主节点选举的过程。这个过程需要多数(大多数)的主节点候选节点在线并参与选举,这也被称为“法定人数”(Quorum)。“法定人数”是为了避免脑裂(split-brain)情况,Elasticsearch要求一个法定人数的同意才能选举出一个新的主节点。在旧版本中(如7.x及以前),这是通过
discovery.zen.minimum_master_nodes
设置来配置的,它通常设置为(master-eligible nodes / 2) + 1
。在更高版本中,这个设置已经被内置的选举机制替代,不需要手动配置。选举过程中采用节点之间相互投票的机制,选举出主节点来, 节点在决定给哪个节点投票时会考虑多个因素,包括节点的健康状况、网络稳定性、集群状态的完整性,以及节点的历史记录等。 -
故障检测: Zen Discovery 使用故障检测机制来确定节点是否可用。节点之间相互发送 Ping 和 Pong 消息以检测对方的状态。如果一个节点在一定时间内没有响应,它被认为是不可用的。一旦出现master节点不可用的状态,集群将会开启重新选举。需要进行重新选举的时候要是发现集群存货人数已经不及法定人数,那么集群将会对外拒绝服务。
-
持久化: 主节点的信息会被持久化存储,以便在节点重启后,集群能够快速地恢复到之前的状态。
6.请求流程
写请求处理流程(如索引或更新文档):
-
接收请求: 写请求可以发送到集群中的任何节点。该节点成为请求的协调节点。
-
确定主分片: 协调节点根据文档的ID和索引元数据来决定哪个主分片负责处理该文档。这通常是通过哈希文档ID来完成的。
-
转发请求: 协调节点将请求转发到托管该主分片的节点。
-
处理和复制: 主分片节点处理写请求(如索引或更新文档),然后将相同的操作复制到所有对应的副本分片。
-
确认和响应: 一旦主分片和所有必要的副本分片成功处理了请求,协调节点向客户端发送成功响应。
读请求处理流程(如搜索或获取文档):
-
接收请求: 读请求可以发送到集群中的任何节点。该节点成为请求的协调节点。
-
确定分片位置: 对于文档获取请求,协调节点会计算出哪个主分片或副本分片拥有该文档。对于搜索请求,协调节点确定要查询的所有相关分片。
-
查询分片: 协调节点并行地向那些托管相关分片的节点发送请求。读请求可以由主分片或任何副本分片来处理。
-
汇总结果: 对于搜索请求,协调节点从所有查询的分片收集结果,合并成一个全局的搜索结果。
-
响应客户端: 最终的结果被发送回给客户端。
7.master的作用
在Elasticsearch中,每个节点都维护着关于集群状态的本地副本,这包括了分片的分配和位置信息。这意味着协调节点通常能够独立地确定请求应该路由到哪个节点上,而不需要每次都查询主节点。那主节点的作用是什么喃?
主节点(Master Node)在Elasticsearch集群中扮演着关键的管理和协调角色。以下是主节点在集群中的主要职责和功能:
-
集群管理: 主节点负责整个集群的管理任务。这包括集群的创建、配置、状态监控以及集群范围内的一些操作。
-
节点协调: 主节点负责协调集群中的所有节点。它会与其他节点通信,确保集群中的每个节点都处于活动状态,同时负责监控节点的健康状况。
-
分片分配: 主节点负责决定每个分片(Shard)应该分配到集群中的哪个节点上。它会在节点加入或离开集群时重新分配分片,以保持集群的均衡和高可用性。
-
主节点选举: 如果当前的主节点出现故障或不可用,集群中的其他节点会通过选举机制选择一个新的主节点。主节点选举确保了即使主节点出现问题,集群也能够继续正常运行。
-
索引创建和删除: 主节点负责处理索引的创建和删除请求。当索引被创建时,主节点会决定每个分片应该在哪个节点上创建。
-
集群状态维护: 主节点维护着关于整个集群的状态信息,包括节点的健康状况、集群设置、索引元数据等。这些信息对于集群的正常运行非常重要。
-
路由请求: 主节点在协助客户端请求路由时发挥作用。虽然数据的实际读写操作是在数据节点上进行的,但主节点负责确定数据分布和分片的位置,从而协助请求的有效路由。
-
集群级别的操作: 主节点可以执行一些集群级别的操作,例如创建和删除索引、更新集群的设置、执行全局搜索等。
相关文章:

【elastic search】详解elastic search集群
目录 1.与集群有关的一些概念 2.集群搭建 3.集群搭建 4.kibana链接集群 5.选举流程 6.请求流程 7.master的作用 1.与集群有关的一些概念 数据分片: 数据分片(shard),单台服务器的存储容量是有限的,把一份数据…...

近红外光谱分析技术与基于深度学习的化学计量学方法
郁磊【副教授】:主要从事AI人工智能与大数据分析等相关研究,长期致力于人工智能与近红外生物医学工程等领域融合,主持并完成多项科研课题。著有《神经网络43个案例分析》等书籍。 // 讲座内容 1、近红外光谱基本理论、近红外光谱仪基本原理…...

Elasticsearch windows开箱即用【记录】
一、准备工作 安装ES之前要在本机安装好JDK,对应的兼容性见官网链接:https://www.elastic.co/cn/support/matrix ES官网链接:https://www.elastic.co/cn/, 我本机安装的是JDK8,测试使用的是7.3.0版本的ES和Kibana。 1、首先去…...

第 3 课 ROS 常用术语及命令说明
1.ROS文件系统的组成 ROS 文件是由 Packages 和 Manifests ( package.xml )组成。 Packages:功能包,是 ROS 软件中的基本单元,包含节点源码、配置文件、数据定义等。 Manifest( package xml &#x…...

基于AidLux的智慧教育版面分析应用
基于AidLux的智慧教育版面分析应用 1. Aidlux平台介绍 融合架构操作系统AidLux,可以为单一ARM设备同时提供Android和Linux运行环境,双系统既能独立使用又能相互通信。 非虚拟机方式实现双系统融合并行 同时拥有两个系统的完整用户体验无需重启即可在两个系统之间…...

Spring | Spring框架最基本核心的jar包、Spring的入门程序、依赖注入
目录: 1.Spring框架最基本、最核心的jar包2.Spring的入门程序3.依赖注入3.1 依赖注入的概念3.2 依赖注入的实现方式 1.Spring框架最基本、最核心的jar包 Spring是一个轻量级框架,Spring最基本、最核心的的jar包括 : beans、context、core、expression。 …...

[晓理紫]每日论文推送(有中文摘要,源码或项目地址)--大模型相关、扩散模型、视觉导航
专属领域论文订阅 VX关注{晓理紫|小李子},每日更新论文,如感兴趣,请转发给有需要的同学,谢谢支持 分类: 大语言模型LLM视觉模型VLM扩散模型视觉导航具身智能,机器人强化学习开放词汇,检测分割 LLM 标题:…...

【软件项目管理_软件工程】软件项目管理课后相关习题
(1)需求分析是回答系统必须(A)的问题。 A.做什么 B.怎么做 C.何时做 D.为谁做(2)WBS非常重要,下列哪项不是其很重要的原因(D)。 A.帮助组织工作 B.防止遗漏工作 C.为项目估算提供…...

Docker-Compose:教你入门到精通
引言 在当今的软件开发和运维领域,容器技术已经成为了一种非常重要的技术。而Docker-Compose作为Docker的重要工具之一,可以帮助我们轻松地管理和运行容器化的应用程序。本文将详细介绍Docker-Compose的入门到精通知识,帮助你更好地掌握这项技…...

软件设计不是CRUD(10):低耦合模块设计理论——业务抽象:从需求中提取业务维度
接上文《软件设计不是CRUD(9):低耦合模块设计理论——设计落地所面临的挑战》 2、什么是业务抽象 业务抽象是一种将需求落地成模块功能的设计思想,是对业务需求和技术设计进行转换、隔离的一种分析方法。经过业务抽象后的业务模块一般具有较高的业务屈服度,能更大程度满…...

S1-08 流和消息缓冲区
流缓冲区 流缓冲区一般用在不同设备或者不同进程间的通讯,为了提高数据处理效率和性能,设置的一定大小的缓冲区,流缓冲区可以用来存储程序中需要处理的数据、对象、报文等信息,使程序对可以对这些信息进行预处理、排序、过滤、拆…...

Java重修第五天—面向对象3
通过学习本篇文章可以掌握如下知识 1、多态; 2、抽象类; 3、接口。 之前已经学过了继承,static等基础知识,这篇文章我们就开始深入了解面向对象多态、抽象类和接口的学习。 多态 多态是在继承/实现情况下的一种现象…...

【征稿进行时|见刊、检索快速稳定】2024年经济发展与旅游管理国际学术会议(ICEDTM 2024)
【征稿进行时|见刊、检索快速稳定】2024年经济发展与旅游管理国际学术会议(ICEDTM 2024) 2024 International Conference Economic Development and Tourism Management(ICEDTM 2024) 一、【会议简介】 ICEDTM 2024将围绕"旅游管理”“经济发展”的最新研究领域ÿ…...

瑞_Java开发手册_(四)安全规约
🙊前言:本文章为瑞_系列专栏之《Java开发手册》的安全规约篇。由于博主是从阿里的《Java开发手册》学习到Java的编程规约,所以本系列专栏主要以这本书进行讲解和拓展,有需要的小伙伴可以点击链接下载。本文仅供大家交流、学习及研…...

Docker 安全必知:最佳实践、漏洞管理与监控策略
容器安全是实施和管理像 Docker 这样的容器技术的关键方面。它包括一组实践、工具和技术,旨在保护容器化应用程序及其运行的基础架构。在本节中,我们将讨论一些关键的容器安全考虑因素、最佳实践和建议。 容器隔离 隔离对于确保容器化环境的强大性和安全…...

【Flutter】多线程
Flutter 作为一个跨平台的UI库,前面的Flutter 架构有涉及到,Flutter 架构中的运行的多个线程。那么最为一个Flutter开发者,我们如何创建线程呢 多线程 上述我们提及到了,架构层涉及的多线程问题。比如说 主线程, 平台线程&#x…...

STM32-实时时钟RTC-1
...

node(express.js创建项目)+连接mysql数据库
1.node npm的安装 2.express的安装 全局安装:npm install express -gnpm install -g express-generator// ps: 4.0版本把generator分离出来了,需要单独安装3.创建express项目 express 项目名称 cd 项目名称 npm install npm start4.项目中安装数据库 npm install…...

【FLV】记录 H.264的解析
参考 FLV 文件格式分析 知乎大神的FLV文件格式分析。 FLV 首先下发9个字节的FLV 头 -2024-01-08 11:38:29.698 INFO [32196] [evplayer_client_main@153] player clinet run … 2024-01-08 11:38:29.702 INFO [2276] [evplayer_client_main::<lambda_1>::operator ()@14…...

nodejs+vue+ElementUi音乐分享社交网站77l8j
本文介绍的系统主要分为两个部分:一是前台界面:用户通过注册登录可以实现音乐播放、新闻浏览、留言评论等功能;另一个是后台界面:音乐网站管理员对用户信息进行管理,上传更新音乐资源,发布最新音乐资讯等功…...

进销存+小程序商城:实现批发零售企业的互联网转型与管理升级
在当今互联网高速发展的时代,越来越多的批发零售企业开始开始考虑转型。在这个行业中,企业要想取得更好的发展,就要积极地拥抱互联网。专属的订货商城小程序是企业转型的第一步。通过将进销存与订货商城一体化,企业可以更好地满足…...

Tomcat解压打包文件和并部署
一、文件压缩和上传解压 1.本地打包好dist.tar.gz文件 2.通过xftp拖拽上传到知道文件夹下,或者通过命令: cp dist.tar.gz /path/to/destination/folder注:将dist.tar.gz复制到 /path/to/destination/folder文件夹下,该文件夹只是举个例子怎么复制和解压! 3.进入/path/…...

JDK17
JDK 17是Java开发工具包(Java Development Kit)的一个版本。JDK是用于开发和运行Java应用程序的软件包,它包含了编译器、调试器、运行时环境和其他一些实用工具。JDK 17是Java的最新版本,它提供了许多新的功能、增强和改进。 使用…...

使用Docker运行SRS Stack
SRS Stack | SRS (ossrs.net) Docker 推荐使用Docker运行SRS Stack: docker run --restart always -d -it --name srs-stack -v $HOME/data:/data \-p 2022:2022 -p 2443:2443 -p 1935:1935 -p 8000:8000/udp -p 10080:10080/udp \registry.cn-hangzhou.aliyun…...

git安装教程 Windows 附安装包链接
Git是一款分布式源代码管理工具(版本控制工具) 。 git的作用 当你需要做一个大工程的时候,文件的管理无疑是非常庞大的工作,因为你需要不断的修改更新文件内容,同时可能还要保留旧版本保证可以复原,这样就需要备份多个版本的文件…...

TensorRT(C++)基础代码解析
TensorRT(C)基础代码解析 文章目录 TensorRT(C)基础代码解析前言一、TensorRT工作流程二、C API2.1 构建阶段2.1.1 创建builder2.1.2 创建网络定义2.1.3 定义网络结构2.1.4 定义网络输入输出2.1.5 配置参数2.1.6 生成Engine2.1.7 保存为模型文件2.1.8 释放资源 2.2 运行期2.2.1…...

如何查询MySQL中的树型表
在 MySQL 中查询树型表(即具有层级结构的表)可以使用递归查询或者使用嵌套集模型。下面分别介绍这两种方法: 递归查询:递归查询是通过自连接来实现的,可以使用 WITH RECURSIVE 关键字进行递归查询。假设有一个 catego…...

Programming Abstractions in C阅读笔记:p246-p247
《Programming Abstractions in C》学习第68天,p246-p247总结,总计2页。 一、技术总结 本章通过“the game of nim(尼姆游戏)”,这类以现实生活中事物作为例子进行讲解的情况,往往对学习者要求比较高,需要学习者具备…...

智能寻迹避障清障机器人设计(电路图附件+代码)
附 录 智能小车原理图 智能小车拓展板原理图 智能小车拓展板PCB 智能小车底板PCB Arduino UNO原理图 Arduino UNO PCB 程序部分 void Robot_Traction() //机器人循迹子程序{//有信号为LOW 没有信号为HIGHSR digitalRead(SensorRight);//有信号表明在白…...

设计模式-- 3.适配器模式
适配器模式 将一个类的接口转换成客户希望的另外一个接口。使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 角色和职责 请求者(client):客户端角色,需要使用适配器的对象,不需要关心适配器内部的实现,…...