我已经建立了一个cassandra集群,最近在同一内部网络中的两台服务器上只有两个节点,硬件配置相同。它适用于cqlsh,一切看起来都很完美。然后我按照datastax网站上的代码示例编写java代码来处理集群并出现问题。该程序有效,它连接到集群并成功写入和读取数据。但是,连接太慢了!我将代码部署在其中一个集群节点所在的同一台机器上,并且连接需要5秒钟。更确切地说,行 session = cluster.connect()占用大部分时间。
我尝试设置另一个cassandra集群,在同一网络中只有一个节点,具有类似的硬件配置。连接大约需要1秒钟。所以我认为在编写代码时我可能会错过一些配置。我花了很长时间寻找答案但却无法得到答案。考虑到5秒的连接时间,我很难考虑将其用作当前数据库的替代品。
此外,这些机器的ping时间在1ms之内,所以我不认为这是网络的问题。使用cqlsh连接到集群也非常快。
cassandra版本是2.1.4,数据存储的maven依赖是
<dependency>
<groupId>com.datastax.cassandra</groupId>
<artifactId>cassandra-driver-core</artifactId>
<version>2.1.4</version>
</dependency>
所以我想知道是否有人可以告诉我为什么连接到只有两个节点的集群需要这么长时间。非常感谢你。
以下是连接到cassandra集群的代码,基本上与其网站中显示的相同。
long start = System.currentTimeMillis();
cluster = Cluster.builder().addContactPoint(node1).addContactPoint(node2).build();
Metadata metadata = cluster.getMetadata();
System.out.printf("Connected to cluster: %s\n",metadata.getClusterName());
System.out.println(metadata.getPartitioner());
session = cluster.connect();
long time = System.currentTimeMillis() - start;
System.out.println("time to connect : " + time);
答案 0 :(得分:2)
我相信我找到了它如此缓慢的原因。这只是因为我在rpc_address
中将0.0.0.0
设置为[cassandra]/conf/cassandra.yaml
。一旦我将其设置为实际IP地址,连接时间从5秒降至0.2秒。
是因为rpc地址会显着影响节点发现时间吗?