Elastic search点点滴滴

2024-03-08 14:38
文章标签 search elastic 点点滴滴

本文主要是介绍Elastic search点点滴滴,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在打造集中化日志那篇中,稍微提了下Elastic search。
Elk打造集中化日志

Elastic search是Elk的核心,写的时候重点也放在它上面,不过还是觉得深度挖掘得不是太够,所以决定再另写一篇重点介绍下Elastic search。

ES集群

正如Elastic的本义一样,ES就是为扩展而生,天生就是支持分布式。这意味着我们可以对ES进行横向扩展,且不需要付出沉重的代价。添加或者删除节点,ES都能很好的处理。

首先介绍几个概念:
cluster
代表集群。集群有多个节点,其中有一个为主节点,所有有master资格的节点都有可能被选举成为leader。主从节点是相对集群内部来而言,ES集群是去中心化的,对于集群外部,集群是没有中心节点的,从外部来看,ES集群就是个逻辑整体,与任何一个节点的通信和与整个es集群通信是等价的。leader主要是负责在集群内部维护集群的状态,对外则和所有其他节点是一样的。这就不会发生Hadoop那样namenode故障导致集群不可用的状况。

shards
代表索引分片。es将一个完整的索引分成多个分片,这样就可以把一个大的索引拆分成多个,分布到不同的节点上,构成分布式搜索。分片的数量只能在索引创建前指定,并且索引创建后不能更改,默认是5个。可以通过index.number_of_shards 修改。

replicas
代表索引副本,es可以设置多个索引的副本,副本的作用主要就是容错。默认是1个,可以通过index.number_of_replicas修改。

recovery
代表数据恢复或叫数据重新分布,es在有节点加入或退出时会根据机器的负载对索引分片进行重新分配,挂掉的节点重新启动时也会进行数据恢复。

gateway
代表es索引的持久化存储方式,es默认是先把索引存放到内存中,当内存满了时再持久化到硬盘。当这个es集群关闭再重新启动时就会从gateway中读取索引数据。es支持多种类型的gateway,有本地文件系统(默认),分布式文件系统,Hadoop的HDFS和amazon的s3云存储服务。

discovery.zen
代表es的自动发现节点机制,es是一个基于p2p的系统,它先通过广播寻找存在的节点,再通过多播协议来进行节点之间的通信,同时也支持点对点的交互。

Transport
代表es内部节点或集群与客户端的交互方式,默认内部是使用tcp协议进行交互。

先测试一下,我启动了三个ES实例分别在:
10.0.250.90 9200 9300
10.0.250.90 9201 9301
10.0.250.91 9200 9200
ES上有两个索引,一个是.es一个是logstash-*。打开head节点看下集群的节点状态
这里写图片描述
.es索引有一个分片,而logstash索引总共有10个分片,各自都是1个副本,总共就是22个分片均匀分布在不同的es节点上。节点1和2各有7个分片,而节点3有8个。

这时候如果我们继续做扩展,比如加一个节点。这时候就会进行reshard,
这里写图片描述
22个节点被均匀分布到4个节点上。如果节点被扩到22个,那就正好每个节点 1个分片。如果继续扩,那就意味着有节点不需要处理写请求,可以将多出来的专门用于处理读请求。

我们此时再将节点4的进程kill掉
这里写图片描述
集群健康值变为了黄色,在黄色前应该有个红色的状态,当有主分片的节点故障时会显示红色,代表集群不能正常提供服务,此时进行reshard,leader会把相应副本分片提升为主分片,此时集群可以正常提供服务,就变成了黄色。

ES索引

索引是一个逻辑存储空间,分片才是实际的物理存储,每个分片都只有索引数据一部分 。节点会通过集群内部的Gossip协议交换集群状态,从而所有节点信息都是对等的。

以上图的索引分布为例,
1. 客户端访问es-node-1,要求获取.eslogs的相关文档。
2. es-node-1计算出该文档归属于分片0,于是将请求转发给es-node-3,由节点3继续处理。
3. 节点3处理完请求后将结果返回给节点1,再返回给客户端。
4. 节点1为请求节点,相应的节点3为处理节点

对于写请求,也是类似的,但是有点差别,请求节点将写请求根据路由规则转发后,处理节点对主分片做写操作,做完后该处理节点再转发请求给相应的备份分片节点,备份分片写操作完成后,处理节点会汇报成功给请求节点,由请求节点报告成功给客户端。

