【发布时间】:2018-08-22 21:49:59
【问题描述】:
我在三个环境中使用nodejs,并且Cassandra在所有三个节点中运行。
我完全理解使用nodetool status 我将能够获得每个节点的状态。但问题是如果我的当前节点宕机了,那么我将无法在当前节点执行nodetool状态,那么有没有办法使用nodejs Cassandra驱动来获取状态?
感谢任何帮助。
已编辑:
根据 dilsingi 的建议,我使用了 client.hosts,但问题是,在以下集群中,172.30.56.61 已关闭,但仍显示为可用。 如何获取每个节点的状态?
const cassandra = require('cassandra-driver');
const client = new cassandra.Client({ contactPoints: ['172.30.56.60','172.30.56.61','172.30.56.62'], keyspace: 'test', policies : { loadBalancing : new cassandra.policies.loadBalancing.RoundRobinPolicy }});
async function read() {
client.connect().then(function () {
console.log('Connected to cluster with %d host(s): %j', client.hosts.length, client.hosts.keys());
client.hosts.forEach(function (host) {
console.log(host.address, host.datacenter, host.rack);
});
});
}
read();
nodeTool状态输出:
Datacenter: newyork
===================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address Load Tokens Owns (effective) Host ID Rack
UN 172.30.56.62 1.13 MiB 256 34.8% e93827b7-ba43-4fba-8a51-4876832b5b22 rack1
DN 172.30.56.60 1.61 MiB 256 33.4% e385af22-803e-4313-bee2-16219f73c213 rack1
UN 172.30.56.61 779.4 KiB 256 31.8% be7fc52e-c45d-4380-85a3-4cbf6d007a5d rack1
Node Js Code :
const cassandra = require('cassandra-driver');
const client = new cassandra.Client({ contactPoints: ['172.30.56.60','172.30.56.61','172.30.56.62'], keyspace: 'qcs', policies : { loadBalancing : new cassandra.policies.loadBalancing.RoundRobinPolicy }});
async function read() {
client.connect().then(function () {
console.log('Connected to cluster with %d host(s): %j', client.hosts.length, client.hosts.keys());
client.hosts.forEach(function (host) {
console.log(host.address, host.datacenter, host.rack, host.isUp(), host.canBeConsideredAsUp());
});
});
}
read();
NodeJs 输出:
Connected to cluster with 3 host(s): ["172.30.56.60:9042","172.30.56.61:9042","172.30.56.62:9042"]
172.30.56.60:9042 newyork rack1 true true
172.30.56.61:9042 newyork rack1 true true
172.30.56.62:9042 newyork rack1 true true
【问题讨论】:
-
您会使用该状态进行进一步警报,还是只是让应用程序知道某个节点已关闭?
-
@dilsingi 只是为了让应用程序知道节点是否关闭。我可以通过 API / 客户端调用来获取数据。
-
你可以使用
host.isUp():docs.datastax.com/en/developer/nodejs-driver/3.4/api/class.Host/… -
@dilsingi 感谢您的回答,但 UP 和 canBeConsideredAsUp() 仍然显示为 true。这意味着它没有检测到关闭的节点
-
但是nodetool状态显示为down
标签: node.js cassandra cassandra-3.0