簡體   English   中英

Datastax Cassandra驅動程序默認負載平衡策略問題

[英]Issues with Datastax Cassandra driver default load balancing policy

如記錄所示,這是TokenAware(DCAwareRoundRobinPolicy)。 我的集群配置如下所示

lazy val session = {
val poolOptions = new PoolingOptions()
poolOptions.setMaxConnectionsPerHost(HostDistance.LOCAL, config.getInt("pooling.max-local"))
poolOptions.setCoreConnectionsPerHost(HostDistance.LOCAL, config.getInt("pooling.min-local"))
poolOptions.setMaxConnectionsPerHost(HostDistance.REMOTE, config.getInt("pooling.max-remote"))
poolOptions.setCoreConnectionsPerHost(HostDistance.REMOTE, config.getInt("pooling.min-remote"))
Cluster.builder.addContactPoints(hosts)
    .withPoolingOptions(poolOptions)
    .build
    .connect
}

我的集群如下所示:

DC1

10.dc1.rac1.ip1

10.dc1.rac2.ip1

DC2

10.dc2.rac1.ip1

10.dc2.rac2.ip1

應用程序正在第五台不相關的計算機上運行。 問題似乎與localDc自動發現有關。 根據源代碼,驅動程序應將本地DC檢測為主機列表中的第一個節點。 發生的情況如下:

  • 如果hosts = [10.dc1.rac1.ip1,10.dc2.rac1.ip1],則應用將以NoHostAvailableException在50/50的基礎上成功運行。 本地直流將是“ dc1”或“ dc2”

  • 如果hosts = [10.dc1.rac1.ip1,10.dc1.rac2.ip1],則應用程序將始終失敗,並顯示NoHostAvailableException。 本地Dc將錯誤地為“ dc2”。 如果我使用其他兩台機器,情況也是如此。 應用程序的注釋位置未更改。

  • 如果我在構建器中手動設置了localDc,那么一切都會按需進行。 但這無關緊要,因為廣告功能應該可以回退到另一個數據中心。

同樣,驅動程序似乎正在嘗試連接到localhost,盡管沒有運行cassandra實例,並且在配置中沒有提及它。 乍一看,所有這些似乎都是一個錯誤,但是考慮到我的配置的簡單性和datastax驅動程序的豐富經驗,我會感到驚訝。

編輯:道歉,應該提到我正在使用3.0.0

上面的安迪·托伯特(Andy Tolbert)對於正在尋找的任何人都有正確的答案。 不幸的是,默認設置(以及除此以外在每台計算機上顯式配置正確地址的任何設置)似乎都不允許您同時接受來自本地和遠程主機的連接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM