使用 nodejs 检查 Cassandra 状态



我在三个环境中使用 nodejs,Cassandra 在所有三个节点中运行。

我完全理解使用nodetool status我将能够获得每个节点的状态。但问题是如果我的当前节点关闭,那么我将无法在当前节点中执行节点工具状态,那么有没有办法使用 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();

节点工具状态输出:

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();

节点Js 输出 :

    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

包括 (nodejs( 在内的驱动程序通常都知道整个 Cassandra 集群拓扑。在与连接字符串中的一个或多个节点 IP 地址进行初始联系时,驱动程序可以自动识别构成 Cassandra 环的所有节点 IP。它足够智能,可以知道节点何时关闭或新节点何时加入群集。它甚至可以继续使用比开始时全新的节点 (ips(。

因此,不需要为节点状态编写代码,因为驱动程序会自动为您处理。建议在连接字符串中提供 1 个以上的 ip,以便在进行初始连接时提供冗余。

这是nodejs驱动程序文档,本节描述了"自动节点发现"功能和"集群和架构元数据"。

最新更新