`

cassandra(四)--脚本执行命令和集群交互

阅读更多
Cassandra的bin目录下有两个很好用的工具nodetool和cassandra-cli。

一.nodetool工具

nodetool是一个查看集群信息的命令,运行nodetool需要指定host和port,port默认是8080,这个端口是Cassandra的jmx端口,nodetool通过jmx获取集群的信息,端口可以在bin/cassandra.in.sh中修改.

nodetool的java解析类: java org.apache.cassandra.tools.NodeCmd

命令执行格式:nodetool -host 服务器IP -port 端口号 <command>

king命令
ring命令用于查看集群的节点信息,ring来源于consistent hash,在consistent hash中,各个节点组成一个环,通常称为ring。

ring命令的输出中包括当前集群的节点,各个节点的状态(Up还是Down),节点的load(数据量),节点在ring上的位置等信息

info命令
info命令用于显示一个节点的信息,包括当前的load(数据量),运行时间,内存使用情况等。
[root@vm129 bin]# ./nodetool -h localhost -p 10036 info
16366895315811089625572228179498200556
Load             : 495 bytes
Generation No    : 1281008217
Uptime (seconds) : 1259
Heap Memory (MB) : 40.93 / 1021.94


cfstats命令
cfstats — 查看各个column family的详细信息,包括读写次数、响应时间、memtable、sstable等。

[root@vm129 bin]# ./nodetool -h localhost -p 10036 cfstats
Keyspace: Keyspace1
        Read Count: 0
        Read Latency: NaN ms.
        Write Count: 0
        Write Latency: NaN ms.
        Pending Tasks: 0
                Column Family: StandardByUUID1
                ........................


tpstats命令
tpstats命令输出当前集群的各种连接池的使用状态.包括数据一致性,消息池,提交池,内存表提交池,写操作的池等等.
[root@vm129 bin]# ./nodetool -h localhost -p 10036 tpstats
Pool Name                    Active   Pending      Completed
LB-TARGET                         0         0              0
CONSISTENCY-MANAGER               0         0              0
MESSAGE-STREAMING-POOL            0         0              0
FLUSH-SORTER-POOL                 0         0              0
LB-OPERATIONS                     0         0              0
MEMTABLE-POST-FLUSHER             0         0              2
FLUSH-WRITER-POOL                 0         0              2
MESSAGE-DESERIALIZER-POOL         0         0              0


flush命令或repair命令
flush命令是将某keyspace中的缓存区数据提交,所以必须有在flush命令后提交一个keySpace的参数,否则命令不能执行.
[root@vm129 bin]# ./nodetool -h localhost -p 10036 flush system


drain命令
drain命令是当数据写入某个node时,如果该集群节点不能写入时,将数据暂时写入memtables和replays commitlog.
[root@vm129 bin]# ./nodetool -h localhost -p 10036 drain


decommission命令
decommission命令将当前节点中的数据转移到其它的集群节点中,解除当前节点的对外服务

move命令
move命令将当前节点中的数据转移到另一个指定的集群节点.

loadbalance命令
上传当前节点的所有数据到其它集群节点中,并将读取节点的请求转发到ring中的其它节点中.

setcachecapacity命令
设置keySpace和column family的缓存能力,需要提交四个参数(后两个参数是数值型):
keySpace名称,colum falimy名称,keycache数值,rowCache数值

二.cassandra-cli工具

cassandra-cli是一个很好用的客户端命令行,它使用thrift API和服务器进行通信,能完成get/put/remove操作,并能查看配置信息,keyspace描述等。更为难得的是,这个使用java写的工具支持命令补全、历史命令等特性,这归功于开发人员使用了jline 这个包。

cassandra-cli需要提供两个参数,host和port,这里的port是thrift的监听端口,默认是9160,这个监听端口和前文提到的10036是不同的监听端口.所以不要混淆.稍后我会补一个图上来,简单解释一下这两个端口提供的服务有什么区别.

java类:org.apache.cassandra.cli.CliMain(大家可以翻看一下源码),大家有兴趣可以包装这个客户端,将整个操作界面化,增加易用性,哈哈!
[root@vm129 bin]# ./cassandra-cli

Welcome to cassandra CLI.

Type 'help' or '?' for help. Type 'quit' or 'exit' to quit.

cassandra> connect localhost/9160

Connected to: "Test Cluster" on localhost/9160

cassandra> show cluster name  

Test Cluster

cassandra> set Keyspace1.Standard2['employee']['name'] = 'limingjie'

Value inserted.

cassandra> set Keyspace1.Standard2['employee']['age'] = '30'

Value inserted.

cassandra> set Keyspace1.Standard2['employee_1']['name'] = '孙悟空'

Value inserted.

cassandra> get Keyspace1.Standard2['employee']

=> (column=name, value=employee, timestamp=1270873106569000)

=> (column=age, value=30, timestamp=1270873099998000)

Returned 2 results.

cassandra> count Keyspace1.Standard2['employee']

2 columns

cassandra> del Keyspace1.Standard2['employee']['age']

column removed.

cassandra> count Keyspace1.Standard2['employee']

1 columns

cassandra> get Keyspace1.Standard2['employee']

=> (column=name, value=limingjie, timestamp=1270873106569000)

Returned 1 results.

cassandra> quit




分享到:
评论
6 楼 grepkey 2012-11-01  
我用nodetool tpstats
发现有很多 flushwriter  All time blocked  这种状态下的很多    想问下如何进行处理   
5 楼 shendegang123 2012-06-26  
ttttt              tt
4 楼 zhoujianyong2011 2012-04-17  
192.168.5.6     datacenter1 rack1       Up     Normal  64.49 MB        33.33%  0                                          
192.168.5.11    datacenter1 rack1       Up     Normal  64.62 MB        33.33%  56713727820156410577229101238628035242     
192.168.5.7     datacenter1 rack1       Up     Normal  64.57 MB        33.33%  113427455640312821154458202477256070484
三台机器的状态已经这样了,求指点!
3 楼 zhoujianyong2011 2012-04-17  
Space used (total): 67485766
Space used (live): 67485766
我用cfstats命令看cassandra状态成这样了,是不是代表没有空间了?
如何才能扩大空间呢?
2 楼 zhoujianyong2011 2012-04-17  
lxiaodao 写道
我在试验并发写入的时候(java客户端),单节点老是出现问题,不是连接被拒绝就是其它问题。请问大家有没有遇到类似的问题,是不是使用cluster就没有这样的问题。
还有,我感觉cassandra的查询功能很弱啊,select * from user u where u.name='gongcheng'这样的查询好像不能支持啊!?

给name建索引就行
1 楼 lxiaodao 2010-12-18  
我在试验并发写入的时候(java客户端),单节点老是出现问题,不是连接被拒绝就是其它问题。请问大家有没有遇到类似的问题,是不是使用cluster就没有这样的问题。
还有,我感觉cassandra的查询功能很弱啊,select * from user u where u.name='gongcheng'这样的查询好像不能支持啊!?

相关推荐

Global site tag (gtag.js) - Google Analytics