Elasticsearch 參考指南(重要的Elasticsearch配置)

重要的Elasticsearch配置

雖然Elasticsearch只須要不多的配置,可是在投入生產以前須要考慮許多設置。html

path.data和path.logs

若是你使用.zip.tar.gz歸檔,數據和日誌目錄都是$ES_HOME的子文件夾,若是這些重要的文件夾被保留在它們的默認位置,那麼在升級到新版本時,它們頗有可能被刪除。node

在生產使用中,你幾乎確定但願更改數據和日誌文件夾的位置:segmentfault

path:
  logs: /var/log/elasticsearch
  data: /var/data/elasticsearch

RPM和Debian發行版已經爲數據和日誌使用了自定義路徑。windows

path.data設置能夠設置爲多個路徑,在這種狀況下,全部路徑都將用於存儲數據(儘管屬於單個碎片的文件都將存儲在相同的數據路徑上):緩存

path:
  data:
    - /mnt/elasticsearch_1
    - /mnt/elasticsearch_2
    - /mnt/elasticsearch_3

cluster.name

節點只有在與集羣中的全部其餘節點共享其cluster.name時才能加入集羣,默認的名稱是elasticsearch,可是應該將其更改成描述集羣用途的適當名稱。安全

cluster.name: logging-prod

確保不要在不一樣的環境中重用相同的集羣名稱,不然可能會致使節點加入錯誤的集羣。服務器

node.name

默認狀況下,Elasticsearch將使用隨機生成的UUID的前7個字符做爲節點id。注意,節點id是持久的而且在節點從新啓動時不會更改,所以默認節點名也不會更改。網絡

值得配置一個更有意義的名稱,這個名稱在從新啓動節點以後也具備持久化的優點:dom

node.name: prod-data-2

節點名也能夠設置爲服務器的主機名以下:jvm

node.name: ${HOSTNAME}

network.host

在默認狀況下,Elasticsearch只綁定迴環地址 — 例如,127.0.0.1[::1],這足以在服務器上運行單個開發節點。

實際上,能夠從單個節點上相同的 $ES_HOME位置啓動多個節點,這對於測試Elasticsearch造成集羣的能力是頗有用的,可是這並非推薦用於生產的配置。

爲了與其餘服務器上的節點進行通訊並造成集羣,你的節點將須要綁定到非迴環地址,雖然有許多網絡設置,但一般你須要配置的只是network.host:

network.host: 192.168.1.10

network.host設置還能夠理解一些特殊值,如_local__site__global_和像:ip4:ip6的修飾符,詳細信息能夠在network.host的特殊值中找到。

很快你就能夠爲 network.host提供一個自定義設置,Elasticsearch假定你正在從開發模式轉換到生產模式,並將許多系統啓動檢查從警告升級到異常,有關更多信息,請參見 開發模式與生產模式

發現設置

Elasticsearch使用一種名爲「Zen discovery」的自定義發現實現,用於節點到節點的集羣和主選擇,在開始生產以前應該配置兩個重要的發現設置。

discovery.zen.ping.unicast.hosts

在沒有任何網絡配置的狀況下,Elasticsearch將綁定到可用的迴環地址,並掃描端口9300到9305,以嘗試鏈接到同一服務器上運行的其餘節點,這提供了自動集羣體驗,而無需進行任何配置。

當節點在其餘服務器上造成集羣時,你必須提供集羣中可能存在的其餘節點的種子列表,能夠指定以下:

discovery.zen.ping.unicast.hosts:
 - 192.168.1.10:9300
 - 192.168.1.11 
 - seeds.mydomain.com
  • 若是沒有指定端口號,端口將默認爲transport.profiles.default.port,而且回退到transport.tcp.port
  • 解析到多個IP地址的主機名將嘗試全部已解析的地址

discovery.zen.minimum_master_nodes

爲了防止數據丟失,配置discovery.zen.minimum_master_nodes很是重要,使每一個適合的主節點都知道要造成集羣必須可見的適合的主節點的最小數目。

若是沒有這種設置,遭受網絡故障的集羣有可能被分割成兩個獨立的集羣 - 腦分裂 - 這將致使數據丟失,使用minimum_master_nodes避免腦分裂提供了一個更詳細的解釋。

爲了不腦分裂,這個設置應該設置爲適合的主節點的法定數量:

(master_eligible_nodes / 2) + 1

換句話說,若是有三個適合的主節點,那麼最小主節點應該設置爲(3 / 2) + 12:

discovery.zen.minimum_master_nodes: 2

堆大小設置

在默認狀況下,Elasticsearch告訴JVM使用最小和最大大小爲1GB的堆,在遷移到生產時,重要的是配置堆大小以確保Elasticsearch有足夠的可用堆。

Elasticsearch將在jvm.options中經過Xms(最小堆大小)和Xmx(最大堆大小)的設置分配指定的整個堆。

