2016-08-08 49 views
0

我正在使用Elasticsearch食譜。是否可以使用單個運行列表動態構建Elastic Cluster?

我的終極目標是:

  • 有4個或更多先前部署的虛擬機的未配置到 運行ES
  • 我申請相同的配方/運行列表所有這些節點,並將其安裝 並配置ES簇對我來說

在我開始走下這條路之前,我想知道這是否甚至可能,或者是否有節點特定的配置,使得無法用單個運行列表。

如果節點預先配置了我想要的主機名和IP,我可以使用節點屬性在配置中插入此信息。我可以有一個配方隨機選擇四個或更多節點中的三個成爲主碎片?

+0

附註:不要將Elastic的社區食譜與廚師本身的限制混爲一談。如果你能描述得足夠好,你可以隨時編寫軟件來做你想做的事。 – coderanger

+0

我沒有發現任何特定於節點的配置會阻止您這樣做。您最大的問題是Elastic本身,而不是任何社區食譜 - 但是如果您在構建羣集之前已經知道羣集中節點的IP,則只需編寫配置文件,其餘部分由ES處理。 – Martin

+0

因此,至少我必須維護一個節點IP清單,並確保它與實際節點的IP同步? – red888

回答

2

這是絕對可能的。可能有一個更好的做法(如果是這樣請分享),但我可以使用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個節點,並在同一時間執行廚師的客戶,他們都會旋轉起來作爲主節點。對於羣集的初始構建,首先構建主控制器,然後再構建你的從屬控制器。

相關問題