一贿肩、概述
本篇參考鏈接:
https://www.elastic.co/guide/en/elasticsearch/reference/current/setup.html
es各個版本所支持的操作系統(tǒng)清單見下面鏈接:
https://www.elastic.co/cn/support/matrix
這里不做安裝的介紹座哩,涉及如下內容
- 配置ES
二、Configuring Elasticsearch 配置ES
官方說默認配置已經優(yōu)化的不錯了趣席,稍微改點兒就得了兵志,而且大部分的配置可以通過
Cluster Update Settings API進行修改
ES有三個配置文件:
- elasticsearch.yml es基礎配置
- jvm.options jvm配置
- log4j2.properties 日志配置
默認的配置文件路徑在$ES_HOME/config,也可以通過修改ES_PATH_CONF環(huán)境變量來執(zhí)行配置文件的路徑宣肚,例:export ES_PATH_CONF=/path/to/my/config. ./bin/elasticsearch
配置文件采用YAML的格式
1想罕、各種配置:
后續(xù)用到了再詳細看吧
- 1、Setting JVM options
官網講霉涨,一般不用你配置按价,一般要調整的是heap size惭适,堆的大小
有幾個約定的東西:
#表示JDK8啟用
8:-Xmx2g
#表示JDK版本大于8啟用
8-:-Xmx2g
#表示JDK版本大于介于8和9之間啟用
8-9:-Xmx2g
另一種指定JVM參數的方式是添加環(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進行管理 - 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 重要配置
在上生產之前嗡载,下面幾個配置是需要考慮的:
1窑多、Path settings 路徑配置
path.data 和 path.log是必須配置的,而且可以配置多個路徑洼滚,以path.data為例
path:
data:
- /mnt/elasticsearch_1
- /mnt/elasticsearch_2
- /mnt/elasticsearch_3
2埂息、cluster.name 集群名稱
默認為elasticsearch,用于集群的管理
3遥巴、network.host 節(jié)點的IP
用于其他節(jié)點發(fā)現或者連接
4千康、Discovery and cluster formation settings 集群發(fā)現配置
下面兩個配置主要用于集群見發(fā)現及master的選舉
- discovery.seed_hosts
默認配置下,會從本機找本機9300 ~ 9305端口的es實例铲掐,但是生產上一般是不同的host拾弃,這個時候就需要手工指定集群中所有可能成為master的節(jié)點,格式為host1:port1,host2:port2(逗號分隔)摆霉,也可以不寫port砸彬,這時候會使用transport.profiles.default.port,如果這個也沒有斯入,那么會使用默認的transport.port砂碉,如果使用IPV6,則需要用括號包起來 - cluster.initial_master_nodes
生產模式下刻两,第一次啟動的時候要指定可能成為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
這個配置在搭建集群的時候詳細講解增蹭,這里不過多深入
5、Setting the heap size 設置堆內存大小
- Xmx 和 Xms設置成物理內存的一半(50%)磅摹,因為ES還會使用額外的內存做一些操作滋迈,會利用操作系統(tǒng)的緩存來優(yōu)化文件的讀取霎奢,降低網絡的開銷,這些都會耗費額外的內存
- 大小不要超過JVM的瓶頸(大約32GB)
- 不要超過zero-based compressed oops的大小
可以設置-XX:+UnlockDiagnosticVMOptions -XX:+PrintCompressedOopsMode來觀察zero-based compressed oops的大小饼灿,通常26GB是最佳選擇幕侠,原則上最大不超過30GB,CompressedOopsMode至少需要4G內存碍彭,所以晤硕,如果分配給ES的內存小于4GB,是不會啟用Oops的
6庇忌、JVM heap dump path
可以在 jvm.options 中通過 -XX:HeapDumpPath=xxxxx來指定
7舞箍、GC logging
ES默認打開GC logging,每個日志文件64MB皆疹,最多2GB疏橄,超過2GB,覆蓋原有日志
8略就、Temp directory
es啟動的時候會在系統(tǒng)的臨時目錄下建立es專用的臨時目錄捎迫,但是有些linux發(fā)行版本會定時清理,這個不是我們想看到的表牢,所以最好指定一個es的專用臨時目錄立砸,可以通過 $es_tmpdir 環(huán)境變量來指定,并且設置只有啟動es的用戶可以訪問初茶。
9颗祝、JVM fatal error logs
JVM致命錯誤日志,可以通過修改 jvm.options中的-XX:ErrorFile=xxxx來指定
四恼布、Important System Configuration 重要的系統(tǒng)設置
1螺戳、Configuring system settings 系統(tǒng)設置
- ulimit設置
設置linux允許打開的文件個數的限制 ulimit -n 65535
永久修改:/etc/security/limits.conf 增加:elasticsearch - nofile 65535
elasticsearch 為啟動es的用戶
2、Disable swapping 禁用swapping
這個東西會增加JVM進行GC的持續(xù)時間折汞,機器反應慢倔幼,甚至宕機
禁用swap的幾種方式
- Disable all swap files
臨時設置:sudo swapoff -a
永久設置:修改 /etc/fstab ,將所有含有 swap 的行注釋掉 - Configure swappiness
將 vm.swappiness 設置為 1 - Enable bootstrap.memory_lock 鎖定es使用的內存不被swap
在config/elasticsearch.yml中新增一行:bootstrap.memory_lock: true
切記這個鎖住的內存不能大于JVM的能力爽待,否則會啟動失敗
啟動后可以用下面的命令查詢狀態(tài)
GET _nodes?filter_path=**.mlockall
3损同、File descriptors 設置
修改/etc/security/limits.conf,增加ulimit -n 65535或者將nofile 設置為65535
可以通過下面的命令查看設置
GET _nodes/stats/process?filter_path=**.max_file_descriptors
4鸟款、Virtual memory 虛擬內存設置
es默認使用mmapfs路徑存儲索引膏燃,系統(tǒng)中mmap的設置太低,需要加大
- 臨時設置:sysctl -w vm.max_map_count=262144
- 永久設置:修改/etc/sysctl.conf何什,修改 vm.max_map_count
5组哩、Number of threads 線程數量設置
修改/etc/security/limits.conf,將nproc設置為4096 (這個值是es推薦的)
6、DNS cache settings
7伶贰、JNA temporary directory not mounted with noexec
五蛛砰、Bootstrap Checks 啟動前的檢查
一旦設置了transport.host(不是localhost或者127.0.0.1),es認為你啟用了生產模式黍衙,生產模式就會啟用Bootstrap Checks泥畅,如果不符合,則拒絕啟動
- Single-node discovery
將 discovery.type 修改為 single-node即可琅翻,這種情況下位仁,不會進行檢查 - Force the bootstrap checks 強制檢查
如果設置了single-node discovery,但是又想檢查望迎,可以設置給ES_JAVA_OPTS環(huán)境變量增加一條:-Des.enforce.bootstrap.checks=true
1障癌、heap size check
會檢查 -Xms與-Xmx是否一致凌外,不一致巴拉巴拉會產生一堆問題等等
2辩尊、File descriptors check
3、Memory lock check
在做Full GC的時候康辑,JVM會檢查所有的heap摄欲,如果這些heap的一部分被swap出去,則需要在GC的時候先swap回來疮薇,這樣會增加系統(tǒng)間的文件傳輸的開銷胸墙,所以會檢查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ā)垃圾回收機制