配置Elasticsearch
Elasticsearch船只具有良好的默認(rèn)值,并且只需要很少的配置。可以在運(yùn)行的集群上使用集群更新設(shè)置API更改大多數(shù)設(shè)置。
配置文件應(yīng)該包含特定于節(jié)點(diǎn)的設(shè)置(例如node.name和路徑),或者節(jié)點(diǎn)為了能夠加入集群而需要的設(shè)置,例如cluster.name
和network.host
。
配置文件位置
Elasticsearch有三個(gè)配置文件:
-
elasticsearch.yml
for configuring Elasticsearch -
jvm.options
for configuring Elasticsearch JVM settings -
log4j2.properties
for configuring Elasticsearch logging
這些文件位于config目錄中,其默認(rèn)位置取決于安裝是來自存檔分發(fā)版(tar.gz或zip)還是包分發(fā)版(Debian或RPM包)。
對(duì)于存檔發(fā)行版,config目錄位置默認(rèn)為$ES_HOME/config
。配置目錄的位置可以通過ES_PATH_CONF
環(huán)境變量改變,如下所示:
ES_PATH_CONF=/path/to/my/config ./bin/elasticsearch
或者,您可以通過命令行或shell配置文件導(dǎo)出ES_PATH_CONF環(huán)境變量。
對(duì)于包分發(fā),配置目錄位置默認(rèn)為/etc/elasticsearch
。配置目錄的位置也可以通過ES_PATH_CONF
環(huán)境變量更改,但是請(qǐng)注意,僅在shell中設(shè)置是不夠的。相反,這個(gè)變量來源于/etc/default/elasticsearch
(用于Debian包)和/etc/sysconfig/elasticsearch
(用于RPM包)。您需要相應(yīng)地在其中一個(gè)文件中編輯ES_PATH_CONF=/etc/elasticsearch
條目,以更改配置目錄的位置。
配置文件格式
配置格式為YAML。下面是更改數(shù)據(jù)和日志目錄路徑的示例:
path:
data: /var/lib/elasticsearch
logs: /var/log/elasticsearch
設(shè)置也可以扁平化如下:
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
在YAML中,你可以將非標(biāo)量值格式化為序列:
discovery.seed_hosts:
- 192.168.1.10:9300
- 192.168.1.11
- seeds.mydomain.com
雖然不太常見,但你也可以將非標(biāo)量值格式化為數(shù)組:
discovery.seed_hosts: ["192.168.1.10:9300", "192.168.1.11", "seeds.mydomain.com"]
環(huán)境變量替換
使用${…}符號(hào)將被替換為環(huán)境變量的值。例如:
node.name: ${HOSTNAME}
network.host: ${ES_NETWORK_HOST}
環(huán)境變量的值必須是簡(jiǎn)單字符串。使用逗號(hào)分隔的字符串來提供Elasticsearch將解析為列表的值。例如,Elasticsearch將以下字符串分割為${HOSTNAME}
環(huán)境變量的值列表
export HOSTNAME=“host1,host2"
集群和節(jié)點(diǎn)設(shè)置類型
集群和節(jié)點(diǎn)設(shè)置可以根據(jù)配置方式進(jìn)行分類:
Dynamic
您可以使用集群更新設(shè)置API在運(yùn)行的集群上配置和更新動(dòng)態(tài)設(shè)置。您還可以使用elasticsearch.yml
在未啟動(dòng)或關(guān)閉的節(jié)點(diǎn)上本地配置動(dòng)態(tài)設(shè)置。
使用集群更新設(shè)置API進(jìn)行的更新可以是持久的(跨集群重啟應(yīng)用),也可以是短暫的(在集群重啟后重置)。您還可以通過使用API為臨時(shí)或持久設(shè)置賦值為空來重置它們。
如果您使用多個(gè)方法配置相同的設(shè)置,Elasticsearch將按照以下優(yōu)先順序應(yīng)用這些設(shè)置:
- 1.Transient setting(瞬態(tài)設(shè)置)
- 2.Persistent setting(持續(xù)設(shè)置)
- 3.elasticsearch.yml setting
- 4.Default setting value
例如,您可以應(yīng)用瞬變?cè)O(shè)置來覆蓋持久設(shè)置或elasticsearch.yml
設(shè)置。然而,對(duì)elasticsearch.yml
的更改,不會(huì)覆蓋已定義的瞬態(tài)或持久設(shè)置。
最好使用集群更新設(shè)置API設(shè)置動(dòng)態(tài)的集群范圍設(shè)置,并使用elasticsearch.yml
僅用于本地配置。使用集群更新設(shè)置API可以確保所有節(jié)點(diǎn)上的設(shè)置是相同的。如果您不小心在elasticsearch.yml
中配置了不同的設(shè)置。在不同的節(jié)點(diǎn)上,很難注意到差異。
Static
靜態(tài)設(shè)置只能在未啟動(dòng)或關(guān)閉的節(jié)點(diǎn)上使用elasticsearch.yml
進(jìn)行配置。
必須在集群中的每個(gè)相關(guān)節(jié)點(diǎn)上設(shè)置靜態(tài)設(shè)置
重要Elasticsearch配置
Elasticsearch開始時(shí)只需要很少的配置,但是在生產(chǎn)環(huán)境中使用集群之前,有很多方面需要考慮:
- Path settings
- Cluster name setting
- Node name setting
- Network host settings
- Discovery settings
- Heap size settings
- JVM heap dump path setting
- GC logging settings
- Temporary directory settings
- JVM fatal error log setting
-
Cluster backups
我們的Elastic Cloud服務(wù)自動(dòng)配置這些項(xiàng),使您的集群在默認(rèn)情況下處于生產(chǎn)就緒狀態(tài)。
Path settings[路徑設(shè)置]
Elasticsearch將創(chuàng)建索引的數(shù)據(jù)寫入索引,將數(shù)據(jù)流寫入數(shù)據(jù)目錄。Elasticsearch將自己的應(yīng)用程序日志(其中包含關(guān)于集群運(yùn)行狀況和操作的信息)寫入日志目錄
對(duì)于macOS .tar.gz、Linux .tar.gz和Windows .zip安裝,數(shù)據(jù)和日志默認(rèn)是$ES_HOME
的子目錄。但是,在升級(jí)過程中,$ES_HOME
中的文件有被刪除的風(fēng)險(xiǎn)
In production, we strongly recommend you set the path.data
and path.logs
in elasticsearch.yml
to locations outside of $ES_HOME
. Docker, Debian, RPM, macOS Homebrew, and Windows .msi
installations write data and log to locations outside of $ES_HOME
by default.
To avoid errors, only Elasticsearch should open files in the path.data
directory. Exclude the path.data
directory from other services that may open and lock its files, such as antivirus or backup programs.
Supported path.data
and path.logs
values vary by platform
Linux and macOS installations support Unix-style paths:
path:
data: /var/data/elasticsearch
logs: /var/log/elasticsearch
Windows installations support DOS paths with escaped backslashes:
path:
data: "C:\\Elastic\\Elasticsearch\\data"
logs: "C:\\Elastic\\Elasticsearch\\logs"
Cluster name setting[集群名稱設(shè)置]
只有當(dāng)一個(gè)節(jié)點(diǎn)與集群中的所有其他節(jié)點(diǎn)共享cluster.name
時(shí),該節(jié)點(diǎn)才能加入集群。默認(rèn)名稱是elasticsearch
,但是您應(yīng)該將其更改為描述集群用途的適當(dāng)名稱。
cluster.name: logging-prod
不要在不同的環(huán)境中重用相同的集群名稱。否則,節(jié)點(diǎn)可能會(huì)加入錯(cuò)誤的集群
Node name setting[節(jié)點(diǎn)名稱設(shè)置]
Elasticsearch使用 node.name
作為Elasticsearch特定實(shí)例的人類可讀標(biāo)識(shí)符。這個(gè)名稱包含在許多api的響應(yīng)中。當(dāng)Elasticsearch啟動(dòng)時(shí),節(jié)點(diǎn)名默認(rèn)為機(jī)器的主機(jī)名,但是可以在 elasticsearch.yml
中顯式配置
node.name: prod-data-2
Network host setting[網(wǎng)絡(luò)主機(jī)設(shè)置]
缺省情況下,Elasticsearch只綁定到127.0.0.1
和[::1]
等環(huán)回地址。這對(duì)于在單個(gè)服務(wù)器上運(yùn)行一個(gè)或多個(gè)節(jié)點(diǎn)的集群進(jìn)行開發(fā)和測(cè)試已經(jīng)足夠了,但是彈性生產(chǎn)集群必須包含其他服務(wù)器上的節(jié)點(diǎn)。有許多網(wǎng)絡(luò)設(shè)置,但通常你只需要配置network.host
:
network.host: 192.168.1.10
當(dāng)你為network.host
提供值時(shí)。Elasticsearch假定您正在從開發(fā)模式轉(zhuǎn)向生產(chǎn)模式,并將一些系統(tǒng)啟動(dòng)檢查從警告升級(jí)到異常。看看開發(fā)和生產(chǎn)模式之間的區(qū)別。
Discovery and cluster formation settings[發(fā)現(xiàn)和集群形成設(shè)置]
在投入生產(chǎn)之前,配置兩個(gè)重要的發(fā)現(xiàn)和集群形成設(shè)置,以便集群中的節(jié)點(diǎn)能夠相互發(fā)現(xiàn)并選擇一個(gè)主節(jié)點(diǎn)。
discovery.seed_hosts
Elasticsearch可以開箱即用,無需任何網(wǎng)絡(luò)配置,它將綁定到可用的環(huán)回地址,并掃描本地端口 9300
到9305
,以便與運(yùn)行在同一服務(wù)器上的其他節(jié)點(diǎn)連接。這種行為提供了一種無需進(jìn)行任何配置的自動(dòng)集群體驗(yàn)。
當(dāng)您希望與其他主機(jī)上的節(jié)點(diǎn)形成集群時(shí),使用 靜態(tài) discovery.seed_hosts
設(shè)置. This setting provides a list of other nodes in the cluster that are master-eligible and likely to be live and contactable to seed the discovery process.
此設(shè)置接受集群中所有符合主節(jié)點(diǎn)的地址的YAML序列或數(shù)組。每個(gè)地址可以是一個(gè)IP地址,也可以是通過DNS解析為一個(gè)或多個(gè)IP地址的主機(jī)名。
discovery.seed_hosts:
- 192.168.1.10:9300
- 192.168.1.11
- seeds.mydomain.com
- [0:0:0:0:0:ffff:c0a8:10c]:9301
-
192.168.1.11
該端口是可選的,默認(rèn)為9300,但可以覆蓋。 -
seeds.mydomain.com
如果一個(gè)主機(jī)名解析為多個(gè)IP地址,該節(jié)點(diǎn)將嘗試在所有解析地址上發(fā)現(xiàn)其他節(jié)點(diǎn)。 -
[0:0:0:0:0:ffff:c0a8:10c]:9301
IPv6地址必須用方括號(hào)括起來。
如果符合主節(jié)點(diǎn)條件的節(jié)點(diǎn)沒有固定的名稱或地址,則使用替代主機(jī)提供程序動(dòng)態(tài)查找它們的地址。
cluster.initial_master_nodes
當(dāng)您第一次啟動(dòng)Elasticsearch集群時(shí),集群引導(dǎo)步驟將確定在第一次選舉中計(jì)票的符合主資格的節(jié)點(diǎn)集。在開發(fā)模式下,如果沒有配置發(fā)現(xiàn)設(shè)置,這個(gè)步驟將由節(jié)點(diǎn)自己自動(dòng)執(zhí)行。
因?yàn)樽詣?dòng)引導(dǎo)本身就不安全,,所以在生產(chǎn)模式下啟動(dòng)新集群時(shí),必須顯式列出符合主資格的節(jié)點(diǎn),這些節(jié)點(diǎn)的投票應(yīng)該在第一次選舉中計(jì)算。您可以使用集群設(shè)置此列表。initial_master_nodes
設(shè)置。
在集群第一次成功形成之后,刪除每個(gè)節(jié)點(diǎn)配置中的Initial_master_nodes
設(shè)置。在重新啟動(dòng)集群或向現(xiàn)有集群添加新節(jié)點(diǎn)時(shí),不要使用此設(shè)置。
discovery.seed_hosts:
- 192.168.1.10:9300
- 192.168.1.11
- seeds.mydomain.com
- [0:0:0:0:0:ffff:c0a8:10c]:9301
cluster.initial_master_nodes:
- master-node-a
- master-node-b
- master-node-c
cluster.initial_master_nodes
通過節(jié)點(diǎn)的node.name
標(biāo)識(shí)初始主節(jié)點(diǎn), 該節(jié)點(diǎn)默認(rèn)為主節(jié)點(diǎn)的主機(jī)名。請(qǐng)確保cluster.initial_master_nodes
值 與node.name
完全匹配如果您使用完全限定的域名(FQDN),例如master-node-a.example.com作為您的節(jié)點(diǎn)名,那么您必須在此列表中使用FQDN。相反,如果node.name是沒有任何尾隨限定符的裸主機(jī)名,您也必須省cluster.initial_master_nodes中的尾隨限定符如果您使用完全限定的域名(FQDN),例如 master-node-a.example.com
作為您的節(jié)點(diǎn)名, 那么您必須在此列表中使用FQDN。相反,如果f node.name
是沒有任何尾隨限定符的裸主機(jī)名,您也必須省略 cluster.initial_master_nodes
中的尾隨限定符。
請(qǐng)參見 bootstrapping a cluster 以及發(fā)現(xiàn)和集群形成設(shè)置.
Heap size settings[堆大小設(shè)置]
默認(rèn)情況下,Elasticsearch會(huì)根據(jù)節(jié)點(diǎn)的角色和總內(nèi)存自動(dòng)設(shè)置JVM堆大小。對(duì)于大多數(shù)生產(chǎn)環(huán)境,我們建議使用默認(rèn)大小。
自動(dòng)堆大小需要 bundled JDK ,如果使用自定義JRE位置,則需要Java 14或更高版本的JRE。
如果需要,您可以通過手動(dòng)設(shè)置JVM堆大小來覆蓋默認(rèn)大小
JVM heap dump path setting[JVM堆轉(zhuǎn)儲(chǔ)路徑設(shè)置]
默認(rèn)情況下,Elasticsearch將JVM配置為將堆內(nèi)存溢出異常轉(zhuǎn)儲(chǔ)到默認(rèn)數(shù)據(jù)目錄。在RPM和Debian軟件包中,數(shù)據(jù)目錄是/var/lib/elasticsearch。在Linux、MacOS和Windows發(fā)行版上,數(shù)據(jù)目錄位于Elasticsearch安裝的根目錄下。
如果此路徑不適合接收堆轉(zhuǎn)儲(chǔ),請(qǐng)修改 -XX:HeapDumpPath=…
jvm.options
- 如果您指定了一個(gè)目錄,那么JVM將根據(jù)運(yùn)行實(shí)例的PID為堆轉(zhuǎn)儲(chǔ)生成一個(gè)文件名
- 如果指定固定的文件名而不是目錄,那么當(dāng)JVM需要對(duì)內(nèi)存不足異常執(zhí)行堆轉(zhuǎn)儲(chǔ)時(shí),該文件一定不存在。否則,堆轉(zhuǎn)儲(chǔ)將失敗
GC logging settings[GC日志記錄設(shè)置]
默認(rèn)情況下,Elasticsearch啟用垃圾收集(GC)日志。這些是在jvm中配置的 jvm.options
并輸出到與Elasticsearch日志相同的默認(rèn)位置。默認(rèn)配置每64mb輪換一次日志,最多可以消耗2gb的磁盤空間。
您可以使用JEP 158: Unified JVM Logging中描述的命令行選項(xiàng)重新配置JVM日志。除非您更改了默認(rèn)jvm。選項(xiàng)文件,Elasticsearch默認(rèn)配置將應(yīng)用于您自己的設(shè)置之外。要禁用默認(rèn)配置,首先通過提供 -Xlog:disable
選項(xiàng)禁用日志記錄,然后提供您自己的命令行選項(xiàng)。這將禁用所有JVM日志記錄,因此一定要檢查可用選項(xiàng)并啟用所需的所有內(nèi)容。
要查看原始JEP中未包含的其他選項(xiàng),請(qǐng)參見使用 JVM統(tǒng)一日志框架啟用日志記錄.
Examples
Change the default GC log output location to /opt/my-app/gc.log by creating $ES_HOME/config/jvm.options.d/gc.options with some sample options:
# Turn off all previous logging configuratons
-Xlog:disable
# Default settings from JEP 158, but with `utctime` instead of `uptime` to match the next line
-Xlog:all=warning:stderr:utctime,level,tags
# Enable GC logging to a custom location with a variety of options
-Xlog:gc*,gc+age=trace,safepoint:file=/opt/my-app/gc.log:utctime,pid,tags:filecount=32,filesize=64m
Configure an Elasticsearch Docker container to send GC debug logs to standard error (stderr
). This lets the container orchestrator handle the output. If using the ES_JAVA_OPTS
environment variable, specify:
MY_OPTS="-Xlog:disable -Xlog:all=warning:stderr:utctime,level,tags -Xlog:gc=debug:stderr:utctime"
docker run -e ES_JAVA_OPTS="$MY_OPTS" # etc
Temporary directory settings[臨時(shí)目錄設(shè)置]
默認(rèn)情況下,Elasticsearch使用啟動(dòng)腳本直接在系統(tǒng)臨時(shí)目錄下創(chuàng)建的私有臨時(shí)目錄。
在某些Linux發(fā)行版上,如果最近沒有訪問過/tmp中的文件和目錄,系統(tǒng)實(shí)用程序?qū)⑶宄鼈儭H绻枰R時(shí)目錄的特性長(zhǎng)時(shí)間不使用,那么在Elasticsearch運(yùn)行時(shí),這種行為會(huì)導(dǎo)致私有臨時(shí)目錄被刪除。如果隨后使用需要此目錄的特性,則刪除私有臨時(shí)目錄會(huì)導(dǎo)致問題。
如果您使用.deb或.rpm包安裝Elasticsearch,并在systemd下運(yùn)行它,那么Elasticsearch使用的私有臨時(shí)目錄將被排除在定期清理之外。
如果您打算在Linux或MacOS上長(zhǎng)時(shí)間運(yùn)行.tar.gz發(fā)行版,請(qǐng)考慮為Elasticsearch創(chuàng)建一個(gè)專用的臨時(shí)目錄,該目錄不在將舊文件和目錄清除的路徑下。這個(gè)目錄應(yīng)該設(shè)置權(quán)限,以便只有作為Elasticsearch運(yùn)行的用戶才能訪問它。然后,在啟動(dòng)Elasticsearch之前,設(shè)置$ES_TMPDIR環(huán)境變量指向這個(gè)目錄。
JVM fatal error log setting[JVM致命錯(cuò)誤日志設(shè)置]
默認(rèn)情況下,Elasticsearch將JVM配置為將致命錯(cuò)誤日志寫入默認(rèn)日志目錄。對(duì)于 RPM 和Debian 軟件包, 這個(gè)目錄是 /var/log/elasticsearch
. On Linux and MacOS and Windows 發(fā)行版, logs
目錄位于Elasticsearch安裝根目錄下。
這些日志是JVM遇到致命錯(cuò)誤(例如分段錯(cuò)誤)時(shí)產(chǎn)生的。如果此路徑不適合接收日志,請(qǐng)修改-XX:ErrorFile=...
在jvm.options
條目。
Cluster backups[集群備份]
在災(zāi)難中,快照可以防止數(shù)據(jù)永久丟失。快照生命周期管理是對(duì)集群進(jìn)行定期備份的最簡(jiǎn)單方法。有關(guān)更多信息,請(qǐng)參見備份集群。
在災(zāi)難中, 快照可以防止數(shù)據(jù)永久丟失. 快照生命周期管理 是對(duì)集群進(jìn)行定期備份的最簡(jiǎn)單方法. 有關(guān)更多信息, 請(qǐng)參見備份集群。
備份集群的唯一可靠和受支持的方法是使用快照。您不能通過復(fù)制Elasticsearch集群節(jié)點(diǎn)的數(shù)據(jù)目錄來備份該集群。不支持從文件系統(tǒng)級(jí)備份恢復(fù)任何數(shù)據(jù)的方法。如果試圖從這樣的備份恢復(fù)集群,可能會(huì)出現(xiàn)損壞、丟失文件或其他數(shù)據(jù)不一致的報(bào)告,或者看起來已經(jīng)成功地悄無聲息地丟失了一些數(shù)據(jù)。
Secure settings安全設(shè)置
有些設(shè)置是敏感的,僅依靠文件系統(tǒng)權(quán)限來保護(hù)它們的值是不夠的。對(duì)于這個(gè)用例,Elasticsearch提供了一個(gè)密鑰存儲(chǔ)庫(kù)和elasticsearch -keystore
工具來管理密鑰存儲(chǔ)庫(kù)中的設(shè)置。
只有一些設(shè)置被設(shè)計(jì)為從密鑰存儲(chǔ)庫(kù)中讀取。但是,密鑰存儲(chǔ)庫(kù)沒有驗(yàn)證來阻止不支持的設(shè)置。向密鑰存儲(chǔ)庫(kù)添加不支持的設(shè)置會(huì)導(dǎo)致Elasticsearch啟動(dòng)失敗。要查看密鑰存儲(chǔ)庫(kù)中是否支持某個(gè)設(shè)置,請(qǐng)查找設(shè)置引用的“Secure”限定符。
只有重新啟動(dòng)Elasticsearch后,對(duì)keystore的所有修改才會(huì)生效。
這些設(shè)置就像elasticsearch中的常規(guī)設(shè)置一樣。Yml配置文件,需要在集群中的每個(gè)節(jié)點(diǎn)上指定。目前,所有安全設(shè)置都是特定于節(jié)點(diǎn)的設(shè)置,在每個(gè)節(jié)點(diǎn)上必須具有相同的值。
Reloadable secure settings可寫安全設(shè)置
Just like the settings values in elasticsearch.yml
, 對(duì)密鑰存儲(chǔ)庫(kù)內(nèi)容的更改不會(huì)自動(dòng)應(yīng)用到運(yùn)行的Elasticsearch節(jié)點(diǎn)。重新讀取設(shè)置需要重新啟動(dòng)節(jié)點(diǎn)。但是,某些安全設(shè)置被標(biāo)記為可重新加載。. Such settings can be re-read and applied on a running node.
所有安全設(shè)置的值(無論是否可重新加載)必須在所有集群節(jié)點(diǎn)上相同。在進(jìn)行所需的安全設(shè)置更改后,使用 bin/elasticsearch-keystore add
命令, call:
POST _nodes/reload_secure_settings
{
"secure_settings_password": "keystore-password"
}
keystore-password
: 用于加密Elasticsearch密鑰庫(kù)的密碼
此API在每個(gè)集群節(jié)點(diǎn)上解密并重新讀取整個(gè)密鑰存儲(chǔ)庫(kù),但只應(yīng)用可重新加載的安全設(shè)置。對(duì)其他設(shè)置的更改直到下次重啟才會(huì)生效。一旦調(diào)用返回,重新加載就完成了,這意味著依賴于這些設(shè)置的所有內(nèi)部數(shù)據(jù)結(jié)構(gòu)都已更改。所有的設(shè)置都應(yīng)該從一開始就具有新值。
當(dāng)更改多個(gè)可重新加載的安全設(shè)置時(shí),在每個(gè)集群節(jié)點(diǎn)上修改所有安全設(shè)置,然后發(fā)出reload_secure_settings
調(diào)用,而不是在每次修改后重新加載。
有可重新加載的安全設(shè)置: