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实例时,就是在启动node。Elasticsearch 集群 是一组具有相同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