MST
星途 面试题库

面试题:ElasticSearch集群节点过滤策略在复杂场景下的应用

假设有一个多租户的ElasticSearch集群,不同租户对数据存储和处理有不同需求,例如租户A要求数据存储在具有高可用属性且磁盘空间大的节点上,租户B要求数据优先存储在计算能力强的节点上。请阐述如何设计节点过滤策略来满足这些需求,包括节点属性设置、索引分配规则制定等。
17.0万 热度难度
数据库ElasticSearch

知识考点

AI 面试

面试题答案

一键面试

节点属性设置

  1. 租户A
    • 在Elasticsearch集群中,为具有高可用属性且磁盘空间大的节点设置自定义属性。例如,在elasticsearch.yml文件中添加以下配置:
    node.attr.tenantA_disk: large
    node.attr.tenantA_ha: true
    
    这里tenantA_disk属性标记磁盘空间大,tenantA_ha属性标记高可用。
  2. 租户B
    • 对于计算能力强的节点,同样在elasticsearch.yml文件中设置属性:
    node.attr.tenantB_cpu: high
    
    这里tenantB_cpu属性标记计算能力强。

索引分配规则制定

  1. 创建索引时指定分配规则(针对租户A)

    • 使用Elasticsearch的索引模板或在创建索引时直接指定分配规则。例如,使用PUT请求创建索引并指定分配规则:
    PUT /tenantA_index
    {
      "settings": {
        "index.routing.allocation.require.tenantA_disk": "large",
        "index.routing.allocation.require.tenantA_ha": "true"
      }
    }
    

    这确保了tenantA_index这个索引的数据会分配到具有tenantA_disk: largetenantA_ha: true属性的节点上。

  2. 创建索引时指定分配规则(针对租户B)

    • 同样方式,为租户B创建索引并指定规则:
    PUT /tenantB_index
    {
      "settings": {
        "index.routing.allocation.require.tenantB_cpu": "high"
      }
    }
    

    这会使tenantB_index索引的数据优先分配到具有tenantB_cpu: high属性的节点上。

  3. 索引模板

    • 为了更方便管理多租户的索引分配,可以创建索引模板。例如,为租户A创建模板:
    PUT _template/tenantA_template
    {
      "index_patterns": ["tenantA_*"],
      "settings": {
        "index.routing.allocation.require.tenantA_disk": "large",
        "index.routing.allocation.require.tenantA_ha": "true"
      }
    }
    

    这样所有以tenantA_开头的索引都会按照此模板的分配规则,将数据分配到符合租户A要求的节点上。类似地,可以为租户B创建相应的索引模板。