四、Elasticsearch 进阶

news2024/9/24 15:20:58

自定义目录

  • 4.1 核心概念
    • 4.1.1 索引(Index)
    • 4.1.2 类型(Type)
    • 4.1.3 文档(Document)
    • 4.1.3 字段(Field)
    • 4.1.5 映射(Mapping)
    • ==4.1.6 分片(Shards)==
    • ==4.1.7 副本(Replicas)==
    • 4.1.8 分配(Allocation)
  • 4.2 系统架构
  • 4.3 分布式集群
    • 4.3.1 单节点集群
    • 4.3.2 故障转移
    • 4.3.3 水平扩容
    • 4.3.4 应对故障
  • ==4.4 路由计算==
  • ==4.5 分片控制==
    • 4.5.1 写流程
    • 4.5.2 读流程
    • 4.5.3 更新流程
    • 4.5.4 多文档操作流程
  • 4.6 分片原理

4.1 核心概念

4.1.1 索引(Index)

一个索引就是一个拥有几分相似特征的文档的集合。在一个集群中,可以定义任意多的索引。

4.1.2 类型(Type)

在一个索引中,你可以定义一种或多种类型。(类似于MySQL中的表)
在 ES 7.x 中,默认不再支持自定义索引类型(默认类型为:_doc)

4.1.3 文档(Document)

ElasticSearch中 一条数据就是一个文档

4.1.3 字段(Field)

相当于是数据表的字段,是文档的属性。

4.1.5 映射(Mapping)

对 ES 中的每个字段做一些限制,这个就称之映射

如:某个字段的数据类型、默认值、分析器、是否被索引等等。这些都是映射里面可以设置的

4.1.6 分片(Shards)

一个索引可以存储超出单个节点硬件限制的大量数据。

比如,一个具有 10 亿文档数据的索引占据 1TB 的磁盘空间,而任一节点都可能没有这样大的磁盘空间。或者单个节点处
理搜索请求,响应太慢。

为了解决这个问题,Elasticsearch 提供了将索引划分成多份的能力,每一份就称之为分片。当你创建一个索引的时候,你可以指定你想要的分片的数量。每个分片本身也是一个功能完善并且独立的“索引”,这个“索引”可以被放置到集群中的任何节点上。

分片很重要,主要有两方面的原因:

  • 允许你水平分割 / 扩展你的内容容量。
  • 允许你在分片之上进行分布式的、并行的操作,进而提高性能/吞吐量。

至于一个分片怎样分布,它的文档怎样聚合和搜索请求,是完全由 Elasticsearch 管理的,对于作为用户的你来说,这些都是透明的,无需过分关心。

4.1.7 副本(Replicas)

在一个网络 / 云的环境里,失败随时都可能发生,在某个分片/节点不知怎么的就处于离线状态,或者由于任何原因消失了,这种情况下,有一个故障转移机制是非常有用并且是强烈推荐的。为此目的,Elasticsearch 允许你创建分片的一份或多份拷贝,这些拷贝叫做复制分片(副本)。

复制分片之所以重要,有两个主要原因:

  • 在分片/节点失败的情况下,提供了高可用性。因为这个原因,复制分片从不与原/主要(original/primary)分片置于同一节点上是非常重要的。
  • 扩展你的搜索量/吞吐量,因为搜索可以在所有的副本上并行运行

总之,每个索引可以被分成多个分片。一个索引也可以被复制 0 次(意思是没有复制)或多次。一旦复制了,每个索引就有了主分片(作为复制源的原来的分片)和副本(主分片的拷贝)。分片和副本的数量可以在索引创建的时候指定。在索引创建之后,你可以在任何时候动态地改变副本的数量,但是你事后不能改变分片的数量。

4.1.8 分配(Allocation)

将分片分配给某个节点的过程,包括分配主分片或者副本。



4.2 系统架构

一个运行中的 Elasticsearch 实例称为一个节点,而集群是由一个或者多个拥有相同cluster.name 配置的节点组成, 它们共同承担数据和负载的压力。当有节点加入集群中或者从集群中移除节点时,集群将会重新平均分布所有的数据。

