Elasticsearch 开发模式和生产模式

讲这两个模式之前需要先了解一些系统配置
系统配置

  • 禁用堆内存与硬盘的交换,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中添加 memlockunlimited
使用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 

1.开发者模式

在开发者模式下,以上部分配置没有配置,日志将会打印警告信息

2.生产模式
在生产环境下如果以上信息没有配置,警告信息将会升级成为错误信息,系统无法启动。

如何区分是生产模式还是开发模式:
elasticsearch.yml中的network.host这个配置决定是开发模式还是生产模式。一旦设置这个配置即代表生产模式。
如果一个Elasticsearch节点不能通过非环回地址与另一台机器形成集群,我们认为它处于开发模式;如果它能够通过非环回地址加入集群,我们认为它处于生产模式
http.hosttransport.host 可以独立配置HTTPtransport.这对于开发模式下,使es支持HTTP非常有帮助。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章