我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Elasticsearch节点、集群、分片及副本是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Elasticsearch节点、集群、分片及副本是什么

这篇文章主要讲解了“Elasticsearch节点、集群、分片及副本是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Elasticsearch节点、集群、分片及副本是什么”吧!

Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。

Elasticsearch节点、集群、分片及副本是什么

Elasticsearch 分布式

Elasticsearch 分布式特性包括如下几个点:

高可用

什么是高可用?CAP 定理是分布式系统的基础,也是分布式系统的 3 个指标:

Consistency(一致性)

Availability(可用性)

Partition tolerance(分区容错性)

那高可用(High Availability)是什么?高可用,简称 HA,是系统一种特征或者指标,通常是指,提供一定性能上的服务运行时间,高于平均正常时间段。反之,消除系统服务不可用的时间。

衡量系统是否满足高可用,就是当一台或者多台服务器宕机的时候,系统整体和服务依然正常可用。举个例子,一些知名的网站保证 4 个 9 以上的可用性,也就是可用性超过 99.99%。那 0.01% 就是所谓故障时间的百分比。

Elasticsearch 在高可用性上,体现如下两点:

服务可用性:允许部分节点停止服务,整体服务没有影响

数据可用性:允许部分节点丢失,最终不会丢失数据

可扩展

随着公司业务发展,Elasticsearch 也面临两个挑战:

搜索数据量从百万到亿量级

搜索请求 QPS 也猛增

那么需要将原来节点和增量数据重新从 10 个节点分布到 100 个节点。Elasticsearch 可以横向扩展至数百(甚至数千)的服务器节点,同时可以处理PB级数据。Elasticsearch 为了可扩展性而生,由小规模集群增长为大规模集群的过程几乎完全自动化,这是水平扩展的体现。

Elasticsearch 分布式特性

上面通过可扩展性,可以看出 Elasticsearch 分布式的好处明显:

存储可以水平扩容,水平空间换时间

部分节点停止服务,整个集群服务不受影响,照样正常提供服务

Elasticsearch 在后台自动完成了分布式相关工作,如下:

自动分配文档到不同分片或者多节点上

均衡分配分片到集群节点上,index 和 search 操作时进行负载均衡

复制每个分片,支持数据冗余,防止硬件故障数据丢失

集群扩容时,无缝整合新节点,并且重新分配分片

Elasticsearch 集群知识点如下:

不同集群通过名字区分,默认集群名称为 “elasticsearch”

集群名 cluster name ,可以通过配置文件修改或者命令行 -E cluster.name=user-es-cluster 进行设置一个集群由多个节点组成

Elasticsearch 节点 & 集群

Elasticsearch节点、集群、分片及副本是什么

Elasticsearch 集群有多个节点组成,形成分布式集群。那么,什么是节点呢?

节点(Node),就是一个 Elasticsearch 应用实例。大家都知道 Elasticsearch 源代码是 Java 写的,那么节点就是一个 Java 进程。

所以类似 Spring 应用一样,一台服务器或者本机可以运行多个节点,只要对应的端口不同即可。但生产服务器中,一般一台服务器运行一个 Elasticsearch 节点。还有需要注意:

Elasticsearch 都会有 name ,通过 -E node.name=node01 指定或者配置文件中配置

每个节点启动成功,都会分配对应得一个 UID ,保存在 data 目录

可以通过命令 _cluster/health 查看集群的健康状态,如下:

Green 主分片与副本分片都正常

Yellow 主分片正常,副本分片不正常

Red 有主分片不正常,可能某个分片容量超过了磁盘大小等

Elasticsearch节点、集群、分片及副本是什么

如图,有主(Master)节点和其他节点。那么节点有多少类型呢?

Master-eligible Node 和 Master Node

Elasticsearch 被启动后,默认就是 Master-eligible Node。然后通过参与选主过程,可以成为 Master Node。具体选主原理,后续单独写一篇文章。Master Node 有什么作用呢?

Master Node 负责同步集群状态信息:

所有节点信息

所有索引即其 Mapping 和 Setting 信息

所有分片路由信息

只能 Master 节点可以修改信息,是因为这样就能保证数据得一致性

Data Node 和 Coordinating Node

Data Node,又称数据节点。用于保存数据,其在数据扩展上起至关重要的作用。

Coordinating Node,是负责接收任何 Client 的请求,包括 REST Client 等。该节点将请求分发到合适的节点,最终把结果汇集到一起。一般来说,每个节点默认起到了 Coordinating Node 的职责。

其他节点类型

还有其他节点类型,虽然不常见,但需要知道:

Hot & Warm Node:不同硬件配置的 Data Node,用来实现冷热数据节点架构,降低运维部署的成本

Machine Learning Node:负责机器学习的节点

