Elasticsearch配置文件詳解

Elasticsearch默認的配置文件已經不錯了,幾乎不用更改了。在集羣運行的時候,大部分的設置都也可以通過Cluster Update Setting API進行在線更改。 配置文件應該包含node的一些指定,如(node.name和路徑),或者配置好節點能夠加入集羣的一些設置,如(cluser.name和network.host)。

配置文件路徑

Elasticsearch有兩個配置文件:

  • elasticsearch.yml :配置elasticsearch

  • log4j2.properties :配置elasticsearch的日誌

該文件位於$ES_HOME/config/下。 配置的路徑可以改變,通過使用path.conf,如:

/bin/elasticsearch -Epath.conf=/path/to/my/config

配置文件格式

配置文件的格式遵循YAML語法,下面是關於配置數據和日誌目錄路徑的一些例子:

path:
data:/var/lib/elasticserach
logs:/var/log/elasticsearch

也可以使用下面的格式:

path.data:/var/lib/elasticsearch
path.logs:/var/log/elasticsearch

環境變量替換

在配置文件中用$ {...}表示引用的環境變量將替換爲環境變量的值,例如:

node.name: ${HOSTNAME}
network.host: ${ES_NETWORK_HOST}

設置提示

對於一些配置如果你不想要保存在配置文件裏,你可以使用${prompt.text}或者${prompt.secret}和在前臺運行elasticsearch,${prompt.secret}時,當你在終端輸入時,不會顯示。${prompt.text}你將會看到你輸入的內容。例如:

node:
name:${prompt.text}

當你運行elasticsearch時候,將會看到如下的輸入提示:

Enter value for [node.name]:

如果${prompt.text}或者${prompt.secret}在設置中使用,並且啓動該服務在後臺運行時,

Elasticsearch 將不會運行。

默認的設置

新的默認的配置可以在命令行中指定,通過使用default前綴,這將指定在默認情況下使用的值,除非在配置文件裏指定其他的值。 例如:如果Elasticsearch將會啓動,使用如下命令:

./bin/elasticsearch -Edefault.node.name = My_Node

這個值node.name將是My_Node,除非它在命令行中使用es.node.name覆蓋或者在配置文件中用node.name覆蓋。

日誌配置

ElasticSearch使用Log4j 2進行日誌記錄。可以使用log4j2.properties文件配置Log4j2。ElasticSearch公開一個屬性${sys:es.logs},該屬性可以在配置文件中引用以確定日誌文件的位置;這將解析爲運行時Elasticsearch日誌文件的前綴。 例如:如果你的日誌目錄是/var/log/elasticsearch和你的集羣名:production,然後${sys:es.logs}將會被解析成/var/log/elasticsearch/production

appender.rolling.type = RollingFile 1
appender.rolling.name = rolling
appender.rolling.fileName = ${sys:es.logs}.log 2
appender.rolling.layout.type = PatternLayout
appender.rolling.layout.pattern = [%d{ISO8601}][%-5p][%-25c] %.10000m%n
appender.rolling.filePattern = ${sys:es.logs}-%d{yyyy-MM-dd}.log 3
appender.rolling.policies.type = Policies
appender.rolling.policies.time.type = TimeBasedTriggeringPolicy 4
appender.rolling.policies.time.interval = 1 5
appender.rolling.policies.time.modulate = true 6
  1. 配置輸入源:RollingFile

  2. 日誌爲: /var/log/elasticsearch/production.log

  3. 滾動日誌:/var/log/elasticsearch/production-yyyy-MM-dd.log

  4. 使用基於時間的的滾動策略

  5. 每天滾動日誌

  6. 在每天的準點排列(而不是每隔二十四小時滾動)

如果將.gz或.zip附加到appender.rolling.filePattern,則日誌將在滾動時進行壓縮。 可以加載多個配置文件(在這種情況下它們將被合併),只要它們被命名爲log4j2.properties並且將Elasticsearch配置目錄作爲繼承; 這對於暴露其他記錄器的插件很有用。 記錄器部分包含java包及其相應的日誌級別。 appender部分包含日誌的目標。 有關如何自定義日誌記錄和所有支持的appender的詳細信息,請參閱Log4j文檔。

Deprecation Logging

除常規日誌記錄外,Elasticsearch還允許您啓用已Deprecation操作的日誌記錄。 例如,如果您將來需要遷移某些功能,這可以讓您儘早確定。 默認情況下,將在WARN級別啓用Deprecation日誌記錄,該級別是發出所有棄用日誌消息的級別。

logger.deprecation.level = warn

這將在日誌目錄中創建每日滾動棄用日誌文件。 定期檢查此文件,尤其是當您打算升級到新的主要版本時。 默認日誌記錄配置已將棄用日誌的卷策略設置爲在1 GB後滾動和壓縮,並最多保留五個日誌文件(四個滾動日誌和活動日誌)。 您可以通過將棄用日誌級別設置爲error來在config / log4j2.properties文件中禁用它。

重要的Elasticsearch配置

雖然Elasticsearch需要很少的配置,但是在投入生產前,有很多的設置參數需要你手動進行配置。

  • path.data and path.logs

  • cluster.name

  • node.name

  • bootstrap.memory_lock

  • network.host

  • discovery.zen.ping.unicast.hosts

  • discovery.zen.minimum_master_nodes

