Elasticsearch—生產環境集羣核心配置

一. Elasticsearch相關配置

path.data 和 path.log

這兩個配置的目錄分別用來存放索引數據日誌,它們的默認路徑位於$_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

網絡地址 network.host

默認配置下,Elasticsearch綁定的是一個環回地址127.0.0.1 ,這隻適合在單機開發時使用。在正式環境中,爲了保證該節點可以被其它節點找到,造成一個集羣,須要設置一個非環回地址,若是在內網中部署集羣,可經過ifconfig命令查看當前節點的內網ip地址。配置以下bash

network.host: 192.168.60.11

服務發現和集羣造成設置

1. 服務發現種子主機 discovery.seed_hosts

在開發環境中,服務發現主機名不須要設置,Elasticsearch默認會從本機的9300-9305端口嘗試去鏈接其它節點,這提供了自動集羣的體驗,不須要任何配置。但在正式環境中,每一個節點理論上都是不一樣的機器,這時候須要配置discovery.seed_hostsdiscovery.seed_hosts能夠是ipip:端口域名。若是配置是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

2. 初始主節點 cluster.initial_master_nodes

當開啓一個全新的集羣時,會有一個集羣的引導步驟,這步驟用來肯定哪些節點參與第一次的主節點選舉。在開發模式下,這個步驟由節點自動完成,這種模式本質上是不安全的,由於不是全部節點都適合作主節點,主節點關係到集羣的穩定性。所以在生產模式下,集羣第一次啓動時,須要有一個適合做爲主節點的節點列表,這個列表就是經過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的堆內存可能會被擠到磁盤中,垃圾回收速度會從毫秒級別變成分鐘級別,致使節點的響應速度慢甚至和集羣斷開鏈接。有三種方式來避免交換空間發生

1.禁止全部交換空間

在Linux上,臨時關閉操做系統交換空間可執行下面命令

sudo swapoff -a

永久關閉須要修改/etc/fstab 文件。

2.配置swappiness

修改 /etc/sysctl.conf文件,設置vm.swappiness = 1,可使Linux在通常狀況下不使用交換,除非萬不得已。

3.使用內存鎖

使用內存鎖能夠在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來完成設置。

總結

以上的配置在生產環境中都很重要,大部分參考了官方文檔,結合了本身的理解,若有描述錯誤的地方,請指正。但願對你有幫助,謝謝!

相關文章
相關標籤/搜索