news 2026/4/3 5:44:28

4、Elasticsearch 分布式特性与集群管理详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
4、Elasticsearch 分布式特性与集群管理详解

Elasticsearch 分布式特性与集群管理详解

1. Elasticsearch 聚合与分布式特性概述

Elasticsearch 的聚合功能十分强大,例如以下输出:

{ "doc_count": 1, "avg_age": { "value": 25 } }

这是聚合操作的结果,展示了兴趣列表及其数量,同时每个兴趣还包含了拥有该兴趣的所有员工的平均年龄。即便你还不理解其语法,也能看出通过此功能可以实现复杂的聚合和分组操作,能提取的数据种类几乎没有限制。

Elasticsearch 具有分布式特性,它能扩展到数百甚至数千台服务器,处理 PB 级数据。在使用教程示例时,无需了解分布式系统、分片、集群发现等概念。它会自动完成以下操作:
- 将文档分区到不同的容器或分片中,这些分片可存储在单个节点或多个节点上。
- 在集群节点间平衡分片,以分散索引和搜索负载。
- 复制每个分片,为数据提供冗余副本,防止硬件故障导致的数据丢失。
- 将集群中任何节点的请求路由到持有你感兴趣数据的节点。
- 随着集群增长无缝集成新节点,或在节点丢失时重新分配分片以恢复。

2. 集群基础概念

2.1 节点与集群

节点是 Elasticsearch 的运行实例,集群由一个或多个具有相同cluster.name的节点组成,它们共同工作以共享数据和负载。当节点添加或移除时,集群会自动重新组织以均匀分布数据。集群中有一个主节点,负责管理集群级别的更改,如创建或删除索引、添加或移除节点等。主节点无需参与文档级别的更改或搜索,因此不会因流量增长成为瓶颈,任何节点都可能成为主节点。用户可以与集群中的任何节点通信,每个节点都知道每个文档的位置,并能将请求直接转发到持有相关数据的节点。

2.2 集群健康状态

在 Elasticsearch 集群中,可监控许多统计信息,其中最重要的是集群健康状态,它有绿色、黄色和红色三种状态:
-绿色:所有主分片和副本分片都处于活动状态。
-黄色:所有主分片都处于活动状态,但并非所有副本分片都处于活动状态。
-红色:并非所有主分片都处于活动状态。

可以使用以下命令检查集群健康状态:

GET /_cluster/health

在一个空的无索引集群中,该命令返回结果示例如下:

{ "cluster_name": "elasticsearch", "status": "green", "timed_out": false, "number_of_nodes": 1, "number_of_data_nodes": 1, "active_primary_shards": 0, "active_shards": 0, "relocating_shards": 0, "initializing_shards": 0, "unassigned_shards": 0 }

3. 索引与分片

3.1 索引与分片的概念

要向 Elasticsearch 添加数据,需要创建索引,它是存储相关数据的逻辑命名空间,指向一个或多个物理分片。分片是一个低级工作单元,仅保存索引中所有数据的一部分。分片是 Lucene 的单个实例,本身就是一个完整的搜索引擎。文档存储和索引在分片中,但应用程序不直接与分片通信,而是与索引通信。

分片分为主分片和副本分片:
-主分片:每个文档属于一个主分片,主分片的数量决定了索引能存储的最大数据量。虽然主分片存储数据理论上无限制,但实际有一定限度,其最大大小取决于硬件、文档大小和复杂度、索引和查询方式以及预期响应时间等因素。
-副本分片:是主分片的副本,用于提供数据冗余,防止硬件故障,并处理搜索或检索文档等读请求。索引的主分片数量在创建时固定,而副本分片数量可随时更改。

3.2 创建索引示例

在一个空的单节点集群中创建名为blogs的索引,默认情况下索引会分配 5 个主分片,这里我们分配 3 个主分片和 1 个副本(每个主分片有 1 个副本):

PUT /blogs { "settings" : { "number_of_shards" : 3, "number_of_replicas" : 1 } }

