当前位置: 首页 > news >正文

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场景用例,基础架构以及相关的性能问题分析和调优实战分享,希望能带给大家一定的帮助~

相关文章:

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

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

tcp常用网络接口 linux环境

TCP(传输控制协议)网络通信是常见的网络应用形式,它提供了面向连接的、可靠的数据传输服务。TCP通信常用的接口主要包括以下几个方面: 常用接口 1. socket() int socket(int domain, int type, int protocol); 功能&#xff1…...

第10节课:JavaScript基础——网页交互的魔法

目录 JavaScript的作用JavaScript的基本语法基本语法规则变量、数据类型和运算符变量数据类型运算符 实践:使用JavaScript增强网页功能结语 JavaScript是一种高级的、解释型的编程语言,它使得网页能够从静态文档转变为具有动态交互性的应用程序。本节课将…...

springboot+vue+mybatis汽车租赁管理+PPT+论文+讲解+售后

汽车租赁系统是针对目前汽车租赁管理的实际需求,从实际工作出发,对过去的汽车租赁管理系统存在的问题进行分析,完善客户的使用体会。采用计算机系统来管理信息,取代人工管理模式,查询便利,信息准确率高&…...

.NET C# 将文件夹压缩至 zip

.NET C# 将文件夹压缩至 zip 文章目录 .NET C# 将文件夹压缩至 zip1 使用 System.IO.Compression1.1 环境1.2 压缩文件夹1.2.1 简单压缩1.2.2 复杂压缩 1.3 解压缩1.3.1 简单解压缩1.3.2 复杂解压缩 2 使用 SharpZipLib2.1 环境2.2 压缩文件夹2.3 解压缩 3 压缩效果简单测试 1 …...

软考基本介绍

一,基本了解 计算机技术与软件专业技术资格(水平)考试(简称软件考试)为国家级考试。 考试设置了27个专业资格,涵盖5个专业领域, 3个级别层次(初级、中级、高级)。 中国计算机技术职业…...

【Vue】vue3 中使用 ResizeObserver 监听元素的尺寸宽度变化

要监听 div 宽度的变化,可以使用 ResizeObserver 接口。ResizeObserver 允许你观察一个或多个元素的尺寸变化,并在发生变化时执行回调函数。这种方法比使用 MutationObserver 更专注于尺寸变化,且不受元素属性变化的影响。 使用 ResizeObserv…...

信息安全专业好吗?

22 届的 211 信安毕业生,目前在读研(虽然已经和安全没关系),整体来看大部分高校的信安都是作为计算机的附属专业存在的,除了极具特色的几个高校,例如山大的密码学,广州大学某院士加持的网络安全…...

梧桐数据库(WuTongDB):数据库中元数据表的常见信息

元数据表是数据库系统中用于存储和管理元数据的表。这些表提供关于数据库对象(如表、列、索引、视图、存储过程等)的详细信息。以下是元数据表的一些常见类型及其详细解释: 常见元数据表类型 表信息表 表名:TABLES描述&#xff1…...

在 Linux 9 上安装 Oracle 19c:克服兼容性问题 (INS-08101)

