使用 nodejs 检查 Cassandra 状态

Cassandra status check using nodejs

我三个环境都用nodejs,三个节点都是运行Cassandra

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

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

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

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

这是 nodejs 驱动 documentation and this section 描述 "Auto node discovery" 功能和 "Cluster & Schema Metadata".