大多数设置可以使用 集群更新API来更改
Elasticsearch提供了三个主要的配置文件,我们所有的配置都通过这个三个文件:
- Elasticsearch配置文件:elasticsearch.yml
- jvm配置文件:jvm.options
- 日志配置文件:log4j2.properties
1、设置JVM选项
您应该很少需要更改Java虚拟机(JVM)选项。如果这样做,最可能的更改是设置堆大小。
堆大小
默认情况下,Elasticsearch告诉JVM使用最小和最大大小为1 GB的堆。迁移到生产环境时,配置堆大小以确保 Elasticsearch有足够的堆可用是很重要的。
1、将最小堆大小(Xms)和最大堆大小(Xmx)设置为彼此相等
2、lasticsearch可用的堆越多,它可用于缓存的内存就越多。但请注意,过多的堆可能会使您陷入长时间的垃圾收集暂停。
3、设置Xmx为不超过物理RAM的50%,以确保有足够的物理RAM留给内核文件系统缓存。
4、不要设置Xmx为JVM用于压缩对象指针(压缩oops)的截止值以上; 确切的截止值变化接近32 GB,大多数是26GB。
设置方式
修改jvm.option
-Xms2g
-Xmx2g在启动elasticsearch时加入参数
ES_JAVA_OPTS=”-Xms2g -Xmx2g” ./bin/elasticsearch
ES_JAVA_OPTS=”-Xms4000m -Xmx4000m” ./bin/elasticsearch
10. 堆转储路径
默认情况,配置jvm存储堆栈溢出到data文件夹里,如果该目录不支持则需要修改。
11. GC记录
默认情况下,Elasticsearch启用GC日志。这些配置在 jvm.options默认位置和默认位置与Elasticsearch日志相 同。默认 配置每64 MB轮换一次日志,最多可占用2 GB的磁盘空间。
2、安全设置:
某些设置是敏感的,依靠文件系统权限来保护其值是不够的。对于此用例,Elasticsearch提供了一个密钥库和elasticsearch-keystore管理密钥库中设置的工具。
3、elasticsearch.yml设置
在投入生产之前,必须考虑以下设置:
1.路径设置
主要是数据和日志路径
1 | path: |
对于数据,可以有多个路径如:
1 | path: |
data中生成目录形式:elasticsearch/nodes/0/indices/uuid/shard/
- indices下是以各个索引的uuid命名的文件夹
- shard,同一个分片会被分配到同一个目录
2. 群集名称
这是节点加入集群的唯一方法,默认的是elasticsearch
3. 节点名称
节点名称有助于区别不同类型(可以使用环境变量如 node.name: ${HOSTNAME}
)
4. 网络主机 network.host
一般设置本机ip ,一旦设置为非回环地址,即默认视为生产模式,就需要注意系统配置
一旦配置了类似的网络设置network.host,Elasticsearch就会假定您正在转向生产并将上述警告升级为异常。这些异常将阻止您的Elasticsearch节点启动。这是一项重要的安全措施,可确保您不会因服务器配置错误而丢失数据。
5. 发现设置
1 | discovery.zen.ping.unicast.hosts: |
①:如果不指定port,则会使用transport.tcp.port
②:如果是多个ip的主机,则会访问所有解析到的ip
discovery.zen.minimum_master_nodes
最好为 (master_eligible_nodes / 2)+ 1 3个节点的情况设置2个
3、系统设置
1. 资源限制:
要将打开文件句柄(ulimit -n)的数量设置为65,536 /etc/security/limits.conf
2. Disable swapping
交换对性能,节点稳定性非常不利,应该不惜一切代价避免。它可能导致垃圾收集持续数分钟而不是毫秒,并且可能导致节点响应缓慢甚至断开与群集的连接。在弹性分布式系统中,让操作系统终止节点更有效。
三种方案:
- 禁用所有的交换 临时:sudo swapoff -a 永久修改: 在/etc/fstab 注释掉所有包含swap的行
- 配置swappiness
设置 sysctl 中 vm.swappiness =1 这降低了内核交换的倾向,在正常情况下不应导致交换,同时仍允许整个系统在紧急情况下交换。 - 启用bootstrap.memory_lock
修改 config/elasticsearch.yml:bootstrap.memory_lock: true
3. Increase file descriptors
Elasticsearch使用大量文件描述符或文件句柄。用完文件描述符可能是灾难性的,最有可能导致数据丢失。确保将运行 Elasticsearch的用户的打开文件描述符数量限制增加到65,536或更高。
/etc/security/limits.conf
4. Ensure sufficient virtual memory
可以设置存储方式(fs、simplefs、niofs、mmapfs),默认Elasticsearch会选择最佳的存储方式,
Elasticsearch 默认使用mmapfs文件夹存储索引 ,操作系统mmap计数的默认限制可能太低,这可能导致内存不足异常。
临时修改: sysctl -w vm.max_map_count = 262144
永久修改:/etc/sysctl.conf
5. Ensure sufficient threads
Elasticsearch为不同类型的操作使用了许多线程池。重要的是它能够在需要时创建新线程。确保Elasticsearch用户可以创建的线程数至少为4096。
临时: ulimit -u 4096
永久: /etc/security/limits.conf.
6. JVM DNS cache settings
7. Temporary directory not mounted with noexec
8. 临时目录
默认情况,Elasticsearch 使用一个私有的临时文件夹来存储历史脚本
在一些linux版本中,会自动清除在一段时间内没有被访问到的文件,所以对于Elasticsearch来说是致命的
如果安装.tar.gz在Linux 上运行分发一段时间,那么您应该考虑为Elasticsearch创建一个专用的临时目录,该目录不在 将从中清除旧文件和目录的路径下。此目录应具有权限集,以便只有运行Elasticsearch的用户才能访问它。然后 $ES_TMPDIR在启动Elasticsearch之前将环境变量设置 为指向它。
3、安全设置
Generate a private key and X.509 certificate.
生成节点证书
创建一个一个整数颁发机构,命令 :
bin/elasticsearch-certutil ca
您可以将群集配置为信任具有此CA已签名的证书的所有节点。
这个命令生成一个单独的文件(默认名称是elastic-stack-ca.p12)该文件是PKCS#12密钥库,包含CA的公共证书以及用于为每个节点签名证书的私钥。为群集中的每个节点生成证书和私钥。
bin/elasticsearch-certutil cert –ca elastic-stack-ca.p12
输出是单个PKCS#12密钥库,包括节点证书,节点密钥和CA证书。
将节点证书复制到适当的位置。
将elastic-stack-ca.p12和elastic-certificates.p12复制到其他节点
配置elasticsearch.yml文件:
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: certs/elastic-certificates.p12
设置密码
报错
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15{
"error": {
"root_cause": [
{
"type": "security_exception",
"reason": "current license is non-compliant for [security]",
"license.expired.feature": "security"
}
],
"type": "security_exception",
"reason": "current license is non-compliant for [security]",
"license.expired.feature": "security"
},
"status": 403
}结论: 开源基础版,无法使用安全功能