首页 > 其他分享 >ElasticSearch基础篇

ElasticSearch基础篇

时间:2024-03-08 13:44:05浏览次数:195  
标签:基础 cat 索引 ElasticSearch master 分片 集群 节点

一、基本概念

1、类比数据库的概念

  • 索引(Index): 类似于数据库中的“数据库”,是某类文档的集合。
  • 类型(Type): 类似于数据库中的“表”,是索引中的一个逻辑分区。
  • 文档(Document): 类似于数据库中的“记录”,是一个可被索引的信息载体。
  • 分片(Shard): Elasticsearch会将索引数据细分为多个分片以便跨节点分布数据。
  • 副本(Replica): 是分片的备份,用于防止数据丢失和提高查询效率。
  • 映射(Mapping): 类似于数据库的schema,用于定义文档和它所包含的字段的类型、包含的字段等。

2、核心配置(config/elasticsearch.yml)

  • cluster.name: 集群名称,唯一确定一个集群。
  • node.name:节点名称,一个集群中的节点名称是唯一固定的,不同节点不能同名。
  • node.master: 主节点属性值
  • node.data: 数据节点属性值
  • network.host:本节点的绑定ip,及提供服务的ip地址
  • http.port: 本节点的http端口
  • transport.tcp.port:9300——集群之间通信的端口,若不指定默认:9300
  • discovery.seed_hosts: 节点发现需要配置一些种子节点,与7.X之前老版本:disvoery.zen.ping.unicast.hosts类似,一般配置集群中的全部节点
  • cluster.initial_master_nodes:指定集群初次选举中用到的具有主节点资格的节点,称为集群引导,只在第一次形成集群时需要。

3、引导检查—Bootstrap Checks

在启用生产模式时,节点启动之前ES会自动对节点的相关配置逐项检查,目的是避免开发者在对其配置项不了解的前提下做出不合理的配置。如果配置不符合性能或者兼容性要求,ES会阻止服务启动以保证服务的性能和可用性。

检查项:

  • 堆大小检查
  • 文件描述符检查
  • 内存锁检查
  • 最大线程数检查
  • 最大文件大小检查
  • 虚拟内存检查
  • 文件系统映射数检查
  • 客户端JVM检查
  • 串行收集器检查
  • 系统调用过滤器检查
  • OnError和OnOOMError检查
  • 早期访问检查
  • 所有权限检查
  • 发现配置检查 

4、主从模式

Elasticsearch为什么使用主从模式(Leader/Follower)?Elasticsearch使用的主从架构模式,其实除此之外,还可以使用分布式哈希表(DHT),其区别在于:

  • 主从模式适合节点数量不多,并且节点的状态改变(加入集群或者离开集群)不频繁的情况。
  • 分布式哈希表支持每小时数千个节点的加入或离开,响应约为4-10跳。

ES的应用场景一般来说单个集群中一般不会有太多节点(一般来说不超过一千个),节点的数量远远小于单个节点(只的是主节点)所能维护的连接数。并且通常主节点不必经常处理节点的加入和离开,处于相对稳定的对等网络中,因此使用主从模式。

5、节点

候选节点/投票节点(master-eligible,有时候也叫master节点)

默认情况下,master-eligible节点是那些在集群状态发布期间参与选举并执行某些任务的节点,配置了master角色的节点都是有效的投票节点,可以参与选举也可以投票

仅投票节点

配置了master和voting_only角色的节点将成为仅投票节点,仅投票节点虽然也是候选节点,但是在选举过程中仅可以投票而不参与竞选。不过仅投票节点可以同时也是数据节点,这样的话,其不具备被选举为Master的资格,但是参与投票,可以在选举过程中发挥关键票的作用。

主节点(active master)

  • 避免重负载:主节点负责轻量级集群范围的操作,例如创建或删除索引、跟踪哪些节点是集群的一部分以及决定将哪些分片分配给哪些节点。拥有一个稳定的主节点对于集群健康很重要。当选的主节点拥有履行其职责所需的资源,这对于集群的健康非常重要。如果所选的主节点承载了其他任务,那么集群将不能很好地运行。避免 master 被其他任务超载的最可靠方法是将所有符合 master 的节点配置为仅具有 master 角色的专用 master 节点,使它们能够专注于管理集群。专用master节点仍将充当协调节点,将请求从客户端路由到集群中的其他节点,但是不要以负载均衡器的目的而设置候选节点。
  • 一般来说,如果小型或轻负载集群的主节点具有其他角色和职责,则其可能运行良好,但是一旦您的集群包含多个节点,使用专用的主节点通常是有意义的。
  • 任何不是voting-onlymaster-eligible节点都可以被选举为active master
  • 主节点必须有一个path.data目录,其内容在重启后仍然存在,就像数据节点一样,因为这是存储集群元数据的地方。集群元数据描述了如何读取存储在数据节点上的数据,因此如果丢失,则无法读取存储在数据节点上的数据。
  • 高可用性 (HA) 集群需要至少三个候选节点,其中至少两个不是仅投票节点。这样即使其中一个节点发生故障,也可以保证剩下的节点能够选举出一个主节点。

