Elasticsearch使用指南

在这里插入图片描述

前言

工作中越来越多的使用到了搜索相关的功能,作为一个Java开发者,你一定知道之前很好用的一个Java编写的搜索引擎,名字叫Solr;但是,现>在越来越多的Java开发者将项目中的首选搜索引擎改成了Elasticsearch,主要是在实时搜索方面,Elasticsearch的查询速度方面平均比Solr高了50倍左右,不过这只是其中的一个原因吧,其它的原因需要每一位开发者去深入探究啦,下面我来大致比较一下他们的差别吧:

  • Solr利用Zookeeper进行分布式管理,Elasticsearch自身带有分布式协调管理功能。
  • Solr支持很多的数据格式,Elasticsearch只支持JSON格式。
  • Solr官方提供的拓展功能很多,Elasticsearch更加注重核心功能。
  • Solr只是提供了搜索引擎相关的功能,Elasticsearch还提供了实时的分析功能。

接下来,我会分多篇文章逐渐的带大家走进ES的世界,去深入的了解ES的魅力


在这里插入图片描述

安装与启动

  • 1 首先从Elasticsearch的官网找到你对应操作系统的安装包
  • 2 将下载好的安装包进行解压,进入到解压后的文件夹下的bin目录,如果是Unix或者Linux系统的话,直接在该文件夹下执行下面的命令,如>果要修改配置参数的话,只需要修改Elasticsearch根路径下的config目录下的elasticsearch.yml文件即可
./elasticsearch
  • 3 验证是否启动成功的方法可以通过在浏览器中输入下面的链接
http://localhost:9200/?pretty
  • 4 或者是在终端中输入
