2017-03-24 140 views
6

看看akka cluster documentation它似乎必須知道服務器&至少1個「種子節點」的端口值加入羣集。這個例子application.conf清楚地表明,開發者需要知道的「主機1」和「主機2」寫入文件時:Akka集羣加入DNS負載平衡

akka.cluster.seed-nodes = [ 
    "akka.tcp://[email protected]:2552", 
    "akka.tcp://[email protected]:2552"] 

但是,考慮註冊一個DNS負載平衡器每個羣集節點的可能性。例如:可以在名爲「foobar.cluster.com」後面實例化10個節點,這些節點全部使用負載均衡器註冊,以便負載均衡器將每個新連接發送到10個節點輪循模式之一。

我可以設置種子節點爲"akka.tcp://[email protected]:2552"嗎?

換句話說,是否可以使用動態負載平衡名稱加入akka集羣?

先驗有一個潛在的問題:節點可能會在第一次嘗試時將自己作爲種子節點。對這個問題的一個可能的解決方案是把相同的種子節點值多次在conf文件,以獲得最終連接到不同的節點的概率高:

akka.cluster.seed-nodes = [ 
    "akka.tcp://[email protected]:2552", 
    "akka.tcp://[email protected]:2552", 
    "akka.tcp://[email protected]:2552"] 

但阿卡可能只是所有這些值降低到單一呼叫,因爲他們都完全一樣...

非常感謝您的考慮和迴應。

回答

2

這是可能的,但您必須自己執行DNS解析,然後以編程方式加入羣集。這有點在這裏描述:http://doc.akka.io/docs/akka/current/scala/cluster-usage.html#Joining_to_Seed_Nodes

所以你首先需要你的配置文件包含akka.cluster.seed-nodes = []爲了禁用自動加入。

那麼你就需要解決foobar.cluster.com得到的,實際的節點即01.foobar.cluster.com02.foobar.cluster.com名單,...

你會使用那些加入羣集:Cluster(system).joinSeedNodes(_list_of_nodes_with_port)

最後,請記住,當時the hostname and port pair that Akka binds to will be different than the "logical" host name and port pair that is used to connect to the system from the outside. This requires special configuration