java - 节点工具状态: "error: No nodes present in the cluster. Has this node finished starting up?"

标签 java cassandra cluster-computing cassandra-2.0

我正在尝试使用以下节点配置设置 2 节点 cassandra-2.1 集群:

Cluster Name: 'Cluster1'
num_tokens: 256
listen_address: 10.20.0.52/10.20.0.53
rpc_address: 10.20.0.52/10.20.0.53
class_name: org.apache.cassandra.locator.SimpleSeedProvider
parameters:
    # seeds is actually a comma-delimited list of addresses.
    # Ex: "<ip1>,<ip2>,<ip3>"
    - seeds: "10.20.0.52"

我首先启动种子节点 (52),然后检查 nodetool status 并仅返回 52 的数据。但随后我启动​​ (53),nodetool status 在几秒钟后抛出以下异常:

-- StackTrace --
java.lang.RuntimeException: No nodes present in the cluster. Has this node finished starting up?
        at org.apache.cassandra.dht.Murmur3Partitioner.describeOwnership(Murmur3Partitioner.java:131)
        at org.apache.cassandra.service.StorageService.getOwnership(StorageService.java:3912)
        at sun.reflect.GeneratedMethodAccessor26.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:497)
        at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71)
        at sun.reflect.GeneratedMethodAccessor2.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:497)
        at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275)
        at com.sun.jmx.mbeanserver.StandardMBeanIntrospector.invokeM2(StandardMBeanIntrospector.java:112)
        at com.sun.jmx.mbeanserver.StandardMBeanIntrospector.invokeM2(StandardMBeanIntrospector.java:46)
        at com.sun.jmx.mbeanserver.MBeanIntrospector.invokeM(MBeanIntrospector.java:237)
        at com.sun.jmx.mbeanserver.PerInterface.getAttribute(PerInterface.java:83)
        at com.sun.jmx.mbeanserver.MBeanSupport.getAttribute(MBeanSupport.java:206)
        at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.getAttribute(DefaultMBeanServerInterceptor.java:647)
        at com.sun.jmx.mbeanserver.JmxMBeanServer.getAttribute(JmxMBeanServer.java:678)
        at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1443)
        at javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:76)
        at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1307)
        at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1399)
        at javax.management.remote.rmi.RMIConnectionImpl.getAttribute(RMIConnectionImpl.java:637)
        at sun.reflect.GeneratedMethodAccessor6.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:497)
        at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:323)
        at sun.rmi.transport.Transport$1.run(Transport.java:200)
        at sun.rmi.transport.Transport$1.run(Transport.java:197)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.rmi.transport.Transport.serviceCall(Transport.java:196)
        at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:568)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$250(TCPTransport.java:683)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler$$Lambda$1/1165999373.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682)

但在非种子节点 (53) 上,它返回标准输出,其中仅包含其自身 (53) 的详细信息。 种子节点 (52) 上的 nodetool gossipinfo 返回有关两个节点的信息:

/10.20.0.52
  generation:1439824481
  heartbeat:2433
  SCHEMA:500091e4-e8ab-303d-9111-8cca7edff2d0
  HOST_ID:2d78ed48-13e8-4fc5-ac55-8b2a6d00c8c5
  NET_VERSION:8
  RELEASE_VERSION:2.1.8-SNAPSHOT
  STATUS:NORMAL,-1091407767707699731
  RPC_ADDRESS:10.20.0.52
  SEVERITY:0.5025125741958618
  DC:DC1
  LOAD:2524926.0
  RACK:RAC1
  INTERNAL_IP:10.20.0.52
/10.20.0.53
  generation:1439824502
  heartbeat:2376
  SCHEMA:500091e4-e8ab-303d-9111-8cca7edff2d0
  NET_VERSION:8
  HOST_ID:2d78ed48-13e8-4fc5-ac55-8b2a6d00c8c5
  RELEASE_VERSION:2.1.8-SNAPSHOT
  STATUS:NORMAL,-1091407767707699731
  RPC_ADDRESS:10.20.0.53
  SEVERITY:0.0
  DC:DC1
  LOAD:2603302.0
  RACK:RAC1
  INTERNAL_IP:10.20.0.53

但是在非种子节点上,它仅显示有关其自身的信息,并且不包括种子节点(52)。

有关 2 个节点的状态/信息之间的另一个差异是 nodetool netstats 的输出,对于种子节点 (52) 显示:

ubuntu@52:~$ nodetool netstats 
Mode: NORMAL
Not sending any streams.
Read Repair Statistics:
Attempted: 0
Mismatch (Blocking): 0
Mismatch (Background): 0
Pool Name                    Active   Pending      Completed
Commands                        n/a         0              0
Responses                       n/a         0           1135

而对于非种子节点(53),完成的请求数量是种子节点的两倍:

ubuntu@53:~$ nodetool netstats 
Mode: NORMAL
Not sending any streams.
Read Repair Statistics:
Attempted: 0
Mismatch (Blocking): 0
Mismatch (Background): 0
Pool Name                    Active   Pending      Completed
Commands                        n/a         0              0
Responses                       n/a         0           2388

源代码 给定堆栈跟踪,我尝试插入一些标志并打印调用 describeOwnership 方法时 L206 Murmur3Partitioner.java 上导致错误的原因: - 种子节点启动时调用该方法 - 当非种子节点引导时调用该方法

两次 token 列表(或sortedTokens)完全相同,但迭代器为空并触发标题中的错误。

注意:两个节点(52,53)上的相关端口(7000,7001)均已打开。

更新#1:因此,我发现(感谢 irc#cassandra channel ),如果两个节点具有相同的 token ,就会产生冲突,并且一个节点将无法引导。

为了解决这个问题,我尝试了以下方法: cqlsh> 删除键空间 ycsb ;

这并没有解决问题 - nodetool Ring 仍然显示与非种子节点对应的相同 token ;我还在关闭 cqlsh 后刷新了更改。然后:

sudo rm -rf /var/lib/cassandra/data/*
sudo rm -rf /var/lib/cassandra/commitlog/*
sudo rm -rf /var/lib/cassandra/saved_caches/*

这仍然没有减少或改变nodetool环中显示的 token 。

感谢任何指导。

最佳答案

罪魁祸首似乎是端口和防火墙规则,它们不允许节点建立双向对称连接以交换驻留在每个节点上的 token 。采取的故障排除步骤是:
1) 在两个节点上使用 nestat -l 查看哪些端口处于打开/监听状态;
2) nmap 从一个节点到另一个节点扫描开放端口。
3) nodetoolring 比较两个节点上的 token
4) 在 logback.xml 中设置 TRACE 日志记录级别,并在单独的日志文件中或输出到 stderr

我还建议您通过#cassandra IRC-channel 讨论您的问题。那里的人们知识渊博,几乎可以实时提供帮助。

希望对你有帮助!

关于java - 节点工具状态: "error: No nodes present in the cluster. Has this node finished starting up?",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32056033/

相关文章:

performance - Cassandra 轻量级事务性能损失

spring-data-jpa - Spring Data Cassandra Reactive - "MappingException Couldn' t 找到类型类 java.lang.Object 的 PersistentEntity”

hash - Redid 3.0集群数据

redis - 在 Ubuntu Server 14.04 中配置 Redis 集群

java - IOException : Permission Denied

java - 通过构造函数从字符串输入中提取多项式变量

java - 如何向 java applet 添加新参数以从 javascript 调用另一个方法?

java - 如何使用带有 Datastax Java 驱动程序的 CQL 向 Cassandra 添加任意列?

Node.js 集群 - 什么决定了负载均衡?

java - 无限 Maven 'target/classes' 文件夹