当一个节点被选举成为主节点时, 它将负责管理集群范围内的所有变更(例如增加、删除索引,或者增加、删除节点等。) 而主节点并不需要涉及到文档级别的变更和搜索等操作,所以当集群只拥有一个主节点的情况下,即使流量的增加它也不会成为瓶颈。

任何节点都可以成为主节点。我们的示例集群就只有一个节点,所以它同时也成为了主节点。

作为用户,我们可以将请求发送到集群中的任何节点 ,包括主节点。 每个节点都知道任意文档所处的位置,并且能够将我们的请求直接转发到存储我们所需文档的节点。 无论我们将请求发送到哪个节点,它都能负责从各个包含我们所需文档的节点收集回数据,并将最终结果返回給客户端。



4.3 分布式集群

4.3.1 单节点集群

我们在包含一个空节点的集群内创建名为 users 的索引,为了演示目的,我们将分配 3个主分片和一份副本(每个主分片拥有一个副本分片)

{
	 "settings" : {
		 "number_of_shards" : 3,
		 "number_of_replicas" : 1
	 }
}

我们的集群现在是拥有一个索引的单节点集群。所有 3 个主分片都被分配在 node-1 。
在这里插入图片描述
在这里插入图片描述



4.3.2 故障转移

当集群中只有一个节点在运行时,意味着会有一个单点故障问题——没有冗余。

幸运的是,我们只需再启动一个节点即可防止数据丢失。当你在同一台机器上启动了第二个节点时,只要它和第一个节点有同样的 cluster.name 配置,它就会自动发现集群并加入到其中。

但是在不同机器上启动节点的时候,为了加入到同一集群,你需要配置一个可连接到的单播主机列表。之所以配置为使用单播发现,以防止节点无意中加入集群。只有在同一台机器上运行的节点才会自动组成集群。

如果启动了第二个节点,我们的集群将会拥有两个节点的集群 : 所有主分片和副本分片都已被分配
在这里插入图片描述
在这里插入图片描述

4.3.3 水平扩容

怎样为我们的正在增长中的应用程序按需扩容呢?

当启动了第三个节点,我们的集群将会拥有三个节点的集群 : 为了分散负载而对分片进行重新分配
在这里插入图片描述
在这里插入图片描述

但是如果我们想要扩容超过 6 个节点怎么办呢?
主分片的数目在索引创建时就已经确定了下来。实际上,这个数目定义了这个索引能够存储 的最大数据量。

但是,读操作——搜索和返回数据——可以同时被主分片 或 副本分片所处理,所以当你拥有越多的副本分片时,也将拥有越高的吞吐量

在运行中的集群上是可以动态调整副本分片数目的,我们可以按需伸缩集群。让我们把副本数从默认的 1 增加到 2

users 索引现在拥有 9 个分片:3 个主分片和 6 个副本分片。 这意味着我们可以将集群扩容到 9 个节点,每个节点上一个分片。相比原来 3 个节点时,集群搜索性能可以提升 3 倍

在这里插入图片描述
在这里插入图片描述

4.3.4 应对故障

我们关闭第一个节点,这时集群的状态为:关闭了一个节点后的集群。
在这里插入图片描述
我们关闭的节点是一个主节点。而集群必须拥有一个主节点来保证正常工作,所以发生的第一件事情就是选举一个新的主节点: Node 2 。在我们关闭 Node 1 的同时也失去了主分片 1 和 2 ,并且在缺失主分片的时候索引也不能正常工作。 如果此时来检查集群的状况,我们看到的状态将会为 red :不是所有主分片都在正常工作
在这里插入图片描述
幸运的是,在其它节点上存在着这两个主分片的完整副本, 所以新的主节点立即将这些分片在 Node 2 和 Node 3 上对应的副本分片提升为主分片, 此时集群的状态将会为yellow。



4.4 路由计算

当索引一个文档的时候,文档会被存储到一个主分片中。 Elasticsearch 如何知道一个文档应该存放到哪个分片中呢?

