监测Cassandra群集
了解Cassandra集群的性能特征对于诊断问题和规划能力至关重要。
Cassandra通过Java Management Extensions(JMX)公开一些统计和管理操作。JMX是一种Java技术,提供用于管理和监视Java应用程序的服务工具。可以使用JMX监视或操作Java应用程序公开的任何统计信息或操作作为MBean。
在正常操作期间,Cassandra会输出您可以使用兼容JMX的工具进行监控的信息和统计信息,例如:
Cassandra的nodetool
JConsole的
使用相同的工具,您可以执行某些管理命令和操作,例如nodetool flush或nodetool repair。
使用nodetool进行监控
nodetool作用是用于监测Cassandra和执行常规数据库操作的命令行界面。它通常在一个可操作的Cassandra节点运行。
nodetool支持最重要的JMX度量标准和操作,还包括Cassandra管理的其他有用命令,如proxyhistogram命令。此示例在本地计算机上的三个节点群集上运行4,500个insert和45,000个select之后,显示nodetool proxyhistogram的输出。
$ nodetool proxyhistograms
proxy histograms
Percentile Read Latency Write Latency Range Latency
(micros) (micros) (micros)
50% 1502.50 375.00 446.00
75% 1714.75 420.00 498.00
95% 31210.25 507.00 800.20
98% 36365.00 577.36 948.40
99% 36365.00 740.60 1024.39
Min 616.00 230.00 311.00
Max 36365.00 55726.00 59247.00
有关节点及其当前状态的摘要,请使用nodetool status命令。例如:
$ nodetool status
Note: Ownership information does not include topology; for complete information, specify a keyspace
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address Load Tokens Owns Host ID Rack
UN 127.0.0.1 47.66 KB 1 33.3% aaa1b7c1-6049-4a08-ad3e-3697a0e30e10 rack1
UN 127.0.0.2 47.67 KB 1 33.3% 1848c369-4306-4874-afdf-5c1e95b8732e rack1
UN 127.0.0.3 47.67 KB 1 33.3% 49578bf1-728f-438d-b1c1-d8dd644b6f7f rack1
nodetool提供查看表,服务器度量标准和压缩统计信息的详细度量标准的命令:
nodetool tablestats:显示每个表和keyspace的统计信息。
nodetool tablehistograms 提供关于表的统计信息,包括读/写延迟,行大小,列数和SSTable数量。
nodetool netstats提供有关网络操作和连接的统计信息。
nodetool tpstats提供有关线程池中Cassandra操作的每个阶段的活动,待处理和已完成任务的数量的统计信息。
使用JConsole进行监控
JConsole是用于监控Java应用程序(如Cassandra)的JMX兼容工具。它包含在Sun JDK 5.0及更高版本中。JConsole使用Cassandra公开的JMX度量和操作,并将其显示在组织良好的GUI中。对于监控的每个节点,JConsole提供了以下六个单独的选项卡视图:
Overview
显示有关Java VM和监视值的概述信息。Memory
显示有关内存使用的信息。Threads
显示关于线程使用的信息。Classes
显示有关类加载的信息。VM Summary
显示有关Java虚拟机(VM)的信息。Mbeans
显示有关MBeans的信息。
“Overview”和“Memory”选项卡包含对Cassandra开发人员非常有用的信息。“Memory”选项卡允许您比较堆和非堆内存的使用情况,并提供一个控件来立即执行Java垃圾回收。
对于特定的Cassandra度量和操作,JConsole最重要的部分是MBeans选项卡。此选项卡列出了以下Cassandra MBean:
org.apache.cassandra.auth
包括权限缓存。org.apache.cassandra.db
包括缓存,表格度量和压缩。org.apache.cassandra.internal
内部服务器操作,如八卦,提示切换和Memtable值。org.apache.cassandra.metrics
包括有关CQL,客户端,密钥空间,读取修复,存储和线程池等主题的指标。org.apache.cassandra.net
节点间通信包括FailureDetector,MessagingService和StreamingManager。org.apache.cassandra.request
与读取,写入和复制操作相关的任务。org.apache.cassandra.service
包括GCInspector。
当您选择一个MBean时,其MBeanInfo和MBean描述符将显示在右侧,任何属性,操作或通知都会显示在其下面的树中。例如,选择并展开org.apache.cassandra.db MBean以查看表的可用操作会导致显示如下:
如果您选择使用JConsole监视Cassandra,请记住,JConsole消耗大量的系统资源。因此,DataStax建议在远程计算机上运行JConsole,而不要在与Cassandra节点相同的主机上运行JConsole。
JConsole CompactionManagerMBean公开压缩指标,可以指示何时需要向集群添加容量。
压缩指标
监控压缩性能是了解何时向群集添加容量的一个重要信息。以下属性通过CompactionManagerMBean公开:
压实指标
属性 | 描述 |
---|---|
BytesCompacted | 自服务器[重新]启动以来压缩的总字节数 |
CompletedTasks | 自服务器[重新]启动以来完成的压缩数 |
PendingTasks | 估计剩余的压缩次数 |
TotalCompactionsCompleted | 自服务器[重新]启动以来的压缩总数 |
线程池和读/写延迟统计信息
Cassandra为不同的执行阶段维护不同的线程池。每个线程池提供活动,挂起和完成的任务数量的统计信息。未决任务列增加的这些池的趋势表明何时增加额外的容量。建立基准后,在待处理任务列中配置超出正常范围的报警。在命令行上使用nodetool tpstats来查看下表中显示的线程池详细信息。
读/写延迟指标
Cassandra通过StorageProxyMBean跟踪在服务器级别读取,写入和分片操作的延迟(平均值和总计)。
由nodetool tpstats报告的线程池统计信息
属性 | 描述 |
---|---|
AntiEntropyStage | 与维修有关的任务 |
CacheCleanupExecutor | 与缓存维护相关的任务(计数器缓存,行缓存) |
CompactionExecutor | 与压实有关的任务 |
CounterMutationStage | 与领先的计数器写入有关的任务 |
GossipStage | 有关八卦协议的任务 |
HintsDispatcher | 与发送提示相关的任务 |
InternalResponseStage | 与其他内部任务响应相关的任务 |
MemtableFlushWriter | 与清除memtables相关的任务 |
MemtablePostFlush memtable | 刷新完成后与维护相关的任务 |
MemtableReclaimMemory | 与回收memtable内存有关的任务 |
MigrationStage | 与模式维护相关的任务 |
MiscStage | 与各种任务相关的任务,包括快照和删除主机 |
MutationStage | 与写入相关的任务 |
Native-Transport-Requests | 与来自CQL的客户端请求相关的任务 |
PendingRangeCalculator | 任务涉及在引导/解除后重新计算范围所有权 |
PerDiskMemtableFlushWriter_ * | 有关将memtables刷新到给定磁盘的任务 |
ReadRepairStage | 与执行读取修复相关的任务 |
ReadStage | 与读取有关的任务 |
RequestResponseStage | 来自节点内请求的回调任务 |
Sampler | 与抽样统计有关的任务 |
SecondaryIndexManagement | 与二级索引维护有关的任务 |
ValidationExecutor | 与验证压缩相关的任务 |
ViewMutationStage | 与维护物化视图有关的任务 |
表统计
对于单个表,ColumnFamilyStoreMBean提供与StorageProxyMBean相同的通用延迟属性。与StorageProxyMBean不同,ColumnFamilyStoreMBean具有许多其他统计信息,这些统计信息对于监视性能趋势非常重要。其中最重要的是:
表统计
属性 | 描述 |
---|---|
MemtableDataSize | 此表格数据消耗的总大小(不包括元数据) |
MemtableColumnsCount | 返回memtable中存在的总列数(跨所有键) |
MemtableSwitchCount | memtable已被刷新多少次 |
RecentReadLatencyMicros | 自上次调用此bean以来的平均读取延迟 |
RecentWriterLatencyMicros | 自上次调用此Bean以来的平均写入延迟 |
LiveSSTableCount | 此表的实时SSTables的数量 |
最近的读取延迟和写入延迟计数器对确保操作以一致的方式发生很重要。如果这些计数器在一段时间保持平稳之后开始增加,则可能需要向群集添加容量。
您可以设置阈值并监控LiveSSTableCount,以确保给定表的SSTable数量不会太多。