elasticsearch集群内部资源隔离方案

2023-11-09 15:11:36 浏览数 (3)

前言:在拥有几十台甚至上百台数据节点的大型elasticsearch集群中,用户需要将不同业务使用的索引分布到不同的数据节点中。以此来达到每个业务系统所使用的业务索引都有专用的数据节点进行负载。本文我们将对集群内部资源隔离方案进行简单讨论。

一.什么是elasticsearch集群内部资源隔离

通过控制每个索引的shard分布,来约束索引分片在集群中数据节点的分布范围,来实现不同业务索引由专用节点负载的效果。且该节点不会服务于其他索引。

二.如何通过控制索引分片分布来实现内部资源隔离

这里我们需要使用Index-level shard allocation filtering(索引级分片过滤器来实现)。这里我们使用的是索引维度的分片分配参数。该参数有以下几种属性,来让我们决定如何分配索引分片。

代码语言:javascript复制
_name:按节点名称匹配节点
_host_ip:按主机 IP 地址(与主机名关联的 IP)匹配节点
_publish_ip:通过发布IP地址匹配节点
_ip:匹配_host_ip或者_publish_ip
_host:按主机名匹配节点
_id:通过节点id匹配节点
_tierand_tier_preference:按节点的数据层角色匹配节点。有关更多详细信息,请参阅数据层分配过滤

参数:

index.routing.allocation.include.{attribute}

说明:允许索引分片至少分配在一个节点上。如果有多个节点则用逗号分割。

我们这里"_ip"属性对分片分布进行控制。

调用方式:

代码语言:javascript复制
PUT indexName/_settings
{
  "index": {
    "routing": {
      "allocation": {
        "include": {
          "_ip": "127.0.0.1,xx.xx.xx.xx"
        }
      }
    }
  }
}

当我们对索引进行"index.routing.allocation.include"参数限制后,索引在集群中被创建后就会按照我们设置的索引分片的分配分布范围,通过匹配ip的方式将分片分布到相应的节点上。

效果如下图所示:

三.在集群中使用内部资源隔离的优缺点

优点:通过资源隔离,可以让不同的业务索引拥有专用的数据节点来承担相应业务请求。如果其他业务请求会占用大量资源,也只是占用其自身分片分布范围内的节点资源。各个业务索引之间不会造成资源侵占。

缺点:在我们使用资源隔离后,索引分片只会分布在IP范围内的节点。当数据在向索引在写入时只会写入对应的节点上分布的索引分片中。如果早期索引规划不合理,单个索引分片过大,或索引分片分布不均匀时,就会形成集群负载两极分化的情况。例如集群负载不均,集群磁盘使用率不均匀,个别节点由于压力过大而造成节点离线等情况。进而导致集群状态不健康等问题。

如下图所示:

由于索引规划不合理,导致集群磁盘使用率与集群负载出现两级分化的情况。造成业务请求受到影响,同时集群资源也利用不充分。

关于"如何合理规划索引"与"elasticsearch集群健康状态解析",会在后续文章进行讨论。

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

0 人点赞