Elasticsearch官檔翻譯——2 1 配置

配置

環境變量

Elasticsearch會使用腳本中內置的JAVA_OPTS變量值做爲JVM啓動參數,最重要參數-Xmx,它控制進程最大的堆內存,-Xms,控制進程分配最小堆內存(一般來講內存分配越多越好)。 一般來講,推薦作法是不改變JAVA_OPTS變量,而使用ES_JAVA_OPTS來改變JVM參數配置。 ES_HEAP_SIZE參數用來配置Java爲ES進程分配的堆內存,最大最小值是同樣的,固然也能夠經過指定的參數分別設置,最小最大分別是 ES_MIN_MEM(默認256M)和ES_MAX_MEM(默認是1G)。 (譯者批註:一般建議最大最小內存設置成同樣的,由於一般ES集羣所在服務器資源儘量都是提供給集羣使用的,因此資源管夠,而設置不一樣的最大最小值,會產生內存擴容致使過多開銷) 建議將最大值最小值設置同樣,而且打開(mlockall) (譯者批註:mlockall這個參數能夠防止進程進行swap內存交換,內存交換效率很低,畢竟要讀寫磁盤。詳細緣由能夠看這裏:把bootstrap.mlockall設爲truehtml

系統配置

文件描述符 確保增大你機器(或者運行ES的用戶)的最大文件打開數,推薦設置爲32K或64K。 爲了測試一個進程的最大文件打開數,啓動時配置參數-Des.max-open-filestrue。這樣系統啓動時就會打印最大文件打開數。 另外,你也能夠經過解析下面API的結果中的max_file_descriptors參數獲取每一個節點的最大文件打開數:node

curl localhost:9200/_nodes/stats/process?prettyshell

虛擬內存 Elasticsearch默認使用mmaps / niofs混合的目錄存儲類型存儲索引。默認的操做系統限制mmaps(內存映射模式)中的虛擬地址空間限制過小了,可能會致使內存溢出,在Linux上,你可使用root用戶經過以下命令擴大限制:apache

sysctl -w vm.max_map_count=262144json

若是想要永久改變這個參數的花,修改配置文件/etc/sysctl.conf中的vm.max_map_count這項配置。bootstrap

注意:若是你是用安裝包安裝ES(.deb或rpm),這個配置會自動改變,你可使用命令sysctl vm.max_map_count 來校驗。windows

內存配置 大多數操做系統會盡量多的使用內存給文件系統緩存並迫切的交換(後稱swap)無用的應用內存到磁盤,這有可能致使Elasticsearch進程被swap到磁盤,swap十分消耗性能而且影響節點的穩定性,所以要不惜一切代價避免它發生。 你有三種選擇:緩存

  • 禁用swap 簡單粗暴的禁用swap,一般Elasticsearch做爲一個服務運行在沙箱環境中,其內存經過系統變量ES_HEAP_SIZE來控制,所以swap不該該啓用。 Linux系統中,你能夠經過命令sudo swapoff -a來關閉,若是想永久關閉,須要修改配置文件/etc/fstab並找到註釋中包括swap的那行。 Windows下,你能夠徹底禁用分頁文件,設置方法:個人電腦右鍵屬性->高級系統設置->高級/性能,點擊設置->高級->虛擬內存,點擊更改->選擇無分頁文件。
  • 配置swappiness 第二個選擇就是確保sysctl的配置vm.swappiness設置爲0。這樣可以下降內核的swap頻率,正常狀況下是不會產生swap的,固然系統在緊急狀況下仍是會進行swap。

注意:在內核版本3.5-rc1及以上,vm.swappiness設置爲0的時候,觸發OOM則會殺掉進程而不是進行swap,緊急狀況下你須要設置該配置爲1來確保swap是可以執行的。安全

  • mlockall 第三個選擇是在Linux/Unix使用mlockall,Windows使用 VirtualLock,可以將進程地址空間鎖在內存中,防止Elasticsearch進程內存被swap出去,能夠經過在配置文件elasticsearch.yml中加入下面的配置:

bootstrap.mlockall: true服務器

啓動後,你能夠經過檢驗下面這個命令的返回結果中的mlockall值來看配置是否成功:

curl http://localhost:9200/_nodes/process?pretty

若是你發現mlockall的值是false,說明配置失敗了,最有可能的緣由是在Linux/Unix系統中啓動ES的用戶沒有權限鎖住內存,你能夠在啓動前,經過root用戶執行ulimit -l unlimited來受權。

另外一個緣由多是臨時文件目錄(Linux下一般是/tmp)掛載時指定了noexec選項,你能夠在啓動ES的時候指定新的臨時目錄來解決:

./bin/elasticsearch -Djna.tmpdir=/path/to/new/dir

注意:啓用mlockall,若是嘗試申請超過可用內存大小的內存,可能會致使JVM或shell 回話退出。

Elasticsearch配置

elasticsearch的配置文件在ES_HOME/config目錄下,目錄中有兩個文件,elasticsearch.yml用來配置ES的不一樣模塊,logging.yml用來配置ES日誌相關設置。 配置風格是YAML,下面咱們來一個示例,修改全部網絡模塊綁定的地址信息,改成以下:

network.host: 10.0.0.4

譯者批註:格式按照默認配置文件來便可,官網的yaml配置風格和我是用的略有不一樣,這裏我直接使用默認的配置文件中的註釋demo

目錄

生產環境使用,咱們確定須要修改data和log的存放目錄:

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

譯者批註:data目錄能夠寫多個,經過逗號分隔,實現磁盤陣列,把數據寫到多個磁盤上,下降讀寫鎖的開銷。不過目前譯者沒有這麼實踐過。

集羣名

別忘了給你的集羣命名,用來使節點發現並自動加入集羣。

cluster.name:

確保你的集羣名不會在不一樣環境複用,不然可能會致使節點加入錯誤的集羣而出錯。例如你可使用 logging-dev,logging-stagelogging-prod表示開發集羣,預發佈(譯者公司稱做沙箱)集羣和生產集羣。

節點名

也許你也須要修改節點名稱,就像主機名同樣。默認狀況下節點啓動時會從3000個漫威人物名字中隨機選取一個。

node.name:

譯者批註:推薦命名用編號區分方便管理維護

機器的主機名能夠經過系統變量 HOSTNAME獲取,若是你的機器只運行集羣中的一個節點,能夠設置節點名爲主機名,使用標籤 ${...}

node.name: ${HOSTNAME}

譯者批註:這種配置方式極不推薦,不利於管理,風險高,把它當作一個trick測試玩好了。除非你作了一些安全或權限的插件,用到輸入密碼這種配置。

ES內部在處理這些配置的時候都會使用「 namespaced」壓縮處理(譯者批註:也就是譯者如今爲你們展現的這種風格)。你也可使用JSON風格的配置,配置文件命名爲:elasticsearch.json就好了: Code style

{
    "network" : {
        "host" : "10.0.0.4"
    }
}
複製代碼

也就是說你能夠很輕鬆的經過外部配置,使用ES_JAVA_OPTS或者啓動時參數進行配置,例如:

./elasticsearch -Des.network.host=10.0.0.4

另外,若是你不但願存儲你的配置,還可使用通配符的方式在啓動ES時從前臺傳值,使用${prompt.text}${prompt.secret}配置,前者控制檯輸入顯示明文,後者則不顯示,示例以下:

node.name: ${prompt.text}

啓動ES後,會提示你輸入參數值,以下:

Enter value for [node.name]:

若是${prompt.text}${prompt.secret}已經存在於配置中,或者你使用後臺啓動ES,則這兩個配置不會起做用。

索引配置

集羣中建立的索引擁有它本身的配置,例如,如下建立索引的配置設置了刷新間隔爲5s,而沒有使用默認的刷新間隔(可使用YAML或JSON格式):

$ curl -XPUT http://localhost:9200/kimchy/ -d
' index: refresh_interval: 5s '

索引級別的配置也能夠用於節點級別的配置,好比剛纔的配置咱們也能夠在elasticsearch.yml中設置:

index.refresh_interval: 5s

就是說在特定節點上建立的每一個索引都將使用5s的刷新間隔,除非建立索引時設置它。也能夠說,索引級別的配置能夠覆蓋節點級別的配置。

全部的配置信息均可以在索引模塊找到。

日誌配置

elasticsearch內部使用log4j日誌系統,開箱即用,並使用YAML配置風格簡化log4j的配置,配置文件是conf/logging.yml,一樣JSON風格的配置文件也支持。多個配置文件也是支持的,它們會被整合到一塊兒,前提是文件名要以logging.開頭,並以支持的後綴結尾(目前能夠是.yml, .yaml, .json.properties)。日誌器包括Java包名和相應的日誌級別,你能夠省略org.elasticsearch前綴。Appender部分包括日誌目的地。更多地自定義日誌配置和appender類型請看 log4j documentation。 額外的Appender還有 log4j-extras 提供的其餘日誌類也是支持的,開箱即用。

過時日誌

除了常規日誌,ES容許你啓動過時日誌記錄。例如若是你要遷移某些功能,須要你提早肯定。默認的過時日誌是禁用的,你能夠經過以下配置啓用:

deprecation: DEBUG, deprecation_log_file

這將會天天在你的日誌目錄建立滾動日誌,常常檢查

相關文章
相關標籤/搜索