由于节点在其自己的种子列表中,因此无法与任何种子闲聊但仍在继续

时间:2017-08-09 07:55:04

标签: amazon-ec2 cassandra nodetool

要从AWS中的2节点集群中删除节点,我运行

nodetool removenode <Host ID>

在此之后,如果我正确地放置了所有cassandra.yamlcassandra-rackdc.properties,我应该让我的群集恢复。 我做了但仍然,我无法恢复我的群集。

nodetool status只显示一个节点。

cassandra上的重要system.log是:

INFO  [main] 2017-08-14 13:03:46,409 StorageService.java:553 - Cassandra version: 3.9
INFO  [main] 2017-08-14 13:03:46,409 StorageService.java:554 - Thrift API version: 20.1.0
INFO  [main] 2017-08-14 13:03:46,409 StorageService.java:555 - CQL supported versions: 3.4.2 (default: 3.4.2)
INFO  [main] 2017-08-14 13:03:46,445 IndexSummaryManager.java:85 - Initializing index summary manager with a memory pool size of 198 MB and a resize interval of 60 minutes
INFO  [main] 2017-08-14 13:03:46,459 MessagingService.java:570 - Starting Messaging Service on /172.15.81.249:7000 (eth0)
INFO  [ScheduledTasks:1] 2017-08-14 13:03:48,424 TokenMetadata.java:448 - Updating topology for all endpoints that have changed
WARN  [main] 2017-08-14 13:04:17,497 Gossiper.java:1388 - Unable to gossip with any seeds but continuing since node is in its own seed list
INFO  [main] 2017-08-14 13:04:17,499 StorageService.java:687 - Loading persisted ring state
INFO  [main] 2017-08-14 13:04:17,500 StorageService.java:796 - Starting up server gossip

文件内容:

cassandra.yaml https://pastebin.com/A3BVUUUr

cassandra-rackdc.properties https://pastebin.com/xmmvwksZ

system.log https://pastebin.com/2KA60Sve

netstat -atun https://pastebin.com/Dsd17i0G

两个节点都有相同的错误日志。

所有必需的端口都已打开。

有什么建议吗?

2 个答案:

答案 0 :(得分:5)

如果您的数据中心只有两个节点可用,那么每个DC 一个种子节点通常是最佳做法。在这种情况下,您不应该将每个节点都设为种子节点。

我注意到node1在您的配置中有- seeds: "node1,node2",node2有- seeds: "node2,node1"。如果节点可以在- seeds: ...配置文件的cassandra.yml部分中找到它的IP地址作为第一个元素,则默认情况下将启动节点而不联系任何其他种子。这也是您在日志中可以找到的内容:

... Unable to gossip with any seeds but continuing since node is in its own seed list ...

我怀疑,在你的情况下,node1和node2在没有相互联系的情况下开始,因为它们将自己标识为种子节点。

尝试在两个实例的配置中仅使用 node1 作为种子节点,然后重新启动群集。 如果node1关闭且node2启动,则必须将node1配置中的- seeds: ...部分更改为仅指向node2的IP地址,并且仅启动node1。

如果您的节点由于防火墙配置错误而无法找到对方,那么通常这是验证特定端口是否可以从其他位置访问的好方法。例如。您可以使用nc来检查某个端口是否已打开:

nc -vz node1 7000

参考和链接

请参阅以下链接中Cassandra正在使用的端口列表 http://docs.datastax.com/en/cassandra/3.0/cassandra/configuration/secureFireWall.html

另请参阅使用大量示例命令运行多个节点的详细文档: http://docs.datastax.com/en/cassandra/2.1/cassandra/initialize/initializeMultipleDS.html

答案 1 :(得分:0)

这是供将来参考。只需在AWS中为同一安全组打开7000端口,我的问题就解决了。虽然它是开放的,但安全组是不同的。 我跑的时候:

store.getState()

我开始知道安全组可能存在问题。 这就是它如何解决。

关于种子我正在使用两个节点的IP,如下所示:

ec2-user@ip-Node1 ~]$ telnet Node2 7000
Trying Node2...
telnet: connect to address Node2: Connection timed out

两个节点都相同。