我正在玩最新版本的DSE Enterprise。我对图表功能很感兴趣。我目前在Titan上运行了一个启动DSE Graph的开源图形数据库项目,并且我试图将DSE Graph评估为替换数据库,因为Titan缺少许多管理和操作功能。
我的问题如下:
尝试使用nodejs驱动程序在数据集群上执行图查询时,我有一种奇怪的行为。查询正在运行(我可以添加或删除顶点),但在客户端(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 studio时,我的查询正在运行。我可以看到新添加的顶点...
以下是用于调用dse graph的代码:
'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)。
你知道为什么查询有效,但我在成功回调中得到了这个奇怪的信息吗?
此致
Toufic Zayed
答案 0 :(得分:0)
作为stated in the docs,您不应在执行每个查询后调用shutdown。
通常,每个应用程序应使用一个Client
实例。您应该在应用程序中的模块之间共享该实例。
您应该只在应用程序的生命周期内调用client.shutdown()
一次,通常是在关闭应用程序时。
答案 1 :(得分:0)
感谢Jorge的帮助,我添加了这一行来记录驱动程序收到的所有事件:
client.on(' log',console.log)
我在日志中注意到,当我调用我的EC2服务器的公共地址时(因为我的客户端在我的VPC之外),该节点尝试使用它们之间的私有接口进行通信。公共和私人地址的混合导致了这个问题。
这是我所做的,它解决了问题,但我不知道它是否是正确的答案。
我修改了每个节点上的cassandra.yaml文件,并将broadcast_rpc_address设置为每个实例的公共地址。
现在我的查询正在运行。
唯一剩下的问题是:有没有更好的方法来处理使用Cassandra的公共和私人IP的混合?
我是否通过将broadcast_rpc_address设置为EC2实例的公共IP而做错了什么?