在使用DCAwareRoundRobinPolicy时,请阅读在远程主机上搜索

时间:2017-08-11 09:41:37

标签: go cassandra gocql

我正在使用DCAwareRoundRobinPolicy进行cassandra连接。但是我的驱动程序查询所花费的时间比我在php中使用相同的连接参数时要大。

php中的datastax驱动程序使用相同的函数:

withDatacenterAwareRoundRobinLoadBalancingPolicy(
   string $localDatacenter, int $hostPerRemoteDatacenter, 
   bool $useRemoteDatacenterForLocalConsistencies )

当最后一个参数设置为false时,仅使用本地主机进行查询。 但是此参数设置在gocql驱动程序中不可用。我猜这可能导致我面临的问题。如果我错了,请纠正我。

请在这方面提供帮助。

当我在群集中只有一个节点时,我没有遇到这个问题。

对于nodetool状态:

数据中心:DC1

Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address Load Tokens Owns Host ID Rack
UN 206.* 298.89 GB 1 ? de58dea3-7d16-4318-8549-a34d42aa3d65 RAC1
UN 206.* 287.63 GB 1 ? b312ce3d-c23f-476e-9396-3f8ec2219425 RAC1
UN 206.* 280.08 GB 1 ? c82f1f90-bca6-4438-bc43-68bf370a555a RAC1
UN 206.* 260.61 GB 1 ? 95b33f1f-d282-42ea-974b-987552932535 RAC1
UN 206.* 301.05 GB 1 ? 4725e34f-9368-4c18-85ef-6cd96352b73e RAC1

数据中心:DC3

Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address Load Tokens Owns Host ID Rack
UN 173.* 262.16 GB 256 ? 283afa18-d085-4ff0-b410-e0f5fd368669 RAC1
UN 173.* 292.17 GB 256 ? b59a0d6c-2f77-4912-a0ad-eae3687aabbc RAC1
UN 173.* 253.07 GB 256 ? 44b6e01a-f6f1-471c-95a2-ff66f6188438 RAC1
UN 173.* 281.6 GB 256 ? 43d1a656-5aeb-42a9-bfee-c11f1a0a76dc RAC1
UN 173.* 250.6 GB 256 ? ceb40080-012c-4446-8a6b-220ffa472ddc RAC1

1 个答案:

答案 0 :(得分:0)

我遇到了类似的问题,但是通过迫使本地DC的节点与LOCAL DC节点联系;我能够为我解决此问题。

您可以通过将localDC设置为localDC的名称并同时从本地DC添加联系人来强制节点首先与本地DC节点联系。

DCAwareRoundRobinPolicy.builder().withLocalDc(getLocalDC());

StringTokenizer tokenizer = new StringTokenizer(getCassandraHostsOfLocalDC().trim(),",");
while(tokenizer.hasMoreElements()){
    contactPoints.add(tokenizer.nextToken().trim());
}
builder.addContactPoints(contactPoints.toArray(new String[0]));