Elasticsearch:用例、架构和 6 个最佳实践

1. 什么是 Elasticsearch?

在这里插入图片描述

Elasticsearch 是一个开源分布式搜索和分析引擎,专为处理大量数据而设计。它建立在 Apache Lucene 之上,并由Elastic 支持。Elasticsearch 用于近乎实时地存储、搜索和分析结构化和非结构化数据。

Elasticsearch 的一个主要特性是其可扩展性,这使得它能够处理集群中多个节点的大型数据集。这使得它成为企业搜索、日志分析和监控应用程序的热门选择。

Elasticsearch 提供了用于与搜索引擎交互的 RESTful API,并支持多种查询类型,包括全文搜索、短语搜索和聚合。它还包括各种搜索和分析功能,例如分面、过滤、排序和突出显示。

除了搜索和分析之外,Elasticsearch 还支持各种用例,例如应用程序搜索、安全分析和业务分析。它拥有庞大而活跃的用户和开发者社区,并提供许多插件和集成来扩展其功能。

2. 本文核心章节

  • 4 种常见的 Elasticsearch 用例
  • Elasticsearch 架构
  • 云端的 Elasticsearch
  • Kubernetes 上的 Elasticsearch
  • Elasticsearch 性能问题
  • 优化 Elasticsearch 性能的 6 个最佳实践

3. 4 种常见的 Elasticsearch 用例

Elasticsearch 经常与 ELK 技术栈中的 Logstash 和 Kibana 一起使用。以下是 Elasticsearch 的一些常见用例:

  1. 可观察性:用于监控和了解复杂系统。Elasticsearch
    因其实时搜索和分析功能而成为可观察性的热门选择。它允许从日志、指标和跟踪等不同来源收集和分析数据,并提供可视化和警报以帮助快速识别和解决问题。Elasticsearch
    可以与 Kibana、Beats 和 Logstash 等其他工具集成,以提供完整的可观察性解决方案。
  2. 全文搜索:支持多种搜索查询,包括模糊搜索、短语搜索和自动完成。Elasticsearch
    可用于不同类型的应用程序,例如电子商务网站、文档管理系统和社交网络,以提供快速准确的搜索结果。
  3. 实时日志分析:使组织能够监控其系统中的错误、安全问题和其他异常情况。通过实时收集和分析来自不同来源的日志,Elasticsearch
    可以提供有关系统性能的宝贵见解,并有助于快速识别和解决问题。Elasticsearch 可以与 Logstash 和 Beats
    等工具集成,以简化日志收集和分析过程。
  4. 安全分析:用于实时检测和调查安全威胁。它可以分析不同类型的数据(例如网络流量、用户行为和系统日志)以识别异常和威胁。Elasticsearch
    可以与其他安全工具(例如 Suricata、Zeek 和 Snort)集成,以提供全面的安全解决方案。

4. Elasticsearch 架构

以下是 Elasticsearch 的核心组件:

4.1 集群

Elasticsearch 集群是一组由一个或多个 Elasticsearch 节点组成的集群,它们共同存储、索引和搜索数据。集群通过将数据分布在多个节点上来提供水平可扩展性、容错能力和高可用性。集群通常用于存储和分析大量数据,例如日志文件或应用程序指标。
在这里插入图片描述

4.2 节点

在这里插入图片描述

在 Elasticsearch 中,节点是存储数据并参与集群搜索和索引功能的单个服务器。Elasticsearch 集群中的每个节点都分配有一个唯一标识符,它们相互通信以协调集群的操作。
Elasticsearch 集群中有三种类型的节点

  1. 主节点:负责协调集群中的管理任务,例如创建或删除索引、管理集群的状态以及将分片分配给数据节点。每个集群必须至少有一个主节点,并且可以添加其他符合主节点条件的节点以实现冗余。
  2. 数据节点:负责存储和索引集群中的数据。每个数据节点存储集群的一部分数据,集群的整体存储容量随集群中数据节点的数量而变化。
  3. 客户端节点:用于将搜索和索引请求路由到集群中适当的数据节点。客户端节点不存储数据,但提供与集群交互的轻量级接口,从而提高搜索和索引操作的性能。

