前言:本篇考虑 Elasticsearch 7.6 官方文档, 熟悉下 Elasticsearch的设置事项,参考资料:Elasticsearch Guide [8.9] | Elastic
一. 配置事项
1.设置(Java虚拟机)JVM选项,需要关注的是设置堆的大小,默认1G,该文件的默认位置是config/jvm.options。
# Xms represents the initial size of total heap space
# Xmx represents the maximum size of total heap space
-Xms1g
-Xmx1g
注意在windows环境下,配置可能无效,需要改为通过环境变量设置堆大小,如下所示:在启动时,添加参数manager来启动gui界面
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"
}
}
}
}
}
更多设置参考:动态更新的设置列表,参考:Modules | Elasticsearch Guide [8.9] | Elastic
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:文档编入索引的时间,即平均每个文档编入索引消耗的时间。
其它监控设置如下,可参考:Monitoring settings in Elasticsearch | Elasticsearch Guide [8.9] | Elastic
监控参数 | 描述 |
| 启用数据收集,默认为false, 包括elasticsearch,Kibana,Logstash,Beats |
xpack.monitoring.elasticsearch.collection.enabled | elasticsearch的数据收集,默认为true |
| 集群统计信息的超时。默认为10s |
| |
xpack.monitoring.collection.indices | 监控从哪个索引收集数据。默认为所有索引 |
xpack.monitoring.collection.index.stats.timeout | 收集索引统计信息的超时。默认为10s |
通过API更多的动态更新的设置列表,参考:Modules | Elasticsearch Guide [8.9] | Elastic
二.重要的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"]
5. 堆大小设置
默认情况下,Elasticsearch告诉JVM使用最小和最大大小为1 GB的堆。在进入生产阶段时,配置堆大小以确保Elasticsearch有足够的可用堆非常重要。在jvm.options中指定,设置的值取决于服务器上可用的RAM数量。
(1)设置Xmx
和Xms
你的物理内存不超过50%
(2)设置Xmx
和Xms不超过32G
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中修改Configuring system settings | Elasticsearch Guide [8.9] | Elastic
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" }'