我在玩DSE Enterprise的最后一个版本。我对图形特征很感兴趣。目前,我有一个项目运行在Titan上,这个开源图形数据库启发了DSE图,我试图将DSE图作为替代数据库进行评估,因为Titan缺少许多管理和操作功能。
我的问题是:
在使用nodejs驱动程序在datastax集群上执行图形查询时,我有一个奇怪的行为。查询正在工作(我可以添加或删除顶点),但是在客户端(nodejs驱动程序),在5到7秒之后,我总是会得到一个连接超时错误,如下所示:
{
"statusCode": 200,
"body": {
"info": {
"queriedHost": "xx.xx.xx.xx:9042",
"triedHosts": {
"xx.xx.xx.xx:9042": {
"message": "Connection timeout",
"info": "Cassandra Driver Error"
}
},
"achievedConsistency": 10
},
"length": 1,
"pageState": null
}
}但是,当我查看datastax时,我的查询是有效的。我能看到新增加的顶点..。
下面是调用dse图的代码:
'use strict';
const dse = require('dse-driver');
const dseGraph = require('dse-graph');
const client = new dse.Client({
contactPoints: ['xx.xx.xx.xx'] ,
protocolOptions: {port: 9042},
authProvider: new dse.auth.DsePlainTextAuthProvider("xxx","xxx"),
graphOptions: { name: 'test' }
});
module.exports.create = (event, context, callback) => {
let response = {
statusCode: 200
};
client.executeGraph("graph.addVertex(label,'user','email','c@b');").then(function(users) {
response.body=users;
client.shutdown();
callback(null, response);
}).catch(function(err) {
response.statusCode=400;
response.body=err;
client.shutdown();
callback(null, response);
});
};可能是我的集群配置出现了问题吗?
以下是我的拓扑结构:
所有设置都是默认设置。我已经通过OpsCenter安装了集群,我的所有节点都是ec2实例(m4.xlarge)。
您知道查询为什么会工作吗?但是我在成功回调中得到了一条奇怪的消息?
致以敬意,
图基基扎耶德
发布于 2017-03-28 13:20:00
作为在文档中注明,您不应该在每个查询执行之后调用关机。
通常,每个应用程序都应该使用一个Client实例。您应该在应用程序中的模块之间共享该实例。
您应该只在应用程序生命周期中调用client.shutdown()一次,通常是在关闭应用程序时。
发布于 2017-03-28 22:11:17
感谢Jorge帮助,我添加了这一行来记录驱动程序收到的所有事件:
client.on('log',console.log)
我在日志中注意到,当我调用EC2服务器的公共地址时(因为我的客户端在VPC之外),节点试图使用它们之间的私有接口进行通信。公共和私人地址的混合造成了这个问题。
这就是我所做的,它解决了问题,但我不知道这是否是正确的答案。
我修改了每个节点上的cassandra.yaml文件,并将broadcast_rpc_address设置为每个实例的公共地址。
现在我的疑问已经开始运作了。
唯一剩下的问题是:是否有更好的方法使用Cassandra来处理公共和私有IP的混合?
通过将broadcast_rpc_address设置为EC2实例的公共IP,我是否做错了什么?
https://stackoverflow.com/questions/43067912
复制相似问题