4.3 端口

  • 端口 92009300 分别是 Elasticsearch 用于客户端与服务器通信和节点到节点通信的网络端口。
  • 端口 9200 是用于向 Elasticsearch 发送 RESTful API 请求的默认 HTTP 端口。客户端(例如 Kibana 或 Logstash)使用端口 9200 向 Elasticsearch 发送请求以索引和搜索数据。端口 9200 也是Elasticsearch 内置的基于 HTTP 的监控 API 的默认端口。
  • 端口 9300 是 Elasticsearch 用于节点间通信的默认端口。节点使用端口 9300 相互通信以共享数据、复制分片和协调集群操作。端口 9300 用于使用 Elasticsearch 的专有协议(而非HTTP)进行高效通信。

4.4 碎片

在 Elasticsearch 中,分片是代表较大索引子集的数据单位。每个分片都是一个独立的索引,可以存储在单个节点上,也可以分布在集群中的多个节点上,以实现水平可扩展性。分片允许 Elasticsearch 将大型数据集拆分成较小的部分,并将它们分布在多个节点上,从而实现对大量数据的快速搜索和分析。

4.5 副本

在这里插入图片描述

在 Elasticsearch 中,副本是主分片的副本,存储在集群中的单独节点上。副本提供冗余和高可用性,允许 Elasticsearch 在发生节点故障或网络问题时继续处理请求。副本用于在集群中分配搜索和索引负载并缩短查询响应时间。

分片是代表较大索引子集的数据单位,而副本是存储在单独节点上以实现冗余的分片副本。每个分片可以有一个或多个副本,分片和副本的总数决定了集群中可以存储的数据量和容错级别。

4.6 分析器analyzer

在这里插入图片描述

在Elasticsearch中,标准和简单分析器是两个内置分析器,可用于在索引和搜索过程中进行文本分析。

标准分析器是 Elasticsearch 中使用的默认分析器。它通过将文本拆分为标记、删除停用词以及执行词干提取来提供复杂的文本分析。

简单分析器是一种基本分析器,它根据空格和标点符号将文本划分为术语,而无需进行任何额外处理。简单分析器适用于索引和搜索不需要复杂文本分析的数据,例如日志文件或系统指标。

4.7 文档document

在 Elasticsearch 中,文档是存储和索引的基本信息单位。文档可以是任何类型的数据,例如文本、数字或结构化数据,并以 JSON 格式表示。Elasticsearch 根据搜索查询检索文档,这些查询可以匹配文档中的特定字段或值。
在这里插入图片描述

4.8 JSON REST API

JSON REST API 是 Elasticsearch 的核心组件,允许客户端使用 JSON 格式的 HTTP 请求与 Elasticsearch 交互。REST API 提供了一个简单而灵活的接口,用于执行各种操作,包括索引和搜索数据、管理索引和集群以及配置设置和映射。JSON 格式允许轻松解析和序列化数据,从而可以轻松地将 Elasticsearch 与各种编程语言和工具集成。
在这里插入图片描述

5. 云端的 Elasticsearch

Elasticsearch 可以在多种云平台上运行,包括 Amazon Web Services (AWS)、Microsoft Azure 和 Google Cloud Platform (GCP)。在云上运行 Elasticsearch 可以带来许多好处,包括:

  • 可扩展性:使用基于云的 Elasticsearch,您可以轻松地扩大或缩小集群以满足不断变化的数据需求,而不必担心硬件限制。
  • 高可用性:云提供商提供强大的基础设施和可用性保证,因此您可以确保您的 Elasticsearch 集群始终正常运行。
  • 易于管理:许多云提供商提供托管的 Elasticsearch 服务,可处理软件更新、备份和安全等任务,让您的团队可以专注于其他任务。
  • 节省成本:基于云的 Elasticsearch
    比运行您自己的基础设施更具成本效益,因为您只需为您使用的部分付费,并且可以轻松地扩大或缩小规模以控制成本。