这个过程是根据下面这个公式决定的:
在这里插入图片描述

routing 是一个可变值,默认是文档的 _id ,也可以设置成一个自定义的值。 routing 通过hash 函数生成一个数字,然后这个数字再除以 number_of_primary_shards (主分片的数量)后得到余数 。这个分布在 0 到 number_of_primary_shards-1 之间的余数,就是我们所寻求的文档所在分片的位置

这就解释了为什么我们要在创建索引的时候就确定好主分片的数量 并且永远不会改变这个数量:因为如果数量变化了,那么所有之前路由的值都会无效,文档也再也找不到了。

所有的文档 API( get 、 index 、 delete 、 bulk 、 update 以及 mget )都接受一个叫做 routing 的路由参数 ,通过这个参数我们可以自定义文档到分片的映射。一个自定义的路由参数可以用来确保所有相关的文档都被存储到同一个分片中



4.5 分片控制

4.5.1 写流程

4.5.2 读流程

4.5.3 更新流程

4.5.4 多文档操作流程



4.6 分片原理

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

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

相关文章

基于java+springboot+vue实现的游戏账号估价交易平台(文末源码+Lw+ppt)23-555

摘 要 系统根据现有的管理模块进行开发和扩展,采用面向对象的开发的思想和结构化的开发方法对游戏账号估价交易的现状进行系统调查。采用结构化的分析设计,该方法要求结合一定的图表,在模块化的基础上进行系统的开发工作。在设计中采用“自…

【计算机网络篇】数据链路层(1)数据链路层的地位,问题

文章目录 🍔数据链路层在网络体系结构中的地位🍔链路,数据链路,帧🍔数据链路层的三个重要问题🥚封装成帧和透明传输🥚差错检测🥚可靠传输 🍔数据链路层在网络体系结构中的…

Tableau学习——范围-线图、倾斜图

1范围-线图(人工接听数据) 范围-线图:将整体及个体数据特征(均值、最值等)都展示出来了 筛选出某个员工 (1)创建计算字段来表示均值、最大值、最小值 (2)数据处理好后&…

Day61:WEB攻防-PHP反序列化原生类TIPSCVE绕过漏洞属性类型特征

知识点: 1、PHP-反序列化-属性类型&显示特征 2、PHP-反序列化-CVE绕过&字符串逃逸 3、PHP-反序列化-原生类生成&利用&配合 补充:如果在 PHP 类中没有实现某个魔术方法,那么该魔术方法在相应的情况下不会被自动触发。PHP 的魔…

路桥公司知识竞赛活动方案

一、参赛对象 龙建路桥股份有限公司权属企业 二、组织单位 主办单位:龙建路桥股份有限公司委员会 承办单位:黑龙江省龙建路桥第二工程有限公司委员会 三、活动时间 11月(具体时间另行通知) 四、活动地点 龙建松北综合经营生产中心…

基于Java中的SSM框架实现图书仓储管理系统项目【项目源码+论文说明】计算机毕业设计

基于Java中的SSM框架实现图书仓储管理系统演示 摘要 随着社会经济的迅速发展和科学技术的全面进步,计算机事业的飞速发展,以计算机与通信技术为基础的信息系统正处于蓬勃发展的时期,随着经济文化水平的显著提高,人们对生活质量及…

Token的详解

Token的详解 文章目录 Token的详解前言:简介:使用token: 前言: 为什么会用到Token,因为cookie和session一些自身的缺点,限制了一些功能的实现,比如: cookie:优点是节省服务器空间,缺点不安全。…

如何监控企业微信聊天记录内容

假如说老板可以查看到你的微信聊天记录,那么此时此刻的你,会不会瑟瑟发抖? 其实不用啦,监控企业微信聊天记录,也是需要员工个人同意的。 下面我介绍两种方法,看看你属于哪种 方法一 企业微信自带功能 …

倒计时3天!2024“智衡杯”智能感知挑战赛即将启幕!

