【问题标题】:Cassandra requesting data from a node which is down?Cassandra 从已关闭的节点请求数据?
【发布时间】:2014-11-25 21:15:57
【问题描述】:

设置: 2 个节点,Ec2Snitch
1 个节点 UP 54.1xx.1xx.1xx

1 个节点宕机 54.1xx.2xx.1xx [故意]

Keyspace NetworkTopology 复制因子为 2 (两个节点都有数据)

现在我测试了一致性级别 ONE 的读取。

我收到“尝试查询的所有主机都失败。第一个主机尝试,54.1xx.2xx.1xx:主机被视为关闭。请参阅 innerErrors。”
为已关闭的节点获取此信息。

为什么会出现这个异常? Cassandra 不应该自动为来自节点的所有请求提供服务吗? [我期待 Cassandra 能够处理它。]

或者我们应该处理一个 DN (Down Normal) 的节点 我该如何处理?

如果我手动将 Down 节点设为 Up,我会收到所有响应,否则我会在总请求的前 1/4 收到上述错误。

【问题讨论】:

  • 您使用的是什么客户端,客户端知道哪些节点?
  • 我正在使用 DataStax Node.js Driver for Cassandra` var reader = new cassandra.Client({ contactPoints: ['54.1xx.1xx.1xx.compute-1.amazonaws.com', '54.1xx .1xx.1xx.compute-1.amazonaws.com'],queryOptions:{一致性:cassandra.types.consistencies.any,},策略:{loadBalancing:新 cassandra.policies.loadBalancing.DCAwareRoundRobinPolicy(localDc,remoteNodes)}, });`
  • 你可以在client.connect之后查看发现了哪些节点,并检查发现时是否有问题:client.hosts.keys()
  • hosts.keys() 给我两个ip地址。
  • 您可以启用日志记录以查看发生了什么:github.com/datastax/nodejs-driver#logging 和错误innerErrors 将为您提供每个节点失败的详细信息。

标签: node.js cassandra consistency


【解决方案1】:

Cassandra 的 DataStax Node.js 驱动程序中的默认负载平衡策略是 TokenAwarePolicy with DCAwareRoundRobinPolicy as child policy。 DCAwareRoundRobinPolicy 默认设置为使用 0 个远程节点。

如果本地节点发生故障,您可以将其更改为使用每个远程数据中心的 1 个节点。

var localDc = "east1";
var remoteNodes = 1;
var options = { 
  policies: {loadBalancing: new DCAwareRoundRobinPolicy(localDc, remoteNodes)}
};
var client = new Client(options);

【讨论】:

  • 我仍然遇到同样的异常。
  • 如果我的请求是连续的,我能够传递所有请求。但是,如果我在 for 循环中发出执行请求,我会出错,我在 node.js 上很天真,想一起测试多个读取
猜你喜欢
  • 2018-01-03
  • 2015-01-12
  • 2020-05-15
  • 2013-12-29
  • 2022-01-09
  • 2015-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多