- 文章名稱:Elasticsearch Reference[2.2]
- 原文地址:https://www.elastic.co/guide/en/elasticsearch/reference/2.2/setup-configuration.html
- 譯者:code4j
配置
環(huán)境變量
Elasticsearch會使用腳本中內(nèi)置的JAVA_OPTS
變量值作為JVM啟動參數(shù)栏账,最重要參數(shù)-Xmx
,它控制進程最大的堆內(nèi)存虾宇,-Xms
盖奈,控制進程分配最小堆內(nèi)存(通常來說內(nèi)存分配越多越好)茬故。
通常來說绽昏,推薦做法是不改變JAVA_OPTS
變量鸳玩,而使用ES_JAVA_OPTS
來改變JVM參數(shù)配置。
ES_HEAP_SIZE
參數(shù)用來配置Java為ES進程分配的堆內(nèi)存缩宜,最大最小值是一樣的,當然也可以通過指定的參數(shù)分別設(shè)置甥温,最小最大分別是 ES_MIN_MEM
(默認256M)和ES_MAX_MEM
(默認是1G)脓恕。
(譯者批注:通常建議最大最小內(nèi)存設(shè)置成一樣的,因為通常ES集群所在服務(wù)器資源盡可能都是提供給集群使用的窿侈,所以資源管夠炼幔,而設(shè)置不同的最大最小值,會產(chǎn)生內(nèi)存擴容導(dǎo)致過多開銷)
建議將最大值最小值設(shè)置一樣史简,并且打開(mlockall)
(譯者批注:mlockall
這個參數(shù)可以防止進程進行swap內(nèi)存交換乃秀,內(nèi)存交換效率很低,畢竟要讀寫磁盤圆兵。詳細原因可以看這里:把bootstrap.mlockall設(shè)為true)
系統(tǒng)配置
文件描述符
確保增大你機器(或者運行ES的用戶)的最大文件打開數(shù)跺讯,推薦設(shè)置為32K或64K。
為了測試一個進程的最大文件打開數(shù)殉农,啟動時配置參數(shù)-Des.max-open-files
為true
刀脏。這樣系統(tǒng)啟動時就會打印最大文件打開數(shù)。
另外超凳,你也可以通過解析下面API的結(jié)果中的max_file_descriptors
參數(shù)獲取每個節(jié)點的最大文件打開數(shù):
curl localhost:9200/_nodes/stats/process?pretty
虛擬內(nèi)存
Elasticsearch默認使用mmaps / niofs
混合的目錄存儲類型存儲索引愈污。默認的操作系統(tǒng)限制mmaps
(內(nèi)存映射模式)中的虛擬地址空間限制太小了,可能會導(dǎo)致內(nèi)存溢出轮傍,在Linux上暂雹,你可以使用root
用戶通過如下命令擴大限制:
sysctl -w vm.max_map_count=262144
如果想要永久改變這個參數(shù)的花,修改配置文件/etc/sysctl.conf
中的vm.max_map_count
這項配置创夜。
注意:如果你是用安裝包安裝ES(.deb或rpm)杭跪,這個配置會自動改變,你可以使用命令
sysctl vm.max_map_count
來校驗驰吓。
內(nèi)存配置
大多數(shù)操作系統(tǒng)會盡可能多的使用內(nèi)存給文件系統(tǒng)緩存并迫切的交換(后稱swap
)無用的應(yīng)用內(nèi)存到磁盤涧尿,這有可能導(dǎo)致Elasticsearch進程被swap到磁盤,swap十分消耗性能并且影響節(jié)點的穩(wěn)定性檬贰,因此要不惜一切代價避免它發(fā)生姑廉。
你有三種選擇:
-
禁用swap
簡單粗暴的禁用swap,通常Elasticsearch作為一個服務(wù)運行在沙箱環(huán)境中偎蘸,其內(nèi)存通過系統(tǒng)變量ES_HEAP_SIZE
來控制庄蹋,因此swap不應(yīng)該啟用瞬内。
Linux系統(tǒng)中,你可以通過命令sudo swapoff -a
來關(guān)閉限书,如果想永久關(guān)閉虫蝶,需要修改配置文件/etc/fstab
并找到注釋中包括swap
的那行。
Windows下倦西,你可以完全禁用分頁文件能真,設(shè)置方法:我的電腦右鍵屬性->高級系統(tǒng)設(shè)置->高級/性能,點擊設(shè)置->高級->虛擬內(nèi)存扰柠,點擊更改->選擇無分頁文件粉铐。 -
配置
swappiness
第二個選擇就是確保sysctl的配置vm.swappiness
設(shè)置為0偶垮。這樣能夠降低內(nèi)核的swap頻率朵锣,正常情況下是不會產(chǎn)生swap的,當然系統(tǒng)在緊急情況下還是會進行swap迫摔。
注意:在內(nèi)核版本3.5-rc1及以上劝枣,
vm.swappiness
設(shè)置為0的時候汤踏,觸發(fā)OOM則會殺掉進程而不是進行swap,緊急情況下你需要設(shè)置該配置為1來確保swap是能夠執(zhí)行的舔腾。
-
mlockall
第三個選擇是在Linux/Unix使用mlockall
溪胶,Windows使用 VirtualLock,能夠?qū)⑦M程地址空間鎖在內(nèi)存中稳诚,防止Elasticsearch進程內(nèi)存被swap出去哗脖,可以通過在配置文件elasticsearch.yml
中加入下面的配置:
bootstrap.mlockall: true
啟動后,你可以通過檢驗下面這個命令的返回結(jié)果中的mlockall
值來看配置是否成功:
如果你發(fā)現(xiàn)mlockall
的值是false扳还,說明配置失敗了才避,最有可能的原因是在Linux/Unix系統(tǒng)中啟動ES的用戶沒有權(quán)限鎖住內(nèi)存,你可以在啟動前普办,通過root用戶執(zhí)行ulimit -l unlimited
來授權(quán)工扎。
另一個原因可能是臨時文件目錄(Linux下通常是/tmp
)掛載時指定了noexec
選項,你可以在啟動ES的時候指定新的臨時目錄來解決:
./bin/elasticsearch -Djna.tmpdir=/path/to/new/dir
注意:啟用mlockall衔蹲,如果嘗試申請超過可用內(nèi)存大小的內(nèi)存,可能會導(dǎo)致JVM或shell 回話退出呈础。
Elasticsearch配置
elasticsearch的配置文件在ES_HOME/config
目錄下舆驶,目錄中有兩個文件,elasticsearch.yml
用來配置ES的不同模塊而钞,logging.yml
用來配置ES日志相關(guān)設(shè)置沙廉。
配置風格是YAML,下面我們來一個示例臼节,修改所有網(wǎng)絡(luò)模塊綁定的地址信息珊皿,改為如下:
network.host: 10.0.0.4
(譯者批注:格式按照默認配置文件來即可巨税,官網(wǎng)的yaml配置風格和我是用的略有不同草添,這里我直接使用默認的配置文件中的注釋demo)
目錄
生產(chǎn)環(huán)境使用远寸,我們肯定需要修改data和log的存放目錄:
path.data: /var/data/elasticsearch
path.logs: /var/log/elasticsearch
(譯者批注:data目錄可以寫多個肆资,通過逗號分隔郑原,實現(xiàn)磁盤陣列颤专,把數(shù)據(jù)寫到多個磁盤上栖秕,降低讀寫鎖的開銷晓避。不過目前譯者沒有這么實踐過暑塑。)
集群名
別忘了給你的集群命名事格,用來使節(jié)點發(fā)現(xiàn)并自動加入集群驹愚。
cluster.name: <NAME OF YOUR CLUSTER>
確保你的集群名不會在不同環(huán)境復(fù)用逢捺,否則可能會導(dǎo)致節(jié)點加入錯誤的集群而出錯劫瞳。例如你可以使用 logging-dev
,logging-stage
志于,logging-prod
表示開發(fā)集群蕊退,預(yù)發(fā)布(譯者公司稱作沙箱)集群和生產(chǎn)集群瓤荔。
節(jié)點名
也許你也需要修改節(jié)點名稱输硝,就像主機名一樣点把。默認情況下節(jié)點啟動時會從3000個漫威人物名字中隨機選取一個。
node.name: <NAME OF YOUR NODE>
(譯者批注:推薦命名用編號區(qū)分方便管理維護)
機器的主機名可以通過系統(tǒng)變量 HOSTNAME
獲取褒翰,如果你的機器只運行集群中的一個節(jié)點优训,可以設(shè)置節(jié)點名為主機名揣非,使用標簽 ${...}
早敬。
node.name: ${HOSTNAME}
(譯者批注:這種配置方式極不推薦搁嗓,不利于管理,風險高棍矛,把它當做一個trick測試玩好了够委。除非你做了一些安全或權(quán)限的插件茁帽,用到輸入密碼這種配置潘拨。)
ES內(nèi)部在處理這些配置的時候都會使用“ namespaced”壓縮處理(譯者批注:也就是譯者現(xiàn)在為大家展示的這種風格)铁追。你也可以使用JSON風格的配置琅束,配置文件命名為:elasticsearch.json
就行了:
Code style
{
"network" : {
"host" : "10.0.0.4"
}
}
也就是說你可以很輕松的通過外部配置,使用ES_JAVA_OPTS
或者啟動時參數(shù)進行配置艾船,例如:
./elasticsearch -Des.network.host=10.0.0.4
另外丽声,如果你不希望存儲你的配置,還可以使用通配符的方式在啟動ES時從前臺傳值,使用${prompt.text}
或 ${prompt.secret}
配置徒坡,前者控制臺輸入顯示明文喇完,后者則不顯示锦溪,示例如下:
node.name: ${prompt.text}
啟動ES后防楷,會提示你輸入?yún)?shù)值,如下:
Enter value for [node.name]:
如果${prompt.text}
或 ${prompt.secret}
已經(jīng)存在于配置中亿昏,或者你使用后臺啟動ES,則這兩個配置不會起作用彤断。
索引配置
集群中創(chuàng)建的索引擁有它自己的配置宰衙,例如,以下創(chuàng)建索引的配置設(shè)置了刷新間隔為5s,而沒有使用默認的刷新間隔(可以使用YAML或JSON格式):
$ curl -XPUT http://localhost:9200/kimchy/ -d
'
index:
refresh_interval: 5s
'
索引級別的配置也可以用于節(jié)點級別的配置,比如剛才的配置我們也可以在elasticsearch.yml
中設(shè)置:
index.refresh_interval: 5s
就是說在特定節(jié)點上創(chuàng)建的每個索引都將使用5s的刷新間隔,除非創(chuàng)建索引時設(shè)置它。也可以說,索引級別的配置可以覆蓋節(jié)點級別的配置掸掏。
所有的配置信息都可以在索引模塊找到步脓。
日志配置
elasticsearch內(nèi)部使用log4j日志系統(tǒng)仍侥,開箱即用或颊,并使用YAML配置風格簡化log4j的配置醉顽,配置文件是conf/logging.yml
,同樣JSON風格的配置文件也支持平挑。多個配置文件也是支持的游添,它們會被整合到一起,前提是文件名要以logging.
開頭通熄,并以支持的后綴結(jié)尾(目前可以是.yml
, .yaml
, .json
或.properties
)唆涝。日志器包括Java包名和相應(yīng)的日志級別,你可以省略org.elasticsearch
前綴唇辨。Appender部分包括日志目的地廊酣。更多地自定義日志配置和appender類型請看 log4j documentation。
額外的Appender還有 log4j-extras
提供的其他日志類也是支持的助泽,開箱即用啰扛。
過期日志
除了常規(guī)日志,ES允許你啟動過期日志記錄嗡贺。例如如果你要遷移某些功能隐解,需要你提前確定。默認的過期日志是禁用的诫睬,你可以通過如下配置啟用:
deprecation: DEBUG, deprecation_log_file
這將會每天在你的日志目錄創(chuàng)建滾動日志煞茫,經(jīng)常檢查
上一節(jié):Elasticsearch官檔翻譯——2 設(shè)置