一、概述
本篇參考鏈接:
https://www.elastic.co/guide/en/elasticsearch/reference/current/setup.html
es各個(gè)版本所支持的操作系統(tǒng)清單見下面鏈接:
https://www.elastic.co/cn/support/matrix
這里不做安裝的介紹,涉及如下內(nèi)容
- 配置ES
二、Configuring Elasticsearch 配置ES
官方說(shuō)默認(rèn)配置已經(jīng)優(yōu)化的不錯(cuò)了,稍微改點(diǎn)兒就得了,而且大部分的配置可以通過
Cluster Update Settings API進(jìn)行修改
ES有三個(gè)配置文件:
- elasticsearch.yml es基礎(chǔ)配置
- jvm.options jvm配置
- log4j2.properties 日志配置
默認(rèn)的配置文件路徑在$ES_HOME/config,也可以通過修改ES_PATH_CONF環(huán)境變量來(lái)執(zhí)行配置文件的路徑,例:export ES_PATH_CONF=/path/to/my/config. ./bin/elasticsearch
配置文件采用YAML的格式
1、各種配置:
后續(xù)用到了再詳細(xì)看吧
- 1、Setting JVM options
官網(wǎng)講,一般不用你配置,一般要調(diào)整的是heap size,堆的大小
有幾個(gè)約定的東西:
#表示JDK8啟用
8:-Xmx2g
#表示JDK版本大于8啟用
8-:-Xmx2g
#表示JDK版本大于介于8和9之間啟用
8-9:-Xmx2g
另一種指定JVM參數(shù)的方式是添加環(huán)境變量 ES_JAVA_OPTS,例子:
export ES_JAVA_OPTS="$ES_JAVA_OPTS -Djava.io.tmpdir=/path/to/temp/dir"
./bin/elasticsearch
- 2、Secure settings
有一些敏感的配置不行暴露,可以用elasticsearch-keystore進(jìn)行管理 - 3、Logging configuration
- 4、Auditing settings
- 5、Cross-cluster replication settings
- 6、Index lifecycle management settings
- 7、License settings
- 8、Machine learning settings
- 9、Monitoring settings
- 10、Monitoring settings
- 11、Security settings
- 12、SQL access settings
- 13、Watcher settings
三、Important Elasticsearch configuration 重要配置
在上生產(chǎn)之前,下面幾個(gè)配置是需要考慮的:
1、Path settings 路徑配置
path.data 和 path.log是必須配置的,而且可以配置多個(gè)路徑,以path.data為例
path:
data:
- /mnt/elasticsearch_1
- /mnt/elasticsearch_2
- /mnt/elasticsearch_3
2、cluster.name 集群名稱
默認(rèn)為elasticsearch,用于集群的管理
3、network.host 節(jié)點(diǎn)的IP
用于其他節(jié)點(diǎn)發(fā)現(xiàn)或者連接
4、Discovery and cluster formation settings 集群發(fā)現(xiàn)配置
下面兩個(gè)配置主要用于集群見發(fā)現(xiàn)及master的選舉
- discovery.seed_hosts
默認(rèn)配置下,會(huì)從本機(jī)找本機(jī)9300 ~ 9305端口的es實(shí)例,但是生產(chǎn)上一般是不同的host,這個(gè)時(shí)候就需要手工指定集群中所有可能成為master的節(jié)點(diǎn),格式為host1:port1,host2:port2(逗號(hào)分隔),也可以不寫port,這時(shí)候會(huì)使用transport.profiles.default.port,如果這個(gè)也沒有,那么會(huì)使用默認(rèn)的transport.port,如果使用IPV6,則需要用括號(hào)包起來(lái) - cluster.initial_master_nodes
生產(chǎn)模式下,第一次啟動(dòng)的時(shí)候要指定可能成為master的node
例子:
discovery.seed_hosts:
- 192.168.1.10:9300
- 192.168.1.11
- seeds.mydomain.com
cluster.initial_master_nodes:
- master-node-a
- master-node-b
- master-node-c
這個(gè)配置在搭建集群的時(shí)候詳細(xì)講解,這里不過多深入
5、Setting the heap size 設(shè)置堆內(nèi)存大小
- Xmx 和 Xms設(shè)置成物理內(nèi)存的一半(50%),因?yàn)镋S還會(huì)使用額外的內(nèi)存做一些操作,會(huì)利用操作系統(tǒng)的緩存來(lái)優(yōu)化文件的讀取,降低網(wǎng)絡(luò)的開銷,這些都會(huì)耗費(fèi)額外的內(nèi)存
- 大小不要超過JVM的瓶頸(大約32GB)
- 不要超過zero-based compressed oops的大小
可以設(shè)置-XX:+UnlockDiagnosticVMOptions -XX:+PrintCompressedOopsMode來(lái)觀察zero-based compressed oops的大小,通常26GB是最佳選擇,原則上最大不超過30GB,CompressedOopsMode至少需要4G內(nèi)存,所以,如果分配給ES的內(nèi)存小于4GB,是不會(huì)啟用Oops的
6、JVM heap dump path
可以在 jvm.options 中通過 -XX:HeapDumpPath=xxxxx來(lái)指定
7、GC logging
ES默認(rèn)打開GC logging,每個(gè)日志文件64MB,最多2GB,超過2GB,覆蓋原有日志
8、Temp directory
es啟動(dòng)的時(shí)候會(huì)在系統(tǒng)的臨時(shí)目錄下建立es專用的臨時(shí)目錄,但是有些linux發(fā)行版本會(huì)定時(shí)清理,這個(gè)不是我們想看到的,所以最好指定一個(gè)es的專用臨時(shí)目錄,可以通過 $es_tmpdir 環(huán)境變量來(lái)指定,并且設(shè)置只有啟動(dòng)es的用戶可以訪問。
9、JVM fatal error logs
JVM致命錯(cuò)誤日志,可以通過修改 jvm.options中的-XX:ErrorFile=xxxx來(lái)指定
四、Important System Configuration 重要的系統(tǒng)設(shè)置
1、Configuring system settings 系統(tǒng)設(shè)置
- ulimit設(shè)置
設(shè)置linux允許打開的文件個(gè)數(shù)的限制 ulimit -n 65535
永久修改:/etc/security/limits.conf 增加:elasticsearch - nofile 65535
elasticsearch 為啟動(dòng)es的用戶
2、Disable swapping 禁用swapping
這個(gè)東西會(huì)增加JVM進(jìn)行GC的持續(xù)時(shí)間,機(jī)器反應(yīng)慢,甚至宕機(jī)
禁用swap的幾種方式
- Disable all swap files
臨時(shí)設(shè)置:sudo swapoff -a
永久設(shè)置:修改 /etc/fstab ,將所有含有 swap 的行注釋掉 - Configure swappiness
將 vm.swappiness 設(shè)置為 1 - Enable bootstrap.memory_lock 鎖定es使用的內(nèi)存不被swap
在config/elasticsearch.yml中新增一行:bootstrap.memory_lock: true
切記這個(gè)鎖住的內(nèi)存不能大于JVM的能力,否則會(huì)啟動(dòng)失敗
啟動(dòng)后可以用下面的命令查詢狀態(tài)
GET _nodes?filter_path=**.mlockall
3、File descriptors 設(shè)置
修改/etc/security/limits.conf,增加ulimit -n 65535或者將nofile 設(shè)置為65535
可以通過下面的命令查看設(shè)置
GET _nodes/stats/process?filter_path=**.max_file_descriptors
4、Virtual memory 虛擬內(nèi)存設(shè)置
es默認(rèn)使用mmapfs路徑存儲(chǔ)索引,系統(tǒng)中mmap的設(shè)置太低,需要加大
- 臨時(shí)設(shè)置:sysctl -w vm.max_map_count=262144
- 永久設(shè)置:修改/etc/sysctl.conf,修改 vm.max_map_count
5、Number of threads 線程數(shù)量設(shè)置
修改/etc/security/limits.conf,將nproc設(shè)置為4096 (這個(gè)值是es推薦的)
6、DNS cache settings
7、JNA temporary directory not mounted with noexec
五、Bootstrap Checks 啟動(dòng)前的檢查
一旦設(shè)置了transport.host(不是localhost或者127.0.0.1),es認(rèn)為你啟用了生產(chǎn)模式,生產(chǎn)模式就會(huì)啟用Bootstrap Checks,如果不符合,則拒絕啟動(dòng)
- Single-node discovery
將 discovery.type 修改為 single-node即可,這種情況下,不會(huì)進(jìn)行檢查 - Force the bootstrap checks 強(qiáng)制檢查
如果設(shè)置了single-node discovery,但是又想檢查,可以設(shè)置給ES_JAVA_OPTS環(huán)境變量增加一條:-Des.enforce.bootstrap.checks=true
1、heap size check
會(huì)檢查 -Xms與-Xmx是否一致,不一致巴拉巴拉會(huì)產(chǎn)生一堆問題等等
2、File descriptors check
3、Memory lock check
在做Full GC的時(shí)候,JVM會(huì)檢查所有的heap,如果這些heap的一部分被swap出去,則需要在GC的時(shí)候先swap回來(lái),這樣會(huì)增加系統(tǒng)間的文件傳輸?shù)拈_銷,所以會(huì)檢查bootstrap.memory_lock
4、Maximum number of theads check
5、Max file size check
6、Maximum size virtual memory check
7、Maximum map count check
8、Client JVM check
9、Use serial collector check
杜絕使用 serial collector,使用CMS,并發(fā)垃圾回收機(jī)制