2013-11-27 34 views
2

當前嘗試安裝與廚師zookeeper合奏。作爲一個配置文件(zoo.cfg)的一部分,我們需要列出如下合奏的服務器(該文件必須具有相同的順序翻過樂團的所有成員)應用廚師標籤並立即使用搜索

initLimit=5 
syncLimit=2 
server.1=zoo1:2888:3888 
server.2=zoo2:2888:3888 
server.3=zoo3:2888:3888 

所以我認爲這可能會很高興通過搜索我標記爲zookeeper服務器的節點生成此列表。我使用的語法

zk_servers = search(:node, "tags:#{node[:zookeeper][:tag]} AND chef_environment:#{node.chef_environment}") 

所以我的問題是,當我去安裝,然後配置的第一臺服務器我沒有得到任何結果,因爲沒有SOLR索引標記的節點。無論如何要強制執行我在早期配方中應用的標籤在同一個運行中被索引和搜索?

我可以操縱結果,但我寧願讓搜索結果更具動態性?

當運行完成並且我們報告了結果時,Solr是否只保存標籤?

回答

2

正常情況下,在運行報表處理程序並完成運行之前,一個節點在其Chef運行期間收集的信息會保存回服務器一次。因此,廚師服務器(及其搜索組件)只能在廚師成功運行後對數據進行索引。

這就是說,你可以強制保存(和迄今收集到的信息,隨後指數),通過配方運行

node.save 

。然而,這可能是不夠的,因爲數據的索引是異步的,並且在您再次查詢數據時可能無法完成。您可能需要等待一段時間才能完成索引(即在循環中查詢服務器,如果包含當前節點,則繼續,不等待幾秒鐘後再重試)。

由於這是相當乏味的,一種常見的模式是像搜索節點一樣搜索節點,然後在適用的情況下使用當前節點「豐富」返回的數據。這可能看起來像這樣:

zk_servers = search(:node, "tags:#{node[:zookeeper][:tag]} AND chef_environment:#{node.chef_environment}") 
zk_servers << node if tagged?(node[:zookeeper][:tag]) && zk_servers.none?{|zk_server| zk_server.name == node.name} 
+0

這很有道理。我想使用消息隊列是什麼讓它異步? 豐富目前的結果絕對是我​​現在可以做的。 感謝幫助 – PatrickWalker