百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

Elasticsearch集群节点下线和分片感知意识

nanshan 2025-07-03 18:20 12 浏览 0 评论

本篇文章将介绍如下内容:

  • 分片分配感知意识(定义节点区域属性)
  • 强制感知意识
  • 分片分配过滤(节点下线)
  • 集群分片数量限制


1、分片分配感知意识

为了使分片分配能够考虑节点的物理硬件配置,我们可以给集群中的节点设置一些自定义的属性。如果Elasticsearch知道某些节点位于同一物理区域,比如同一个机架或者同一个街区,就可以把索引的主分片和副本分片数据放置在不同的物理区域,以防止因同一物理区域服务器全部不可用而导致整个集群的数据不可用。

当通过
cluster.routing.allocation.awareness.attributes启用
分片分配感知意识,分片只会被分配到配置了awareness属性的节点上,如果有多个awareness属性,Elasticsearch会综合考虑,然后进行合理的分片分配。

默认情况下Elasticsearch会使用自适应的方式去路由搜索请求,但是当使用了分片意识之后,Elasticsearch会优先选择在同一个区域的分片去执行搜索请求。

awareness属性的数量决定了副本的数量,比如我们设置5个街区,最多可以有四个副本分片,共5个数据拷贝;如果设置了1个街区,我们的索引有一个副本,就有可能导致我们的副本无法分配,其实副本能否分配也是有参数可以配置的;如果每个区域的节点数不相同,并且集群中有很多的副本,有可能导致某些索引的副本无法分配(无空间可以分配)。

启用分片分配感知意识:

(1)给每个节点指定一个自定义的区域属性,比如想让索引的每个分片分配到不同的机架上,此时需要在每个节点的elasticsearch.yml文件中配置rack_id 属性

node.attr.rack_id: rack_one
`./bin/elasticsearch -Enode.attr.rack_id=rack_one`

也可以在启动Elasticsearch时指定截取参数。

(2)在候选master节点的配置文件中设置
cluster.routing.allocation.awareness.attributes属性,Elasticsearch在分配分片时会考虑
awareness属性

cluster.routing.allocation.awareness.attributes: rack_id

如果是多个属性使用逗号分隔。

如果使用上面的配置,我们启动两个节点,并且都设置了node.attr.rack_id: rack_one,此时创建一个索引,5个分片一个副本,所有的主分片和副本都会分配到这两个节点上(这种情况是我们不想要的,其实我们是想这种情况下只分配主分片,不分配副本,即不允许相同的数据出现在同一个区域,参考:强制意识)。如果我们再加入两个节点,并且配置了
node.attr.rack_id:rack_two,Elasticsearch会自动移动分片至新的节点。如果rack_two 的两个节点宕机了,此时Elasticsearch会在rack_one恢复丢失的分片。为了阻止相同的数据出现在同一个区域,我们需要使用强制意识配置去避免。


2、强制感知意识

默认情况下,当一个区域全部不可用,Elasticsearch会默认把这个区域丢失的副本在其他区域恢复。如果你配置了多个分区,会有足够的资源去承载这些分片,但是只有一个分区的话,有可能无法分片这些分片。

为了防止因一个区域不可用,而导致其他区域过载,可以配置
cluster.routing.allocation.awareness.force,这样副本不会分配,直到有节点在其他分区可用。

例如,你有一个分配意识属性zone,给节点配置上zone1和zone2值,可以配置强制意识,去阻止在仅有一个区域的情况下进行副本分配:

cluster.routing.allocation.awareness.attributes: zone 
cluster.routing.allocation.awareness.force.zone.values: zone1,zone2

配置所有可用的分配意识值。

上面的例子,如果我们有两个节点,都配置node.attr.zone为zone1,此时创建一个索引5个分片一个副本,此时只会在zone1上分配5个主分片,不会分配副本。只有当分配意识属性为zone2的区域存在时,才会分片副本。


3、集群级的分片分配过滤

