ElasticSearch的集群、节点、索引、分片和副本

news2024/11/24 8:36:31

Elasticsearch是面向文档型数据库,一条数据在这里就是一个文档。为了方便大家理解,我们将Elasticsearch里存储文档数据和关系型数据库MySQL存储数据的概念进行一个类比

ES里的Index可以看做一个库,而Types相当于表,Documents则相当于表的行。

这里Types的概念已经被逐渐弱化,Elasticsearch 6.X中,一个index下已经只能包含一个type,Elasticsearch 7.X中, Type的概念已经被删除了。

1. 集群(Cluster)

1.1 集群简介

分布式系统的可用性与扩展性

高可用性

服务可用性一允许有节点停止服务

数据可用性-部分节点丢失,不会丢失数据

可扩展性

请求量提升一数据的不断增长(将数据分布到所有节点上)

Easticsearch 的分布式架构的好处

存储的水平扩容

提高系统的可用性,部分节点停止服务,整人集群的服务不受影响

Elasticsearch的分布式架构

不同的集群通过不同的名字来区分,默认名字“elasticsearch"

通过配置文件修改,或者在命令行中-E cluster.name=cluster_name 进行设定

一人集群可以有一人或者多人节点

一个集群就是由一个或多个服务器节点组织在一起,共同持有整个的数据,并一起提供索引和搜索功能。

一个Elasticsearch集群有一个唯一的名字标识,这个名字默认就是”elasticsearch”。这个名字是重要的,因为一个节点只能通过指定某个集群的名字,来加入这个集群。

1.1 集群健康状态

# 获取集群健康状态
GET _cluster/health
# 获取集群健康状态,精确到索引
GET _cluster/health?level=indices
# 获取集群健康状态,精确到分片
GET _cluster/health?level=shards
# 获取集群健康状态,精确到某几个索引
GET /_cluster/health/kibana_sample_data_ecommerce,kibana_sample_data_flights
# 获取集群健康状态,精确到某个索引的分片
GET /_cluster/health/kibana_sample_data_flights?level=shards
{
  "cluster_name" : "elasticsearch",
  "status" : "green",
  "timed_out" : false,
  "number_of_nodes" : 1,
  "number_of_data_nodes" : 1,
  "active_primary_shards" : 12,
  "active_shards" : 12,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 0,
  "delayed_unassigned_shards" : 0,
  "number_of_pending_tasks" : 0,
  "number_of_in_flight_fetch" : 0,
  "task_max_waiting_in_queue_millis" : 0,
  "active_shards_percent_as_number" : 100.0
}

1.2 集群详细信息

GET _cluster/state

1.3 集群的统计信息

GET _cluster/stats

返回结果包含集群、节点、索引的详细统计信息。

1.3 集群的设置信息

GET /_cluster/settings
# 包含默认值设置
GET /_cluster/settings?include_defaults=true
{
  "persistent" : { },
  "transient" : { }
}

2. 节点(Node)

2.1 节点简介

节点是一个 Elasticsearch 的实例,本质上就是一个JAVA进程。

一台机器上可以运行多个Elasticsearch 进程,但是生产环境一般建议一台机器上只运

行一个 Elasticsearch 实例。

每一个节点都有名字,通过配置文件配置,或者启动时候-E node.name=node1指定。

每一个节点在启动之后,会分配一个 UID,保存在 data 目录下。

集群中包含很多服务器,一个节点就是其中的一个服务器。作为集群的一部分,它存储数据,参与集群的索引和搜索功能。

一个节点也是由一个名字来标识的,默认情况下,这个名字是一个随机的漫威漫画角色的名字,这个名字会在启动的时候赋予节点。这个名字对于管理工作来说挺重要的,因为在这个管理过程中,你会去确定网络中的哪些服务器对应于Elasticsearch集群中的哪些节点。

一个节点可以通过配置集群名称的方式来加入一个指定的集群。默认情况下,每个节点都会被安排加入到一个叫做“elasticsearch”的集群中,这意味着,如果你在你的网络中启动了若干个节点,并假定它们能够相互发现彼此,它们将会自动地形成并加入到一个叫做“elasticsearch”的集群中。

节点类型

描述

Master-eligible nodes 

和 Master Node

每个节点启动后,默认就是一个Master eligible节点,可以设置 node.master:false 禁止

Master-eligible节点可以参加选主流程,成为Master节点

当第一个节点启动时候,它会将自己选举成Master节点

每个节点上都保存了集群的状态,只有Master节点才能修改集群的状态信息

集群状态(Cluster State),维护了一个集群中,必要的信息

1)所有的节点信息

2)所有的索引和其相关的 Mapping 与 Setting 信息

3)分片的路由信息

任意节点都能修改信息会导致数据的不一致性

Data Node 