Oracle 数据库 19c 的基础版本 (19.3) 发布的时候还没有 Linux 9 ,因此在Linux 9上面安装Oracle 19c会遇到很多兼容性问题。本文将探讨如何解决这些问题。 安装步骤 设置环境变量以绕过操作系统检查: Oracle 19.3 安装程序无法识别 Linux 9。 [WARNIN…...

【踩坑】pytorch中的索引与copy_结合不会复制数据及其解决方案

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你,欢迎[点赞、收藏、关注]哦~ 目录 背景知识 实验验证 结论分析 错误案例 处理方法 注意事项 附加说明 基本索引返回视图 高级索引返回副本 赋值操作都是原地操作 以下内容…...

十六、【Python】基础教程 - 【Flask】网络编程开发

目录 前言 Flask 基础概念 安装 Flask 示例:创建一个 Flask Web 应用 运行 Flask 应用 更复杂的例子 测试新功能 前言 Flask 是一个用 Python 编写的微型 Web 框架,它以简单性和灵活性著称,非常适合快速开发小型到中型的 Web 应用。F…...

C#初级——List 容器

容器 在C#中&#xff0c;容器通常指的是用于存储和组织数据的集合类。 本文介绍的容器是动态数组&#xff1a;List<T> 内部使用数组来存储元素&#xff0c;当添加元素超出当前数组容量时&#xff0c;会自动调整大小&#xff08;扩容&#xff09;。 list容器 List<&g…...

serial靶机教程

靶机下载地址 https://download.vulnhub.com/serial/serial.zip 主机发现 arp-scan -l 端口扫描 nmap 192.168.229.131 -A 根据对⽐可知serial的⼀个ip地址为192.168.47.143 该靶机开启了22端⼝和80端⼝ 对⽹站进⾏⼀个访问&#xff0c;⼤概意思为这是对新的cookie处理程序…...

【Linux-MISC设备】

目录 1. MISC设备2. MISC蜂鸣器实验 1. MISC设备 MISC设备的主设备号为10.MISC设备会自动创建cdev&#xff0c;不需要再手动创建。MISC设备是基于platform的. MISC驱动的编写的核心就是初始化miscdevice结构体变量&#xff0c;然后用misc_register函数向内核注册&#xff0c;…...

【随笔】VRRP+MSTP

虚拟路由冗余协议&#xff08;Virtual Router Redundancy Protocol&#xff0c;VRRP&#xff09; 设计采用主备模式&#xff0c;将VRRP组内多个路由设备都映射为一个虚拟路由设备。 一个VRRP组中只能由一台处于主控角色的路由器&#xff0c;可以有一个或多个备份角色的路由器。…...

vue 动态增删行,并form表单校验(附v2\v3)

Vue3 组件用的 ant 可以换成你们用&#xff0c;主要是form校验 前端代码 <a-formref"formRef":model"formData":label-col-props"{ span: 5 }":wrapper-col-props"{ span: 17 }"><a-row><a-form-itemlabel"角色…...

计算机网络的基本概念

IP地址&#xff08;Internet Protocol Address&#xff09;是指在计算机网络中每个设备的唯一标识符。它用于区分不同设备并在网络中进行数据包的路由。我们平常所使用的IP地址主要版本&#xff1a; IPv4 格式: 由四个整数&#xff08;0到255&#xff09;组成&#xff0c;以点…...

Python 爬虫项目实战三:GitHub 用户信息抓取与分析

一、项目背景 爬虫技术不仅限于获取网页内容&#xff0c;还可以用于获取和分析特定网站的用户信息。本文将演示如何使用Python编写爬虫程序&#xff0c;从GitHub网站抓取用户信息&#xff0c;并进行简单的数据分析。 二、环境准备 在开始之前&#xff0c;请确保你已经安装了…...

xtrabackup搭建MySQL 8.0 主从复制

xtrabackup搭建MySQL 8.0 主从复制 安装MySQL 8.0.37安装xtrabackupGTIDs初始化从库参考&#xff1a;GTID概述GTID相较与传统复制的优势GTID自身存在哪些限制GTID工作原理简单介绍如何开启GTID复制GTID与传统模式建立复制时候语句的不同点传统复制GTID复制 GTID同步状态简单解析…...

Java程序员接单分享

作为一名Java程序员&#xff0c;这阵子通过承接些小型项目&#xff0c;我顺利跨过了月薪破万的门槛。这些项目虽小&#xff0c;却如同磨刀石般&#xff0c;让我在实战中发现了自身技术栈的棱角与不足&#xff0c;尤其是意识到了在Java这一浩瀚技术海洋中的诸多未知领域。我深知…...

【HarmonyOS NEXT星河版开发学习】小型测试案例01-今日头条置顶练习

个人主页→VON 收录专栏→鸿蒙开发小型案例总结​​​​​ 基础语法部分会发布于github 和 gitee上面 ​ 前言 本系列可能是博客首发&#xff0c;鸿蒙开发星河版是一个全新的版本&#xff0c;由于参考视频较少鸿蒙开发不被重视导致csdn上面并没有全套的学习路线&#xff0c;…...

C语言----计算开机时间

计算开机时间 实例说明 编程实现计算开机时间&#xff0c;要求在每次开始计算开机时间时都能接着上次记录的结果向下记录。 实现过程&#xff1a; 1. 在TC中创建一个C文件。 2. 引用头文件&#xff0c;代码如下: #include <stdio.h> 3. 定义结构体time&#xff0c;用来…...

批发行业进销存-登录适配 android 横竖屏幕 源码CyberWinApp-SAAS 本地化及未来之窗行业应用跨平台架构

一、横竖屏切换的意义 以下是移动端横屏竖屏可切换在进销存中的一些重要应用&#xff1a; a、数据录入与查看 在录入商品信息、库存数量等大量数据时&#xff0c;横屏模式可以提供更宽阔的输入区域&#xff0c;减少输入错误。例如&#xff0c;在输入长串的商品编码或详细的商…...

js功能(1)

1、readonly 应用于元素&#xff1a;readonly 可以应用于 <input> 和 <textarea> 元素。 用户界面表现&#xff1a;当元素设置为 readonly 时&#xff0c;用户不能更改输入框中的值&#xff0c;但可以选中和复制文本&#xff0c;且表单包含该输入字段的值可以被提交…...

微信小程序乡村医疗系统,源码、部署+讲解

目录 摘 要 Abstract 1 绪论 1.1 研究背景及意义 1.2 研究现状 1.3 研究内容 2 相关技术介绍 2.1 Java 语言 2.2 MySQL 数据库 2.3 Spring Boot 框架 2.4 B/S 结构 2.5 微信小程序 3 系统分析 3.1 可行性分析 3.1.1 经济可行性 3.1.2 技术可行性…...

完美解决pip命令版本冲突导致对应版本模块包无法安装的问题

解决步骤 使用pip更新/降低指定模块包命令格式降低pip自身至指定版本的命令再次换源安装指定模块包 在对 FasterNet 这篇论文源码复现过程中&#xff0c;我们首先需要安装相关依赖文件&#xff08; path/to/your/requirements.txt&#xff09; -extra-index-url https://down…...

5.1-软件工程基础知识-软件工程概述

软件工程诞生原因 了解 早期的软件&#xff1a;主要是指采用个体工作方式实现的程序。第一次软件危机&#xff1a;20世纪60年代中期 典型表现有软件质量低下、项目无法如期完成、项目严重超支等因为软件而导致的重大事故时有发生。 软件工程的诞生&#xff1a;1968年在NATO会…...

极简聊天室-websocket版

再写一个极简聊天室的websocket版&#xff0c;在本例中&#xff0c;websocket仅用于服务器向客户端传输信息&#xff0c;客户端向服务器发送信息是传统的http post方式&#xff0c;用axios来实现的&#xff0c;当然websocket本身是支持双向通信&#xff0c;主要是为了方便跟前面…...

QT学生管理系统 开发文档

目录 第一章 UI界面设计与开发 登录界面 主界面 UI美化 第二章 数据库设计与开发 数据库设计 连接数据库 数据库功能设计 sql语句设计 查询所有学生数量 查询第几页学生数据 删除学生 修改学生信息 清空学生表 添加单个用户 删除单个用户 修改用户权限 查询所有用户…...