二、Elasticsearch安裝及配置-Set up Elasticsearch

一、概述

本篇參考鏈接:
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

三、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ī)制

10、System call filter check

11、OnError and OnOutOfMemoryError checks

12、Early-access check

13、G1GC check

14、All permission check

15、Discovery configuration check

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容