数据节点

数据节点保存包含已编入索引的文档的分片。数据节点处理数据相关操作,如 CRUD、搜索和聚合。这些操作是 I/O 密集型、内存密集型和 CPU 密集型的。监控这些资源并在它们过载时添加更多数据节点非常重要。

协调节点

  • 如果主动关闭了master、data和ingest的角色配置,当前节点就剩下一个只能路由请求、处理搜索减少阶段和分发批量索引功能的仅协调节点。
  • 本质上,仅协调节点的就相当于一个智能负载均衡器。换句话说,你是没有办法配置一个不具备协调转发能力的节点的。
  • 仅协调节点过多会增加集群负担,因为主节更新集群状态必须等待每个节点的确认,而仅协调节点从这个角度上讲纯粹是一种负担。数据节点可以愉快地完成转发任务。

6、ES常见模块:Mudules

Cluster

Cluster模块是Master节点执行集群管理的封装实现,管理集群状态,维护集群级(除了集群级,还有索引级分片级等级别)的配置信息。其主要功能包括:

  • 管理集群状态,将新生成的集群状态发布到集群的所有节点
  • 调用allocation模块执行分片分配感知,决策分片分配行为
  • 在集群各个节点直接迁移分片,保证数据平衡,shard rebalance

Allocation

此模块是实现了对节点分片的分配感知策略,新节点加入离开、动态扩容都需要分片分配感知,此模块由主节点调用,常见的使用场景如:跨机架强制感知实现高可用,冷热集群架构设计等。

Bootstrap

引导检查模块,不再赘述

Ingest

预处理模块负责数据索引之前的一些预操作,比如数据类型处理、数据的结构转换等,很多场景下课替代logstash处理管道消息,Elastic认证考试考点之一。

Monitor

监控功能提供了一种方式来了解 Elasticsearch 集群的运行状况和性能

Discovery

发现模块负责管理如发现集群中新加入的节点,或者节点退出之后将状态信息移除,起作用类似于ZooKeeper。发现木块是用于elasticsearch和的内置发现模块 默认值。它提供单播发现,但可以扩展到 支持云环境和其他形式的发现

Gateway

负责说对收到Master广播下来的集群状态数据的持久化存储,并在集群完全重启时恢复他们

Indices

索引模块管理全局级索引配置,不包括索引级及索引以下级。集群启动阶段需要主副本分片恢复就是在这个模块完成的

HTTP

HTTP模块允许通过JSON over HTTP的方式访问ES的API,HTTP模块本质上是完全异步的,这一位置没有阻塞线程等待响应。使用异步通信进行HTTP的好处是解决了C10k的问题。

Transport

传输模块用于集群内部节点通信。传输模块使用TCP协议,每个节点都与其他节点维持若干个TCP长连接,通信本质也是完全异步的。

分片:Shard

Shard即数据分片,是ES的数据载体。在ES中数据分为primary shard(主分片)和replica shard(副本分片),每一个primary承载单个索引的一部分数据,分布于各个节点,replica为某个primary的副本,

即备份。分片分配的原则是尽量均匀的分配在集群中的各个节点,以最大程度降低部分shard在出现意外时对整个集群乃至服务造成的影响。每个分片就是一个Lucene的实例,具有完整的功能。

7、docker 安装es

Install Elasticsearch with Docker | Elasticsearch Guide [8.12] | Elastic

二、查询接口

1、官网所有的api接口介绍

REST APIs | Elasticsearch Guide [8.12] | Elastic

2、常见接口

**分类API(Cat API)**:这是Elasticsearch中用于获取集群、索引等信息的命令行接口。例如获取所有节点信息、查看所有索引等。

ip:9200/_cat/ 查看所有可以查询的对象

=^.^=
/_cat/allocation
/_cat/shards
/_cat/shards/{index}
/_cat/master
/_cat/nodes
/_cat/tasks
/_cat/indices
/_cat/indices/{index}
/_cat/segments
/_cat/segments/{index}
/_cat/count
/_cat/count/{index}
/_cat/recovery
/_cat/recovery/{index}
/_cat/health
/_cat/pending_tasks
/_cat/aliases
/_cat/aliases/{alias}
/_cat/thread_pool
/_cat/thread_pool/{thread_pools}
/_cat/plugins
/_cat/fielddata
/_cat/fielddata/{fields}
/_cat/nodeattrs
/_cat/repositories
/_cat/snapshots/{repository}
/_cat/templates

 

linux 中查看信息

# 检查集群的健康状态
curl -X GET "localhost:9200/_cat/health?v"

# 检查集群未分配的分片
curl -X GET "localhost:9200/_cat/shards?h=index,shard,prirep,state,unassigned.reason"| grep UNASSIGNED

# 查看所有的索引列表 
curl -X GET "localhost:9200/_cat/indices?v"

?v 的作用:

?v是一个查询参数,它的作用是以表格形式更易读的展示返回结果,并且会显示列名。

