Elasticsearch的配置學習筆記
文/朱季謙
Elasticsearch是一個基於Lucene的搜尋伺服器。它提供一個分散式多使用者能力的全文搜尋引擎,基於RESTful web介面,Elasticsearch是用Java語言開發的。
關於Elasticsearch系列筆記,主要從Elasticsearch的配置、核心元件、架構設計、使用語法這四個方面記錄,用於以後的開發學習;
本學習總結主要依賴《Elasticsearch實戰與原理解析》一書的讀書筆記,我把自己閱讀過程當中整理的讀書筆記做成了一張腦圖,上傳至了我的GitHub。
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目錄下的日誌檔案。
作者:朱季謙 出處:https://www.cnblogs.com/zhujiqian/ 本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須在文章頁面給出原文連結,否則保留追究法律責任的權利。