我最近開始在我們的Production environment
中使用Cassandra
。我們有24 node cluster
和replication factor of 4
。含義2 copies
將在each datacenter
。因此,這意味着我們有一個單一的跨色碼羣集24 nodes
,這意味着12 nodes in SLC colo
和12 nodes in PHX colo
。astyanax僅支持本地節點的自動發現模式嗎?
我使用Astyanax client
來寫入數據在Cassandra database
。現在我試圖弄清楚Astyanax client
有沒有什麼辦法可以找出所有的nodes in the PHX colo or SLC colo
而不是所有的節點?
在我的setSeeds
方法中,我將通過僅與one datacenter
相關的節點。它將是SLC或PHX。所以,如果你看看我的下面的代碼,我已經在我的setSeeds method
中指定了2個節點,並且所有這些節點都屬於PHX colo
。現在我試圖啓用自動發現模式,但僅限於特定的顏色。所以在我的情況下,它應該能夠檢測PHX colo的12個節點,而不是所有的24個節點。
下面是我的代碼中,我使用ConnectionPoolType
作爲TOKEN_AWARE
它默認使用NodeDiscoveryType
作爲RING_DESCRIBE
那會告訴我所有的24 nodes
相當於兩個colos/datacenter
,這就是我不想要什麼。我需要讓每個colo/datacenter對應的所有節點
任何想法如何使用Astyanax客戶端實現這種情況?這可能嗎?
private CassandraAstyanaxConnection() {
context = new AstyanaxContext.Builder()
.forCluster(ModelConstants.CLUSTER)
.forKeyspace(ModelConstants.KEYSPACE)
.withConnectionPoolConfiguration(new ConnectionPoolConfigurationImpl("MyConnectionPool")
.setPort(9160)
.setMaxConnsPerHost(40)
.setSeeds("cdb03.vip.phx.host.com:9160,cdb04.vip.phx.host.com:9160")
)
.withAstyanaxConfiguration(new AstyanaxConfigurationImpl()
.setCqlVersion("3.0.0")
.setTargetCassandraVersion("1.2")
.setConnectionPoolType(ConnectionPoolType.TOKEN_AWARE))
.withConnectionPoolMonitor(new CountingConnectionPoolMonitor())
.buildKeyspace(ThriftFamilyFactory.getInstance());
context.start();
keyspace = context.getEntity();
emp_cf = ColumnFamily.newColumnFamily(
ModelConstants.COLUMN_FAMILY,
StringSerializer.get(),
StringSerializer.get());
}
在短期確實只有本地節點astynanx支持自動發現?
爲什麼我問這是因爲RING_DESCRIBE,它會給我所有的節點都來自colo。所以假設如果我從PHX colo運行我的程序,那麼它可能會去SLC colo來獲取數據,並且因爲我看到非常差的寫入性能,因爲PHX和SLC之間的ping時間爲15-20毫秒。
我已經試過這個,但它總是給我所有數據中心的所有節點。 – ferhan 2013-05-09 16:54:12