在云上运行 Elasticsearch 时,需要考虑数据安全、网络延迟以及备份和恢复选项等因素。选择合适的云提供商并规划数据需求的长期增长也很重要。

6. Kubernetes 上的 Elasticsearch

Kubernetes 最初旨在管理无状态工作负载,但它也可用于运行有状态工作负载,例如数据库、消息队列和搜索引擎。Elasticsearch 集群是有状态的,这意味着它们需要持久存储和稳定的网络身份,这在传统容器环境中很难管理。Kubernetes 提供了多种功能,例如 PersistentVolumes 和 StatefulSets,可让您轻松部署、扩展和管理有状态工作负载。

PersistentVolumes 用于为 Kubernetes 工作负载提供持久存储。它们独立于 Pod,可以动态附加和分离,从而允许在 Pod 重启后保留数据。

StatefulSet 用于管理需要稳定网络身份和有序部署的有状态工作负载。Stateful Set 提供有序部署、稳定网络身份和动态扩展等功能,让您能够轻松地在 Kubernetes 中部署和管理有状态工作负载。

**在 Kubernetes 上部署 Elasticsearch 集群可以简化集群的配置、扩展和管理过程。**Elasticsearch 可以使用 Kubernetes StatefulSets 进行水平扩展,从而轻松扩展搜索和分析基础架构。Kubernetes 提供了一个用于管理基础架构和应用程序的单一平台。

7. Elasticsearch 性能问题

Elasticsearch 是一款功能强大且用途广泛的搜索和分析引擎,但与任何复杂系统一样,它也会遇到性能问题。以下是一些常见的 Elasticsearch 性能问题及其解决方法:

  • 内存使用情况:Elasticsearch 需要大量内存才能高效运行。如果 Elasticsearch 内存不足,它可能会变慢甚至崩溃。
  • 磁盘使用情况:Elasticsearch 将数据存储在磁盘上,如果磁盘已满或者速度很慢Elasticsearch 性能可能会受到影响。
  • 查询性能:Elasticsearch 提供了强大的查询语言,但有些查询可能很昂贵并影响性能。
  • 索引性能:Elasticsearch 在添加数据时会对其进行索引,如果索引速度慢,则会影响 Elasticsearch 的整体性能。
  • 硬件限制:Elasticsearch 性能严重依赖于硬件,如果硬件不足,Elasticsearch 性能可能会受到影响。
  • 网络问题:Elasticsearch 性能也可能受到网络问题的影响,例如延迟或数据包丢失。

8. 优化 Elasticsearch 性能的 6 个最佳实践

8.1 冻结索引Freezing Indices

Elasticsearch 将数据存储在分片中,查询这些分片会耗费大量资源。提高查询性能的一种方法是“冻结”旧的或不经常访问的索引。冻结索引会将其移动到单独的节点,从而减少执行查询时需要搜索的分片数量。冻结的索引仍可查询,但不允许更新和新写入。

8.2 与配置容量 Provisioning Capacity

正确配置容量对于 Elasticsearch 性能至关重要。这包括确保有足够的资源(例如 CPU内存和存储)来处理预期的查询和索引工作负载。配置容量应基于预期的查询和索引吞吐量,并应根据需要进行监控和调整。

8.3 组织索引数据

Elasticsearch 中数据的组织方式会对性能产生重大影响。为了优化性能,以反映查询模式的方式组织索引数据非常重要。例如,如果查询经常根据日期范围搜索文档,则按日期组织数据可能会很有帮助。这可以通过创建多个索引并使用索引别名来提供单个查询端点来实现。

8.4 减少字段索引结构更新

ES映射索引结构更新(定义索引的架构)可能会占用大量资源并影响查询性能。为了最大限度地减少映射更新的影响,重要的是避免频繁更改映射。相反,应创建反映预期数据架构的映射,并仅在必要时进行更改。

8.5 优化线程池

线程池用于在 Elasticsearch 中执行查询和索引请求。为了优化性能,确保线程池配置正确并调整大小非常重要。线程池的大小应根据预期的查询和索引吞吐量进行调整,并应根据需要进行监控和调整。此外,确保对每项任务(例如搜索或索引)使用适当类型的线程池也很重要。

9. 小结

以上就说关于Elasticsearch场景用例,基础架构以及相关的性能问题分析和调优实战分享,希望能带给大家一定的帮助~

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

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

相关文章

4.3.2 C++ 平面拟合的实现

4.3.2 C 平面拟合的实现 参考教程: gaoxiang12/slam_in_autonomous_driving: 《自动驾驶中的SLAM技术》对应开源代码 (github.com) Eigen打印输出_打印eigen矩阵-CSDN博客 1. 编写 Plane fitting 1.1 创建文件夹 通过终端创建一个名为Plane_fitting的文件夹以保…

文件操作与IO(下)

✨个人主页: 不漫游-CSDN博客 目录 前言 流对象 InputStream OutputStream 运用 在控制台进行输入并写入文件 进行普通文件的复制 前言 之前的文章文件操作与IO(上)已经介绍了文件系统的相关操作,这次的主角是文件内容的相关…

SpringBoot 框架学习笔记(七):Thymeleaf、拦截器 和 文件上传实现(解决了文件重名 和 按日期分目录存放问题)

1 Thymeleaf 1.1 基本介绍 (1)官方文档:Tutorial: Using Thymeleaf (2)Thymeleaf 是什么 Thymeleaf 是一个跟 Velocity、FreeMarker 类似的模板引擎,可完全替代 JSPThymeleaf 是一个 java 类库&#xf…

.net core webapi 自定义异常过滤器

1.定义统一返回格式 namespace webapi;/// <summary> /// 统一数据响应格式 /// </summary> public class Results<T> {/// <summary>/// 自定义的响应码&#xff0c;可以和http响应码一致&#xff0c;也可以不一致/// </summary>public int Co…

vue 打包时候的分包

export default defineConfig({plugins: [vue()],resolve: {alias: {: fileURLToPath(new URL(./src/, import.meta.url))}},// 分包&#xff0c;node_modules中的单独打包成名字为vendor的js文件build: {rollupOptions: {manualChunks(id) {if (id.includes(node_modules)) {r…

EF8 学习过程中的问题和解决方案

一、varchar类型字段如果为null 无法使用contains来判断是否包含字符串 1. 有问题的代码&#xff1a; contractList _dbcontext.contractHeads.Where(u > u.code.Contains(queryStr) || u.name.Contains(queryStr) || u.companyName.Contains(queryStr) || u.customerNa…

uniapp开启数据压缩的坑-SpringBoot-gzip

1、服务器配置 服务端开启的数据压缩配置 server:port: ${port:8881}servlet:# 应用上下文路径context-path: /orderserverundertow:threads:io: 4worker: 500buffer-size: 2048# 开启Gzip压缩&#xff0c;compression:# 开启压缩enabled: true# 对json格式内容进行压缩mime-…

KCTF 闯关游戏:1 ~ 7 关

前言 看雪CTF平台是一个专注于网络安全技术竞赛的在线平台&#xff0c;它提供了一个供网络安全爱好者和技术专家进行技术交流、学习和竞技的环境。CTF&#xff08;Capture The Flag&#xff0c;夺旗赛&#xff09;是网络安全领域内的一种流行竞赛形式&#xff0c;起源于1996年…

嵌入式全栈开发学习笔记---数据结构(排序算法)

目录 排序的分类 稳定排序与不稳定排序 内部排序和外部排序 算法的复杂性 常见的排序算法 直接插入排序 希尔排序 快速排序 简单选择排序 堆排序 归并排序 基数排序 常见的排序总结 到目前为止&#xff0c;数据结构的线性结构和树状结构就都讲完了&#xff0c;本节…

使用 MongoDB 构建 AI:Flagler Health 的 AI 旅程如何彻底改变患者护理

Flagler Health 致力于为慢性病患者提供支持&#xff0c;为其匹配合适的医生以提供合适的护理。 通常&#xff0c;身患严重病痛的患者面临的选择有限&#xff0c;他们往往需要长期服用阿片类药物&#xff0c;或寻求成本高昂的侵入性外科手术干预。遗憾的是&#xff0c;后一种方…

SQL语句创建数据库(增删查改)

SQL语句 一.数据库的基础1.1 什么是数据库1.2 基本使用1.2.1 连接服务器1.2.2 使用案例 1.2 SQL分类 二.库的操作2.1 创建数据库2.2 创建数据库示例2.3 字符集和校验规则2.3.1 查看系统默认字符集以及校验规则2.3.2查看数据库支持的字符集2.3.3查看数据库支持的字符集校验规则2…

Android系统Android.bp文件详解

文章目录 1. 基本语法结构2. 常见模块类型3. 模块属性常见属性包括&#xff1a; 4. 具体示例5. 高级功能5.1. 条件编译5.2. 变量定义与使用5.3. 模块继承 6. 总结 Android.bp 是 Android 构建系统&#xff08;Android Build System&#xff09;中的配置文件&#xff0c;用于描述…

go之命令行工具urfave-cli

一、urfave/cli urfave/cli 是一个声明性的、简单、快速且有趣的包&#xff0c;用于用 Go 构建命令行工具。 二、快速使用 2.1 引入依赖 go get github.com/urfave/cli/v2 2.2 demo package mainimport ("fmt""log""os""github.com/ur…

OpenCV图像滤波(9)getGaussianKernel()函数的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 功能描述 cv::getGaussianKernel() 是 OpenCV 中的一个函数&#xff0c;用于生成一维高斯核。这种核通常用于实现高斯模糊滤波器&#xff0c;该滤波器可以…

备考CISSP,看这一篇就够了!(附备考资料下载)

作者在2023年发布过一篇博文《不报辅导班一次性通过CISSP经验分享》&#xff0c;后台收到很多备考小伙伴的私信咨询&#xff0c;我就基于大家经常问的问题整理了此文章为大家答疑解惑&#xff0c;同时附上备考过程中作者收集到的全部资源&#xff08;见文末&#xff09;&#x…

EasyCVR视频汇聚平台云计算技术核心优势:高效、灵活与可扩展性深度解读

随着科技的飞速发展和社会的不断进步&#xff0c;视频监控已经成为现代社会治安防控、企业管理等场景安全管理中不可或缺的一部分。在这一背景下&#xff0c;EasyCVR视频汇聚平台凭借其强大的云计算技术&#xff0c;展现出了卓越的性能和广泛的应用前景。本文将深入解析EasyCVR…

Rust学习----Rust安装

如何安装Rust&#xff1f; 1.官网&#xff1a;https://www.rust-lang.org/zh-CN/ 2.Linux or Max: curl https://sh.rustup.rs -sSf | sh 3.Windows按官网指导安装。 4.Windows Subsystem for Linux&#xff1a; curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs…

JavaDS —— 位图(BitSet)与 布隆过滤器

位图 引入问题&#xff1a;给40亿个不重复的无符号整数&#xff0c;没排过序。给一个无符号整数&#xff0c;如何快速判断一个数是否在这40亿个数中。 首先要注意 40 亿个数据如果使用 整型&#xff08;int) 来存放的话&#xff0c;就是要 40 亿个整型&#xff0c;一个整型有…

redis面试(十一)锁超时

boolean res lock.tryLock(100, 10, TimeUnit.SECONDS); RedissonLock里面有这样一个方法tryLock()&#xff0c;意思是尝试获取锁的结果。 最大等待时间100s&#xff0c;并且获取到锁之后&#xff0c;10s之内没有释放的话&#xff0c;锁会自动失效。 尝试获取锁超时 time …

【vue3|第20期】vue3中Vue Router路由器工作模式

日期&#xff1a;2024年8月6日 作者&#xff1a;Commas 签名&#xff1a;(ง •_•)ง 积跬步以致千里,积小流以成江海…… 注释&#xff1a;如果您觉得有所帮助&#xff0c;帮忙点个赞&#xff0c;也可以关注我&#xff0c;我们一起成长&#xff1b;如果有不对的地方&#xff…