path.data和path.logs
如果您使用.zip或.tar.gz存檔,則data和logs 目錄是子文件夾$ES_HOME。如果這些重要文件夾保留在其默認位置,則在將Elasticsearch升級到新版本時,存在刪除它們的高風險。
在生產使用中,您肯定會想要更改數據和日志文件夾的位置:
path:
logs: /var/log/elasticsearch
data: /var/data/elasticsearch
該RPM和Debian發行版已經使用自定義路徑,data和logs。
該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使用node.name作為Elasticsearch特定實例的可讀標識符,因此它包含在許多api的響應中。它默認為在Elasticsearch啟動時計算機所具有的主機名,但可以在Elasticsearch中顯式配置如下:
node.name: prod-data-2
network.host
默認情況下,Elasticsearch只綁定到環回地址,例如。127.0.0.1 (::1)。這足以在服務器上運行單個開發節點。
tip
: 實際上,可以從$ES_HOME 單個節點上的相同位置啟動多個節點。這對於測試Elasticsearch形成集群的能力非常有用,但它不是推薦用於生產的配置。
為了在其他服務器上形成包含節點的集群,您的節點將需要綁定到非環回地址。雖然有許多 網絡設置,但通常您需要配置的是 network.host:
network.host: 192.168.1.10
該network.host設置也了解一些特殊的值,比如 local,site,_global_和喜歡修飾:ip4和:ip6,其中的細節中可以找到的特殊值network.host。
tip
:只要您提供自定義設置network.host,Elasticsearch就會假定您正在從開發模式轉移到生產模式,並將許多系統啟動檢查從警告升級到異常。有關更多信息,請參閱開發模式與生產模式。
discovery和集群功能設置
在開始生產之前,應該配置兩個重要的發現和群集形成設置,以便群集中的節點可以相互發現並選擇主節點。
discovery.seed_hosts
開箱即用,沒有任何網絡配置,Elasticsearch將綁定到可用的環回地址,並將掃描本地端口9300到9305以嘗試連接到在同一服務器上運行的其他節點。這提供了自動集群體驗,無需進行任何配置。
如果要在其他主機上形成包含節點的群集,則必須使用該 discovery.seed_hosts設置提供群集中其他節點的列表,這些節點符合主要條件且可能是實時且可聯系的,以便為發現過程設定種子。此設置通常應包含群集中所有符合主節點的節點的地址。此設置包含主機數組或逗號分隔的字符串。每個值應采用host:port或的形式host(如果未設置,則port 默認為設置transport.profiles.default.port回落 transport.port)。請注意,必須將IPv6主機置於括號內。此設置的默認值為127.0.0.1, [::1]。
cluster.initial_master_nodes
當您第一次啟動全新的Elasticsearch集群時,會出現一個集群引導步驟,該步驟確定在第一次輪訓中統計的合格節點集。在開發模式下,如果未配置發現設置,則此步驟由節點本身自動執行。由於此自動引導本質上是不安全的,因此當您在生產模式下啟動全新集群時,必須明確列出符合主要條件的節點。使用該cluster.initial_master_nodes設置設置此列表 。
discovery.seed_hosts:
- 192.168.1.10:9300
- 192.168.1.11 # 如果未指定,端口將默認為transport.profiles.default.port和回退 transport.port。
- seeds.mydomain.com #如果主機名解析為多個IP地址,則該節點將嘗試發現所有已解析地址的其他節點。
cluster.initial_master_nodes:
- master-node-a
- master-node-b
- master-node-c
- cluster.initial_master_nodes: 初始主節點應由其標識 node.name,默認為其主機名。確保值cluster.initial_master_nodes與node.name 確切匹配。如果使用完全限定的域名(例如 master-node-a.example.com節點名稱),則必須在此列表中使用完全限定名稱; 相反,如果node.name是一個沒有任何尾隨限定符的裸主機名,那么你還必須省略尾隨限定符cluster.initial_master_nodes。
設置堆大小
默認情況下,Elasticsearch告訴JVM使用最小和最大大小為1 GB的堆。遷移到生產環境時,配置堆大小以確保Elasticsearch有足夠的可用堆是很重要的。
Elasticsearch將通過(minimum heap size)和(最大堆大小)設置分配jvm.options中指定的整個堆 。您應該將這兩個設置設置為彼此相等Xms Xmx
這些設置的值取決於服務器上可用的RAM量:
-
設置Xmx並且Xms不超過物理RAM的50%。Elasticsearch需要內存用於JVM堆以外的其他目的,為此留出空間很重要。例如,Elasticsearch使用堆外緩沖區進行有效的網絡通信,依賴操作系統的文件系統緩存來有效訪問文件,而JVM本身也需要一些內存。使用比使用該Xmx設置配置的限制更多的內存來觀察Elasticsearch進程是正常的。
-
設置Xmx並且Xms不超過JVM用於壓縮對象指針的閾值(壓縮oops); 確切的閾值變化但接近32 GB。您可以通過在日志中查找如下所示的行來驗證您是否低於閾值:
heap size [1.9gb], compressed ordinary object pointers [true]
-
理想情況下設置Xmx並且Xms不超過基於零的壓縮oops的閾值; 確切的閾值會有所不同,但大多數系統上26 GB是安全的,但在某些系統上可能高達30 GB。您可以通過使用JVM選項啟動Elasticsearch -XX:+UnlockDiagnosticVMOptions -XX:+PrintCompressedOopsMode並查找如下所示的行來驗證您是否低於此閾值 :
heap address: 0x000000011be00000, size: 27648 MB, zero based Compressed Oops
顯示已啟用從零開始的壓縮oops。如果未啟用從零開始的壓縮oops,則會看到如下所示的行:
heap address: 0x0000000118400000, size: 28672 MB, Compressed Oops with base: 0x00000001183ff000
Elasticsearch可用的堆越多,它可用於其內部緩存的內存就越多,但它為操作系統用於文件系統緩存的內存就越少。此外,較大的堆可能導致更長的垃圾收集暫停。
以下是如何通過jvm.options文件設置堆大小的示例:
-Xms2g # 將最小堆大小設置為2g。
-Xmx2g # 將最大堆大小設置為2g。
也可以通過環境變量設置堆大小。這可以通過注釋掉來完成Xms,並Xmx設置在 jvm.options文件中,並通過設置這些值ES_JAVA_OPTS:
ES_JAVA_OPTS="-Xms2g -Xmx2g" ./bin/elasticsearch # 將最小和最大堆大小設置為2 GB。
ES_JAVA_OPTS="-Xms4000m -Xmx4000m" ./bin/elasticsearch # 將最小和最大堆大小設置為4000 MB。
為Windows服務配置堆不同於上面的堆。最初為Windows服務填充的值可以如上配置,但在安裝服務后不同。有關其他詳細信息,請參閱[Windows服務文檔][3]。
JVM堆轉儲路徑
默認情況下,Elasticsearch將JVM配置為將內存異常轉儲到默認數據目錄(這 /var/lib/elasticsearch適用於RPM和Debian軟件包發行版,以及data用於tar和zip歸檔文件分發的Elasticsearch安裝根目錄下的目錄) 。如果這個路徑是不適合接受堆轉儲,您應該修改的條目-XX:HeapDumpPath=...在 jvm.options。如果指定目錄,JVM將根據正在運行的實例的PID為堆轉儲生成文件名。如果指定固定文件名而不是目錄,則當JVM需要在內存不足異常上執行堆轉儲時,該文件不能存在,否則堆轉儲將失敗。
GC日志
默認情況下,Elasticsearch啟用GC日志。這些配置在 jvm.options默認位置和默認位置與Elasticsearch日志相同。默認配置每64MB
輪換一次日志,最多可占用2GB
的磁盤空間。
臨時目錄
默認情況下,Elasticsearch使用啟動腳本在系統臨時目錄下創建的專用臨時目錄。
在某些Linux發行版上,系統實用程序將清除文件和目錄(/tmp如果它們最近未被訪問過)。如果長時間不使用需要臨時目錄的功能,則可能導致在Elasticsearch運行時刪除專用臨時目錄。如果隨后使用需要臨時目錄的功能,則會導致問題。
如果使用.deb或.rpm包安裝Elasticsearch 並在其下運行,systemd那么Elasticsearch使用的專用臨時目錄將從定期清理中排除。
但是,如果您打算.tar.gz在Linux 上運行分發一段時間,那么您應該考慮為Elasticsearch創建一個專用的臨時目錄,該目錄不在將從中清除舊文件和目錄的路徑下。此目錄應具有權限集,以便只有運行Elasticsearch的用戶才能訪問它。然后$ES_TMPDIR在啟動Elasticsearch之前將環境變量設置 為指向它。
JVM致命錯誤日志
默認情況下,Elasticsearch將JVM配置為將致命錯誤日志寫入默認日志記錄目錄(這/var/log/elasticsearch適用於RPM和Debian軟件包發行版,以及logs 針對tar和zip歸檔文件分發的Elasticsearch安裝根目錄下的目錄 )。這些是JVM在遇到致命錯誤(例如,分段錯誤)時生成的日志。如果該路徑不適合於接收的日志,則應修改條目-XX:ErrorFile=...中 jvm.options到備用路徑。