1. 程式人生 > >elasticsearch官方文件學習筆記----ElasticSearch引數配置

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適用於RPMDebian軟體包發行版,以及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快取設定

其他配置參見官網。