Elasticsearch 配置

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 系統屬性:

$ 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(靜態)設定

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