可以使用集群级的分片分配过滤功能,控制所有索引的分片分配位置,分配过滤功能可以使用内置的或者自定义的属性,比如:_name, _host_ip, _publish_ip, _ip, _host, _id and _tier等。并且此配置支持动态更新,分片分配会受到强制意识机制的制约,比如不会在同一个节点分配相同数据的主分片和副本。

分配过滤最常用的场景是节点下线,在关闭节点之前将其上的数据迁移至其他节点,比如我们使用ip做过滤:

curl -X PUT "localhost:9200/_cluster/settings?pretty" -H 'Content-Type: application/json' -d'
{
  "transient" : {
    "cluster.routing.allocation.exclude._ip" : "10.150.0.1"
  }
}
'


集群路由设置如下,可以配置多个参数

cluster.routing.allocation.include.{attribute}

将分片分配到,至少包含一个属性的节点上。

cluster.routing.allocation.require.{attribute}

仅将分片分配给包含全部属性的节点上

cluster.routing.allocation.exclude.{attribute}

包含属性的节点上都不分配分片,可以用作节点下线前的数据迁移。

{attribute}支持以下属性:

  • _name 匹配节点名称
  • _host_ip 匹配主机IP地址(与主机名称相关联的IP)
  • _publish_ip 匹配公网IP地址
  • _ip 匹配_host_ip 或者 _publish_ip
  • _host 匹配主机名
  • _id 匹配节点id

(1)设置属性的时候,可以使用通配符,执行下面命令通过ip排除节点

curl -X PUT "localhost:9200/_cluster/settings?pretty" -H 'Content-Type: application/json' -d'
{
  "transient": {
    "cluster.routing.allocation.exclude._ip": "192.168.2.*"
  }
}
'

下图可以看出我们的排除操作已经成功


(2)使用_name做排除

curl -X PUT "localhost:9200/_cluster/settings?pretty" -H 'Content-Type: application/json' -d'
{
  "transient": {
    "cluster.routing.allocation.exclude._name": "node1"
  }
}
'

(3)通过配置查询命令,查看我们的集群配置

curl -X GET "localhost:9200/_cluster/settings?pretty"

从下面可以看出我们的排除配置_name和_ip都生效了


4、其他设置

cluster.blocks.read_only

设置集群只读,write操作将不被允许,元数据也不允许修改。创建或者删除索引。

luster.blocks.read_only_allow_delete

只允许查询和删除。不能依赖这两个配置,对集群的修改做限制,任何人都可以通过集群配置API动态修改参数值。

5、集群分片数量限制

集群中的分片数量是由集群中的节点数决定的,节点数越多允许分配的分片也就越多。不能无限制的分配分片,因为会导致集群不稳定。默认情况下每个节点最多可分配1000个分片,关闭的索引不算在内,可以通过下面的参数修改:

cluster.max_shards_per_node

当达到阈值,Elasticsearch会拒绝在此节点分配分片,比如配置100,共三个节点,现在已经有298个分片,集群不会再分配需要两个以上分片的索引。注意,此设置不会限制单个节点的分片数量,想要限制单个分片的数据需要使用,
cluster.routing.allocation.total_shards_per_node 。

如果文章对您有帮助,欢迎关注、点赞、留言,我会持续更新Elasticsearch技术相关文章,和大家一起学习进步!

什么是Elasticsearch?(简介)

Elasticsearch快速上手,Linux环境安装及使用

Elasticsearch启动及配置

Elasticsearch集群分片分配

相关推荐

三种自建KMS激活系统自动激活windows方法

第一种:在windows服务器上搭建主要针对vol版本(win7、win10、win20xx、win2012等等)平台:我自己搭建的windows虚拟机,windows2016的操作系统软件:...

重装系统被收98元?避开Windows付费陷阱的实用指南

