在 EC2 Ruby on Rails 上连接到 datastax 集群上的 cassandra 节点

Posted

技术标签:

【中文标题】在 EC2 Ruby on Rails 上连接到 datastax 集群上的 cassandra 节点【英文标题】:connecting to cassandra nodes on a datastax cluster on EC2 Ruby on Rails 【发布时间】:2014-04-25 03:13:55 【问题描述】:

我创建了一个带有 2 个 cassandra 节点、2 个搜索节点和 2 个 Analytics 节点的 datastax cassandra Enterprise 集群。

似乎一切正常,除了我无法从外部连接到它。如果我在 node0 服务器上,我可以运行 cassandra-cli 并连接到端口 9160 上的 cassandra 节点,但是当我尝试使用 datastax-rails gem 连接时,我得到“没有实时服务器”我还尝试了 datastax devCenter,它试图连接到本机端口 9042 但也没有工作。我真的很困惑,任何帮助表示赞赏。

所以经过一番挖掘,我发现了一些问题

   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

现在的问题是如何

【问题讨论】:

【参考方案1】:

听起来您需要在端口 9160 上向外部开放您的 EC2 安全组。特别是您的 node0 正在使用的安全组。

您可以在此处找到有关它们的更多信息:

http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-network-security.html

【讨论】:

所以我打开了那个端口,我似乎从 telnet 连接到它,但是当我运行 rake ds:create 时,我仍然收到错误“没有实时服务器”我还应该包含我的 datastax.yml 文件设置开发:服务器:[“xx.xx.xx.xxx:9160”]键空间:“my_dse_ks”策略类:“org.apache.cassandra.locator.SimpleStrategy”策略选项:“复制因子”:“2”连接选项:超时:10 次重试:2 server_max_requests:1000 solr:端口:8983 路径:/solr 你真的可以在你的问题中包含这个文件吗?【参考方案2】:

我遇到了同样的错误,并通过使用 disable_node_auto_discovery 让它工作!

您可以在此方法的文档中看到它说“当 cassandra 集群在与您用于连接的 IP 地址不同的 IP 地址上进行内部通信时,这主要是有用的。使用 EC2 时就是一个典型的例子托管集群。通常,集群将通过 Amazon 发布的本地 IP 地址进行通信,但任何从 EC2 外部连接的客户端都需要使用公共 IP。"

http://rdoc.info/github/cassandra-rb/cassandra/master/Cassandra:disable_node_auto_discovery!

【讨论】:

以上是关于在 EC2 Ruby on Rails 上连接到 datastax 集群上的 cassandra 节点的主要内容,如果未能解决你的问题,请参考以下文章

应该如何使用 Amazon Web 服务及其弹性 beantalk 将机密文件推送到 EC2 Ruby on Rails 应用程序?

rackspace vs EC2 vs Heroku vs Engine Yard for ruby​​ on rails [关闭]

尝试从 Ruby on Rails 连接到 postgres(在 docker 容器中)

将 Ruby on Rails 连接到现有的 MySQL 数据库(以前安装的 XAMPP)

如何将 jQuery Datepicker 连接到我的 Ruby on Rails 表单?

使用适用于Ruby on Rails的AWS CI / CI流程进行部署