Cassandra_维护和调优

一、维护

  1. 日志:log4j-server.properties文件,生产环境下更适宜将日志级别调到WARN或是ERROR,因为过繁琐的输出可能会让服务器变慢很多

  2. 通过Cassandra自动的Nodetool工具(/bin目录下),可以查看集群、了解其行为并调整集群的功能,查看每个节点负责的区间,在节点间移动数据、退服节点、修复遇到问题的节点

  3. 命令

    bin/nodetool -h 192.168.6.186 info
    

    获取关于某节点当前状态的基本数据

    bin/nodetool -host 192.168.6.186 ring
    

    查看环上所有节点的信息。keyspace中的数据会划分为区间,Cassandra为集群中的每个几点分配唯一的令牌,称为区间令牌,这决定了哪个键值的主副本会放在这个节点上,使用ring开关进行查询得到的区间列就是每个节点负责的令牌

    bin/nodetool -host 192.168.6.186 cfstats
    

    显示集群的性能指标,包括每个列族的统计数据

    bin/nodetool -host 192.168.6.186 tpstats
    

    获取线程池的统计信息

  4. 修复

    运行nodetool repair会让Cassandra执行一次主压紧,目标节点会计算出一个数据的Merkle树,然后将它与其他副本上的树进行对比,如果不匹配就会进行重新协调(或“修复”),来确定它们应该设置为最新的数据值。该命令需要传入需要修复的确定的keyspace名字:

    bin/nodetool repair Keyspacename -h 192.168.6.186
    

    因为主压紧是个非常复杂和敏感的操作,所以这个任务不应该运行得太过频繁(不应该每天运行),只应该在低负载的时候进行。

  5. 刷写

    数据存放于memtable中,要强制把memtable中的数据写到文件系统上的SSTable中,可以使用如下命令:

    bin/nodetool flush -h 192.168.6.186 -p 9160
    
  6. 清理
    一个已经运行了一段时间的集群,希望修改副本因子或副本策略。这种工作不应该在运行的集群中进行,所以一般需要关闭一些节点,再重新启动它们。然后运行命令:

    bin/nodetool cleanup -h 192.168.6.186
    
  7. 快照

    快照用于对一个节点的某些或全部keyspace进行复制,并将它保存到一个独立的数据库文件中去。有一个问题,如果数据存在于commit log之中,它将不是快照的一部分,只有被刷写之后的数据才能成为快照的一部分。进行快照可以使用如下命令:

    bin/nodetool -h 192.168.6.186 snapshot
    

    对一个指定的keyspace进行快照:

    bin/nodetool -h 192.168.6.186 snapshot Keyspacename
    

    如果希望恢复一个之前进行的快照,首先需要关闭节点,并删除旧的SSTable和commit log,然后把快照目录里的所有文件复制到常规数据目录里即可。
    清除快照:

    bin/nodetool -h 192.168.6.186 clearsnapshot
    
  8. 对集群进行负载均衡

    使用loadbalance开关执行Nodetool会将一个节点退服,并将它的令牌发给其他节点,然后再让它重新自举。如果数据量很大,负载均衡会消耗很长时间。可以通过stream开关调用Nodetool来监控负载均衡操作

    bin/nodetool -host 192.168.6.186 loadbalance
    bin/nodetool steam -h 192.168.6.186
    

    使用ring参数运行Nodetool就可以看到节点已经分配到了新的区间

  9. 退服节点
    退服一个节点就是将一个节点从服务中撤下来。

    bin/nodetool decommission -h 192.168.6.186
    

    执行退服命令的基本步骤是:
    ①关闭gossiper,这样就不会收到更多数据了
    ②关闭这个节点的信息服务
    ③关闭SEDA阶段管理器,因为不会接受更多的任务在阶段间移动了
    ④状态设置为“decommissioned”
    ⑤存储服务确定哪些可用节点对于需要传输数据的区间比较合适,将数据流到其他节点
    ⑥一旦接收节点确认数据传输成功,没有其他数据要传输了,服务器就可以离开环了

  10. 更新节点

    bin/nodetool -h 192.168.6.186 removetoken tokenid
    

    删除节点,不能删除一个节点自己的令牌,因为这样会破坏节点的完整性。

    bin/nodetool -h 192.168.6.186 getcompactionthreshold
    

    获取一个节点当前的压紧阈值。默认为4,这个值不应太小,否则Cassandra会经常因为过多的压紧而消耗资源;也不应太大,这样Cassandra就需要花费太高的资源来进行很多压紧工作

  11. 在一个运行中的Cassandra集群中添加、删除或重命名列族:
    ①使用Nodetool,运行drain来清空commit log
    ②关闭Cassandra并确保commit log中没有剩余的数据
    ③删除SSTable文件。这些文件存在于数据目录中,名为-Data.db、-Index.db和-Filter.db。找到要改变的、前缀为列族名的文件。按照对应的命名方式,重命名这些文件

二、性能调优

  1. 作为一个通用的规则,必须要注意,简单直接的把一个节点加入到集群中并不会改善性能。需要合适的分布数据副本,然后将客户端的流量分配到所有的节点上。

  2. 数据存储
    Cassandra在处理更新操作时会写两类文件:commit log和数据文件
    commit log:可以看做是短期存储,是以原始顺序文件追加的形式写入。重新启动节点时,commit log被重放,以恢复数据。事实上,commit log只有在这个时候才会被读取,客户端从来不会读取它。但是,通常对commit log的写入操作是阻塞写,所以它可能会非常影响性能,因为它需要客户端等待它写完。
    数据文件是指有序字符串表(SSTable)。数据是异步写入这个文件的,SSTable在周期性的主压紧中进行归并,从而释放出空间。要做到这点,Cassandra会归并键值、合并列、并删除墓碑。
    读操作可以通过内存中缓存进行,如果给Cassandra配置很多GB的内存,那么当行缓存和键缓存命中的时候,可以极大的提升性能。
    在将所有追加写入的数据成功刷写到特定的数据文件中后,commit log会被周期性移除。建议将数据文件和commit log分别放到不同的硬盘上,以使性能最大化。

  3. 并发
    Cassandra和很多数据存储系统的一大不同,就是提供了比读性能更高的写性能。concurrent_reads设置多少个线程可以执行读操作,设置在每个处理器核两个线程的时候是最优的。例如,8核服务器,设置为16.默认为8,需根据具体核数设置

  4. 缓存
    Cassandra中有两类缓存:行缓存和键值缓存。行缓存会缓存整行数据,所以它是键缓存的超集。缓存策略应根据以下条件确定:
    ①使用更适合查询方式的缓存类型
    ②考虑堆内存和缓存尺寸的比例,不要让缓存占满堆容量
    ③考虑行尺寸和键值尺寸
    keys_cached设置的是存储在内存中的键位置,如果使用小数,是指定了一个要缓存的键值的百分比;如果使用整数,则是指定将要缓存的键值位置的绝对数值。keys_cached是一个列族的设置,所以不同的列族可以有不同的键值位置缓存数量
    可以在服务器启动时就填入行缓存,使用preload_row_cache元素。这个设置默认为false。设置它为true的代价是,如果要预装载很多列族的数据,自举的时间可能会更长
    rows_cached设置指定了将被缓存的行数,默认为0。如果使用,方法同keys_cached。除非确定某些行会有很高的命中率,否则不建议设置。

  5. JVM调优
    cassandra.in.sh文件中包含了很多JVM设置相关的选项,可以进行修改之后,重新启动Cassandra以载入新的配置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值