1.配置ElasticSearch
配置文件位置
Elasticsearch具有三個配置文件:
elasticsearch.yml
用於配置Elasticsearchjvm.options
用於配置Elasticsearch JVM設置log4j2.properties
用於配置Elasticsearch日誌記錄
這些文件位於config目錄中,其默認位置取決於安裝是來自壓縮包發行版(tar.gz
或 zip
)還是軟件包發行版(Debian或RPM軟件包)。
對於tar.gz或者zip,配置目錄位置默認爲 $ES_HOME/config
。可以通過ES_PATH_CONF
環境變量來更改config目錄的位置, 如下所示:
ES_PATH_CONF=/path/to/my/config ./bin/elasticsearch
或者,您可以通過Shell命令export來配置
ES_PATH_CONF
環境變量。
對於軟件包分發,config目錄位置默認爲 /etc/elasticsearch
。config目錄的位置也可以通過ES_PATH_CONF
環境變量來更改,但是請注意,在您的shell中進行設置是不夠的。而是,此變量來自 /etc/default/elasticsearch
(對於Debian軟件包)和 /etc/sysconfig/elasticsearch
(對於RPM軟件包)。您將需要相應地ES_PATH_CONF=/etc/elasticsearch
在這些文件之一中編輯 條目,以更改配置目錄位置。
配置文件格式
配置格式爲YAML。這是更改數據和日誌目錄的路徑的示例:
path:
data: /var/lib/elasticsearch
logs: /var/log/elasticsearch
也可以按照以下方式設置:
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
環境變量替換
在配置文件中用${...}
符號引用的環境變量將替換爲環境變量的值,例如:
node.name: ${HOSTNAME}
network.host: ${ES_NETWORK_HOST}
2.設置JVM選項
您幾乎不需要更改JVM選項。如果這樣做,最有可能是更改堆大小。本文檔的其餘部分詳細說明了如何設置JVM選項。您可以使用jvm.options
文件或ES_JAVA_OPTS
環境變量來設置選項。
設置JVM選項(包括系統屬性和JVM標誌)的首選方法是通過jvm.options
配置文件。該文件的默認位置是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
可以在系統配置文件中指定 。
JVM具有用於觀察JAVA_TOOL_OPTIONS
環境變量的內置機制。我們有意在打包腳本中忽略此環境變量。這樣做的主要原因是,在某些操作系統(例如Ubuntu)上,默認情況下通過此環境變量安裝了代理,我們不希望它們干擾Elasticsearch。
此外,其他一些Java程序也支持JAVA_OPTS
環境變量。這不是 JVM內置的機制,而是生態系統中的約定。但是,我們不支持此環境變量,而是通過上述jvm.options
文件或環境變量來支持設置JVM選項ES_JAVA_OPTS
。
3.安全設置
某些設置是敏感的,僅依靠文件系統權限來保護其值是不夠的。對於此用例,Elasticsearch提供了密鑰庫和用於管理密鑰庫中設置的elasticsearch-keystore
工具。
僅在重新啓動Elasticsearch之後,對密鑰庫的所有修改纔會生效。
這些設置與elasticsearch.yml
配置文件中的常規設置一樣,需要在集羣的每個節點上指定。當前,所有安全設置都是特定於節點的設置,在每個節點上必須具有相同的值。
可重新加載的安全設置
就像設置elasticsearch.yml一樣,對密鑰庫內容的更改不會自動應用於正在運行的Elasticsearch節點。修改完成之後需要重新啓動節點。但是,某些安全設置被標記爲 可重載。可以重新讀取此類設置並將其應用到正在運行的節點上。
所有安全設置(可重新加載或不可重新加載)的值在所有羣集節點上必須相同。進行所需的安全設置更改後,使用以下bin/elasticsearch-keystore add
命令,調用:
POST _nodes/reload_secure_settings
該API在每個羣集節點上解密並重新讀取整個密鑰庫,但僅應用於可重載的安全設置。直到下一次重新啓動,對其他設置的更改纔會生效。調用返回後,重新加載已完成,這意味着依賴於這些設置的所有內部數據結構均已更改。從頭開始,所有設置看起來都應該具有新值。
更改多個可重新加載的安全設置時,請在每個羣集節點上修改所有這些設置,然後發出reload_secure_settings
呼叫,而不是在每次修改後重新加載。
4.記錄配置
Elasticsearch使用Log4j 2進行日誌記錄。可以使用log4j2.properties文件配置Log4j 2。Elasticsearch公開三個屬性${sys:es.logs.base_path}
, ${sys:es.logs.cluster_name}
以及${sys:es.logs.node_name}
可以在配置文件中引用,以確定日誌文件的位置。該屬性${sys:es.logs.base_path}
將解析爲日誌目錄, ${sys:es.logs.cluster_name}
將解析爲羣集名稱(在默認配置中用作日誌文件名的前綴), ${sys:es.logs.node_name}
並將解析爲節點名稱(如果顯式設置了節點名稱)。
例如,如果你的日誌目錄(path.logs
)是/var/log/elasticsearch
和您的羣集名爲production
然後${sys:es.logs.base_path}
將解析/var/log/elasticsearch
和 ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}.log
將解析/var/log/elasticsearch/production.log
。