我创建了一个带有2个cassandra节点,2个搜索节点和2个Analytics节点的datastax cassandra企业集群。
一切似乎都能正常工作除外,我无法从外部连接到它。如果我在node0服务器上,我可以运行cassandra-cli并连接到端口9160上的cassandra节点但是当我尝试使用datastax-rails gem进行连接时,我得到了#34;没有实时服务器&#34 ;我也尝试过尝试连接本地端口9042的datastax devCenter,但也没有工作。我真的很困惑,任何帮助都表示赞赏。
所以经过一番挖掘后我发现了一些问题
1. Port 9160 is connected and I can connect to it from telnet node0_ip 9160
2. when I run rake ds:migrate, I get No live servers in node0_ip
3. I tried to connect to 'cassandra' gem instead from IRB and tried
a. client = Cassandra.new('example', 'node0_ip:9160')
b. client.insert(:users, "5", {'screen_name' => "buttonscat4"})
I got a similar error with ThriftClient::NoServersAvailable: No live servers but this time with all the IPs of all the nodes in the cluster
4. I tried adding "client.disable_node_auto_discovery!" and I was able to connect and add stuff using 'cassandra' Gem.
5. I also found on https://github.com/cassandra-rb/cassandra/issues/171 that I need to change your server to bind on a non-loopback address but have no idea what does that mean
现在的问题是如何
答案 0 :(得分:1)
听起来您需要在端口9160上向外部打开EC2安全组。特别是您node0
正在使用的安全组。
您可以在此处找到有关它们的更多信息:
http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html
答案 1 :(得分:0)
我遇到了同样的错误,并使用disable_node_auto_discovery让它工作!
你可以在文档中看到这个方法说“当cassandra集群在内部通过不同于你用来连接的IP地址进行内部通信时,这主要是有用的。这个例子就是当使用EC2时通常,集群将通过亚马逊发布的本地IP地址进行通信,但是从EC2外部连接的任何客户端都需要使用公共IP。“
http://rdoc.info/github/cassandra-rb/cassandra/master/Cassandra:disable_node_auto_discovery!