Elasticsearch的配置學習筆記

朱季謙發表於2021-07-07

文/朱季謙
Elasticsearch是一個基於Lucene的搜尋伺服器。它提供一個分散式多使用者能力的全文搜尋引擎,基於RESTful web介面,Elasticsearch是用Java語言開發的。

關於Elasticsearch系列筆記,主要從Elasticsearch的配置、核心元件、架構設計、使用語法這四個方面來記錄學習;

本學習總結主要依賴《Elasticsearch實戰與原理解析》一書的讀書筆記,我把自己閱讀過程當中整理的讀書筆記做成了一張腦圖,上傳至了我的GitHub

image

Elasticsearch的配置

Elasticsearch的配置比較重要有三個,分別是elasticsearch.yml,jvm.options,log4j2.properties,這些配置檔案都預設放在/config/目錄下。

  • elasticsearch.yml:用於配置Elasticsearch基本資訊,主要包括叢集、節點、ip、埠等;
  • jvm.options:配置Elasticsearch依賴的JVM資訊,ES是Java寫的,當然需要考慮堆大小的分配;
  • log4j2.properties:用於配置Elasticsearch日誌記錄中的各個屬性;

elasticsearch.yml關鍵引數

#叢集名稱,預設是elasticsearch,用於區分同一網段下的不同叢集
cluster.name: my-application
#叢集當中的節點名稱,用於區分同一個叢集下的不同節點
node.name: node-1
#儲存index索引資料的路徑,可以儲存到多個路徑,例如:path.data: /temp/data1,/temp/data2,/temp/data3,
path.data: /temp/data
#日誌檔案的儲存路徑
path.logs: /temp/logs
#當前節點的ip地址,允許通過外部伺服器訪問本地ES服務:
network.host: 0.0.0.0
#該節點有機會成為master節點
node.master: true
#該節點能夠儲存資料
node.data: true

#######################設定head外掛能夠訪問es###########
#設定可以跨域,預設為false
http.cors.enabled: true
#支援所有域名訪問
http.cors.allow-origin: "*"
#跨域允許設定的頭資訊,預設為X-Requested-With,Content-Type,Content-Length
http.cors.allow-headers : X-Requested-With,Content-Type,Content-Length
#埠
http.port: 9250


#設定叢集主機列表,每個值應採用host:port,可實現主動發起ping叢集主機資訊
discovery.zen.ping.unicast.hosts: ["host1","host2","host3"]
#該參數列示只有足夠的master候選節點時,才可以選舉出一個master,該引數的值為master候選節點數量/2+1
#例如:如果有3個master候選節點,100個資料節點。則quorum=3/2+1=2
discovery.zen.minimum_master_nodes: 2
#表示設定了節點與節點之間連線ping命令執行的超時時長。
discovery.zen.fd.ping_timeout: 100s
discovery.zen.ping.timeout: 100s
#主動關閉多播模式
discovery.zen.ping.multicast.enabled: false

#預設90%,超過閾值後,所有索引都被修改為只讀不可寫狀態
cluster.routing.allocation.disk.watermark.flood_stage: 90%
#預設90%,超過閾值後,索引的分片將不會被分配到該主機
cluster.routing.allocation.disk.watermark.high: 90%


elasticsearch.yml配置當中,discovery.zen相關的引數設定,主要是用來實現叢集當中節點自動發現機制的,存在多播模式與單播模式。

  • 多播模式:對某一個網路上的所有主機傳送資料包。
  • 單播模式:對特定的主機進行資料傳送。

在Elasticsearch中,發現機制預設被配置為使用單播模式,以防止節點無意中加入叢集。

jvm.options配置資訊

Elasticsearch官方中文文件上介紹道:“你幾乎可以不去調整 Java 虛擬機器 (JVM) 引數,如何非要做的話,你最有可能去修改heap size。”

也就是說,這個配置檔案裡,一般只需要關注堆大小的設定即可,因為每一個執行環境伺服器都不一樣,可以根據伺服器具體情況來調整jvm.options裡的堆大小。

#最小堆的值
-Xms1024m
#最大堆的值
-Xmx1024m
#表示老年代佔用75%時就會觸發垃圾回收
-XX:CMSInitiatingOccupancyFraction=75

設定規則一般如下:

  • 最小堆Xms與最大堆Xmx設定值相同,避免當堆大小不夠時再進行動態調整出現不確定因素;

Elasticsearch效能調優與JVM效能調優類似,都是通過JVM引數來進行調整優化,至於如何能有效調整,後續我若在實踐過程中涉及過,會補充這塊的內容。

log4j2.properties配置資訊

該配置是Elasticsearch日誌記錄中的各個屬性設定,包括日誌儲存設定、日誌保留天數、慢日誌、日誌滾動等。

比較需要關注的一條引數是:

#將日誌滾動到路徑後的資料裡
appender.rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}-%d{yyyy-MM-dd}-%i.log.gz
#使用基於時間的滾動策略
appender.rolling.policies.time.type = TimeBasedTriggeringPolicy
# 每天滾動一次日誌
appender.rolling.policies.time.interval = 1
# 日誌檔案每達到 1GB 大小進行一次滾動
appender.rolling.policies.size.size = 1GB

所謂滾動日誌,就是將當天的日誌整理成一個以某種各種命名(例如時間)的檔案,可儲存歷史的日誌檔案記錄。我們在伺服器的log目錄下,經常看到類似的歷史日誌被打包成壓縮包形式,這類被打包成壓縮包的歷史日誌檔案,即為回滾日誌。我們經常在mysql裡聽到過日誌回滾,其實,回滾的,即是這些原來被回滾存放在log目錄下的日誌檔案。

image

相關文章