ScyllaDB nodetool info 命令详解:单节点运行状态与缓存指标全解读
2026/9/15 1:07:52 网站建设 项目流程

ScyllaDB nodetool info 命令详解:单节点运行状态与缓存指标全解读

【免费下载链接】scylladbNoSQL data store using the Seastar framework, compatible with Apache Cassandra and Amazon DynamoDB项目地址: https://gitcode.com/GitHub_Trending/sc/scylladb

nodetool info是 ScyllaDB 运维中最常用的单节点诊断命令之一,它通过 ScyllaDB 的 REST API 聚合返回节点的运行状态快照,包括节点 ID、Gossip 状态、数据负载(Load)、运行时长(Uptime)、Off-Heap 内存占用、数据中心/机架归属以及三类缓存(Key Cache、Row Cache、Counter Cache)的命中情况。读完本文,你将掌握nodetool info的完整用法、每个输出字段的业务含义与数据来源(含底层 REST API 端点),并能将其与nodetool statusgossipinfostatusgossip等命令组合用于日常巡检与故障排查。

命令概述:一条命令看清节点"体检报告"

nodetool info为集群中的特定节点提供详细统计信息,例如运行时长(uptime)、数据负载(load)、Key Cache 命中率、全部异常(exceptions)总数等。与面向整个集群的nodetool status(查看 token ring 信息)不同,info聚焦单个节点的运行时状态,其输出字段与 Cassandra 的nodetool info保持兼容,便于从 Cassandra 迁移的团队无缝衔接。

在 ScyllaDB 中,nodetool 本质上是 ScyllaDB 内嵌 REST API 的命令行前端:执行nodetool info时,客户端会依次向本节点的多个 HTTP 端点发起 GET 请求并汇总打印(见下文"源码级实现"一节)。入口脚本位于 bin/nodetool,实际命令解析与执行逻辑在 tools/scylla-nodetool.cc 的info_operation()函数中。

基本用法

默认情况下,nodetool info查看当前连接节点(即本机)的信息:

nodetool info

如果需要查看集群中其他节点的状态,可通过--host参数指定目标节点的 IP 地址:

nodetool info --host <host_ip>

结合 Nodetool 通用参数,还可以指定 REST API 端口:

nodetool -p <port> info --host <host_ip>
  • -p <port>/--port <port>:ScyllaDB 节点 REST API 的端口(ScyllaDB 默认 API 端口为 10000,区别于 CQL 的 9042)。更多通用参数参见 Nodetool 参考文档。
  • --:用双横线分隔命令行选项与参数列表(当某个参数可能与命令行选项混淆时使用)。

完整可用命令列表见 Nodetool Reference 及其子页面索引 nodetool-index.rst。

示例输出

在正常运行的节点上执行nodetool info,输出形如:

ID : 2110829b-47f2-4a6b-b87e-a81bc3b5cb31 Gossip active : true Thrift active : false Native Transport active: true Load : 294.44 MB Generation No : 1474434958 Uptime (seconds) : 1868 Heap Memory (MB) : 39.21 / 247.50 Off Heap Memory (MB) : 7.74 Data Center : us-east Rack : 1b Exceptions : 0 Key Cache : entries 0, size 0 bytes, capacity 0 MB, 0 hits, 0 requests, 0 recent hit rate, 0 save period in seconds Row Cache : entries 1064771, size 1.02 MB, capacity 450.8 MB, 96 hits, 120 requests, 0.800 recent hit rate, 0 save period in seconds Counter Cache : entries 0, size 0 bytes, capacity 0 bytes, 0 hits, 0 requests, 0.000 recent hit rate, 0 save period in seconds Token : (invoke with -T/--tokens to see all 256 tokens)

下面逐项拆解每个字段的含义。

输出字段全解读

参数说明
ID节点 ID(Node ID)
Gossip activeGossip 协议运行状态
Thrift activeThrift 服务状态(ScyllaDB 默认关闭)
Native Transport active原生传输协议(CQL)状态
LoadSSTable 占用的磁盘空间(每 60 秒更新一次)
Generation No节点代次号(Generation No)——当节点发生重大变化(如重启或变更 tokens)时递增
Uptime (seconds)节点自上次重启以来的运行时长(秒)
Heap Memory (MB)ScyllaDB 中不适用
Off Heap Memory (MB)所有表的 Memtables、Bloom filters、Indexes 和压缩元数据(Compression Metadata)所占用内存
Data Center节点所在的数据中心
Rack节点所在的机架
ExceptionsScyllaDB 中不适用
Key CacheScyllaDB 中不适用
Row CacheRow Cache 使用情况
Counter CacheScyllaDB 中不适用
Token节点拥有的 token 列表

