讲这两个模式之前需要先了解一些系统配置
系统配置
- 禁用堆内存与硬盘的交换,
Disable Swapping
有三种方案可以禁用交换
Ⅰ、系统级别禁用所有虚拟内存交换
sudo swapoff -a
仅在linux系统中使用,无需重启ElasticSearch.在Windows环境下可以通过右键我的电脑–>属性–>高级系统设置–>性能:设置—>高级中吧虚拟内存设置为0即可,显然不是很好的策略。
Ⅱ、配置swappiness
Linux系统上的另一个可用方案是将vm.swappiness
设置为1。这减少了内核的交换倾向,在正常情况下不应该导致交换,同时仍然允许整个系统在紧急情况下交换。
Ⅲ、启用bootstrap.memory_lock
配置进行应用内存锁定
相关原理linux系统mlockall、windows系统VirtualLock
在config/elasticsearch.yml
配置文件中配置以下选项
bootstrap.memory_lock: true
启动完成后可以通过以下命令验证是否配置成功
GET _nodes?filter_path=**.mlockall
返回true成功
、false失败
或者在日志中看到Unable to lock JVM Memory。
可能原因是es没有相关系统权限:
通过.zip and .tar.gz
安装的可以使用root账号在/etc/security/limits.conf
中添加 memlock
为unlimited
使用RPM and Debian
安装的可以通过以下方式设置
在以下文件添加MAX_LOCKED_MEMORY=unlimited
RPM /etc/sysconfig/elasticsearch
Debian /etc/default/elasticsearch
或者使用systemd配置文件中添加
[Service]
LimitMEMLOCK=infinity
另一个失败的原因是jna临时目录挂载问题可以通过指定jna临时目录方式解决
export ES_JAVA_OPTS="$ES_JAVA_OPTS -Djna.tmpdir=<path>"
./bin/elasticsearch
- 增加文件描述符(File Descriptors)
使用 .zip and .tar.gz 安装的可以使用root账号za在配置文件添加/etc/security/limits.conf
如下内容
* - nofile 65536
可以通过以下命名监测是否生效
GET _nodes/stats/process?filter_path=**.max_file_descriptors
- 配置系统/etc/sysctl.conf
vm.max_map_count=262144
- 配置足够线程数
/etc/security/limits.conf
* - nproc 4096
-
非必要 JVM DNS解析相关配置
-
jna临时文件挂载不要使用
noexec
1.开发者模式
在开发者模式下,以上部分配置没有配置,日志将会打印警告信息
2.生产模式
在生产环境下如果以上信息没有配置,警告信息将会升级成为错误信息,系统无法启动。
如何区分是生产模式还是开发模式:
elasticsearch.yml
中的network.host
这个配置决定是开发模式还是生产模式。一旦设置这个配置即代表生产模式。
如果一个Elasticsearch节点不能通过非环回地址与另一台机器形成集群,我们认为它处于开发模式;如果它能够通过非环回地址加入集群,我们认为它处于生产模式
http.host
和 transport.host
可以独立配置HTTP
和transport
.这对于开发模式下,使es支持HTTP非常有帮助。