我在三个环境中使用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
谢谢,
哈利
答案 0 :(得分:3)
一般的驱动程序(nodejs)都知道整个Cassandra集群拓扑。在初始接触连接字符串中的一个或多个节点ip地址时,驱动程序可以自动识别构成cassandra环的所有节点ips。它足够智能,可以知道节点何时关闭或新节点何时加入群集。它甚至可以继续使用全新的节点(ips)。
因此,不需要对节点状态进行编码,因为驱动程序会自动为您处理。建议在连接字符串中提供1个以上的ip,以便在进行初始连接时提供冗余。
这是nodejs驱动程序documentation,此section描述了"自动节点发现"功能和"群集&架构元数据"。