elasticsearch 参数配置

一.概述

  在elasticsearch中配置文件有二个,一是elasticsearch.yml 它是核心配置文件; 二是 jvm.options 它是堆内存配置文件。

 

  1.1  堆配置事项

    1.设置(Java虚拟机)JVM选项,需要关注的是设置堆的大小,默认1G, 该文件的默认位置是config/jvm.options。注意:在es 8.x后堆内存最小和最大均为4GB。

     配置该文件有二种方式:一是直接在jvm.options文件中配置,二是通过环境变量进行设置

     jvm.options文件内容如下所示:

# Xms represents the initial size of total heap space
# Xmx represents the maximum size of total heap space

-Xms1g
-Xmx1g

    Xms:最小堆大小,Xmx:最大堆大小。

    注意在windows环境下,直接配置jvm.options 可能无效,需要改为通过环境变量设置堆大小,如下所示:在启动时,添加参数manager来启动gui界面

    

     堆内存设置建议:建议将堆大小配置为服务器可用内存的50%,上限为32GB。

  1.2. 日志

   Elasticsearch使用Log4j 2进行日志记录。可以使用log4j2.properties文件配置Log4j 2。

  通过四种方法来配置日志包括:1.命令行,2.elasticsearch.yml 文件, 3.Api设置, 4.设置log4j2.properties文件。一般修改日志选项,最好通过APi。下面简单演示一个日志选项配置修改:

    临时修改日志记录级别为trace,如下所示:  

PUT /_cluster/settings
{
  "transient": {
    "logger.org.elasticsearch.transport": "trace"
  }
}

   查看修改的设置(include_defaults=true为所有默认参数设置), 如下所示:

GET /_cluster/settings?include_defaults=false
{
  "transient" : {
    "logger" : {
      "org" : {
        "elasticsearch" : {
          "transport" : "trace"
        }
      }
    }
  }
}

    更多设置参考:动态更新的设置列表,参考:https://www.elastic.co/guide/en/elasticsearch/reference/current/modules.html

 

  1.3 elasticesearch监制设置

   要更改集群设置,最好调用Api, 能保证各个节点的文件能同步更新,下面开启监控数据的收集,设置可以分临时性(transient,群集重新启动后失效)和持久化(persistent),默认是关闭的。

      配置后,调取优先顺序是:临时性, 持久生,  elasticsearch.yml配置文件。

PUT /_cluster/settings
{
  "persistent": {
    "xpack.monitoring.collection.enabled": "true"
  }
}

    开启后,在kibana左边导航栏中选择“Stack Monitoring”,点击开启turn on mointoring,能看到elasticsearch的监控信息,当能也可以监控kibana和logstash。 

      如上图所示:展示了es集群的整体情况、节点情况、索引情况。点击orerview可以看到:

      Search rate:检索请求的频率,即每秒有多少个检索请求。

      Search Latency: 检索请求的时间,即平均每个检索消耗的时间。

                 Indexing rate:文档编入索引的频率,即每秒有多个少文档编入索引。

      Indexing Latency:文档编入索引的时间,即平均每个文档编入索引消耗的时间。

 

    其它监控设置如下,可参考:https://www.elastic.co/guide/en/elasticsearch/reference/current/monitoring-settings.html

监控参数 描述
xpack.monitoring.collection.enabled
 启用数据收集,默认为false, 包括elasticsearch,Kibana,Logstash,Beats
 xpack.monitoring.elasticsearch.collection.enabled  elasticsearch的数据收集,默认为true
xpack.monitoring.collection.cluster.stats.timeout
 集群统计信息的超时。默认为10s
xpack.monitoring.collection.node.stats.timeout
节点统计信息的超时时间。默认为10s
 xpack.monitoring.collection.indices  监控从哪个索引收集数据。默认为所有索引 
 xpack.monitoring.collection.index.stats.timeout  收集索引统计信息的超时。默认为10s

     通过API更多的动态更新的设置列表,参考:https://www.elastic.co/guide/en/elasticsearch/reference/current/modules.html

  1.4. 查看集群配置

GET _cluster/settings?include_defaults

    通过查询默认配置,可以适当有参数调整,如索线程池搜的并发数和对列数,下面修改

PUT /_cluster/settings
{
  "transient": {
    "thread_pool.search.size": "30"
  }
}

    报错信息如下,有些参数不允许动态修改,必需通过elasticsearch.yml文件来修改。原因是集群环境下,必需对每个节点进行参数配置修改。

{
  "error": {
    "root_cause": [
      {
        "type": "illegal_argument_exception",
        "reason": "transient setting [thread_pool.search.size], not dynamically updateable"
      }
    ],
    "type": "illegal_argument_exception",
    "reason": "transient setting [thread_pool.search.size], not dynamically updateable"
  },
  "status": 400
}

 

 

二.重要的elasticsearch参数配置

  1.集群名字

    只有各节点中集群名称一致, 才能加入集群。默认名称为elasticsearch

# ---------------------------------- Cluster -----------------------------------
#
# Use a descriptive name for your cluster:
#
#cluster.name: my-application

  2.节点名字

    默认为计算机在Elasticsearch启动时具有的主机名。

