Looking for elasticsearch Answers? Try Ask4KnowledgeBase
Looking for elasticsearch Keywords? Try Ask4Keywords

ElasticsearchElasticsearch配置


備註

Elasticsearch附帶了一組默認設置,為開發提供了良好的開箱即用體驗。隱含的說法是,它不一定適合生產,必鬚根據自己的需要量身定制,因此無法預測。

默認設置使您可以輕鬆地在同一台計算機上下載和運行多個節點而無需進行任何配置更改。

設置在哪裡?

在每個Elasticsearch安裝中都有一個config/elasticsearch.yml 。這是以下設置的實時位置:

  • cluster.name
    • 節點加入的集群的名稱。同一群集中的所有節點必須共享相同的名稱。
    • 目前默認為elasticsearch
  • node.*
    • node.name
      • 如果未提供,則每次節點啟動時都會生成一個隨機名稱。這可能很有趣,但對生產環境來說並不好。
      • 名稱不必是唯一的,但他們應該是唯一的。
    • node.master
      • 布爾設置。當true ,則意味著該節點是一個合格的主節點,它可以是當選主節點。
      • 默認為true ,表示每個節點都是合格的主節點。
    • node.data
      • 布爾設置。如果為true ,則表示節點存儲數據並處理搜索活動。
      • 默認為true
  • path.*
    • path.data
      • 為節點寫入文件的位置。 所有節點都使用此目錄存儲元數據,但數據節點也將使用它來存儲/索引文檔。
      • 默認為./data
        • 這意味著將為您創建data作為在Elasticsearch目錄 config的對等目錄。
    • path.logs
      • 寫入日誌文件的位置。
      • 默認為./logs
  • network.*
    • network.host

      • 默認為_local_ ,實際上是localhost
        • 這意味著,默認情況下,節點無法與當前計算機外部進行通信!
    • network.bind_host

      • 這可能是一個數組,它告訴Elasticsearch當前機器的哪些地址也要綁定套接字。
        • 正是這個列表使機器外部的機器(例如,集群中的其他節點)能夠與該節點通信。
      • 默認為network.host
    • network.publish_host

      • 用於向其他節點通告如何與此節點進行最佳通信的單一主機。
        • 在向network.bind_host提供陣列時,這應該是用於節點間通信的一個主機。
      • 默認為network.host`。
  • discovery.zen.*
    • discovery.zen.minimum_master_nodes
      • 定義大師選舉的法定人數。 必須使用以下公式設置: (M / 2) + 1其中M符合條件的主節點數(節點使用node.master: true隱式或顯式)。
      • 默認為1 ,僅對單個節點集群有效!
    • discovery.zen.ping.unicast.hosts
      • 將此節點連接到群集其餘部分的機制。
      • 列出符合條件的主節點,以便節點可以找到群集的其餘部分。
      • 這裡應該使用的值是那些其他節點的network.publish_host
      • 默認為localhost ,這意味著它只在本地計算機上查找要加入的集群。

存在什麼類型的設置?

Elasticsearch提供三種不同類型的設置:

  • 群集範圍的設置
    • 這些是適用於群集中所有內容的設置,例如所有節點或所有索引。
  • 節點設置
    • 這些設置僅適用於當前節點。
  • 索引設置
    • 這些設置僅適用於索引。

根據設置,它可以是:

  • 在運行時動態更改
  • 在重新啟動(關閉/打開)索引後更改
    • 某些索引級設置不需要關閉和重新打開索引,但可能需要強制重新合併索引才能應用設置。
      • 索引的壓縮級別是此類設置的示例。它可以動態更改,但只有新才能利用此更改。因此,如果索引不會更改,那麼它永遠不會利用更改,除非您強制索引重新創建其段。
  • 重新啟動節點後更改
  • 重新啟動群集後更改
  • 從未改變過

請務必查看您的Elasticsearch版本的文檔,了解您可以或不可以對設置執行的操作。

我該如何應用設置?

您可以通過幾種方式設置設置,其中一些不建議:

  • 命令行參數

在Elasticsearch 1.x和2.x中,您可以將大多數設置作為帶有es.前綴的Java系統屬性提交es.

$ bin/elasticsearch -Des.cluster.name=my_cluster -Des.node.name=`hostname`

在Elasticsearch 5.x中,此更改是為了避免使用Java系統屬性,而是使用自定義參數類型, -E代替-Des.

$ bin/elasticsearch -Ecluster.name=my_cluster -Enode.name=`hostname`

當使用Puppet,Chef或Ansible等工具啟動和停止集群時,這種應用設置的方法非常有用。但手動操作時效果很差。

  • YAML設置
    • 如示例所示
  • 動態設置
    • 如示例所示

應用設置的順序是最動態的順序:

  1. 瞬態設置
  2. 持久設置
  3. 命令行設置
  4. YAML(靜態)設置

如果將設置設置為兩次,則在任何一個級別設置一次,則最高級別生效。

Elasticsearch配置 相關例子