0

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

php 中的 datastax 驱动使用的函数是一样的:

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

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

请帮助在这方面可以做些什么。

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

对于节点工具状态:

数据中心: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
4

1 回答 1

0

我遇到了类似的问题,但是通过强制本地 DC 的节点与本地 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]));
于 2018-10-29T05:37:06.957 回答