创建索引后,所有 3 个主分片都分配到了节点 1。此时检查集群健康状态,会发现状态为黄色,因为 3 个副本分片尚未分配到节点。这意味着集群虽然能正常处理请求,但存在硬件故障导致数据丢失的风险。

3.3 索引与分片相关操作流程

graph LR A[创建索引] --> B[分配主分片] B --> C{是否有副本分片} C -- 是 --> D[分配副本分片] C -- 否 --> E[集群正常运行] D --> F{所有分片是否分配成功} F -- 是 --> G[集群健康状态绿色] F -- 否 --> H[集群健康状态黄色]

4. 集群扩展与故障处理

4.1 增加故障转移

单节点运行存在单点故障,没有冗余。为防止数据丢失,只需启动另一个节点。启动第二个节点时,确保其cluster.name与第一个节点相同,它会自动发现并加入集群。启动第二个节点后,3 个副本分片会分配到该节点,此时集群健康状态变为绿色,所有主分片和副本分片都处于活动状态,集群不仅功能完整,而且始终可用。

4.2 水平扩展

随着应用程序需求增长,可通过增加节点进行水平扩展。启动第三个节点后,集群会重新组织,将节点 1 和节点 2 的各一个分片移动到新节点 3,每个节点的硬件资源可被更少的分片共享,从而提高每个分片的性能。

由于索引创建时主分片数量固定,它决定了索引能存储的最大数据量。但读请求可由主分片或副本分片处理,因此增加数据副本可提高搜索吞吐量。可以动态更改活动集群中的副本分片数量,例如将blogs索引的副本数量从默认的 1 增加到 2:

PUT /blogs/_settings { "number_of_replicas" : 2 }

此时blogs索引有 9 个分片(3 个主分片和 6 个副本分片),可扩展到最多 9 个节点,每个节点一个分片,相比原来的三节点集群,搜索性能可提升三倍。不过,仅在相同数量的节点上增加副本分片不会提高性能,需要增加硬件才能提高吞吐量,但额外的副本意味着更高的冗余度。

4.3 应对节点故障

当杀死第一个节点(主节点)时,节点会选举新的主节点(节点 2)。由于主分片 1 和 2 丢失,此时检查集群健康状态会显示红色。但其他节点上存在丢失主分片的完整副本,新主节点会将节点 2 和节点 3 上这些分片的副本提升为主分片,使集群健康状态恢复为黄色。此时集群健康状态为黄色而非绿色,是因为我们指定每个主分片需要 2 个副本,而当前仅分配了 1 个副本。不过,即使再杀死节点 2,应用程序仍可继续运行且不会丢失数据,因为节点 3 包含每个分片的副本。如果重启节点 1,集群会分配缺失的副本分片。

4.4 集群操作总结

操作描述集群健康状态变化
创建索引分配主分片和副本分片可能为黄色(副本分片未分配)
增加节点分配副本分片可能从黄色变为绿色
增加副本数量动态调整副本分片数量可扩展集群,提高冗余度
节点故障选举新主节点,提升副本分片为主分片可能从绿色变为黄色或红色

4.5 集群故障处理流程

graph LR A[节点故障] --> B[选举新主节点] B --> C{是否有主分片丢失} C -- 是 --> D[提升副本分片为主分片] C -- 否 --> E[集群正常运行] D --> F{是否所有主分片恢复} F -- 是 --> G{副本分片是否满足要求} F -- 否 --> H[集群健康状态红色] G -- 是 --> I[集群健康状态绿色] G -- 否 --> J[集群健康状态黄色]

5. 深入理解 Elasticsearch 分布式特性的优势

5.1 数据安全性与可靠性

Elasticsearch 通过副本分片机制为数据提供了强大的安全性和可靠性保障。当一个节点出现故障时,如前文所述,副本分片可以迅速提升为主分片,确保数据的可用性。这种冗余设计使得即使在硬件故障、网络中断等极端情况下,数据也能得到妥善保护,应用程序能够继续稳定运行。例如,在一个包含多个节点的集群中,每个主分片都有多个副本分片分布在不同的节点上,这样即使某个节点完全损坏,也不会影响数据的完整性和系统的正常使用。