ID

节点在集群中的唯一标识(Host ID,UUID 格式),例如2110829b-47f2-4a6b-b87e-a81bc3b5cb31。该值对应 REST 端点/storage_service/hostid/local的返回值,可用于nodetool removenode <id>等需要精确指定节点的操作。

Gossip active / Thrift active / Native Transport active

三个布尔状态分别表示:

  • Gossip active:Gossip 协议是否运行。Gossip 用于节点间的状态传播与故障检测,是集群自组织的基础;
  • Thrift active:传统 Thrift RPC 服务是否开启。ScyllaDB 默认不启用Thrift(输出为false),旧客户端需通过配置显式打开;
  • Native Transport active:CQL 原生传输协议(binary protocol,默认端口 9042)是否开启,一般应为true

三者分别由/storage_service/gossiping/storage_service/rpc_server/storage_service/native_transport三个端点提供。

Load

当前节点上所有 SSTable 占用的磁盘空间总量,示例中为294.44 MB。注意两点:

  • 该值每 60 秒更新一次,不是实时刷新,因此刚写入大量数据后立刻查看可能滞后;
  • 数据来源为/storage_service/load端点,数值经 tools/scylla-nodetool.cc 中的file_size_printer格式化为人类可读的单位(字节数超过阈值时以 KiB/MiB/GiB/TiB 输出)。

Generation No

节点代次号。当节点发生重大变化时——典型如节点重启、token 集合变更——该数字会递增。代次号由 Gossip 协议维护(对应/storage_service/generation_number端点,内部实现在 api/storage_service.cc 的rest_get_current_generation_number,底层取自gossiper().get_current_generation_number())。它是判断节点是否经历过"旧状态复活"(zombie)的重要依据:若一个已下线节点带着旧的代次号重新加入集群,其他节点可通过代次号识别并忽略其过期的 Gossip 状态。若 Gossip 未运行,源码中直接输出 0。

Uptime (seconds)

节点自上次启动以来的运行秒数(示例1868秒约 31 分钟)。数据来自/system/uptime_ms端点(毫秒精度),源码中将其转换为秒后输出。

Heap Memory (MB) 与 Off Heap Memory (MB)

  • Heap Memory (MB):在 ScyllaDB 中不适用。该字段是 Cassandra 的 JVM 堆内存(used / max),而 ScyllaDB 基于 Seastar 框架、不运行在 JVM 之上,因此源码 tools/scylla-nodetool.cc 中mem_usedmem_max被硬编码为 0,仅为兼容 Cassandra 输出格式而保留;
  • Off Heap Memory (MB):所有表的 Memtables、Bloom Filters、Indexes 以及压缩元数据(Compression Metadata)占用的堆外内存总量。该值由源码中的get_off_heap_memory_used()函数汇总计算:遍历所有 keyspace 与 table,累加每个表的memtable_off_heap_sizebloom_filter_off_heap_memory_usedindex_summary_off_heap_memory_usedcompression_metadata_off_heap_memory_used四项指标(对应/column_family/metrics/...端点),再除以 1 MiB 得到 MB 数。它比"进程总内存"更精确地反映了数据路径上的内存占用,是判断缓存与索引内存是否合理的参考指标。

Data Center / Rack

节点在拓扑中所属的数据中心与机架,由 snitch 组件决定。数据来源为/snitch/datacenter/snitch/rack端点,配置方式可参考 conf/cassandra-rackdc.properties 等 snitch 相关配置。

Exceptions

ScyllaDB 中不适用。源码注释明确指出 "scylla always returns 0 though"——该字段是为兼容 Cassandra 而保留,ScyllaDB 不使用 Java 异常计数模型(对应/storage_service/metrics/exceptions端点恒为 0)。如需排查节点错误,应关注 ScyllaDB 日志与system.log,而非此字段。

Key Cache / Row Cache / Counter Cache

三类缓存统一以如下格式输出:

entries <条目数>, size <占用大小>, capacity <容量>, <hits> hits, <requests> requests, <命中率> recent hit rate, <N> save period in seconds
  • Key Cache:ScyllaDB 中不适用(无 Key Cache 概念),恒为 0;
  • Row Cache有效指标。示例中 Row Cache 有 1064771 个条目、占用 1.02 MB、容量 450.8 MB,96 hits / 120 requests,近期命中率 0.800,save period 为 0 秒。Row Cache 用于缓存热行,命中率直接反映缓存收益;
  • Counter Cache:ScyllaDB 中不适用,恒为 0。