Tribe Node:负责连接不同的集群。支持跨集群搜索 Cross Cluster Search

一般在开发环境中,设置单一的角色节点:

master node:通过 node.master 配置,默认 true

data node:通过 node.data 配置,默认 true

ingest node:通过 node.ingest 配置,默认 true

coordinating node:默认每个节点都是 coordinating 节点,设置其他类型全部为 false。

machine learning:通过 node.ml 配置,默认 true,需要通过 x-pack 开启。

主分片及副本

Elasticsearch节点、集群、分片及副本是什么

同样看这个图,3 个节点分别为 Node1、Node2、Node3。并且 Node3 上面有一个主分片 P0 和一个副本 R2。那什么是主分片呢?

主分片,用来解决数据水平扩展的问题。比如上图这个解决可以将数据分布到所有节点上:

节点上可以有主分片,也可以没有主分片

主分片在索引创建的时候确定,后续不允许修改。除非 Reindex 操作进行修改

副本,用来备份数据,提高数据的高可用性。副本分片是主分片的拷贝

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

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

如何查看 Elasticsearch 集群的分片配置呢?可以从 settings 从看出:

number_of_shards 主分片数number_of_replicas 副本分片数{ "my_index": {   "settings": {     "index": {       "number_of_shards": "8",       "number_of_replicas": "1"     }   } }}

实战建议:对生产环境中,分片设置很重要,需要最好容量评估与规划

根据数据容量评估分配数,设置过小,后续无法水平扩展;单分片数据量太大,也容易导致数据分片耗时严重

分片数设置如果太大,会导致资源浪费,性能降低;同时也会影响搜索结果打分和搜索准确性

索引评估,每个索引下面的单分片数不用太大。如何评估呢?比如这个索引 100 G 数据量,那设置 10 个分片,平均每个分片数据量就是 10G 。每个分片 10 G 数据量这么大,耗时肯定严重。所以根据评估的数据量合理安排分片数即可。如果需要调整主分片数,那么需要进行 reindex 等迁索引操作。

小结

比如知道了搜索性能场景,例如多少数据量,多大的写入,是写为主还是查询为主等等,才可以确定:

磁盘,推荐 SSD,JVM最大 Xmx 不要超过30G。副本分片至少设置为1。主分片,单个存储不要超过 30 GB,按照这个你推算出分片数,进行设定。

集群中磁盘快满的时候,你再增加机器,确实可能导致新建的索引全部分配到新节点上去的可能性。最终导致数据分配不均。所以要记得监控集群,到70%就需要考虑删除数据或是增加节点可以设置最大分片数缓解这个问题。

分片的尺寸如果过大,确实也没有快速恢复的办法,所以尽量保证分片的size在40G以下。

感谢各位的阅读,以上就是“Elasticsearch节点、集群、分片及副本是什么”的内容了,经过本文的学习后,相信大家对Elasticsearch节点、集群、分片及副本是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Elasticsearch节点、集群、分片及副本是什么

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Elasticsearch节点、集群、分片及副本是什么

这篇文章主要讲解了“Elasticsearch节点、集群、分片及副本是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Elasticsearch节点、集群、分片及副本是什么”吧!Elast
2023-06-28

hadoop集群增加节点的方法是什么

Hadoop集群增加节点的方法通常有以下几个步骤:准备新节点:首先需要准备一台新的服务器作为新增节点,确保该服务器满足Hadoop集群的硬件要求,并且安装好操作系统和必要的软件环境。配置Hadoop集群:在新增节点上配置Hadoop集群的相
hadoop集群增加节点的方法是什么
2024-03-05

mongodb集群添加节点的方法是什么

要向MongoDB集群添加节点,可以按照以下步骤进行操作:1. 安装MongoDB:在要添加节点的机器上安装MongoDB软件。确保安装的版本与集群中的其它节点版本兼容。2. 配置MongoDB实例:为新节点配置MongoDB实例。这包括指
2023-09-12

hadoop集群节点ip管理的方法是什么

Hadoop集群节点的IP地址可以通过以下几种方法进行管理:静态配置:管理员可以手动在Hadoop集群的配置文件中指定每个节点的IP地址。这种方法适用于固定数量的节点,IP地址不经常变化的情况。动态配置:使用动态主机配置协议(DHCP)或类
hadoop集群节点ip管理的方法是什么
2024-03-14

mongodb分片集群部署的方法是什么

MongoDB分片集群部署的方法包括以下步骤:部署分片服务器:首先需要创建多个分片服务器,每个分片服务器可以包含一个或多个副本集。在每个分片服务器上运行mongod进程,确保它们可以相互连接。部署配置服务器:接下来需要创建配置服务器,配置服
mongodb分片集群部署的方法是什么
2024-04-09

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录