5.2 高性能与扩展性

Elasticsearch 的分布式特性使其具备出色的高性能和扩展性。通过水平扩展,即增加节点的方式,可以轻松应对不断增长的业务需求。随着节点数量的增加,集群能够将负载均匀地分配到各个节点上,每个节点的硬件资源(如 CPU、RAM、I/O)可以被更少的分片共享,从而提高了每个分片的性能。同时,动态调整副本分片数量的功能,使得用户可以根据实际的业务需求灵活地调整集群的搜索吞吐量和冗余度。例如,在业务高峰期,可以适当增加副本分片数量,提高搜索性能;在业务低谷期,减少副本分片数量,降低硬件资源消耗。

5.3 透明性与易用性

对于用户来说,Elasticsearch 的分布式特性具有很高的透明性。用户无需了解分布式系统、分片、集群发现等复杂的概念,就可以轻松地使用 Elasticsearch 进行数据的索引和搜索。无论是在单节点环境还是多节点集群环境中,用户的操作方式都是一致的,Elasticsearch 会自动处理数据的分布、负载均衡、故障转移等复杂的任务。这种易用性降低了用户的学习成本,使得更多的开发人员能够快速上手并应用 Elasticsearch 来解决实际问题。

6. 实际应用场景中的 Elasticsearch 集群配置建议

6.1 小型应用场景

对于小型应用场景,如个人博客、小型企业网站等,数据量相对较小,对性能和可靠性的要求也不是特别高。可以采用单节点或双节点的集群配置。在单节点环境中,创建索引时可以适当减少主分片数量,以降低硬件资源的消耗。例如,可以创建 1 - 2 个主分片,并设置 1 个副本分片。这样在保证数据一定冗余的情况下,也能满足基本的搜索需求。如果使用双节点集群,可以将副本分片分配到另一个节点上,提高数据的安全性。

6.2 中型应用场景

对于中型应用场景,如中型企业的业务系统、电商平台的商品搜索等,数据量和业务流量逐渐增加。建议采用 3 - 5 个节点的集群配置,并根据数据量和业务需求合理设置主分片和副本分片数量。一般来说,可以设置 3 - 5 个主分片,每个主分片设置 1 - 2 个副本分片。这样可以在保证数据安全性的同时,提高集群的搜索性能和扩展性。同时,定期监控集群的健康状态和性能指标,根据实际情况进行动态调整。

6.3 大型应用场景

对于大型应用场景,如大型互联网公司的搜索服务、大数据分析平台等,数据量巨大,对性能和可靠性的要求极高。需要采用多个节点的集群配置,并且可能需要进行分区分片等更复杂的配置。可以根据数据的特点和业务需求,将数据划分为多个索引,并为每个索引设置合适的主分片和副本分片数量。例如,可以设置 5 - 10 个主分片,每个主分片设置 2 - 3 个副本分片。同时,使用负载均衡器来均衡集群的流量,确保各个节点的负载均匀。此外,还需要建立完善的监控和报警机制,及时发现和处理集群中的异常情况。

6.4 不同应用场景配置总结

应用场景节点数量主分片数量副本分片数量特点
小型应用场景1 - 2 个1 - 2 个1 个数据量小,对性能和可靠性要求较低
中型应用场景3 - 5 个3 - 5 个1 - 2 个数据量和业务流量逐渐增加,需要平衡性能和成本
大型应用场景多个5 - 10 个2 - 3 个数据量巨大,对性能和可靠性要求极高,需要复杂的配置和管理

7. 总结与展望

7.1 总结