每个字段分别来自/cache_service/metrics/{key|row|counter}/entries|size|capacity|hit_rate以及/cache_service/{key|row|counter}_cache_save_period端点;命中/请求计数来自/cache_service/metrics/.../{hits|requests}_moving_avrage的移动平均值(注意源码中该端点拼写为moving_avrage,对应 API 侧的实际路由)。recent hit ratehit_rate端点的返回值,save period为缓存周期性落盘保存的间隔秒数(0 表示未启用周期保存)。

Token

节点负责的 token 列表。示例节点拥有 256 个 token(vnode 模式),默认只打印提示信息;使用-T/--tokens参数可查看全部token:

nodetool info -T

nodetool info --tokens

数据来源为/storage_service/tokens端点。若节点尚未加入集群(join_ring 为 false),则输出(node is not joined to the cluster)提示。

从源码看实现:一条命令背后的 REST 调用链

nodetool info的完整实现位于 tools/scylla-nodetool.cc 的info_operation()(约第 1324-1380 行)。梳理其执行流程,可以更清晰地理解每个输出行的来源:

  1. 通过scylla_rest_client(同文件中的 HTTP 客户端封装类)依次向本节点 REST API 发起 GET 请求;
  2. 依次获取并打印:/storage_service/hostid/local(ID)→/storage_service/gossiping(Gossip active)→/storage_service/rpc_server(Thrift active)→/storage_service/native_transport(Native Transport active)→/storage_service/load(Load)→/storage_service/generation_number(Generation No,Gossip 未运行时输出 0)→/system/uptime_ms(Uptime)→ 堆外内存四项指标汇总 →/snitch/datacenter/snitch/rack/storage_service/metrics/exceptions→ 三类缓存的 7 项指标;
  3. 输出Percent Repaired(固定为 0.0%,源码注释注明是 "a dummy value, to be compatible with cassandra nodetool");
  4. 若节点已加入集群(/storage_service/join_ring为 true),从/storage_service/tokens获取 token 列表:token 数为 1 或指定了-T/--tokens时逐行打印,否则打印提示。

由此可以看到,ScyllaDB 的 nodetool 并不是简单翻译 Cassandra 的实现,而是把 Cassandra 的 JMX 调用替换为本地 REST API 调用,并针对 ScyllaDB 的架构(无 JVM、无 Key/Counter Cache、无异常计数)做了字段级适配。

与 Cassandra 输出对比及注意事项

字段CassandraScyllaDB
Heap MemoryJVM 堆内存使用/上限不适用(恒为 0)
ExceptionsJava 层异常计数不适用(恒为 0)
Key Cache不适用(恒为 0)
Counter Cache不适用(恒为 0)
Row Cache有(有效指标)
Load有(实时)有(约 60 秒更新)
Percent Repaired修复百分比固定 0.0%(dummy 值)

日常巡检时的几个实操建议:

  • LoadRow Cache命中率作为主要观察指标,关注节点间负载是否均衡;
  • UptimeGeneration No判断节点是否近期重启过(重启会使两者重置/递增);
  • 不要依赖 Exceptions、Heap Memory 等不适用字段判断 ScyllaDB 健康状态,异常排查请转向日志。

与其他 Nodetool 命令的配合使用

nodetool info聚焦单节点,可与以下命令组成完整的运维组合拳(全部命令见 Nodetool Reference):

  • nodetool status:查看整个集群的节点状态、负载与所有权分布;
  • nodetool gossipinfo:查看 Gossip 各节点的代次号与心跳(对应/failure_detector/endpoints端点),与 info 中的 Generation No 互为印证;
  • nodetool statusgossip/statusbinary:单独查看 Gossip / 原生传输协议开关状态;
  • nodetool cfstats:深入某个表的诊断统计;
  • nodetool tablestats:按表维度查看统计信息。

小结

nodetool info是 ScyllaDB 节点级健康检查的入口命令:一条命令即可获取节点身份、协议状态、磁盘负载、代次号、运行时长、堆外内存、拓扑位置与缓存命中情况。理解其字段含义、识别出哪些是"为兼容 Cassandra 保留的不适用字段",并知晓其底层 REST API 调用链(tools/scylla-nodetool.cc),能帮助你在巡检与排障时快速定位问题,避免被误导性指标带偏判断方向。需要查看完整 token 列表时,别忘了nodetool info -T

【免费下载链接】scylladbNoSQL data store using the Seastar framework, compatible with Apache Cassandra and Amazon DynamoDB项目地址: https://gitcode.com/GitHub_Trending/sc/scylladb

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询