# ------------------------------------ Node ------------------------------------
#
# Use a descriptive name for the node:
#
#node.name: node-1

  3.网络主机

    默认情况下,Elasticsearch仅绑定到环回地址,只能在本机节点开发。为了与其他服务器上的节点形成集群,需要配置ip地址方便其他服务器节点访问以及客户端访问。外网改成0.0.0.0

# Set the bind address to a specific IP (IPv4 or IPv6):
#
#network.host: 192.168.0.1

   4. Discovery 和 cluster

    在投入生产之前,因该配置这二个,以便集群中的节点可以彼此发现并选举一个主节点。 外网加上cluster.initial_master_nodes: ["node-1"]

    discovery.seed_hosts是用配置多个节点

# --------------------------------- Discovery ----------------------------------
#
# Pass an initial list of hosts to perform discovery when this node is started:
# The default list of hosts is ["127.0.0.1", "[::1]"]
#
#discovery.seed_hosts: ["host1", "host2"]

    cluster.initial_master_nodes:首次启动全新的Elasticsearch群集时,初始一组符合主节点条件的节点。重新启动集群或将新节点添加到现有集群时,不应使用此设置。

    初始主节点应通过其标识 node.name,默认为其主机名。确保cluster.initial_master_nodes中的值与node.name完全匹配。

# Bootstrap the cluster using an initial set of master-eligible nodes:
#
#cluster.initial_master_nodes: ["node-1", "node-2"]

  6. 注意事项

     修改配置文件,要注意前后空格,正确如下所示:

      

 

 

三.重要的系统参数设置

  3.1 禁用交换    

    交换对性能,节点稳定性非常不利,应不惜一切代价避免交换。

    在linux中,通过运行以下命令暂时禁用交换,这不需要重启Elasticsearch

    sudo swapoff -a

   在Windows上,可以通过完全禁用分页文件来实现等效功能:系统属性→高级→性能→高级→虚拟内存

  3.2 文件描述符

   这仅与Linux和macOS有关,如果在Windows上运行Elasticsearch,则可以安全地忽略它。

     Elasticsearch使用许多文件描述符(file descriptors )或文件句柄(file handles)。文件描述符用尽可能是灾难性的,很可能导致数据丢失。确保将运行Elasticsearch的用户的打开文件描述符数限制增加到65,536或更高。

     /etc/security/limits.conf中修改https://www.elastic.co/guide/en/elasticsearch/reference/current/setting-system-settings.html#limits.conf

   3.3 虚拟内存

    Elasticsearch mmapfs默认使用目录来存储其索引。默认的操作系统对mmap计数的限制可能太低,这可能会导致内存不足异常,Linux上,您可以通过运行以下命令来增加限制 root

  sysctl -w vm.max_map_count=262144

     要永久设置此值,请更新中的vm.max_map_count设置 /etc/sysctl.conf要在重启后进行验证,请运行sysctl vm.max_map_count

   3.4 线程数

    Elasticsearch对不同类型的操作使用许多线程池。能够在需要时创建新线程很重要。确保Elasticsearch用户可以创建的线程数至少为4096。在linux设置路径/etc/security/limits.conf,启动Elasticsearch之前设置为root来设置

 

四.将节点加入群集

  当启动Elasticsearch实例时,就是在启动nodeElasticsearch 集群 是一组具有相同cluster.name属性的节点当节点加入或离开群集时,群集会自动重新组织以在可用节点之间平均分配数据。

  如果您运行的是Elasticsearch的单个实例,那么您将拥有一个节点的集群。所有主分片都驻留在单个节点上。无法分配副本分片,因此群集状态保持黄色群集可以完全正常运行,但是如果发生故障,则存在数据丢失的风险。

  将节点添加到群集以增加其容量和可靠性。默认情况下,节点既是数据节点,又有资格被选为控制群集的主节点。 将更多节点添加到群集时,它将自动分配副本分片。当所有主分片和副本分片均处于活动状态时,集群状态变为绿色

  要将节点添加到集群:

  (1) 设置一个新的Elasticsearch实例

  (2) 在其cluster.name属性中指定集群的名称例如,要将节点logging-prod加入集群,在elasticsearch.yml中设置cluster.name: "logging-prod" 

  (3) 启动Elasticsearch。节点自动发现并加入指定的集群

 

 五.安全设置

  5.1 第一步配置启用安全

#------------------------------security-----------------------
  xpack.security.enabled: true
  xpack.license.self_generated.type: basic
  xpack.security.transport.ssl.enabled: true
  

  5.2 bat文件第二步

  5.3 最后所有设置密码:

    5.4 如果要修改密码如下所示:

      curl -H "Content-Type:application/json" -XPOST -u elastic 'http://127.0.0.1:9200/_xpack/security/user/elastic/_password' -d '{ "password" : "123456" }'


参考资料:https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html


posted on 2022-12-27 11:04  花阴偷移  阅读(191)  评论(0编辑  收藏  举报

导航