這兩個配置的目錄分別用來存放索引數據
和日誌
,它們的默認路徑位於$_ES_HOME
的子文件夾內。這樣有很大風險,特別是在升級Elasticsearch版本時,這些數據極可能被刪除,在生產環境中可參考下面的配置node
path: logs: /var/log/elasticsearch data: /var/data/elasticsearch
另外path.data支持配置多個目錄,每一個目錄都會用來存放數據,可是單個分片會存放在同一個目錄內,多目錄配置參考bootstrap
path: data: - /mnt/elasticsearch_1 - /mnt/elasticsearch_2 - /mnt/elasticsearch_3
默認狀況下集羣名爲elasticsearch
,爲了區分不一樣集羣,在生產環境須要進行修改。每一個節點須要配置相同的集羣名才能加入同一個集羣中,且每一個節點只能加入一個集羣,要保證集羣名相同,不然會加入錯誤的集羣中。緩存
cluster.name: test-cluster
默認狀況下節點名稱是操做系統的主機名,在Linux下使用hostname -f
可查看主機名。也可經過elasticsearch.yml
配置文件顯示的配置,使可讀性更好。配置示例以下安全
node.name: test-node
默認配置下,Elasticsearch綁定的是一個環回地址127.0.0.1
,這隻適合在單機開發時使用。在正式環境中,爲了保證該節點可以被其它節點找到,造成一個集羣,須要設置一個非環回地址,若是在內網中部署集羣,可經過ifconfig
命令查看當前節點的內網ip地址。配置以下bash
network.host: 192.168.60.11
在開發環境中,服務發現主機名不須要設置,Elasticsearch默認會從本機的9300-9305端口嘗試去鏈接其它節點,這提供了自動集羣的體驗,不須要任何配置。但在正式環境中,每一個節點理論上都是不一樣的機器,這時候須要配置discovery.seed_hosts
,discovery.seed_hosts
能夠是ip
、ip:端口
和域名
。若是配置是ip,Elasticsearch默認會使用transport.profiles.default.port
配置項的端口,該端口默認爲9300;若是配置是域名,且該域名下綁定了多個ip,ES會嘗試去鏈接多個ip。下面是配置示例服務器
discovery.seed_hosts: - 192.168.1.10:9300 - 192.168.1.11 - seeds.mydomain.com
當開啓一個全新的集羣時,會有一個集羣的引導步驟,這步驟用來肯定哪些節點參與第一次的主節點選舉。在開發模式下,這個步驟由節點自動完成,這種模式本質上是不安全的,由於不是全部節點都適合作主節點,主節點關係到集羣的穩定性。所以在生產模式下,集羣第一次啓動時,須要有一個適合做爲主節點的節點列表,這個列表就是經過cluster.initial_master_nodes
來配置,在配置中須要寫出具體的節點名稱,對應node.name
配置項。配置示例以下網絡
cluster.initial_master_nodes: - master-node-a - master-node-b - master-node-c
默認狀況下,Elasticsearch中JVM堆內存的最小值和最大值爲1GB,在生產模式下,堆內存容量是很是重要的,須要確保Elasticsearch有足夠的堆內存可用。咱們能夠在jvm.options
配置文件中,經過配置Xmx
和Xms
項來決定JVM堆內存容量,配置的容量自己也取決於服務器的物理內存,Xmx
和Xms
的值不超過物理內存的50%。由於Elasticsearch除了堆內存,也會有其它的操做,好比使用堆外緩衝區進行網絡通訊,經過操做系統的文件系統緩存來訪問文件,還有JVM自身也須要一些內存。對內存容量,最大可設置接近32GB,26GB是安全值,有些系統下可到達30GB。示例配置以下app
-Xms2g -Xmx2g
Linux默認配置下最大打開文件數爲1024,可經過ulimit -n
查看,而ES在建索引過程當中會打開不少小文件,這樣很容易超過限制,文件描述符臨時設置命令以下dom
sudo su ulimit -n 65535 su elasticsearch
永久設置可修改/etc/security/limits.conf
文件jvm
elasticsearch - nofile 65535
上面的配置表示設置elasticsearch用戶下,打開文件描述符最大數量爲65535。
Linux的交換空間機制是指,當內存資源不足時,Linux把某些頁的內容轉移至硬盤上的一塊空間上,以釋放內存空間。硬盤上的那塊空間叫作交換空間(swap space)。若是不關閉swap,Elasticsearch的堆內存可能會被擠到磁盤中,垃圾回收速度會從毫秒級別變成分鐘級別,致使節點的響應速度慢甚至和集羣斷開鏈接。有三種方式來避免交換空間發生
在Linux上,臨時關閉操做系統交換空間可執行下面命令
sudo swapoff -a
永久關閉須要修改/etc/fstab
文件。
修改 /etc/sysctl.conf
文件,設置vm.swappiness = 1
,可使Linux在通常狀況下不使用交換,除非萬不得已。
使用內存鎖能夠在ES啓動時,鎖住一段堆內存,保證堆內存不被擠到磁盤中,對應Linux中的mlockall
系統調用,在ES中配置config/elasticsearch.yml
文件。配置以下
bootstrap.memory_lock: true
Elasticsearch經過文件映射(mmap)來讀取磁盤中的文件,這樣能夠比read
系統調用少一次內存拷貝,也被稱爲0拷貝技術。ES映射的文件會不少,因此須要修改最大映射文件的數量,經過修改vm.max_map_count
配置項可實現。臨時修改可調用下面命令
sysctl -w vm.max_map_count=262144
要永久修改這個值,須要修改/etc/sysctl.conf
文件,增長以下行
vm.max_map_count=262144
而後再運行sysctl -p
從新加載系統配置纔會生效,最後運行sysctl vm.max_map_count
命令檢測設置是否生效。
Elasticsearch中不一樣的操做有不一樣的線程池,爲了確保Elasticsearch線程正常建立線程,須要設置操做系統的線程數限制。最小值爲4096,可經過修改/etc/security/limits.conf
來完成設置。
以上的配置在生產環境中都很重要,大部分參考了官方文檔,結合了本身的理解,若有描述錯誤的地方,請指正。但願對你有幫助,謝謝!