可以保存数据的节点,叫做Data Node。负责保存分片数据。在数据扩展上起到了至关重要的作用

Coordinating Node

负责接受Client的请求,将请求分发到合适的节点,最终把结果汇集到一起,每个节点默认都起到了 Coordinating Node的职贵

Hot & Warm Node

不同硬件配置的 Data Node,用来实现 Hot & Warm 架构,降低集群部署的成本

Machine Learning Node

负责跑 机器学习的Job,用来做异常检测

Tribe Node

(5.3 开始使用 Cross Cluster Serarch)Tribe Node 连接到不同的 Elasticsearch 集群,并且支持将这些集群当成一个单独的集群处理

2.2 节点基本信息

GET _cat/nodes?v
GET /_cat/nodes?v&h=id,ip,port,v,m

2.3 获取单个节点的详细信息

GET /_nodes/node-1

3. 索引(Index)

一个索引就是一个拥有几分相似特征的文档的集合。比如说,你可以有一个客户数据的索引,另一个产品目录的索引,还有一个订单数据的索引。一个索引由一个名字来标识(必须全部是小写字母),并且当我们要对这个索引中的文档进行索引、搜索、更新和删除的时候,都要使用到这个名字。在一个集群中,可以定义任意多的索引。

能搜索的数据必须索引,这样的好处是可以提高查询速度,比如:新华字典前面的目录就是索引的意思,目录可以提高查询速度。

Elasticsearch索引的精髓:一切设计都是为了提高搜索的性能。

3.1 页面查看索引信息

页面查看索引信息,左侧菜单打开StackManagement

包括隐藏的索引

3.2 命令查看索引信息

或者可以切换到开发工具视图,用开发工具查询

GET /_cat/indices

3.3 查看kibana前缀的索引信息

GET /_cat/indices/kibana*?v&s=index

3.4 查看状态为健康的索引信息

GET /_cat/indices?v&health=green

3.5 索引文档数量排序

GET /_cat/indices?v&s=docs.count:desc

3.6 查看单个索引的详细信息

GET kibana_sample_data_ecommerce

在这里会列出索引的别名、映射和设置信息。

3.7 查看索引的文档总数

#查看索引的文档总数
GET kibana_sample_data_ecommerce/_count
{
  "count" : 4675,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  }
}

3.8 查看索引的前10条文档

#查看前10条文档,了解文档格式
POST kibana_sample_data_ecommerce/_search

3.9 创建索引

PUT myindex

3.10 删除索引

DELETE myindex

4.分片(Shards)

4.1 分片简介

一个索引可以存储超出单个节点硬件限制的大量数据。比如,一个具有10亿文档数据的索引占据1TB的磁盘空间,而任一节点都可能没有这样大的磁盘空间。或者单个节点处理搜索请求,响应太慢。为了解决这个问题,Elasticsearch提供了将索引划分成多份的能力,每一份就称之为分片。

当你创建一个索引的时候,你可以指定你想要的分片的数量。每个分片本身也是一个功能完善并且独立的“索引”,这个“索引”可以被放置到集群中的任何节点上。

分片很重要,主要有两方面的原因:

1)允许你水平分割 / 扩展你的内容容量。

2)允许你在分片之上进行分布式的、并行的操作,进而提高性能/吞吐量。

至于一个分片怎样分布,它的文档怎样聚合和搜索请求,是完全由Elasticsearch管理的,对于作为用户的你来说,这些都是透明的,无需过分关心。

被混淆的概念是,一个 Lucene 索引 我们在 Elasticsearch 称作 分片 。 一个 Elasticsearch 索引 是分片的集合。 当 Elasticsearch 在索引中搜索的时候, 他发送查询到每一个属于索引的分片(Lucene 索引),然后合并每个分片的结果到一个全局的结果集。

总之,每个索引可以被分成多个分片。一个索引也可以被复制0次(意思是没有复制)或多次。一旦复制了,每个索引就有了主分片(作为复制源的原来的分片)和复制分片(主分片的拷贝)之别。分片和复制的数量可以在索引创建的时候指定。在索引创建之后,你可以在任何时候动态地改变复制的数量,但是你事后不能改变分片的数量。默认情况下,Elasticsearch中的每个索引被分片1个主分片和1个复制,这意味着,如果你的集群中至少有两个节点,你的索引将会有1个主分片和另外1个复制分片(1个完全拷贝),这样的话每个索引总共就有2个分片,我们需要根据索引需要确定分片个数。

4.2 主分片(Primary Shard )和副本分片(Replica Shard)

主分片,用以解决数据水平扩展的问题。通过主分片,可以将数据分布到集群内的所有节点之

一个分片是一人运行的 Lucene 的实例

主分片数在索引创建时指定,后续不允许修改,除非 Reindex副本,用以解决数据高可用的问题。分片是主分片的拷贝。