默认情况下,主分片需要通过仲裁(Quorum),确认大部分分片拷贝(分片拷贝可以使主要分片或者副本分片,两者均可)有效时,才会发起一个写操作。这样做的目的是为了防止将数据写入到网络中”错误的一侧(Wrong Side)”。仲裁的公式如下:

int( (primary + number_of_replicas) / 2 ) + 1

number_of_replicas是指定在索引设置中的副本分片的数量,不是当前处于活动状态的副本分片数量。如果在索引中指定了有3个副本分片的话,那么quorum的值就是3

那么当只启动了两个节点时,那么就无法满足quorum,从而导致备份分片的写操作不会执行。

如果不能通过仲裁,ES会等待一段时间,默认是1分钟。

这篇关于Elastic search点点滴滴的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/787404

相关文章

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close

JavaScript正则表达式六大利器:`test`、`exec`、`match`、`matchAll`、`search`与`replace`详解及对比

在JavaScript中,正则表达式(Regular Expression)是一种用于文本搜索、替换、匹配和验证的强大工具。本文将深入解析与正则表达式相关的几个主要执行方法:test、exec、match、matchAll、search和replace,并对它们进行对比,帮助开发者更好地理解这些方法的使用场景和差异。 正则表达式基础 在深入解析方法之前,先简要回顾一下正则表达式的基础知识。正则

插件maven-search:Maven导入依赖时,使用插件maven-search拷贝需要的依赖的GAV

然后粘贴: <dependency>    <groupId>mysql</groupId>    <artifactId>mysql-connector-java</artifactId>    <version>8.0.26</version> </dependency>

广度优先搜索Breadth-First-Search

目录  1.问题 2.算法 3.代码 4.参考文献  1.问题         广度优先搜索,稍微学过算法的人都知道,网上也一大堆资料,这里就不做过多介绍了。直接看问题,还是从下图招到一条从城市Arad到Bucharest的路径。  该图是连通图,所以必然存在一条路径,只是如何找到最短路径。 2.算法 还是贴一个算法的伪代码吧: 1 procedu

Elastic Stack--ES集群加密及Kibana的RBAC实战

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 学习B站博主教程笔记:  最新版适合自学的ElasticStack全套视频(Elk零基础入门到精通教程)Linux运维必备—ElasticSearch+Logstash+Kibana精讲_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1VMW3e6Ezk/?sp

【0323】Postgres内核之 hash table sequentially search(seq_scan_tables、num_seq_scans)

0. seq scan tracking 我们在这里跟踪活跃的 hash_seq_search() 扫描。 需要这种机制是因为如果扫描正在进行时发生桶分裂(bucket split),它可能会访问两次相同的条目,甚至完全错过某些条目(如果它正在访问同一个分裂的桶中的条目)。因此,如果正在向表中插入数据,我们希望抑制桶分裂。 在当前的使用中,这种情况非常罕见,因此只需将分裂推迟到下一次插入即可。

Android Settings搜索Search方案分析

Android开发会遇到一些自写界面需要允许被搜索,或者三方应用挂靠在Settings,用户也希望能被搜索。 在知道怎么添加之前,得先了解下整个框架,才能更好地加入我们自己的代码。   这里稍微整理了下整个search database数据如何索引加载流程。 Settings搜索界面是由SearchFragment展现,当用户在Settings主页中点击搜索图标,会启动到SearchAc

Elastic Stack--ES的DSL语句查询

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 学习B站博主教程笔记:  最新版适合自学的ElasticStack全套视频(Elk零基础入门到精通教程)Linux运维必备—ElasticSearch+Logstash+Kibana精讲_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1VMW3e6Ezk/?spm_

SIM(Search-based user interest modeling)

导读 我们对电商场景兴趣建模的理解愈发清晰:1. 通过预估目标item的信息对用户过去的行为做search提取和item相关的信息是一个很核心有效的技术。2. 更长的用户行为序列信息对CTR建模是非常有效且珍贵的。从用户的角度思考,我们也希望能关注用户长期的兴趣。但是当前的search方法无论是DIN和DIEN都不允许我们在线对一个超长的行为序列比如1000以上做有效搜索。所以我们的目标就比较明

[LeetCode] 240. Search a 2D Matrix II

题:https://leetcode.com/problems/search-a-2d-matrix-ii/description/ 题目 Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the following properties: Integers i