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非常有幫助。

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