副本分片数,可以动态题调整。

增加副本数,还可以在一定程度上提高服务的可用性(读取的吞吐)

4.3 分片设定策略

一个三节点的集群中,blogs 索引的分片分布情况,思考:增加一个节点或改大主分片数对系统的影响?

对于生产环境中分片的设定,需要提前做好容量规划

分片数设置过小

1)后续无法增加节点实现水品扩展

2)单个分片的数据量太大,导致数据重新分配耗时

分片数设置过大

1)影响搜索结果的相关性打分,影响统计结果的准确性

2)单个节点上过多的分片,会导致资源浪费,同时也会影响性能

3)7.0开始,默认主分片设置成1,解决了over-sharding的问题

GET _cat/shards
GET _cat/shards?h=index,shard,prirep,state,unassigned.reason

5.副本(Replicas)

在一个网络 / 云的环境里,失败随时都可能发生,在某个分片/节点不知怎么的就处于离线状态,或者由于任何原因消失了,这种情况下,有一个故障转移机制是非常有用并且是强烈推荐的。为此目的,Elasticsearch允许你创建分片的一份或多份拷贝,这些拷贝叫做复制分片(副本)。

复制分片之所以重要,有两个主要原因: 

1在分片/节点失败的情况下,提供了高可用性。因为这个原因,注意到复制分片从不与原/主要(original/primary)分片置于同一节点上是非常重要的。

2扩展你的搜索量/吞吐量,因为搜索可以在所有的副本上并行运行。

总之,每个索引可以被分成多个分片。一个索引也可以被复制0次(意思是没有复制)或多次。一旦复制了,每个索引就有了主分片(作为复制源的原来的分片)和复制分片(主分片的拷贝)之别。分片和复制的数量可以在索引创建的时候指定。在索引创建之后,你可以在任何时候动态地改变复制的数量,但是你事后不能改变分片的数量。默认情况下,Elasticsearch中的每个索引被分片1个主分片和1个复制,这意味着,如果你的集群中至少有两个节点,你的索引将会有1个主分片和另外1个复制分片(1个完全拷贝),这样的话每个索引总共就有2个分片,我们需要根据索引需要确定分片个数。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringDataJpa(三)

七、Specifications动态查询 有时我们在查询某个实体的时候,给定的条件是不固定的,这时就需要动态构建相应的查询语句,在Spring Data JPA中可以通过JpaSpecificationExecutor接口查询。相比JPQL,其优势是类型安全,更加的面向对象。 import …

霍兰德职业兴趣测试,对职业选择是否有帮助?

人们不喜欢标新立异,喜欢墨守成规,这也是有一定道理的,因为以往的传统更稳妥更可靠。创新是需要承担一定的风险的,求职应聘也是一样,不过虽然时代的发展,招聘方式越来越多的新花样,应聘也变的越…

2023年Q3乳品行业数据分析(乳品市场未来发展趋势)

随着人们生活水平的不断提高以及对健康生活的追求不断增强,牛奶作为优质蛋白和钙的补充品,市场需求逐年增加。 今年Q3,牛奶乳品市场仍呈增长趋势。根据鲸参谋电商数据分析平台的相关数据显示,2023年7月-9月,牛奶乳品市…

【并发编程-2】JUC-1

Lock 互斥锁: 1、锁的可重入性: 当一个线程调用object.lock()获取到锁,进入临界区后,还可以再次调用object.lock()。 通常锁都应该设计为可重入,否则就会发生死锁。 比如synchronized就是可重入,在一个s…

大数据是什么?

1.什么是数据? 数据是什么?什么样的称之为数据呐?我想找个问题提出来,各位小伙伴一定会喷我,脸数据都不知道的还在写什么大数据?但是我们转身再想一想,数据,我们真的了解本质吗&…

5G边缘计算网关的功能及作用

5G边缘计算网关具有多种功能。 首先,它支持智能云端控制,可以通过5G/4G/WIFI等无线网络将采集的数据直接上云,实现异地远程监测控制、预警通知、报告推送和设备连接等工作。 其次,5G边缘计算网关可以采集各种数据,包…

虚拟机ping不通百度,SecureCRTPortable连接不上

虚拟机ping不通百度,SecureCRTPortable连接不上 文章目录 虚拟机ping不通百度,SecureCRTPortable连接不上1、打开虚拟网络编辑器2、更改设置3、NAT设置4、设置网关4、设置网关 cat /etc/sysconfig/network-scripts/ifcfg-ens33 TYPEEthernet PROXY_METHO…

Web Worker:JS多线程的伪解药?

前言 在前端开发领域,JavaScript 的单线程限制一直是一个难以忽视的挑战。当谈到解决JavaScript的单线程限制时,HTML5引入的Web Worker被普遍认为是一剂解药💊。同时,业界中大量的文章也是聚焦于讨论web worker的神奇力量。然而&…