curl 'http://localhost:9200/?pretty'
  • 5 如果看到的是下面的内容则表明当前的Elasticsearch启动成功?
{
  "name" : "ESWr-eF",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "4mRB1LCCTPCokS0ViELFMQ",
  "version" : {
    "number" : "6.5.4",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "d2ef93d",
    "build_date" : "2018-12-17T21:17:40.758843Z",
    "build_snapshot" : false,
    "lucene_version" : "7.5.0",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

集群部署

集群介绍

在Elasticsearch中,至少需要一个主节点(master node)和一个数据节点(data node)来形成一个基本的集群。然而,对于生产环境,建议至少部署两个节点,以提供高可用性和容错能力。

在搭建Elasticsearch集群之前,你需要考虑数据规模以及以后数据的增长量,才能确定后期需要的服务器数量。服务器的配置也是需要考虑的重要因素,如CPU、磁盘大小、内存容量等,这些都是计算服务器数量的重要参考值。

此外,一个集群可配置多个主节点,但Elasticsearch集群中只使用一个主节点,其他作为备用主节点。当当前主节点节点挂掉以后,备用主节点会自动启用。

总的来说,具体节点的数量需要根据你的实际需求来确定。

节点类型

在Elasticsearch中,节点主要有以下三种类型:

  1. 主节点(Master Node):这种类型的节点负责控制整个集群的操作,如创建或删除索引,管理其他非主节点等。在一个集群中,可以有多个主节点,但通常只使用一个主节点作为主要的操作节点。
  2. 数据节点(Data Node):这种类型的节点主要用于执行数据相关的操作,如文档的CRUD(创建、读取、更新、删除)操作,搜索,和聚合等。在一个节点上,如果node.data设置为True(默认),那么该节点就被配置成了数据节点。
  3. 客户端节点(Client Node):这种类型的节点可以响应用户的请求,把请求转发到其他节点。在一个节点上,当node.master和node.data都设置为false时,该节点就可以被配置成客户端节点。
  4. 摄入节点(Ingest Node):设置方式为node.ingest 设置为true,负责在文档被索引之前转换和扩展文档

此外,还有一种特殊的部落节点(Tribe Node),这种节点可以连接多个集群,在所有连接的集群上执行搜索和其他操作。

主节点

主节点(Master Node)在Elasticsearch集群中的作用主要体现在集群管理、负载均衡和存储信息等方面。

  1. 集群管理:主节点主要负责集群中的轻量级操作,包括创建索引、删除索引、分配工作,以及追踪集群中的节点状态等。这些工作对于集群的正常运行至关重要,因此主节点扮演着“集群中的大脑”的角色。
  2. 负载均衡:主节点还有做负载均衡的任务,将请求均匀的转发到其他节点上,以确保集群中的每个节点都能得到充分利用,避免出现某些节点负载过重而其他节点处于闲置状态的情况。
  3. 存储信息:主节点还需要存储其他节点必要的信息。每个节点都会存储其他节点的信息,一旦主节点宕机了,其他的节点中会选举一个节点当做主节点。同时,当请求到来的时候数据会先经过主节点,把数据存贮在主节点上,然后将该数据复制一份存贮在复制分片上,这样就保证了数据有备份,即使某个ES节点宕机了,宕机ES的主分片不见了,那么其他的ES节点监控到有节点宕机,这时其他节点就会把宕机ES的主分片数据的备份拿出来,重新作为一个主分片。

总的来说,主节点在Elasticsearch集群中起着至关重要的作用,负责集群的管理、负载均衡以及数据的存储和备份等工作。

数据节点

数据节点是分布式文件系统HDFS的工作节点,负责数据的存储和读取。它会根据客户端或名称节点的调度来进行数据的存储和检索,并且向名称节点定期发送自己所存储的块的列表。每个数据节点中的数据会被保存在各自节点的本地Linux文件系统中。

此外,数据节点还具有以下功能:

  1. 数据建立:数据节点在接收到中控发来的数据建立指令后,会为接收新数据进行一系列准备工作。
  2. 数据销毁:当数据节点接收到中控发来的数据销毁指令时,它将指定数据销毁,回收各种资源。
  3. 数据存储访问:数据节点根据系统预定义数据结构将发布数据存储起来,同时根据数据子系统提供的协议对外进行相应的数据服务,包括数据的增、删、改、查等操作。
  4. 数据节点间相互配合和自适应:在大型系统中,因为大量数据或是因为数据节点的存储压力,会出现单进程无法承载数据的情况。此时,数据节点间需要进行相互配合和自适应,完成数据分片,降低自身存储压力。
  5. 数据节点间同步:承载修改数据的数据节点需要负责将该部分变化数据同步给所有承载该数据的数据节点,该过程可以利用通信子系统群发功能来完成。
客户端节点

在Elasticsearch中,客户端节点(Client Node)是一种特殊类型的节点,它主要负责处理路由请求,协调主节点和数据节点的工作。

当一个客户端节点的master属性和data属性都设置为false时,该节点就变成了一个客户端节点。它主要将客户端的请求路由到集群中的各个节点,扮演一个负载均衡的角色。

在一个较大的集群中,客户端节点协调主节点和数据节点的工作非常有用。它可以从主节点获取集群的状态,并根据集群的状态直接路由请求。这样,即使主节点或数据节点出现问题,重启后几乎能瞬间恢复,对用户几乎没有影响。

同时,将这些角色独立出来以后,也更容易掌握data node资源消耗与写入量和查询量之间的联系,便于进行容量管理和规划。

主从节点功能

在Elasticsearch集群中,主节点和从节点各自拥有特定的功能,以确保集群的正常运行和数据的完整性。

主节点的功能主要包括:

  1. 集群管理:主节点负责集群的元数据管理,如索引的创建、删除、分片分配等。
  2. 负载均衡:主节点负责将请求路由到集群中的相应节点,以实现负载均衡。
  3. 数据写入:当写入数据时,主节点会根据路由算法找到对应分片的主节点,并在该节点上写入数据。

从节点的功能主要包括:

  1. 数据备份:从节点会定期从主节点同步数据,以保证数据的备份和冗余。
  2. 数据读取:当读取数据时,请求可以被发送到一个或多个从节点,以分担读取负载并提高读取性能。
  3. 故障恢复:当主节点出现故障时,从节点可以替代主节点提供服务,以实现快速的故障恢复。

总的来说,主节点和从节点在Elasticsearch集群中各自扮演着重要的角色,共同维护着集群的稳定性和数据的完整性。在实际应用中,需要根据集群的规模和需求来合理配置主从节点,以达到最佳的性能和可靠性。

主从节点设置

在Elasticsearch中设置主从节点需要进行以下步骤:

  1. 修改节点角色:在每个节点的elasticsearch.yml配置文件中,将node.master和node.data属性设置为true或false,以指定该节点为主节点或从节点。
  2. 配置主节点:选择一个主节点作为集群的主节点,负责集群的元数据管理和数据分配。在主节点的elasticsearch.yml配置文件中,将cluster.name属性设置为相同的值,以将该节点加入到集群中。
  3. 配置从节点:选择一些从节点作为数据的备份和冗余节点,用于存储主节点的数据副本并提高系统的可靠性和可用性。在从节点的elasticsearch.yml配置文件中,将cluster.name属性设置为与主节点相同的值,以将该节点加入到集群中。同时,将node.master属性设置为false,以避免从节点参与集群的元数据管理。
  4. 启动节点:启动所有节点,让它们加入到集群中并开始同步数据。
  5. 验证主从设置:通过访问Elasticsearch的API或管理界面,检查主从设置是否生效。可以查看节点的角色、数据同步状态等信息。

需要注意的是,在设置主从节点时,需要确保网络连接正常,避免出现网络故障导致的数据同步问题。同时,定期检查主从节点的状态,及时发现和处理问题,保证集群的稳定性和可用性。

部署过程

ES集群部署的步骤包括:

  1. 安装Java环境:安装Java是部署Elasticsearch的前提,因为Elasticsearch是基于Java开发的。
  2. 下载Elasticsearch:从Elasticsearch官方网站上下载相应的版本。
  3. 配置Elasticsearch:修改elasticsearch.yml配置文件,包括设置集群名称、节点名称、网络地址、存储路径等。
  4. 启动Elasticsearch:通过命令行启动Elasticsearch服务。
  5. 加入集群:将新节点加入到集群中,需要配置相关的参数,如集群名称、节点名称、网络地址等。
  6. 测试集群:通过访问Elasticsearch的API,测试集群是否正常工作。

这些步骤是Elasticsearch集群部署的基本流程,具体的细节可能会因不同的操作系统和版本而有所差异。

注意事项

部署Elasticsearch集群需要注意以下几点:

  1. 版本兼容性:确保所有节点都使用相同版本的Elasticsearch,以避免版本不兼容导致的问题。
  2. 网络配置:确保节点之间的网络连接畅通,可以通过ping命令等方式测试网络连接是否正常。
  3. 防火墙设置:确保防火墙允许Elasticsearch的HTTP和Transport端口(默认为9200和9300)的通信。
  4. 节点命名:为每个节点设置唯一的名称,以避免混淆和错误。
  5. 集群名称:设置唯一的集群名称,以确保不同集群之间的正确区分。
  6. 节点角色:根据需要设置节点的角色(master、data或coordinating),以确保集群的正确运行。
  7. 数据存储:为Elasticsearch数据目录设置足够的存储空间,以避免磁盘空间不足导致的问题。
  8. 监控和日志:配置监控和日志系统,以便及时发现和解决问题,保证集群的可靠性。
  9. 安全设置:根据需要配置安全认证机制、访问控制和SSL/TLS加密等安全措施,以确保集群的安全性。
  10. 文件描述符:确保节点具有足够的文件描述符,以避免由于文件描述符不足导致的问题。

以上是部署Elasticsearch集群需要注意的一些要点,建议在部署过程中仔细检查每一点,以确保集群的稳定性和性能。

配置参数

ES集群配置参数包括:

  1. cluster.name:集群名称,用于标识和区分不同的集群。
  2. node.name:节点名称,用于标识集群中的每个节点。
  3. network.host:节点监听的IP地址,用于设置节点绑定的网络地址。
  4. http.port:HTTP端口号,用于设置Elasticsearch的HTTP服务端口。
  5. discovery.seed_hosts:用于发现集群中的其他节点的主机名或IP地址列表。
  6. cluster.initial_master_nodes:用于标识初始主节点的列表,用于设置哪些节点可以作为主节点。
  7. path.data:设置索引数据的存储路径。
  8. path.logs:设置日志文件的存储路径。
  9. discovery.zen.ping.unicast.hosts:设置集群中master节点的初始列表。
  10. cluster.routing.allocation.disk.watermark.low:设置磁盘阈值低水位,用于控制磁盘空间使用情况。
  11. cluster.routing.allocation.disk.watermark.high:设置磁盘阈值高水位,用于控制磁盘空间使用情况。
  12. network.host:设置Elasticsearch绑定的IP地址。
  13. transport.tcp.port:设置Elasticsearch节点之间的通信端口。
  14. http.cors.enabled:开启跨域访问支持。
  15. http.cors.allow-origin:设置允许跨域访问的来源。
  16. http.cors.allow-methods:设置允许跨域访问的方法。
  17. transport.tcp.compress:是否压缩传输的数据,默认为false。
  18. http.max_content_length:HTTP传输内容的最大容量,默认为100mb。
  19. node.master:指定该节点是否可以作为master节点,默认为true。
  20. node.data:该节点是否存索引数据,默认为true。
  21. discovery.zen.ping.timeout:设置集群中自动发现其他节点时ping连接超时时长,默认为3秒。
  22. discovery.zen.ping.multicast.enabled:是否启用多播来发现节点。
  23. discover.zen.minimum_master_nodes:一个节点需要看到具有master资格的节点的最小数量,然后才能在集群中做操作。

这些配置参数是ES集群部署中常用的,具体配置方式可以参考官方文档进行操作。在配置过程中,需要根据实际情况进行选择和调整,以确保集群的稳定性和性能。

请注意,以上配置参数可能会因版本不同而有所差异,具体操作时请参考对应版本的官方文档。

数据分片

在Elasticsearch中,数据分片是一个重要的概念。一个分片是一个底层的工作单元,它仅保存了全部数据中的一部分。具体来说,分片是一个Lucene的实例,它本身就是一个完整的搜索引擎。我们的文档被存储和索引到分片内,但是应用程序是直接与索引而不是与分片进行交互。

Elasticsearch利用分片将数据分发到集群内各处的。分片是数据的容器,文档保存在分片内,分片又被分配到集群内的各个节点里。当你的集群规模扩大或者缩小时,Elasticsearch会自动的在各节点中迁移分片,使得数据仍然均匀分布在集群里。

主分片和副本分片是Elasticsearch中的两种分片类型。在索引建立的时候就已经确定了主分片数,但是副本分片数可以随时修改。索引内任意一个文档都归属于一个主分片,所以主分片的数目决定着索引能够保存的最大数据量。副本分片只是一个主分片的拷贝,作为硬件故障时保护数据不丢失的冗余备份,并为搜索和返回文档等读操作提供服务。

总的来说,Elasticsearch的数据分片机制使得数据可以在集群中分布式存储和处理,提高了系统的可扩展性和可靠性。

主分片与副分片

在Elasticsearch中,每个索引被划分为多个分片,每个分片是一个独立的Lucene实例。一个分片可以是主分片或副本分片。

主分片是索引中的一个主要分片,负责存储索引的主要数据。每个索引在创建时都会有一个或多个主分片。主分片可以存储文档、执行搜索查询等操作。

副本分片是主分片的拷贝,它们用于提供数据的冗余备份,以确保数据不丢失并且在节点发生故障时提供服务。副本分片不能独立存在,它们必须与主分片相关联。

在集群中,每个节点都存储了一定数量的分片。当集群规模扩大或缩小时,Elasticsearch会自动地在各节点中迁移分片,使得数据仍然均匀分布在集群里。

需要注意的是,主分片和副本分片的数量都可以在索引创建时进行配置,并且可以在后续进行修改。

主分片的特点

主分片在存储数据时具有以下特点:

  1. 分片存储 :主分片将索引数据划分为多个分片进行存储,每个分片都是一个独立的Lucene实例。这使得数据可以在多个节点上分布式存储和处理,提高了系统的可扩展性和性能。
  2. 负载均衡 :主分片通过集群中的负载均衡机制,将数据均匀地分配到各个节点上。这有助于平衡节点的负载,避免某些节点过载而其他节点处于闲置状态,从而提高了系统的吞吐量和响应速度。
  3. 容错性 :主分片通过副本分片提供数据的冗余备份,以确保在节点故障或硬件故障的情况下数据不会丢失。副本分片与主分片保持同步,当主分片出现故障时,可以从副本分片中恢复数据并继续提供服务。
  4. 可扩展性 :主分片可以根据需要进行扩展。当索引的数据量增长时,可以通过增加主分片的数量来水平扩展存储和处理能力。这使得系统能够容纳更多的数据,并提供了更大的查询和写入吞吐量。
  5. 动态调整 :主分片的数量和配置可以在运行时进行动态调整。这意味着可以根据集群的负载和数据量的变化来调整主分片的数量和分布,以适应不同的需求和工作负载。

主分片在存储数据时具有分片存储、负载均衡、容错性、可扩展性和动态调整等特点,这使得Elasticsearch成为一个功能强大且高度可配置的分布式搜索引擎。

副分片的特点

副分片的主要特点包括:

  1. 副本分片作为主分片的拷贝,它们用于提供数据的冗余备份,以确保数据不丢失。
  2. 每个主分片可以具有零个或多个副本分片。
  3. 副本分片可以用于故障转移,当主分片无法工作时,副分片可以提升为主分片,以提高性能。
  4. 副分片可以提高搜索和返回文档等读操作的效率。

副分片的主要特点是通过冗余备份和故障转移来提高数据的可靠性和系统的可用性。

Prometheus监控Elasticsearch集群

通过Prometheus监控Elasticsearch集群的步骤如下:

  • 集成中心 :登录Prometheus控制台,在左侧导航栏单击“监控列表”,进入可观测监控Prometheus版的实例列表页面。单击目标Prometheus实例名称,进入集成中心页面。
  • 接入中心 :登录ARMS控制台,在左侧导航栏单击“接入中心”,然后在组件应用区域单击Elasticsearch卡片的添加,然后在弹出的页面根据控制台指引完成组件接入。
  • 修改配置文件 :在Elasticsearch中启用监控模块,修改Elasticsearch的配置文件,加入监控相关配置。例如,设置xpack.monitoring.collection.enabled为true,启用监控收集;设置http.cors.enabled为true,设置跨域访问等。
  • 重启Elasticsearch实例 :重启Elasticsearch实例后,监控相关API会自动启用。
  • 配置Prometheus监控Elasticsearch :在Prometheus的配置文件中添加Elasticsearch的job,设置相关参数,如scrape_configs、metrics_path、static_configs等。
  • 初始抓取 :Prometheus初始抓取后,可以在控制台看到Elasticsearch的相关指标,如es_process_cpu_seconds_total(CPU时间)、es_jvm_memory_bytes_committed(JVM内存占用)、es_indices_indexing_index_total(索引次数)、es_nodes_fs_total_bytes(节点磁盘空间占用)等等。
  • 定义告警规则 :当某些关键指标超过阈值时,Prometheus可以发出告警。例如,可以设置规则groups:-name:elasticsearchrules:-alert:ElasticsearchNodeDownexpr:up{job=“elasticsearch”,instance=“es-master:9200”}==0for:5mlabels:severity:criticalannotations:summary:“Elasticsearch master node is down”

以上步骤可以帮助你通过Prometheus监控Elasticsearch集群,你可以根据实际情况进行调整和优化。

集群控制台Elasticsearch-HQ

在这里插入图片描述

介绍

Elasticsearch-HQ是一个开源的Elasticsearch集群监控和管理工具,提供了Web界面来查看和管理Elasticsearch集群的状态和性能。它可以显示集群的健康状态、节点状态、索引状态等信息,并支持一系列管理操作,如创建索引、优化查询、管理用户权限等。此外,Elasticsearch-HQ还提供了实时监控和告警功能,可以帮助用户及时发现和解决集群中的问题。

Elasticsearch-HQ具有易于使用和直观的用户界面,适合各种规模的Elasticsearch集群。它支持多个Elasticsearch版本,可以与Kibana等其他工具集成,并提供了丰富的API接口,方便用户进行二次开发和定制化。

Elasticsearch-HQ可以帮助用户更好地了解和管理Elasticsearch集群,提高集群的稳定性和性能。

安装

Elasticsearch-HQ的安装步骤如下:

  1. 从GitHub上下载Elasticsearch-HQ的源代码。
  2. 打开终端,并进入Elasticsearch-HQ的源代码目录。
  3. 运行命令“pip install -r requirements.txt”来安装必需的依赖项。
  4. 运行命令“nohup /usr/bin/python3 -u /usr/local/software/elasticsearch-HQ-master/application.py >>all.log2>&1&”来启动Elasticsearch-HQ。
  5. 通过浏览器访问“http://localhost:5000”来访问Elasticsearch-HQ的控制台。

ES的常用命令

  • 查看ES版本信息:
http://localhost:9200
或者
curl 'localhost:9200'
  • 查看集群健康状态:
http://localhost:9200/_cat/health?v
或者
curl 'localhost:9200/_cat/health?v'
  • 查看集群节点列表:
http://localhost:9200/_cat/nodes?v
或者
curl 'localhost:9200/_cat/nodes?v'
  • 列出所有索引和储存文件大小
http://localhost:9200/_cat/indices?v
或者
curl 'localhost:9200/_cat/indices?v'

注意事项

    1. 确保分配给Elasticsearch的内存量符合其要求,并且不会导致系统过度交换。
    1. 不要将Elasticsearch的数据目录和日志目录存储在同一个磁盘上,以避免I/O争用。
    1. 如果使用共享存储,确保所有的Elasticsearch节点都可以访问存储。
    1. 如果使用网络时间同步,确保时间同步的准确性。
    1. 在生产环境中,建议使用SSL/TLS对Elasticsearch进行加密通信,以确保数据的安全性。
    1. 在配置Elasticsearch时,需要配置正确的路由以避免数据冗余和竞争条件。
    1. 如果使用CORS,确保CORS配置正确,并只允许必要的源进行访问。
    1. 在配置日志级别时,需要根据实际情况进行调整,以确保日志的准确性而不会影响性能。
    1. 在生产环境中,建议对Elasticsearch进行备份和恢复测试,以确保数据的可靠性和完整性。
    1. 最后,建议参考官方文档进行配置,并根据实际情况进行调整。

ES7.x中的订阅(购买)功能

在Elasticsearch 7.x版本中,一些功能可能需要订阅或购买才能使用。以下是一些可能需要订阅的功能:

  1. SQL访问:Elasticsearch SQL允许用户使用SQL查询来搜索和分析Elasticsearch数据。尽管有一个免费的版本可用,但高级功能需要订阅。
  2. 机器学习:Elasticsearch提供了机器学习功能,用于异常检测、时间序列预测等。这些功能需要订阅才能使用。
  3. 安全:Elasticsearch的安全功能包括身份验证、授权、加密和审计。尽管有一个基础的安全特性在Elasticsearch核心中可用,但高级安全特性需要订阅。
  4. 监控:Elasticsearch提供了集群和节点级别的监控,以及警报和报告功能。一些高级的监控和警报功能可能需要订阅。
  5. 图分析:Elasticsearch支持图数据结构和分析,用于发现数据之间的关系。这些功能可能需要订阅。
  6. 应用程序搜索:Elasticsearch提供了应用程序搜索功能,允许开发者为其应用程序添加强大的搜索功能。一些高级特性,如自定义排名和查询提升,可能需要订阅。
  7. 跨集群复制:Elasticsearch支持跨集群复制(CCR),允许数据在集群之间自动复制。这个功能可能需要订阅。

ES与Mysql存储结构对应关系

Elasticsearch和MySQL的存储结构有一定的对应关系,但两者在数据存储和处理方面存在一些差异。下面是将MySQL与Elasticsearch的存储结构进行对应关系的一些关键点:

  1. 数据库(DataBase):在MySQL中,一个数据库对应Elasticsearch中的一个索引(Index)。MySQL中的数据库是关系型数据库,用于存储和管理数据,而Elasticsearch中的索引是用于组织和存储相关数据的集合。
  2. 表(Table):在MySQL中,一个表对应Elasticsearch中的一个类型(Type)。MySQL中的表用于定义数据的结构,而Elasticsearch中的类型是基于映射(Mapping)定义的,用于确定索引中文档的字段如何处理和存储。
  3. 文档(Document):在MySQL中,一个表中的一行数据对应Elasticsearch中的一个文档(Document)。MySQL中的行是表中的具体数据行,而Elasticsearch中的文档是索引中存储的基本数据单元,包含数据的各种属性和字段。
  4. 字段(Field):在MySQL中,一个表中的一列数据对应Elasticsearch中的一个字段(Field)。MySQL中的列定义了表中的数据类型和属性,而Elasticsearch中的字段是索引中用于描述文档内容的基本单元。
Mysql存储结构Elasticsearch存储结构
DBIndex
TableType(7.0开始废弃,只有一个默认的_doc)
Document
表字段Field
表结构定义Mapping
DSLSQL

总结:

  • MySQL是基于关系型数据库的存储系统,用于存储和管理结构化数据。
  • Elasticsearch是一个分布式搜索和分析引擎,用于存储、搜索和分析非结构化和半结构化数据,在 ES 中,文档使用 JSON 格式存储。
  • MySQL与Elasticsearch的存储结构有一定的对应关系,但两者在数据存储和处理方面存在差异。

由于从ES7.0开始,取消了Type的定义,只有一个默认的_doc类型,所以一个索引下面只会存储一种结构的数据,所以Index就是类似于Mysql中的一个表的定义,

条件节点 (Coordinating node)

Coordinating node负责处理用户的请求。

用户请求分为两个阶段:分发阶段(scatter phase)和收集阶段(gather phase)。

在分发阶段,coordinating node把请求发送至各个数据节点。每个数据节点在本地处理请求并把结果返回给coordinating node。

在收集阶段,coordinating node把结果reduce成为一个全局的结果集。

每个node默认均为coordinating node。如果把node.master node.data node.ingest都设置为false,则该节点只有协调的功能。协调节点需要有足够的CPU和内存资源,用来收集各个数据节点返回的内容。

常见问题汇总

es中的客户端节点会存储数据吗

Elasticsearch中的客户端节点不存储数据。它只负责请求的分发、汇总等协调工作。如果需要存储数据,需要设置节点为数据节点。

es中的主节点会存储数据吗

Elasticsearch中的主节点不存储数据。主节点主要负责集群中的轻量级操作,如创建索引、删除索引、分配工作,以及追踪集群中的节点状态等。虽然主节点不直接存储数据,但它们会存储有关集群状态和元数据的信息。

从es查询数据是在什么节点执行查询命令的

在Elasticsearch中,查询数据可以在主节点或备节点执行查询命令。具体来说,主节点可以查询到数据,而备节点则根据轮询方式确定查询接口。
在写入数据时,是通过路由算法找到对应分片的主节点,在主节点上写入数据。主从同步到备节点上,然后进行持久化。持久化的方式是每隔一秒钟把buffer中的数据创建一个新的segment,先写入到文件系统缓存,稍后再被刷新到磁盘。

是否可以不设置副本分片

在Elasticsearch中,设置副本分片可以提高系统的可用性和容错性。如果禁用副本分片,则当主分片发生故障时,系统将无法从副本分片中恢复数据,从而可能导致数据丢失或查询失败。

副本分片可以用于以下方面:

  1. 数据备份:副本分片可以作为主分片的备份,确保数据的完整性和一致性。在主分片发生故障时,可以迅速从副本分片中恢复数据。
  2. 提高查询性能:副本分片可以分担查询负载,提高查询性能。当有多个用户同时查询相同的数据时,副本分片可以提供更快的响应速度。
  3. 负载均衡:副本分片可以平衡节点的负载,避免某些节点过载而其他节点处于闲置状态。这有助于提高系统的整体性能和响应速度。

因此,通常建议启用副本分片来提高系统的可用性和容错性。然而,如果数据量较小或对系统的可用性要求不高,也可以考虑禁用副本分片以节省存储空间和计算资源。但需要注意的是,这可能会降低系统的可用性和容错性。

是否可以禁用副本分片来提高查询性能

禁用副本分片不会提高查询性能。

副本分片是Elasticsearch中的重要功能,它们是主分片的拷贝,用于提供数据的冗余备份,以提高系统的可用性和容错性。当主分片发生故障时,可以迅速从副本分片中恢复数据,避免了数据丢失或查询失败的情况。

另外,副本分片还可以分担查询负载,提高查询性能。当有多个用户同时查询相同的数据时,副本分片可以提供更快的响应速度。因此,禁用副本分片可能会降低系统的可用性和容错性,同时也不会提高查询性能。

需要注意的是,如果数据量较小或对系统的可用性要求不高,也可以考虑禁用副本分片以节省存储空间和计算资源。但需要注意的是,这可能会降低系统的可用性和容错性。因此,在决定是否禁用副本分片时,需要综合考虑数据量、系统性能和可用性等方面的需求。

es查询完成后数据的汇总是在什么节点完成的

在Elasticsearch中,查询完成后数据的汇总是在**客户端节点(Client Node)条件节点(Coordination Node)**完成的。

具体来说,当一个查询请求发出后,Elasticsearch会将其发送到集群中的所有节点。在每个节点上,会根据分片的位置将请求路由到相应的主分片或副本分片。然后,每个分片会独立执行查询并返回结果。

在客户端节点或协调节点上,会对从各个分片收到的结果进行汇总和处理。这个过程包括对结果的排序、聚合等操作,最终得到满足查询要求的结果集。

需要注意的是,对于较大的集群或复杂的查询请求,数据的汇总和处理可能会消耗较多的计算资源和时间。因此,在实际应用中,需要根据集群规模和查询需求来选择合适的节点类型和配置,以优化查询性能和结果汇总的处理效率。

在这里插入图片描述

ES7.17官方文档

Kibana官方文档

ES集群控制台:HQ

Logstash使用指南

Kibana使用指南

Filebeat使用指南

ES基础概念

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有梦想的攻城狮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值