elasticsearch官方文件學習筆記----ElasticSearch引數配置
配置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快取設定
其他配置參見官網。