path.data and path.logs

如果您使用.zip或.tar.gz存檔,則數據和日誌目錄是$ES_HOME的子文件夾。 如果這些重要文件夾保留在其默認位置,則在將Elasticsearch升級到新版本時,存在刪除它們的高風險。

在生產使用中,你必須保證更改數據和日誌文件夾的位置:

path:
logs: /var/log/elasticsearch
data: /var/data/elasticsearch

path.data 可以設置多個路徑,在這種情況下,所有路徑都將用於存儲數據(儘管屬於單個分片的文件將全部存儲在同一數據路徑中):

path:
 data:
   - /mnt/elasticsearch_1
   - /mnt/elasticsearch_2
   - /mnt/elasticsearch_3

cluster.name

一個node只能加入一個集羣,它和其他node節點共享cluster.name。默認的名字是elasticsearch,但是你應該改變它,以此來描述你的集羣的用途。

cluster.name: logging-prod

在不同的環境中,確保你不會再使用相同的集羣名,否則最終將會加入到錯誤的集羣節點。

node.name

默認情況下,Elasticsearch將會使用7位隨機的uuid來標誌一個節點ID,當一個node節點重啓的時候node id也不會變(持久的),因此,node name也將不會改變。

配置一個有意義的節點名稱有值得的,在重啓node節點後,它依然會保持持久性。

node.name: prod-data-2

node.name 也可以設置成服務器的HOSTNAME,如下:

node.name: ${HOSTNAME}

bootstrap.memory_lock

對於節點的運行狀況而言,不讓JVM交換到磁盤是至關重要的(交換對性能和節點穩定性非常不利,應該不惜一切代價避免。它可能導致垃圾收集持續數分鐘 而不是毫秒,並且可能導致節點響應緩慢甚至斷開與羣集的連接。)。 實現此目的的一種方法是將bootstrap.memory_lock設置爲true。 要使此設置生效,需要先配置其他系統設置。 有關如何正確設置內存鎖定的更多詳細信息,請參閱 Enable bootstrap.memory_lock 三種禁用交換的方法:

  1. 啓動bootstrap.memory_lock:

bootstrap.memory_lock: true

檢查此設置是否成功:

GET _nodes?filter_path=**.mlockall
  1. 禁用所有的交換文件 臨時禁用:sudo swapoff -a 永久禁用:需要編輯/etc/fstab文件並註釋掉包含該單詞的任何行swap。

  2. 配置swappiness Linux系統上可用的另一個選項是確保將sysctl值 vm.swappiness設置爲1。這降低了內核交換的傾向,在正常情況下不應導致交換,同時仍允許整個系統在緊急情況下交換。

network.host

Elasticsearch默認綁定的是迴環地址:如:127.0.0.1 and [::1],在一臺服務器上運行單一的node節點已經足夠了。

實際上,可以從單個節點上的相同$ES_HOME位置啓動多個節點。 這對於測試Elasticsearch形成集羣的能力非常有用,但它不推薦用於生產的配置。

爲了保證一個集羣間可以通信,你必須需要設置一個非迴環地址。你需要有更多的網絡配置通常你需要配置的是network.host:

network.host: 192.168.1.10

network.host設置還了解一些特殊值,例如local,_ siteglobal_和修飾符,如:ip4和:ip6,其詳細信息可在network.hoste中指定的值中找到。

一旦爲network.host提供自定義設置,Elasticsearch就會假定您正在從開發模式轉移到生產模式,並將許多系統啓動檢查從警告升級到異常。 有關更多信息,請參閱開發模式與生產modeedit。

discovery.zen.ping.unicast.hosts

簡單方便,沒有任何網絡配置,Elasticsearch將綁定到可用的迴環地址,並將掃描端口9300到9305以嘗試連接到在同一服務器上運行的其他節點。 這提供了自動羣集體驗,無需進行任何配置。

當需要在其他服務器上連接已經存在的的羣集時,您必須提供羣集中可能是存在的且可連接的其他節點的種子列表。 這可以指定如下:

discovery.zen.ping.unicast.hosts:
  - 192.168.1.10:9300
  - 192.168.1.11   1
  - seeds.mydomain.com   2
  1. 如果未指定,端口將默認爲transport.profiles.default.port並回退到transport.tcp.port。

  2. 一個主機名將會被解析成多個IP地址,並將會嘗試連接已經解析的IP地址。

discovery.zen.minimum_master_nodes

爲防止數據丟失,配置discovery.zen.minimum_master_nodes至關重要,這樣每個符合主節點的節點都知道爲了形成集羣需要符合主節點的最小節點數。

如果沒有此設置,遭受網絡故障的羣集可能會將羣集拆分爲兩個獨立的羣集 - 腦裂 - 這將導致數據丟失。如何避免裂腦的更詳細解釋查看

爲避免腦裂,應將此設置設置爲符合條件的主節點的法定數量:

(master_eligible_nodes / 2) + 1

換一中說法,如果有符合條件的三個主節點,那麼最少的主節點數應該設置成(3/2)+1 or 2:

discovery.zen.minimum_master_nodes: 2

原文路徑:https://www.elastic.co/guide/en/elasticsearch/reference/5.2/settings.html

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