设定:
2个节点,Ec2Snitch
1个节点UP 54.1xx.1xx.1xx
1个节点关闭54.1xx.2xx.1xx [故意]
Keyspace NetworkTopology复制因子为2
(两个节点都有数据)
现在,我测试了一致性级别为ONE的读取。
我收到“尝试查询的所有主机都失败。尝试了第一台主机,54.1xx.2xx.1xx:主机被视为DOWN。请参阅innerErrors。”为发生故障的节点获取此信息。
为什么我会收到此例外? Cassandra不应该为自动启动的Node服务所有请求吗? [我期待Cassandra处理。]
还是我们应该处理的节点是DN(正常下)
我该如何处理?
如果我手动将Down节点设置为Up,则得到所有响应,否则得到总请求的前1/4的上述错误。
最佳答案
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);