我正在使用Elasticsearch食譜。是否可以使用單個運行列表動態構建Elastic Cluster?
我的終極目標是:
- 有4個或更多先前部署的虛擬機的未配置到 運行ES
- 我申請相同的配方/運行列表所有這些節點,並將其安裝 並配置ES簇對我來說
在我開始走下這條路之前,我想知道這是否甚至可能,或者是否有節點特定的配置,使得無法用單個運行列表。
如果節點預先配置了我想要的主機名和IP,我可以使用節點屬性在配置中插入此信息。我可以有一個配方隨機選擇四個或更多節點中的三個成爲主碎片?
我正在使用Elasticsearch食譜。是否可以使用單個運行列表動態構建Elastic Cluster?
我的終極目標是:
在我開始走下這條路之前,我想知道這是否甚至可能,或者是否有節點特定的配置,使得無法用單個運行列表。
如果節點預先配置了我想要的主機名和IP,我可以使用節點屬性在配置中插入此信息。我可以有一個配方隨機選擇四個或更多節點中的三個成爲主碎片?
這是絕對可能的。可能有一個更好的做法(如果是這樣請分享),但我可以使用Chef search和標籤(儘管我正在爲領事撰寫食譜,而不是ES)創建一個像這樣的動態集羣。
搜索任何標記爲主要ES主節點的主廚。如果沒有找到,則將當前節點彙總爲主節點。如果存在主設備,則將當前節點作爲從設備進行會聚。
您的廚師搜索結果將包含ES master的所有節點信息。而不是維護預先配置的IP和主機名,將其從搜索結果的節點對象中拉出(允許縮放)。
以下代碼片段假定您有一個master.rb
配方和一個slave.rb
配方。
es_servers = search(
:node,
"tags:elasticsearch AND chef_environment:#{node.chef_environment}"
)
if es_servers.length < 1 || tagged?('elasticsearch')
# Configure this node with as ES master
# ..
include_recipe 'es::master'
# tag this node as a server
tag('elasticsearch') unless tagged?('elasticsearch')
else
# There are already 1 ES servers.
include_recipe 'es::slave'
end
警告:*如果你的食譜中添加4個節點,並在同一時間執行廚師的客戶,他們都會旋轉起來作爲主節點。對於羣集的初始構建,首先構建主控制器,然後再構建你的從屬控制器。
附註:不要將Elastic的社區食譜與廚師本身的限制混爲一談。如果你能描述得足夠好,你可以隨時編寫軟件來做你想做的事。 – coderanger
我沒有發現任何特定於節點的配置會阻止您這樣做。您最大的問題是Elastic本身,而不是任何社區食譜 - 但是如果您在構建羣集之前已經知道羣集中節點的IP,則只需編寫配置文件,其餘部分由ES處理。 – Martin
因此,至少我必須維護一個節點IP清單,並確保它與實際節點的IP同步? – red888