配置ElasticSearch
主要介绍了ES上线前
重要的基本配置
重要的系统基本配置
设置JVM参数
此文件的默认位置是config/jvm.options
(从tar或zip发行版/etc/elasticsearch/jvm.options
安装时)和(从Debian或RPM软件包安装时)。
此文件包含遵循特殊语法的以行分隔的JVM参数列表:
- 仅包含空格的行被忽略
-
以...开头的行
#
被视为注释,并被忽略 - 以-开头的行被视为JVM选项,该选项独立于JVM的版本而应用:
- Xmx2g
- 以数字开头后跟
:
后跟-的行被视为JVM选项,仅当JVM的版本与数字匹配时才适用:
8 : - Xmx2g
- 以数字开头后跟
-
后跟:的行被视为JVM选项,仅当JVM的版本大于或等于数字时才适用:
8 - : - Xmx2g
- 以数字开头后跟
-
后跟数字后跟:的行被视为JVM选项,仅当JVM的版本落在两个数字的范围内时才适用:
8 - 9 : - Xmx2g
您可以向该文件添加自定义JVM标志。
设置Java虚拟机选项的另一种机制是通过ES_JAVA_OPTS环境变量。例如:
export ES_JAVA_OPTS="$ES_JAVA_OPTS -Djava.io.tmpdir=/path/to/temp/dir"
./bin/elasticsearch
当使用RPM或Debian包时,可以在系统配置文件中指定ES_JAVA_OPTS。
安全的配置
有些设置是敏感的,仅依靠文件系统权限来保护它们的值是不够的。对于这个用例,Elasticsearch提供一个密钥存储库和Elasticsearch密钥存储库工具来管理密钥存储库中的设置。
详情请见官方文档。
ES重要的配置
path.data
and path.logs
在生产使用中,您几乎肯定希望更改数据和日志文件夹的位置:
path:
logs: /var/log/elasticsearch
data: /var/data/elasticsearch
data的路径设置可以设置为多个路径,在这种情况下,所有路径都将用于存储数据(尽管属于单个碎片的文件都将存储在相同的数据路径上):
path:
data:
- /mnt/elasticsearch_1
- /mnt/elasticsearch_2
- /mnt/elasticsearch_3
cluster.name:
节点只能在与集群中的所有其他节点共享cluster.name时加入集群。默认名称是elasticsearch,但您应该将其更改为描述集群用途的适当名称。
cluster.name: logging-prod
node.name:
默认情况下,Elasticsearch将使用随机生成的UUID的前7个字符作为节点id。注意,节点id是持久化的,在节点重新启动时不会改变,因此默认节点名也不会改变。
配置一个更有意义的名称是值得的:
node.name: prod-data-2
network.host:
配置节点的ip地址:
network.host: 192.168.1.10
Discovery settings:
Elasticsearch使用名为“Zen discovery”的定制发现实现节点到节点的集群和主选择。在进行生产之前,应该配置两个重要的设置。
discovery.zen.ping.unicast.hosts
discovery.zen.minimum_master_nodes
第一个配置:
当需要在其他服务器上形成具有节点的群集时,您必须提供群集中可能是实时且可联系的其他节点的列表。这可以指定如下:
discovery.zen.ping.unicast.hosts:
- 192.168.1.10:9300
- 192.168.1.11
- seeds.mydomain.com
第二个配置:
为防止数据丢失,必须配置 discovery.zen.minimum_master_nodes
设置,以便每个符合主节点的节点都知道必须可见的最大主节点数,才能形成集群。
为了避免大脑分裂,这个设置应该设置为主节点的法定数量:
(master_eligible_nodes / 2) + 1
换句话说,如果有三个主节点,那么最小主节点应该设置为(3 / 2)+ 1或2:
discovery.zen.minimum_master_nodes: 2
Setting the heap size:
下面是如何通过在jvm.options文件堆大小的示例:
-Xms2g
-Xmx2g
还可以通过环境变量设置堆大小。通过ES_JAVA_OPTS设置这些值:
ES_JAVA_OPTS="-Xms2g -Xmx2g" ./bin/elasticsearch
ES_JAVA_OPTS="-Xms4000m -Xmx4000m" ./bin/elasticsearch
JVM heap dump path:
默认情况下,Elasticsearch将JVM配置为将内存异常转储到默认数据目录(这 /var/lib/elasticsearch
适用于RPM和Debian软件包发行版,以及data
用于tar和zip归档文件分发的Elasticsearch安装根目录下的目录) 。如果这个路径是不适合接受heap dump您应该修改的条目-XX:HeapDumpPath=...
在 jvm.options
。如果指定目录,JVM将根据正在运行的实例的PID为heap dump生成文件名。如果指定固定文件名而不是目录,则当JVM需要在内存不足异常上执行heap dump时,该文件必须不存在,否则heap dump将失败。
GC日志,JVM致命错误:
查看官网。
重要的系统配置
理想情况下,Elasticsearch应该在服务器上单独运行并使用它可用的所有资源。为此,您需要配置操作系统以允许运行Elasticsearch的用户访问比默认情况下允许的资源更多的资源。
在投入生产之前,必须考虑以下设置:
禁止交换:
大多数操作系统都试图使用尽可能多的内存进行文件系统缓存,并急切地交换未使用的应用程序内存。这可能导致JVM堆的某些部分甚至可执行页面被交换到磁盘。
交换对于性能、节点稳定性都是非常糟糕的,应该不惜一切代价加以避免。它可能导致垃圾收集持续几分钟而不是几毫秒,还可能导致节点响应缓慢,甚至与集群断开连接。
1)在Linux系统上,您可以通过运行以下命令暂时禁用swap:
sudo swapoff -a
2)要永久禁用它,您需要编辑/etc/fstab文件,并注释掉任何包含单词swap的行。
3)Another option available on Linux systems is to ensure that the sysctl value vm.swappiness is set to 1.这减少了内核交换的趋势,在正常情况下不应该导致交换,同时仍然允许整个系统在紧急情况下交换。
4)另一种选择是在Linux/Unix系统上使用mlockall,或者在Windows上使用VirtualLock,尝试将进程地址空间锁定到RAM中,以防止交换任何Elasticsearch内存。这可以通过在config/elasticsearch.yml中添加这一行来完成文件:
bootstrap.memory_lock: true
文件描述符
Elasticsearch使用大量文件描述符或文件句柄。用完文件描述符可能是灾难性的,最有可能导致数据丢失。确保将运行Elasticsearch的用户的打开文件描述符数量限制增加到65,536或更高。
对于.zip和.tar.gz包,在启动Elasticsearch之前用root用户设置ulimit -n 65536,或设置nofile为65536在/etc/security/limit .conf。
虚拟内存
线程数
DNS缓存设置
都很简单官网https://www.elastic.co/guide/en/elasticsearch/reference/current/system-config.html
其他配置参见官网。