ScyllaDB nodetool info 命令详解:单节点运行状态与缓存指标全解读
发布时间:2026/9/15 1:07:55 作者:尧图编辑部 阅读量:1,286

ScyllaDB nodetool info 命令详解单节点运行状态与缓存指标全解读【免费下载链接】scylladbNoSQL data store using the Seastar framework, compatible with Apache Cassandra and Amazon DynamoDB项目地址: https://gitcode.com/GitHub_Trending/sc/scylladbnodetool info是 ScyllaDB 运维中最常用的单节点诊断命令之一它通过 ScyllaDB 的 REST API 聚合返回节点的运行状态快照包括节点 ID、Gossip 状态、数据负载Load、运行时长Uptime、Off-Heap 内存占用、数据中心/机架归属以及三类缓存Key Cache、Row Cache、Counter Cache的命中情况。读完本文你将掌握nodetool info的完整用法、每个输出字段的业务含义与数据来源含底层 REST API 端点并能将其与nodetool status、gossipinfo、statusgossip等命令组合用于日常巡检与故障排查。命令概述一条命令看清节点体检报告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 portScyllaDB 节点 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节点 IDNode IDGossip 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 IDUUID 格式例如2110829b-47f2-4a6b-b87e-a81bc3b5cb31。该值对应 REST 端点/storage_service/hostid/local的返回值可用于nodetool removenode id等需要精确指定节点的操作。Gossip active / Thrift active / Native Transport active三个布尔状态分别表示Gossip activeGossip 协议是否运行。Gossip 用于节点间的状态传播与故障检测是集群自组织的基础Thrift active传统 Thrift RPC 服务是否开启。ScyllaDB 默认不启用Thrift输出为false旧客户端需通过配置显式打开Native Transport activeCQL 原生传输协议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_used与mem_max被硬编码为 0仅为兼容 Cassandra 输出格式而保留Off Heap Memory (MB)所有表的 Memtables、Bloom Filters、Indexes 以及压缩元数据Compression Metadata占用的堆外内存总量。该值由源码中的get_off_heap_memory_used()函数汇总计算遍历所有 keyspace 与 table累加每个表的memtable_off_heap_size、bloom_filter_off_heap_memory_used、index_summary_off_heap_memory_used、compression_metadata_off_heap_memory_used四项指标对应/column_family/metrics/...端点再除以 1 MiB 得到 MB 数。它比进程总内存更精确地反映了数据路径上的内存占用是判断缓存与索引内存是否合理的参考指标。Data Center / Rack节点在拓扑中所属的数据中心与机架由 snitch 组件决定。数据来源为/snitch/datacenter与/snitch/rack端点配置方式可参考 conf/cassandra-rackdc.properties 等 snitch 相关配置。ExceptionsScyllaDB 中不适用。源码注释明确指出 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 secondsKey CacheScyllaDB 中不适用无 Key Cache 概念恒为 0Row Cache有效指标。示例中 Row Cache 有 1064771 个条目、占用 1.02 MB、容量 450.8 MB96 hits / 120 requests近期命中率 0.800save period 为 0 秒。Row Cache 用于缓存热行命中率直接反映缓存收益Counter CacheScyllaDB 中不适用恒为 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 rate即hit_rate端点的返回值save period为缓存周期性落盘保存的间隔秒数0 表示未启用周期保存。Token节点负责的 token 列表。示例节点拥有 256 个 tokenvnode 模式默认只打印提示信息使用-T/--tokens参数可查看全部tokennodetool 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 行。梳理其执行流程可以更清晰地理解每个输出行的来源通过scylla_rest_client同文件中的 HTTP 客户端封装类依次向本节点 REST API 发起 GET 请求依次获取并打印/storage_service/hostid/localID→/storage_service/gossipingGossip active→/storage_service/rpc_serverThrift active→/storage_service/native_transportNative Transport active→/storage_service/loadLoad→/storage_service/generation_numberGeneration NoGossip 未运行时输出 0→/system/uptime_msUptime→ 堆外内存四项指标汇总 →/snitch/datacenter、/snitch/rack→/storage_service/metrics/exceptions→ 三类缓存的 7 项指标输出Percent Repaired固定为 0.0%源码注释注明是 a dummy value, to be compatible with cassandra nodetool若节点已加入集群/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 输出对比及注意事项字段CassandraScyllaDBHeap MemoryJVM 堆内存使用/上限不适用恒为 0ExceptionsJava 层异常计数不适用恒为 0Key Cache有不适用恒为 0Counter Cache有不适用恒为 0Row Cache有有有效指标Load有实时有约 60 秒更新Percent Repaired修复百分比固定 0.0%dummy 值日常巡检时的几个实操建议以Load与Row Cache命中率作为主要观察指标关注节点间负载是否均衡用Uptime与Generation No判断节点是否近期重启过重启会使两者重置/递增不要依赖 Exceptions、Heap Memory 等不适用字段判断 ScyllaDB 健康状态异常排查请转向日志。与其他 Nodetool 命令的配合使用nodetool info聚焦单节点可与以下命令组成完整的运维组合拳全部命令见 Nodetool Referencenodetool 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),仅供参考