**索引API(Indices API)**:用于管理(创建、删除、重新分配等)索引的接口。

**文档API(Document API)**:这是Elasticsearch的核心接口,用于在索引中增加、更新、删除或获取文档。

**搜索API(Search API)**:用于在索引中执行查询并获取结果。

**聚合API(Aggregations API)**:用于执行高级搜索查询,比如最大值、最小值、平均值等统计信息。

**映射API(Mapping API)**:用于定义索引中字段的数据类型,比如整数、字符串、日期等。

**分析API(Analyze API)**:用于预分析文本,查看文本在索引之前或之后是如何被分析和标记为索引的。

 

 

 

你真的懂Elasticsearch分布式原理和高级聚合查询吗? (qq.com)

如何进行Elasticsearch集群规划及性能优化实践 - 大数据 - 亿速云 (yisu.com)

ElasticSearch集群状态异常(Red、Yellow)原因分析_es cannot allocate because allocation is not permi-CSDN博客

标签:基础,cat,索引,ElasticSearch,master,分片,集群,节点
From: https://www.cnblogs.com/dgp-zjz/p/18059987

相关文章

  • 自动化之接口测试基础
    1.接口是啥?==>传递数据的通道接口测试:是测试系统组件间接口的一种测试接口测试主要包括:1.同一个系统中模块与模块间的接口(内部接口)2.跨系统平台与平台间的对接(外部接口)接口类型:1.HTTP接口:通过get或post等来获取数据,在数据处理上效率比较高  2.Webservice接口:通过soap协议来......
  • 自动化测试基础
    unittest框架步骤:表达用例-》收集用例-》执行用例-》生成报告1.测试用例(TestCase)2.TestSuit(测试套件)   TestLoader().discover()(收集用例)3.Fixture(前置后置)4.TextTestRunner(执行用例/呈现结果)1.)首先定义一个类,文件名必须以test开头,类必须继承unittest.TestCa......
  • elasticsearch 查询数据-深度分页解决方案
    es深度查询时,如果数据量超过10000,es会报错,后续的数据就查不了了,当然,es为我们提供了下查询方案,游标查询或者search_after查询。以下是kibana测试dsl:#1.游标方式#第一次查询获取游标,同时处理数据(返回数据中含游标信息)GETmy_results/_search?scroll=1m{"sort":[......
  • python基础快速入门(二)
    数据类型:Python中常见的数据类型包括数字(int、float、complex)和字符串。python的数值类型会自动转换,相对灵活,整数(int):例如,在32位机器上,整数的位数为32位,取值范围为-2**31到2**31-1,(4个G,)在64位系统上,整数的位数为64位,取值范围为-2**63到2**63-1。长整数(long):Python中......
  • sql server 基础
    目录若没有想看的可离开,从目录点击可到指定地方一.创建库、创建表、注释增删改、字段增删改、常用数据类型1.创建库2.创建表3.注释增删改4.字段增删改5.常用数据类型二、基本增删改查、关联删改查1.基本增删改查​编辑2.关联删改查三、视图、存储过程、......
  • 卡码java基础课 | 11.句子缩写
    学习内容:字符大小的比较、字符运算、字符拼接ASCII码和Unicode码字符大小写转换字符串trim()方法StringBuilder的使用重点归纳:字符编码:Ascii码和Unicode编码。Ascii早,用7位就能表示128个字符;Unicode包含几乎所有世界上的字符,utf-8、utf-16、utf-32等用不同的字节来表示(8、1......
  • C语言基础-1、数组
    一、数组数组可以存放在变量里,每一个变量有一个名字,有一个类型,还有它的生存空间数组是长度固定的数据结构,用来存放指定的类型数据一个数组里可以有很多个数据所有的数据的类型都是相同的二、定义数组<类型>变量名称[元素数量];intgrades[100];doubleweight[20];元素......
  • Java基础 语法笔记
    大二学习Java语法时,上课写的部分笔记,可能并不完整,仅用以作纪念。数组、集合、字符串(第六课)目录数组、集合、字符串(第六课)数组集合类Collection接口:泛型:List:ArrayList:LinkedList类SetHashSet类TreeSet类MapLterator接口Vector类Collections类查找、替换操作复制StringtoString()......
  • Windows虚拟机安装Linux的基础配置
    Linux实用本次练习实用的是Ubuntu20.04基础配置root用户进入root用户模式sudosu解决网络参考文章一篇搞定Ubuntu22.04下联网问题、ifconfig、net-tools不能用的问题(亲测可行_仅供参考)_无法定位软件包net-tools-CSDN博客编辑->虚拟网络编辑器:删除原先是VMnet*,重新“添......
  • 21-项目管理科学基础
    21.1工程经济学21.1.1资金的时间价值与等值计算参考:信息系统项目管理师考试公式汇总(全).pdf1.1单利与复利计算1)单利计算(simpleinterest)利息=本金*利率*时间,即IR=P*i*n终值计算公式:$$F=P*(1+i*n)$$2)复利计算终值=本金*(1+利率)n,即$$F=P*......