ElasticSearch 模块设置

  • 模块

    Elasticsearch由许多模块组成,这些模块负责其功能。这些模块具有两种类型的设置,如下所示:
    • 静态设置-在启动Elasticsearch之前,需要在config(elasticsearch.yml)文件中配置这些设置。您需要更新集群中的所有关注节点,以反映这些设置的更改。
    • 动态设置-可以在实时Elasticsearch上设置这些设置。
    我们将在本章以下各节中讨论Elasticsearch的不同模块。
  • 集群级别路由和分片分配

    群集级别设置决定了分片向不同节点的分配以及分片的重新分配以重新平衡群集。这些是用于控制分片分配的以下设置。
    集群级分片分配
    设置 可能的值 描述
    cluster.routing.allocation.enable all 此默认值允许为所有类型的分片分配分片。
    primaries 这允许仅为主分片分配分片。
    new_primaries 这仅允许为新索引的主分片分配分片。
    none 这不允许任何分片分配。
    cluster.routing.allocation.node_concurrent_recoveries Numeric value (默认值 2) 这限制了并发分片恢复的数量。
    cluster.routing.allocation.node_initial_primaries_recoveries Numeric value (默认值 4) 这限制了并行初始主要恢复的数量。
    cluster.routing.allocation.same_shard.host Boolean value (默认值 false) 这限制了在同一物理节点中分配同一分片的多个副本。
    indices.recovery.concurrent_streams Numeric value (默认值 3) 从对等分片恢复分片时,这可控制每个节点打开的网络流的数量。
    indices.recovery.concurrent_small_file_streams Numeric value (默认值 2) 对于分片恢复时大小小于5mb的小文件,这控制了每个节点打开的流的数量。
    cluster.routing.rebalance.enable all 此默认值允许平衡各种分片。
    primaries 这允许仅对主分片进行分片平衡。
    replicas 这允许仅对副本分片进行分片平衡。
    none 这不允许任何形式的分片平衡。
    cluster.routing.allocation.allow_rebalance always 这个默认值总是允许重新平衡。
    indices_primaries_active 这允许在分配集群中的所有主碎片时进行再平衡。
    Indices_all_active 这允许在分配所有的主碎片和复制碎片时进行再平衡。
    cluster.routing.allocation.cluster_concurrent_rebalance Numeric value (默认值 2) 这限制了群集中并发分片平衡的数量。
    cluster.routing.allocation.balance.shard Float value (默认值 0.45f) 这定义了在每个节点上分配的分片的权重因子。
    cluster.routing.allocation.balance.index Float value (默认值 0.55f) 这定义了在特定节点上分配的每个索引的分片数量的比率。
    cluster.routing.allocation.balance.threshold Non negative float value (默认值 1.0f) 这是应执行的操作的最小优化值。
  • 基于磁盘的分片分配

    设置 可能的值 描述
    cluster.routing.allocation.disk.threshold_enabled Boolean value (默认值 true) 这将启用和禁用磁盘分配决策程序。
    cluster.routing.allocation.disk.watermark.low String value(默认值 85%) 这表示磁盘的最大使用率; 此后,将无法将其他分片分配给该磁盘。
    cluster.routing.allocation.disk.watermark.high String value (默认值 90%) 这表示分配时的最大使用量; 如果在分配时达到了这一点,那么Elasticsearch会将那个分片分配给另一个磁盘。
    cluster.info.update.interval String value (默认值 30s) 这是两次磁盘使用情况检查之间的间隔。
    cluster.routing.allocation.disk.include_relocations Boolean value (默认值 true) 这决定了在计算磁盘使用率时是否考虑当前分配的分片。
  • 发现

    该模块帮助集群发现并维护集群中所有节点的状态。在节点上添加或删除节点后,群集状态会更改。群集名称设置用于在不同群集之间创建逻辑差异。有一些模块可以帮助您使用云供应商提供的API,如下所示-
    • Azure discovery
    • EC2 discovery
    • Google compute engine discovery
    • Zen discovery
  • 网关

    此模块在整个集群重新启动时维护集群状态和分片数据。以下是此模块的静态设置-
    设置 可能的值 描述
    gateway.expected_nodes numeric value (by default 0) 预期在群集中用于恢复本地分片的节点数。
    gateway.expected_master_nodes numeric value (by default 0) 开始恢复之前,预期在群集中的主节点数。
    gateway.expected_data_nodes numeric value (by default 0) 开始恢复之前,群集中预期的数据节点数。
    gateway.recover_after_time String value (by default 5m) 这是两次磁盘使用情况检查之间的间隔。
    cluster.routing.allocation.disk.include_relocations Boolean value (by default true) 这指定了恢复过程将等待开始的时间,而不管群集中加入的节点数量如何。
    • gateway.recover_after_nodes
    • gateway.recover_after_master_nodes
    • gateway.recover_after_data_nodes
  • HTTP

    该模块管理HTTP客户端和Elasticsearch API之间的通信。可以通过将http.enabled的值更改为false来禁用此模块。
    以下是用于控制此模块的设置(在elasticsearch.yml中配置)-
    设置 描述
    http.port 这是访问Elasticsearch的端口,范围从9200-9300。
    http.publish_port 此端口用于http客户端,在防火墙的情况下也很有用。
    http.bind_host 这是http服务的主机地址。
    http.publish_host 这是http客户端的主机地址。
    http.max_content_length 这是http请求中内容的最大大小。 默认值为100mb。
    http.max_initial_line_length 这是URL的最大大小,其默认值为4kb。
    http.max_header_size 这是最大的http标头大小,其默认值为8kb。
    http.compression 这将启用或禁用对压缩的支持,其默认值为false。
    http.pipelinig 这将启用或禁用HTTP通道。
    http.pipelining.max_events 这限制了关闭HTTP请求之前要排队的事件数。
  • 索引设置

    该模块维护设置,这些设置是为每个索引全局设置的。以下设置主要与内存使用情况有关-

    断路器

    这用于防止操作引起OutOfMemroyError(内存越界)。该设置主要限制JVM堆大小。例如,indexs.breaker.total.limit设置,默认为JVM堆的70%。

    Fielddata 缓存

    主要在聚合字段时使用。建议有足够的内存来分配它。可以使用index.fielddata.cache.size设置来控制用于字段数据缓存的内存量。

    节点查询缓存

    该内存用于缓存查询结果。该缓存使用最近最少使用(LRU)驱逐策略。Indices.queries.cahce.size设置控制此缓存的内存大小。

    索引缓冲区

    该缓冲区将新创建的文档存储在索引中,并在缓冲区已满时刷新它们。像indexs.memory.index_buffer_size这样的设置控制为此缓冲区分配的堆数量。

    分片请求缓存

    该缓存用于存储每个分片的本地搜索数据。缓存可以在创建索引期间启用,也可以通过发送URL参数禁用。
    
    Disable cache - ?request_cache = true
    Enable cache "index.requests.cache.enable": true
    

    索引恢复

    它在恢复过程中控制资源。以下是设置-
    设置 默认值
    indices.recovery.concurrent_streams 3
    indices.recovery.concurrent_small_file_streams 2
    indices.recovery.file_chunk_size 512kb
    indices.recovery.translog_ops 1000
    indices.recovery.translog_size 512kb
    indices.recovery.compress true
    indices.recovery.max_bytes_per_sec 40mb

    TTL间隔

    生存时间(TTL)间隔定义了文档的时间,此后文档将被删除。以下是用于控制此过程的动态设置-
    设置 默认值
    index.ttl.interval 60s
    index.ttl.bulk_size 1000
  • 节点

    每个节点都可以选择是否为数据节点。您可以通过更改node.data设置来更改此属性。将值设置为false定义该节点不是数据节点。