elasticsearch 配置篇

weixin_34292287發表於2017-05-04

配置

在es啟動之前可以通過設定啟動命令列啟動引數、環境變數、檔案等方式優化和配置es進行引數

環境變數

名稱 示例 說明
ES_MIN_MEM 256M 用於配置java程式分配的最小記憶體
ES_MAX_MEM 1G 用於配置java程式佔用的最大記憶體
ES_HEAP_SIZE 32G 設定ES_MIN_MEM,ES_MAX_MEM使用相同大小,ES推薦該配置並啟用mlockall
ES_DIRECT_SIZE 2G 直接記憶體並不是虛擬機器執行時資料區的一部分,在nio中引入了基於通道和緩衝區的I/O方式,它可以使用native函式直接分配堆外記憶體,然後通過儲存在java堆中的DirectByteBuffer物件作為這塊記憶體的引用進行操作
ES_USE_IPV4 not empty/empty 表示只使用IPV4, 若定義且值不為空則表示true

系統配置

  • 設定系統允許開啟的檔案描述符數量,建議設定為32k或64k, 可通過命令ulimit -n進行查詢,示例:ulimit -n 65535後重啟服務
    可以在啟動時新增引數-Des.max-open-files=true檢視允許開啟的檔案描述符數量

也可以通過RESTAPI檢視nodes資訊,輸入:GET /_nodes/process?pretty
輸出:

{
   "cluster_name": "elasticsearch",
   "nodes": {
      "eE4eHSOWTK-j6IO7JJzcDQ": {
         "name": "Specialist",
         "transport_address": "inet[silence/192.168.1.111:9300]",
         "host": "silence",
         "ip": "192.168.1.111",
         "version": "1.6.0",
         "build": "cdd3ac4",
         "http_address": "inet[/192.168.1.111:9200]",
         "process": {
            "refresh_interval_in_millis": 1000,
            "id": 6212,
            "max_file_descriptors": -1,
            "mlockall": false
         }
      }
   }
}

虛擬記憶體設定

es採用混合的mmapfs/niofs目錄預設儲存索引,在mmap計數太低時可能導致儲存器異常,可通過sysctl vm.max_map_count查詢,需要設定使用命令sysctl -w vm.max_map_count=262144或者在/etc/sysctl.conf中進行永久設定

記憶體設定

在作業系統為儘量多的使用記憶體,會將不用的應用程式記憶體換出儲存在swap檔案系統中,交換會降低系統的效能和節點的穩定性,需要禁止,可通過三種方法進行設定:

  • 禁用swap分割槽
    在linux中可通過swapoff -a或在/etc/fstab中註釋所有行中swap的內容
    在windows中在"系統屬性"->"高階"->"效能"->"高階"->"虛擬記憶體"中設定

  • 配置swappiness
    通過sysctl vim.swappiness=0減少核心進行的swap交換

  • mlockall
    在*nux上使用mlockall或者在window上使用VirtualLocx儘量鎖定程式的地址空間到RAM,防止es記憶體被換出,可通過elasticsearch.yml進行配置
    在es配置檔案中新增:bootstrap.mlockall: true並重啟服務即可

通過RESTAPI檢視nodes資訊,輸入:GET /_nodes/process?pretty

在*nux系統下可能有兩個原因導致mlockall設定失敗:
1.es程式所屬使用者不具有鎖定記憶體的許可權,需要使用ulimit -l進行設定
2./tmp目錄設定了noexec選項,可通過在啟動es時設定-Djna.tmpdir=/path/to/new/dir解決

es配置

在ES_HOME/conf目錄下兩個配置檔案分別為elasticsearch.yml和logging.yml, elasticsearch.yml為es所有模組提供配置, logging.yml為日誌記錄提供配置

  • elasticsearch.yum解讀

1.network設定
network.host: 設定bind host和publish
2.path設定
path.logs: 設定日誌儲存目錄
path.data: 設定資料儲存目錄
3.cluster設定
cluster.name: 設定叢集標識
4.node設定
node.name: 設定節點標識
5.index設定
es支援建立儲存到記憶體中的索引,可以在建立索引或者在程式啟動時指定預設儲存方式
a.在yum配置檔案中配置index.store.type:memory
b.在es程式啟動時通過引數-Des.index.store.type=memory設定
c.在建立index時通過引數提交,輸入:

PUT http://localhost:9200/m_index_test2/
{
  "index" :{
      "store": {
        "type": "memory"
      }
  }
}

說明:儲存在記憶體中的索引在重啟伺服器後資料會丟失

6.在yum配置檔案中可設定為環境變數的引用,比如在環境變數中定義節點的名稱ES_NODE_NAME, 則可在yum配置檔案中設定node.name=${ES_NODE_NAME}
7.可在es程式啟動時通過程式啟動引數進行設定,如-Des.node.name=silence
8.可以在es程式啟動時通過-Des.config=/path/to/config/file重新指定config檔案

  • logging.yum配置可參考log4j

相關文章