這些設置的值取決於服務器上可用RAM的總數,好的經驗法則是:

  • 設置最小堆大小(Xms)和最大堆大小(Xmx)彼此相等。
  • 對Elasticsearch可用的堆越多,它用於緩存的內存就越多。可是請注意,過多的堆可能會使你陷入長時間的垃圾收集停頓。
  • Xmx設置爲不超過物理RAM的50%,以確保有足夠的物理RAM留給內核文件系統緩存。
  • 不要將Xmx設置在JVM用於壓縮對象指針的截點之上(被壓縮的oops)。確切的截點不一樣,但接近32GB,你能夠經過在日誌中查找以下所示的行來驗證你是否處於限制之下:

    heap size [1.9gb], compressed ordinary object pointers [true]
  • 更好的方法是,儘可能低於零基礎被壓縮的oops閾值。確切的截點不一樣,但在大多數系統中26GB是安全的,但在某些系統中可能高達30GB。你能夠經過使用JVM選項-XX:+UnlockDiagnosticVMOptions -XX:+PrintCompressedOopsMode啓動Elasticsearch,並查找以下所示的行來驗證你是否處於限制之下:

    heap address: 0x000000011be00000, size: 27648 MB, zero based Compressed 
    Oops

    顯示零基礎被壓縮的oops被啓用,而不是:

    heap address: 0x0000000118400000, size: 28672 MB, Compressed Oops with 
    base: 0x00000001183ff000

下面是如何經過jvm.options設置堆大小的示例:

-Xms2g 
-Xmx2g
  • 設置最小堆大小爲2g
  • 設置最大堆大小爲2g

還能夠經過環境變量設置堆大小,這能夠經過註釋jvm.options文件中的XmsXmx設置來實現,並經過ES_JAVA_OPTS設置這些值:

ES_JAVA_OPTS="-Xms2g -Xmx2g" ./bin/elasticsearch 
ES_JAVA_OPTS="-Xms4000m -Xmx4000m" ./bin/elasticsearch
  • 設置最小和最大堆大小爲2GB
  • 設置最小和最大堆大小爲4000MB
Windows服務配置堆與上面的不一樣,最初爲Windows服務填充的值能夠如上所述進行配置,但在被安裝爲服務以後會有所不一樣,有關更多細節,請參閱 Windows服務文檔

JVM堆轉儲文件路徑

默認狀況,Elasticsearch配置JVM將內存溢出異常堆轉儲到默認數據目錄(RPM和Debian包發行版的/var/lib/elasticsearch目錄,和Elasticsearch的tar和zip存檔發行版的安裝根目錄下的的data目錄)。若是此路徑不適合接收堆轉儲,你應該在jvm.options中修改條目-XX:HeapDumpPath=...。若是你指定了一個目錄,JVM將根據運行實例的PID爲堆轉儲生成一個文件名。若是你指定了一個固定的文件名而不是目錄,那麼當JVM須要在內存溢出的異常上執行堆轉儲時,該文件必須不存在,不然堆轉儲將失敗。

GC日誌記錄

默認狀況下,Elasticsearch支持GC日誌,它們在jvm.options中配置,並默認爲與Elasticsearch日誌相同的默認位置。默認配置每64MB滾動日誌一次,最多能夠佔用2g的磁盤空間。

臨時目錄

默認狀況下,Elasticsearch使用一個私有的臨時目錄,啓動腳本直接在系統臨時目錄下建立它。

在一些Linux發行版中,若是文件和目錄最近沒有被訪問過,系統實用程序將從/tmp中清除它們。若是須要臨時目錄的特性長時間沒有使用,這可能致使在Elasticsearch運行時刪除私有臨時目錄,若是隨後使用了須要臨時目錄的特性,則會致使問題。

若是你使用.deb.rpm包安裝Elasticsearch,並在systemd下運行,那麼Elasticsearch使用的私有臨時目錄將被排除在按期清理以外。

可是,若是你打算在Linux上運行.tar.gz發行版一段較長的時間,那麼你應該考慮爲Elasticsearch建立一個專用的臨時目錄,它不在清除舊文件和目錄的路徑下。這個目錄應該有權限設置,以便只有Elasticsearch運行的用戶才能訪問它,而後在啓動Elasticsearch以前設置$ES_TMPDIR環境變量指向它。

JVM致命錯誤日誌

默認狀況下,Elasticsearch配置JVM將致命錯誤日誌寫入默認日誌目錄(這裏是RPM和Debian軟件包發行版的/var/log/elasticsearch,以及tar和zip歸檔發行版的Elasticsearch安裝根目錄下的logs目錄)。這些是JVM在遇到致命錯誤(例如,分段故障)時生成的日誌。若是此路徑不適合接收日誌,你應該修改在jvm.options-XX:ErrorFile=…條目到另外一個路徑。


上一篇:配置Elasticsearch

下一篇:重要的系統配置

相關文章
相關標籤/搜索