重装系统被收98元?避开Windows付费陷阱的实用指南有网友反映,在重装Windows系统后,屏幕突然弹出“激活系统需支付98元服务费”的提示,疑惑自己是不是遭遇了付费陷阱。事实上,微软官方的Wi...

Windows Server2012远程桌面服务配置和授权激活

安装:注意:安装完毕之后需手动重启一下计算机配置终端服务管理工具---远程桌面服务---RD授权诊断程序,查看当前服务器有没有授权授权:运行—>gpedit.msc->计算机配置---管理...

新书速览|Windows Server 2022 系统与网站配置实战

讲述桌面体验、ServerCore/NanoServer,容器与云系统的配置1本书内容《WindowsServer2022系统与网站配置实战》秉持作者一贯理论兼具实践的写作风格,以新版的Wi...

Windows激活全攻略:KMS神钥与专业工具的完美结合!

对于许多Windows用户来说,系统的激活是一个必经的过程。虽然Windows操作系统在未经激活的状态下也可以使用一段时间,但长期来看,未激活的系统会限制某些功能并频繁提示用户激活。以下是两种流行的激...

微软Win9全新激活技术曝光(微软系统激活有什么用)

2014-07-0905:46:00作者:徐日俄罗斯Wzor日前披露了更多关于Windows9的最新消息,据悉,Windows9将会在今年秋季亮相,其宣传口号是“想要开始按钮和开始菜单?如你所...

快速激活Windows 10/11:CMD命令详细教程

#记录我的2024#激活Windows操作系统是确保系统功能和安全更新正常运行的重要步骤。本文将为您分享如何使用命令提示符(CMD)在Windows10和Windows11上进行激活的详细步骤。...

Wndows 2019 RDS应用发布部署(rds的安装和应用程序的发布)

安装前的准备1、需要提供服务器作为应用中心,应用中心的推荐配置如下表所示。规格建议1-10人11-20人21-50人51-100人100+人CPU4核8核16核内存8GB16GB32GB64GB系统盘...

解决 Windows 系统激活难题(如何解决windows激活问题)

今天,一位朋友给我说,他手头有三台电脑,均同时弹出系统未激活的提示。他对此毫无头绪,便急忙将电脑上出现的激活提示信息一股脑发给了我。我看到其中一台显示的是“Windows10企业版LTSC尚...

自建KMS激活服务器(自建kms激活服务器的风险)

自建KMS激活服务器Win10和office安装后,都需要激活才可以使用,一般可以输入购买的MAK激活码进行在线激活,也可以通过KMS激活,网上也有很多激活工具,但这些工具一般都含有病毒或木马程序,容...

30秒免费激活windows和office亲测有效!

“第三方工具有病毒?”“KMS服务器激活总失效?”今天给大家分享一个开源激活工具——MicrosoftActivationScripts(MAS),无需密钥、不装软件,30秒永久激活Window...

「操作系统」Windows 10 LTSC 2019 企业版C大集成更新版

Windows10LTSC企业版CHIANNET集成更新优化整合多镜像版,CHIANNET,是USBOS超级PE维护盘工具箱作者,长久以来一直默默的更新着,USBOSPE软件,电脑城装机及...

一文看懂Windows激活:自查方法+授权类型科普(Win7/Win10通用)

一、如何判断Windows是否永久激活?无论是Win7还是Win10,均可通过以下方法快速验证:命令提示符法(通用):按下Win+R,输入slmgr.vbs/xpr并按回车键运行即可查看是否...

部分Windows Server 2019/2022用户反馈无法运行微软Teams应用

IT之家7月2日消息,科技媒体borncity今天(7月2日)发布博文,报道称在多个WindowsServer版本上,MicrosoftTeams应用近期出现了运行故障。用...

这种Windows激活方式已有20年...(windows现在激活)

2006年微软正式发布WindowsVista,随之而来引入了一项新的激活机制「OEM激活」,这项机制在Vista和Win7上最为流行。其实WindowsServer自2008开始至2025版本一...

取消回复欢迎 发表评论: