1、 位置html
ES的配置文件位於安裝目錄\config下面,主要有java
(1) elasticsearch.yml ES系統的配置;node
(2) jvm.options Java虛擬機配置;bootstrap
(3) log4j2.properties log4j2日誌的配置文件。緩存
值得注意的是ES支持環境變量的配置方式,例如:服務器
node.name: ${HOSTNAME}
當ES啓動時,會將${HOSTNAME}替換成環境變量中的值,這種方式在容器環境下很是有用。oracle
2、 jvm.optionsapp
1. jvm.options是jvm的設置,ES是基於JVM運行的,因此jvm.options配置的是JVM的啓動參數。dom
2. jvm.options中最可能須要改變的是堆內存(heap)的設置:jvm
-Xms1g
-Xmx1g
默認狀況下jvm.options配置最小堆內存(Xms)和最大堆內存(Xmx)均是1G大小。
關於堆內存的設置,ES官方給出了以下的建議:
(1) Xms = Xmx;
(2) 堆內存越多,ES可使用的內存緩存也就越多,可是過大的堆內存容易形成較長的GC等待;
(3) Xms = Xmx < 50%的物理內存,此舉意在給系統內核留有足夠的內存空間,若是你的系統同時跑了其餘應用,還需酌情減小;
(4) Xms = Xmx < JVM的compressed oops內存值,關於compressed oops的說明能夠參考Java官網。ES啓動時的日誌顯示了Xms是否超過了該值:
3、elasticsearch.yml的關鍵配置
elasticsearch.yml是ES系統的主配置文件,它主要包括8個部分的配置,每一個部分都用分割線進行了區分,看上去很是的條理:
1. Cluster
(1) cluster.name: 是指ES實例須要加入的ES集羣名稱,默認值是elasticsearch。
2. Node
(1) node.id:ES實例的惟一性標識,默認是取隨機UUID的前7位,該值是系統初始化時分配好的,不會因實例重啓而改變,因此該值能夠不設置;
(2) node.name:ES實例的名稱;
3. Paths
(1) path.logs:日誌存放目錄,默認在安裝目錄下的logs目錄下。ES官方不建議把日誌目錄放在安裝目錄下,緣由是ES升級時可能會將日誌文件刪除;
(2) path.data:索引文件的存放目錄,默認也在安裝目錄下的data目錄。一樣,ES官方也不建議把data目錄放在安裝目錄下;
此外,同一個ES實力能夠有多個索引文件目錄,屬於一個數據分片(Shard)的索引文件會被存儲到相同的data目錄下:
path: data: - /mnt/elasticsearch_1 - /mnt/elasticsearch_2 - /mnt/elasticsearch_3
4. Network
network.host:ES實例的地址,用於組建ES集羣,對外廣播本身的地址,默認值是「_local_」即127.0.0.1,須要注意的是若是你設置了該值ES會自動將該實例從開發模式提高到生產模式,這個咱們下面再講;
http.port:http請求的服務端口,默認是一個段9200-9300,ES會在該端口段中尋找第一個能用的端口;
transport.tcp.port:tcp傳輸的端口,默認也是一個段9300-9400;
5. Discovery
(1) discovery.zen.ping.unicast.hosts:集羣的node節點地址。默認狀況下,ES會掃描本機9300到9305端口,查看是否有其餘ES實例,這也就意味着一臺服務器能夠配置多個ES實例,可是ES官方不推薦在生產上這麼作。
discovery.zen.ping.unicast.hosts: ["host1", "host2"]
或
1 discovery.zen.ping.unicast.hosts: 2 - 192.168.1.10:9300 3 - 192.168.1.11 4 - seeds.mydomain.com
行3的端口默認爲transport.profiles.default.port,若是失敗則設置爲transport.tcp.port的值;
行4若是有多個IP映射,ES會遍歷全部的IP地址。
(2) discovery.zen.minimum_master_nodes:最少的master節點,推薦值爲(master-eligible 節點數 / 2 + 1)。
4、開發模式和生產模式
1. 二者的不一樣
若是ES的配置有不正確的地方,開發模式下會以warning的方式記入日誌,可是不影響你啓動ES實例;可是在生產模式下,waring會變成exception,而且組織你的ES啓動,以防止數據丟失。
2. 如何變成生產模式?
設置了network.host便會進入生產模式。
5、重要的系統配置
1. 關閉內存交換
內存交換是指操做系統會按期將應用程序所佔的部分無用內存交換到磁盤上,內存交換會產生IO,頻繁的交換會使性能下降,並影響ES節點的穩定性,因此ES官方建議關閉內存交換。
爲此,ES給出三種方案:
(1) 關閉操做系統級別的內存交換。
在Linux下是:
sudo swapoff -a
(2) 設置swappiness
將vm.swappiness設置成1,這個僅有Linux支持。
(3) 設置elasticsearch.yml的bootstrap.memory_lock:
bootstrap.memory_lock: true
設置以後ES會經過鎖定進程在內存中所佔的地址空間來避免內存交換。若是內存分配給ES的內存用滿,可能會形成Session失效。