为推动智能感知算法领域的发展,发掘高品质的智能感知算法,并促进其在实际应用中落地,“2024‘智衡杯’智能感知挑战赛”将于3月26日盛大启幕! 本次大赛由全国人工智能计量技术委员会、先进技术成果长三角转化中心、北京航天计量测…

深入浅出Reactor和Proactor模式

Reactor模式和Proactor模式是两种常见的设计模式,用于处理事件驱动的并发编程。它们在处理IO操作时有着不同的工作方式和特点。 对于到来的IO事件(或是其他的信号/定时事件),又有两种事件处理模式: Reactor模式&…

阿里云服务器“镜像”操作系统选择方法(超详细)

阿里云服务器镜像怎么选择?云服务器操作系统镜像分为Linux和Windows两大类,Linux可以选择Alibaba Cloud Linux,Windows可以选择Windows Server 2022数据中心版64位中文版,阿里云服务器网aliyunfuwuqi.com来详细说下阿里云服务器操…

CAN总线位时序

一. 简介 前面文章学习了 CAN总线协议,即五种数据帧格式。 I.MX6ULL 带有 CAN 控制器外设,叫做 FlexCAN,FlexCAN 符合 CAN2.0B 协议。 本文来学习一下 CAN总线的位时序。 二. CAN总线位时序 CAN 总线以帧的形式发送数据,但是…

Teable——强大的在线数据电子表格

公众号:【可乐前端】,每天3分钟学习一个优秀的开源项目,分享web面试与实战知识,也有全栈交流学习摸鱼群,期待您的关注! 每天3分钟开源 hi,这里是每天3分钟开源,很高兴又跟大家见面了&#xff0…

C++ Thread 源码 观后 自我感悟 整理

Thread的主要数据成员为_Thr 里面存储的是线程句柄和线程ID 先看看赋值运算符的移动构造 最开始判断线程的ID是否不为0 _STD就是使用std的域 如果线程ID不为0,那么就抛出异常 这里_New_val使用了完美转发,交换_Val和_New_val的值 _Thr _STD exchange(_…

BRAM底层原理详细解释(1)

目录 一、原语 二、端口简述 2.1 端口简介 2.2 SDP端口映射 三、端口信号含义补充说明 3.1 字节写使能(Byte-Write Enable)- WEA and WEBWE: 3.2 地址总线—ADDRARDADDR and ADDRBWRADDR 3.3 数据总线—DIADI, DIPADIP, DIBDI, and D…

Pycharm小妙招之Anaconda离线配环境

Pycharm小妙招之Anaconda离线配环境———如何给无法联网的电脑配python环境? 1. 预备工作2. 电脑1导出包2.1 环境路径2.2 压缩py38导出至U盘 3. 电脑2导入包4. 验证是否导入成功4.1 conda查看是否导入4.2 pycharm查看能否使用 1. 预备工作 WINDOWS系统电脑1(在线)…

AI跟踪报道第34期-新加坡内哥谈技术-AI新闻快报:世界即将改变

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

手撕算法-买卖股票的最佳时机(买卖一次)

描述 分析 只能买卖一次。希望在最低处买,最高处卖。 怎么判断最低处?遍历时存储已遍历的最小值。 怎么判断最高处?遍历时,比较当前位置和最小值的差,取较大的。 代码 class Solution {public int maxProfit(int…

HCIP实验02

实验步骤 1、R1和R2使用ppp链路之连,R2和R3把2条ppp链路捆绑为ppp直连 [R2]int Mp-group 0/0/0 [R2]int Serial 3/0/1 [R2-Serial3/0/1]ppp mp Mp-group 0/0/0 [R2-Serial3/0/1]int Serial 4/0/0 [R2-Serial4/0/0]ppp mp Mp-group 0/0/0 [R3]int Mp-group 0/0/…

基于Java中的SSM框架实现矿场仓储管理系统项目【项目源码+论文说明】

基于Java中的SSM框架实现矿场仓储管理系统演示 摘要 随着数字化的建设,根据当时的发展和用户的需求,选择使用矿产资源管理的信息都是可以用作示范。物质生活已经达到了人们的基本要求,人们追求生活层次越来越高,享受生活成为人们…