Banana Pi BPI-M6开源硬件开发板介绍以及与 Raspberry Pi 5 的比较

Banana Pi BPI-M6 Banana Pi BPI-M6是Banana-Pi组织最新开发的一款类似于Raspberry Pi的单板计算机,具有相同的尺寸格式和相似的功能。 今天我想向您介绍这些功能,并将它们与新的 Raspberry 5 提供的功能进行一些比较。 Raspberry Pi是英国 Raspberry P…

Cesium教程(二十):动态加载图片

1、效果预览 备注: 箭头图片可以去这里下载:箭头下载地址 2、代码编写 创建容器 <div id="cesiumContainer" class="fullSize"

软件版本控制系统VCS工具——cvs vss svn git

版本控制 版本控制系统&#xff08;Version Control System&#xff0c;VCS&#xff09;是用于跟踪和管理源代码和文档的工具。可追踪和管理修改历史&#xff0c;包括修改的内容、时间、作者等信息。有助于团队协作、追踪变更、恢复历史版本等。VCS的主要目的是帮助团队协作开…

竞赛选题 深度学习机器视觉车道线识别与检测 -自动驾驶

文章目录 1 前言2 先上成果3 车道线4 问题抽象(建立模型)5 帧掩码(Frame Mask)6 车道检测的图像预处理7 图像阈值化8 霍夫线变换9 实现车道检测9.1 帧掩码创建9.2 图像预处理9.2.1 图像阈值化9.2.2 霍夫线变换 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分…

Pytest系列(16)- 分布式测试插件之pytest-xdist的详细使用

前言 平常我们功能测试用例非常多时&#xff0c;比如有1千条用例&#xff0c;假设每个用例执行需要1分钟&#xff0c;如果单个测试人员执行需要1000分钟才能跑完当项目非常紧急时&#xff0c;会需要协调多个测试资源来把任务分成两部分&#xff0c;于是执行时间缩短一半&#…

【gogogo专栏】golang并发编程

golang并发编程 并发编程的工具goroutine介绍协程管理器sync.WaitGroup channel介绍readChannel和writeChannelclose的用法select的用法 通讯示例总结 并发编程的工具 在golang中&#xff0c;并发编程是比较简单的&#xff0c;不像java中那么麻烦&#xff0c;golang天然的支持协…

便携式电能质量分析仪

产品简介 KDZD5000电能质量分析仪是我公司精心研制的现场测试的三相、多功能、智能化、人机操作简洁的综合型测试仪器。具有容易使用&#xff0c;超大液晶彩屏显示&#xff0c;高分辨率&#xff0c;中英文双语操作界面&#xff0c;防振结构外壳等特点。可同时测量4路电流&…

Cesium 展示——拖拽点移动相邻线也跟着更新

文章目录 需求分析1. 获取所要移动实体的 ID2. 移动点相邻线跟着更新移动3. 注意4. 其他需求 实现 拖拽点移动相邻线也跟着更新 拖拽前 点击拖拽 拖拽后 分析 1. 获取所要移动实体的 ID 在Cesium中获取指定(x, y)位置处的实体ID,你可以通过以下步骤实现: 首先,使用Cesi…

2023年【化工自动化控制仪表】考试报名及化工自动化控制仪表考试试卷

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年化工自动化控制仪表考试报名为正在备考化工自动化控制仪表操作证的学员准备的理论考试专题&#xff0c;每个月更新的化工自动化控制仪表考试试卷祝您顺利通过化工自动化控制仪表考试。 1、【单选题】CENTUMCS30…

【自定义控制器View的懒加载 Objective-C语言】

一、控制器的View懒加载 1.大家对这个懒加载是什么概念: 把上节课的代码command + C、command + V、保存一个副本,把副本命名为03-控制器的view的懒加载: 是不是用到的时候,再去加载,然后呢,只加载一次,对吧, 那这些重复的,我就删掉了啊, 删掉 控制器里面: 这个删…

PV与PVC

emptyDir存储卷 概述&#xff1a; 当Pod被分配给节点时&#xff0c;首先创建emptyDir卷&#xff0c;并且只要该Pod在该节点上运行&#xff0c;该卷就会存在。正如卷的名字所述&#xff0c;它最初是空的。Pod 中的容器可以读取和写入emptyDir卷中的相同文件&#xff0c;尽管该…

软件开发中常见的设计原则

软件开发中常见的设计原则 1. 单一责任原则2. 开放封闭原则3. 里氏替换原则4. 接口分离原则5. 依赖倒置原则6. 迪米特法则7. 合成复用原则8. 共同封闭原则9. 稳定抽象原则10. 稳定依赖原则 简写全拼中文翻译SRPThe Single Responsibility Principle单一责任原则OCPThe Open Clo…