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
。
- 這可能是一個陣列,它告訴 Elasticsearch 當前機器的哪些地址也要繫結套接字。
-
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 設定
- 如示例所示
- 動態設定
- 如示例所示
應用設定的順序是最動態的順序:
- 瞬態設定
- 持久設定
- 命令列設定
- YAML(靜態)設定
如果將設定設定為兩次,則在任何一個級別設定一次,則最高階別生效。