cassandra是一个去中心的分布式数据库,且每个节点都是对等,那么如果需要获取得到整个集群的状态或者是说对cassandra集群进行监控或者维护有什么方式可以进行呢?一般进行监控的话,大概获取得到集群的状态、指标等信息即可,如果要进行运维就需要输入一些命令或通过行为让cassandra获取到相关信号进而执行相关命令。
这里我们分2个方面进行介绍:命令行、图文介绍
命令行
我们知道cassandra的每个节点都是对等的,所以这里提供了各个节点都可以执行的nodetool命令,下面列下所有的nodetool的命令以及给出相关的介绍(版本3.11.4):
assassinate : 强制的将某个节点remove掉,但是不会把节点上的数据进行摆放到移除节点后的新环的数据节点上
bootstrap :
cleanup : 会触发马上的清理操作,清理的目标主要是不属于这个节点的数据
clearsnapshot : 清楚本机上的snapshot,如果没有提供keyspace等信息,就清理本机全部的snapshot
compact : 触发major compaction
compactionhistory : 打印compaction的历史
compactionstats : 打印compaction的状态
decommission : decommission连接的node, 把节点从环中移除
describecluster :打印cluster的信息,包括clustername, snitch信息,partitionr信息,schema信息等
describering : 给出一个keyspace以及对应的token环信息
disableautocompaction : 关闭minor compaction
disablebackup : 关闭备份
disablebinary : disable native transport(默认的9042端口服务)
disablegossip : 关闭gossip
disablehandoff : 关闭hinthandoff
disablehintsfordc : 关闭为某dc的hint
disablethrift :关闭thrift服务,默认(9160端口)
drain : drain 掉node,暂停很多操作,比如数据节点的写,counter,view写等操作,flush 表以及disable minor compaction
enableautocompaction : 开启minor compaction
enablebackup : 开启自动incremental backup
enablebinary : 开启native transport
enablegossip : 开启gossip
enablehandoff : 开启hinthandoff :
enablehintsfordc : 开启for dc的hint handoff
enablethrift : 开启thrift
failuredetector : 集群的failure 探测的信息
flush : 强制执行flush操作
garbagecollect : 清除表中删除的数据
gcstats :打印gc信息
getcompactionthreshold : 获取compact的阈值
getcompactionthroughput : 获取compact吞吐
getconcurrentcompactors : 获取系统中的并发compact的数目
getendpoints : 获取拥有partition key(hash计算前)的节点
getinterdcstreamthroughput : 集群内部dc stream阈值
getlogginglevels :log的level
getsstables : 打印key属于的sstable
getstreamthroughput : 系统内部stream阈值
gettimeout : 超时时间
gettraceprobability : trace的可能值
gossipinfo : gossip的信息
help
info : 集群的信息
invalidatecountercache : 让counter cache无效
invalidatekeycache : 让keycache无效
invalidaterowcache : 让rowcache无效
join : join 环
listsnapshots : 列出snapshot
move : 把这个token对应的节点换成别的token相应会移动数据
netstats :打印网络信息
pausehandoff : 暂停hint的传递进程
proxyhistograms : 打印网络直方图
rangekeysample : 所有keyspace的抽样key信息
rebuild :从别的节点托数据
rebuild_index : rebuild 本地二级索引
refresh : 无需重启,直接把本地的sstable进行加载
refreshsizeestimates : 重建system.size_estimates表,主要是对应节点多少数据
reloadlocalschema : 从本地重新load schema表
reloadtriggers : reload trigger 类
relocatesstables : 搬迁sstable
removenode :展示当前remove node的状态;force完成阻塞的remove操作;remove 提供的token
repair : 执行副本间数据修复的repair操作
replaybatchlog : 开始batch log replay以及等待完成
resetlocalschema :重置本地的schema
resumehandoff :恢复hinthandof的传递程序
ring : 打印集群的ring信息
scrub : 清理本节点无效的数据
setcachecapacity : 设置cache的容量
setcachekeystosave :设置每个cache的保留容量
setcompactionthreshold :这只compaction阈值
setcompactionthroughput : 设置compaction吞吐
setconcurrentcompactors : 设置compact的并发数
sethintedhandoffthrottlekb : 设置hint的阈值
setinterdcstreamthroughput : 设置dc stream的吞吐
setlogginglevel :设置log的level
setstreamthroughput : 设置stream的阈值
settimeout : 设置超时
settraceprobability : 设置执行trace的概率值
snapshot: 打快照
status: 集群的状态
statusbackup : 备份的状态
statusbinary : native transport的状态
statusgossip : gossip的状态
statushandoff : hinthandoff的状态
statusthrift : thrift的状态
stop : 停止compaction
stopdaemon :停止cassandra deamon
tablehistograms ;表直方图
tablestats : 表状态
toppartitions : 抽样并给出某个表的活跃partition
tpstats :打出thread pool的状态
truncatehints : 给出节点的所有hint 放弃掉
upgradesstables :对应的表的sstable执行upgrade(实际上就是读出来,写入新sstable)
verify:验证表的数据checksum
version :cassandra version
viewbuildstatus : viewbuild的状态
上述的命令,有的是输出集群节点的现有信息的,比如status,ring等,也有是控制集群节点的状态的,比如setcachecapacity,setcompactionthreshold,至于是控制哪个节点,就需要在nodetool后面跟上:
./nodetool -h hosta -p port(default is 7199) command
此外如果需要执行获取remote节点信息的话,需要在cassandra-env.sh 里面设置下LOCAL_JMX参数,让为false,此外也要设置下-Dcom.sum.management.jmxremote.authenticate=true,这里如果不修改下,就需要输入账户和密码了,如果不想有账户密码可以注释掉或者为fals
页面系统
我们会比较喜欢页面系统进行操作,这里大概列出4种可以执行页面操作的东西:
一.MX4J
这个是cassandra自己就有支持的,但是需要从网上下载一个mx4j的jar包,直接丢到cassandra的lib目录下面,且在cassandra-env.sh下面需要修改下MX4J_ADDRESS的地址,然后直接在页面进行访问这个地址以及端口是8081(默认),就可以了,如下图:
可以展示,也可以设置,但是有2点需要说,所有本地访问的ip要可以通,此外就是每次只能看到一个节点的信息,没有汇总的一个地方做操作;
二.jolokia + telegraf
下载jolokia的agent jar包,然后放到cassandra 的lib下面,此外修改下cassandra-en.sh,在JVM_OPT里面加上我们需要的那个jokolia的jar依赖,然后重启下集群,完事以后就可以每个集群访问自己本地的jolokia的agent,拿到对应的数据,此外部署下telegraf就可以把数据获取得到,这个网上有很多例子,坑不多;主要是展示相关的metric指标
三.grafana + promethus + jmx_exporter
首先在每一个cassandra节点的lib下面需要部署下jmx_exporter的相关的jar包,然后在cassandra的cassandra-env.sh下面修改相应的配置,参考:https://github.com/prometheus/jmx_exporter ,此外这里要在一个特定的目录下面方式需要收集的metric的yam文件参考这里 https://github.com/prometheus/jmx_exporter/blob/master/example_configs/cassandra.yml ,并在cassandra-env.sh 配置下,然后重启下cassandra集群。 然后除此之外需要在一个特定的机器上面部署下promethus的server,以及grafana的server。下面是grafana的dashboard截图:
部署promethus的server以及grafana server的话可以对应参考网上部署方式。这里需要注意下,grafana的cassandra metric dashboard的json(https://grafana.com/grafana/dashboards/5408)有一些不正确的地方,需要人为修改下;
四.opscenter
可以参考 datastax的文档:https://docs.datastax.com/en/opscenter/6.1/opsc/install/opscInstallOpsc_g.html