MST
星途 面试题库

面试题:ElasticSearch集群节点过滤中常用的过滤策略有哪些及原理

在ElasticSearch集群节点过滤场景下,阐述几种常见的节点过滤策略,比如基于节点属性过滤、基于负载过滤等,并说明每种策略的实现原理及应用场景。
12.2万 热度难度
数据库ElasticSearch

知识考点

AI 面试

面试题答案

一键面试

基于节点属性过滤

  • 实现原理:通过在节点配置文件(如 elasticsearch.yml)中定义自定义属性,例如 node.attr.rack: rack1,在创建索引或执行操作时,可以使用这些属性来指定目标节点。比如在创建索引时,设置 index.routing.allocation.require.rack: rack1,就只会将分片分配到具有 rack1 属性的节点上。
  • 应用场景:适用于数据中心有多机架、多机房等物理环境划分场景,希望按照物理位置等属性来分配数据分片,以提高数据的可用性和读写性能。例如,在跨机房的集群中,根据机房属性进行节点过滤,确保不同机房都有数据副本,降低机房故障带来的数据丢失风险。

基于负载过滤

  • 实现原理:Elasticsearch 内部会监控节点的负载指标,如 CPU 使用率、内存使用率、磁盘 I/O 等。可以设置相关的负载阈值,当节点负载超过阈值时,会减少新分片分配到该节点。例如通过动态配置 cluster.routing.allocation.node_concurrent_recoveries(节点同时恢复的分片数),根据节点负载动态调整,负载高时减少该值,降低节点压力。
  • 应用场景:当集群中部分节点性能较弱,或者希望在整体负载均衡的情况下,避免某些节点负载过高影响服务质量时使用。比如在混合了高性能和低性能服务器的集群中,通过负载过滤,防止低性能节点因过载而响应缓慢甚至崩溃。

基于角色过滤

  • 实现原理:Elasticsearch 支持为节点定义不同角色,如 masterdataingest 等。可以基于这些角色来过滤节点,例如只允许 data 角色的节点参与数据存储和检索操作。在节点配置文件中设置 node.master: falsenode.data: true 来定义该节点为纯数据节点,然后在操作时可指定仅对数据节点进行操作。
  • 应用场景:在大型集群中,为了实现职责分离,提高集群的稳定性和管理效率。例如将数据处理和索引管理等不同功能分配到不同角色的节点上,通过基于角色过滤确保操作只在合适角色的节点上执行。例如,只在 ingest 角色节点上进行数据预处理,避免在其他角色节点上执行不必要的操作。