尝试为APP构建器提供多个联系点以连接到cassandra时看到ERROR

时间:2016-06-23 18:18:27

标签: cassandra datastax

我团队中的应用程序开发人员正在开发一个App构建器来连接cassandra,在属性文件中我看到他只使用了一个联系点,我已经要求他将所有种子节点包含为联系点并更改复制来自对NetworkTopologystrategy的简单策略和代码看起来像这样

cassandra.contactPoint=52.xxx.xx.xxx,52.xxx.xx.xxx,10.xxx.xx.xxx,10.xxx.xx.xxx
cassandra.replicationFactor={ 'class' : 'NetworkTopologyStrategy', 'DC1' :'3' , 'DC2' : '3'}
cassandra.dataCenter=DC1   
cassandra.createKeyspace=false

然后我们看到了以下错误

  

调用init方法失败;嵌套异常是   java.lang.IllegalArgumentException异常:   52.xxx.xx.123,52.xxx.xx.125,10.xxx.xx.xxx,10.xxx.xx.xxx com.datastax.driver.core.Cluster $ Builder.addContactPoint(Cluster.java:749 )

所以我让他在DC1中包含种子节点,然后我们重新启动并看到了这个错误

  

会话错误 - 将池创建到/52.xxx.xx.125:9042时出错   by:java.net.ConnectException:连接被拒绝:/52.xxx.xx.125:9042

我对此有几个问题

  1. cassandra.datacenter()做了什么?我们是否需要指定特定DC中​​存在的接触点?如果是这样,如果我需要包含涉及两个DC的种子节点,我应该添加什么?

  2. 即使在指定属于该特定DC的节点之后,我们也会遇到错误。这是因为我们提到的复制因素吗?它的语法是否正确?

1 个答案:

答案 0 :(得分:0)

连接到群集与复制因子无关。连接到群集时,您通常希望指定足够的节点IP地址,以确保在应用尝试连接时,其中至少有一个已启动。关于种子节点,拇指的规则是在群集中每3个节点具有1个种子节点(这基于部署而不是太多而改变)。 至于第一个例外,请确保为drivers方法addContactPoints提供节点列表参数,该方法接受字符串列表。第二个错误看起来像您指定的端口已关闭,或者您在cassandra.yaml中定义了一些其他端口 当您连接到第一个节点时,驱动程序会获取群集的拓扑,因此此列表不会定义它将连接到哪个数据中心。数据中心隔离强制使用语句上的一致性级别。