Elasticsearch 作为一款强大的分布式搜索和分析引擎,其分布式特性为用户提供了数据安全性、高性能、扩展性和易用性等诸多优势。通过合理配置集群、索引和分片,能够满足不同规模和需求的应用场景。在实际应用中,用户可以根据自身的业务特点和数据量,选择合适的集群配置方案,并通过监控和调整来保证集群的稳定运行和性能优化。

7.2 展望

随着大数据、人工智能等技术的不断发展,对搜索和分析的需求也越来越高。Elasticsearch 作为行业领先的解决方案,将不断进行技术创新和功能扩展。未来,我们可以期待 Elasticsearch 在以下方面取得更大的突破:
-更强大的分布式计算能力:进一步优化分布式架构,提高集群的并行处理能力,能够更高效地处理海量数据和复杂的查询。
-更智能的数据分析功能:结合人工智能和机器学习技术,提供更智能的数据分析和预测功能,帮助用户更好地挖掘数据价值。
-更好的兼容性和集成性:与更多的数据库、存储系统和应用框架进行无缝集成,为用户提供更便捷的使用体验。

总之,Elasticsearch 在分布式搜索和分析领域具有广阔的发展前景,将继续为用户提供高效、可靠的解决方案。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/27 7:13:15

31、Elasticsearch 配置指南:节点角色、集群设置与恢复管理

Elasticsearch 配置指南:节点角色、集群设置与恢复管理 1. 配置节点角色 Elasticsearch 默认允许每个节点充当主节点、数据节点或客户端节点。但在处理大量数据时,可能需要专门的节点来分别处理数据存储、请求处理和集群管理。可以通过 elasticsearch.yml 配置文件中的三…

作者头像 李华
网站建设 2026/4/3 2:47:45

32、Elasticsearch 深入解析:恢复、模板、插件与缓存管理

Elasticsearch 深入解析:恢复、模板、插件与缓存管理 1. 分片恢复状态信息 在 Elasticsearch 中,通过响应信息我们可以查看每个分片的相关信息。对于每个分片,我们能看到操作类型( type 属性)、描述恢复过程所处阶段的 stage 属性,以及该分片是否为主分片( prima…

作者头像 李华
网站建设 2026/3/17 1:37:29

33、Elasticsearch缓存与设置管理全解析

Elasticsearch缓存与设置管理全解析 1. Fielddata与Doc Values 在Elasticsearch中,对于未分析字段、使用数字数据类型且非多值的字段,可使用Doc Values替代Fielddata缓存。使用Doc Values能节省内存,查询速度也比Fielddata缓存更快,不过会使索引速度略有下降(幅度很小)…

作者头像 李华
网站建设 2026/3/30 23:05:53

38、Elasticsearch 硬件选型与单节点调优指南

Elasticsearch 硬件选型与单节点调优指南 1. Elasticsearch 管理概述 在使用 Elasticsearch 时,管理工作至关重要。我们可以通过其 API 对索引进行备份,同时监控集群的健康状态。控制集群分片的重新平衡,并根据需求调整分片分配。利用 CAT API 以人类可读的形式获取 Elasti…

作者头像 李华
网站建设 2026/3/14 12:24:37

仅需8GB内存!Open-AutoGLM轻量化部署秘籍,老手机也能变身AI终端

第一章:Open-AutoGLM 手机部署安装在移动设备上部署 Open-AutoGLM 模型,能够实现本地化、低延迟的自然语言处理能力。该过程主要依赖于轻量化模型转换与移动端推理框架的支持,适用于 Android 和 iOS 平台。环境准备 一台运行 Android 10 或更…

作者头像 李华
网站建设 2026/3/25 5:12:43

【Open-AutoGLM乱码终结方案】:20年专家亲授3步精准修复输出异常

第一章:Open-AutoGLM输出乱码现象剖析在部署和调用 Open-AutoGLM 模型过程中,部分开发者反馈其输出内容出现乱码现象,严重影响结果的可读性与后续处理。该问题通常出现在字符编码不一致、模型解码逻辑错误或输入预处理异常等环节。乱码成因分…

作者头像 李华