title: elasticsearch高級配置
date: 2020-10-16 09:00:39
categories: elk
tags:
- 配置
- elasticsearch
大多數(shù)設(shè)置可以使用 集群更新API來更改
Elasticsearch提供了三個主要的配置文件,我們所有的配置都通過這個三個文件:
- Elasticsearch配置文件:elasticsearch.yml
- jvm配置文件:jvm.options
- 日志配置文件:log4j2.properties
1、設(shè)置JVM選項
您應(yīng)該很少需要更改Java虛擬機(JVM)選項。如果這樣做,最可能的更改是設(shè)置堆大小。
-
<font color="501818">堆大小</font>
默認情況下,Elasticsearch告訴JVM使用最小和最大大小為1 GB的堆。遷移到生產(chǎn)環(huán)境時,配置堆大小以確保 Elasticsearch有足夠的堆可用是很重要的。
1、將最小堆大?。╔ms)和最大堆大?。╔mx)設(shè)置為彼此相等
2、lasticsearch可用的堆越多,它可用于緩存的內(nèi)存就越多。但請注意,過多的堆可能會使您陷入長時間的垃圾收集暫停。
3、設(shè)置Xmx為不超過物理RAM的50%,以確保有足夠的物理RAM留給內(nèi)核文件系統(tǒng)緩存。
4、不要設(shè)置Xmx為JVM用于壓縮對象指針(壓縮oops)的截止值以上; 確切的截止值變化接近32 GB,大多數(shù)是26GB。
設(shè)置方式
-
修改jvm.option
-Xms2g
-Xmx2g -
在啟動elasticsearch時加入?yún)?shù)
ES_JAVA_OPTS="-Xms2g -Xmx2g" ./bin/elasticsearch
ES_JAVA_OPTS="-Xms4000m -Xmx4000m" ./bin/elasticsearch
-
<font color="501818">10. 堆轉(zhuǎn)儲路徑</font>
默認情況,配置jvm存儲堆棧溢出到data文件夾里,如果該目錄不支持則需要修改。
<font color="501818">11. GC記錄</font>
默認情況下,Elasticsearch啟用GC日志。這些配置在 jvm.options默認位置和默認位置與Elasticsearch日志相 同。默認 配置每64 MB輪換一次日志,最多可占用2 GB的磁盤空間。
2、安全設(shè)置:
某些設(shè)置是敏感的,依靠文件系統(tǒng)權(quán)限來保護其值是不夠的。對于此用例,Elasticsearch提供了一個密鑰庫和elasticsearch-keystore管理密鑰庫中設(shè)置的工具。
3、elasticsearch.yml設(shè)置
在投入生產(chǎn)之前,必須考慮以下設(shè)置:
<font color="501818">1.路徑設(shè)置</font>
主要是數(shù)據(jù)和日志路徑
path:
logs: /var/log/elasticsearch
data: /var/data/elasticsearch
對于數(shù)據(jù),可以有多個路徑如:
path:
data:
- /mnt/elasticsearch_1
- /mnt/elasticsearch_2
- /mnt/elasticsearch_3
data中生成目錄形式:elasticsearch/nodes/0/indices/uuid/shard/
- indices下是以各個索引的uuid命名的文件夾
- shard,同一個分片會被分配到同一個目錄
<font color="501818">2. 群集名稱</font>
這是節(jié)點加入集群的唯一方法,默認的是elasticsearch
<font color="501818">3. 節(jié)點名稱</font>
節(jié)點名稱有助于區(qū)別不同類型(可以使用環(huán)境變量如 node.name: ${HOSTNAME})
<font color="501818">4. 網(wǎng)絡(luò)主機 network.host</font>
一般設(shè)置本機ip ,一旦設(shè)置為非回環(huán)地址,即默認視為生產(chǎn)模式,就需要注意系統(tǒng)配置
一旦配置了類似的網(wǎng)絡(luò)設(shè)置network.host,Elasticsearch就會假定您正在轉(zhuǎn)向生產(chǎn)并將上述警告升級為異常。這些異常將阻止您的Elasticsearch節(jié)點啟動。這是一項重要的安全措施,可確保您不會因服務(wù)器配置錯誤而丟失數(shù)據(jù)。
<font color="501818">5. 發(fā)現(xiàn)設(shè)置</font>
discovery.zen.ping.unicast.hosts:
- 192.168.1.10:9300
- 192.168.1.11 ①
- seeds.mydomain.com ②
①:如果不指定port,則會使用transport.tcp.port
②:如果是多個ip的主機,則會訪問所有解析到的ip
discovery.zen.minimum_master_nodes
最好為 (master_eligible_nodes / 2)+ 1 3個節(jié)點的情況設(shè)置2個
3、系統(tǒng)設(shè)置
<font color="501818">1. 資源限制:</font>
要將打開文件句柄(ulimit -n)的數(shù)量設(shè)置為65,536 /etc/security/limits.conf
<font color="501818">2. Disable swapping</font>
交換對性能,節(jié)點穩(wěn)定性非常不利,應(yīng)該不惜一切代價避免。它可能導(dǎo)致垃圾收集持續(xù)數(shù)分鐘而不是毫秒,并且可能導(dǎo)致節(jié)點響應(yīng)緩慢甚至斷開與群集的連接。在彈性分布式系統(tǒng)中,讓操作系統(tǒng)終止節(jié)點更有效。
三種方案:
- 禁用所有的交換 臨時:sudo swapoff -a 永久修改: 在/etc/fstab 注釋掉所有包含swap的行
- 配置swappiness
設(shè)置 sysctl 中 vm.swappiness =1 這降低了內(nèi)核交換的傾向,在正常情況下不應(yīng)導(dǎo)致交換,同時仍允許整個系統(tǒng)在緊急情況下交換。 - 啟用bootstrap.memory_lock
修改 config/elasticsearch.yml:bootstrap.memory_lock: true
<font color="501818">3. Increase file descriptors</font>
Elasticsearch使用大量文件描述符或文件句柄。用完文件描述符可能是災(zāi)難性的,最有可能導(dǎo)致數(shù)據(jù)丟失。確保將運行 Elasticsearch的用戶的打開文件描述符數(shù)量限制增加到65,536或更高。
/etc/security/limits.conf
<font color="501818">4. Ensure sufficient virtual memory</font>
可以設(shè)置存儲方式(fs、simplefs、niofs、mmapfs),默認Elasticsearch會選擇最佳的存儲方式,
Elasticsearch 默認使用mmapfs文件夾存儲索引 ,操作系統(tǒng)mmap計數(shù)的默認限制可能太低,這可能導(dǎo)致內(nèi)存不足異常。
臨時修改: sysctl -w vm.max_map_count = 262144
永久修改:/etc/sysctl.conf
<font color="501818">5. Ensure sufficient threads</font>
Elasticsearch為不同類型的操作使用了許多線程池。重要的是它能夠在需要時創(chuàng)建新線程。確保Elasticsearch用戶可以創(chuàng)建的線程數(shù)至少為4096。
臨時: ulimit -u 4096
永久: /etc/security/limits.conf.
<font color="501818">6. JVM DNS cache settings</font>
<font color="501818">7. Temporary directory not mounted with noexec</font>
<font color="501818">8. 臨時目錄</font>
默認情況,Elasticsearch 使用一個私有的臨時文件夾來存儲歷史腳本
在一些linux版本中,會自動清除在一段時間內(nèi)沒有被訪問到的文件,所以對于Elasticsearch來說是致命的
如果安裝.tar.gz在Linux 上運行分發(fā)一段時間,那么您應(yīng)該考慮為Elasticsearch創(chuàng)建一個專用的臨時目錄,該目錄不在 將從中清除舊文件和目錄的路徑下。此目錄應(yīng)具有權(quán)限集,以便只有運行Elasticsearch的用戶才能訪問它。然后 $ES_TMPDIR在啟動Elasticsearch之前將環(huán)境變量設(shè)置 為指向它。
3、安全設(shè)置
Generate a private key and X.509 certificate.
生成節(jié)點證書
創(chuàng)建一個一個整數(shù)頒發(fā)機構(gòu),命令 :
bin/elasticsearch-certutil ca
您可以將群集配置為信任具有此CA已簽名的證書的所有節(jié)點。
這個命令生成一個單獨的文件(默認名稱是elastic-stack-ca.p12)該文件是PKCS#12密鑰庫,包含CA的公共證書以及用于為每個節(jié)點簽名證書的私鑰。-
為群集中的每個節(jié)點生成證書和私鑰。
bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
輸出是單個PKCS#12密鑰庫,包括節(jié)點證書,節(jié)點密鑰和CA證書。
將節(jié)點證書復(fù)制到適當?shù)奈恢谩?/p>
將elastic-stack-ca.p12和elastic-certificates.p12復(fù)制到其他節(jié)點
-
配置elasticsearch.yml文件:
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: certs/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: certs/elastic-certificates.p12
設(shè)置密碼
-
報錯
{ "error": { "root_cause": [ { "type": "security_exception", "reason": "current license is non-compliant for [security]", "license.expired.feature": "security" } ], "type": "security_exception", "reason": "current license is non-compliant for [security]", "license.expired.feature": "security" }, "status": 403 }
<font color="blue">結(jié)論:</font> 開源基礎(chǔ)版,無法使用安全功能