java 操作cassandra_Cassandra操作和性能优化

1.Cassandra操作

本文档操作都是在单数据中心,Vnode上操作

1.1.添加节点到集群中

1.1.1.添加非seed单节点

1.在新节点上安装Cassandra,但不要启动

2.修改cassandra.yaml文件:cluster_name – 新节点加入集群名称

listen_address/rpc_address – 新节点IP

seed_provider – 集群seeds列表

3.启动新节点Cassandra

4.使用nodetool status验证节点是否启动完毕:状态为UN

5.运行nodetool cleanup(或OpsCenter)在集群节点上:移除脏数据(建议在低峰执行)

1.2.添加非seed单节点案例:

已经存在Cassandra集群:cluster_name = ‘Test Cluster’

xxx_address = 192.168.92.148

seed_provider = 192.168.92.148

eeb849f90db16c4e8d72dff655aabe93.png

添加新节点192.168.92.149:

1.安装Cassandra

参考《Cassandra教程》

bd329f0ccba22c125b7495a4599ac57a.png

2.修改cassandra.yaml

cluster_name:

18960a14b47e7bd0f296383ce385ae88.png

seed_provider

3781204b66436c327e8b2de8d4c11449.png

listen_address:

40e8c47e05651458c9dbe120037f9096.png

rpc_address:

a1b78a97a9adf870f1a6f8967b938c42.png

3.启动Cassandra

308743a694cab26c5ceff04b3b05cc28.png

4.验证新节点192.168.92.149是否启动完毕

8bd02d22d0d322ac39b486f8eb9597a4.png

5.删除192.168.92.148上的脏数据

d8d1737026d2cfabdb5134766bb0c415.png

或者

6d3fd64890e978d18c69d65f70ab51ff.png

1.1.3.添加非seed多个节点

步骤参考1.1.1,唯一不同点步骤3,启动Cassandra需要同时启动,避免数据多次迁移。

c1e01d5a1f3c557d0ed591a458439340.png

304d6510b942203128b45123f060ca78.png

1.1.4.添加seed节点

由于seed需要修改cassandra.yaml文件,所以需要重启所有节点

1.先将seed作为非seed节点安装启动,完成数据迁移操作

步骤参考1.1.1

2.修改所有节点的cassandra.yaml文件,添加seed

3.重启所有节点

1.2.替换一个dead节点

由于一些硬盘损坏等原因,需要执行替换dead节点

1.确保dead节点状态为DN,使用nodetool status:

c47db67b1e96c2d8c92a445a4f5a933d.png

注意Address需要在下面步骤用到

2.修改新节点cassandra.yaml文件:参考1.1.1

3.启动新节点,使用replace_address选项:$ sudo bin/cassandra -Dcassandra.replace_address=address_of_dead_node

删除节点:参考1.4(建议72小时之后操作,确保gossip删除掉了老节点)

1.3.替换一个running节点

由于升级新硬件等原因,需要使用新节点替换添加新节点到集群中,参考步骤1.1.1

确保替换running节点状态为UN,使用nodetoolstatus:

a640d9d739bb5802c05983e0ecd29629.png

4.删除running节点,参考1.4

1.4.删除节点

1.4.1.删除UN状态节点

运行nodetooldecommission删除UN节点

9db5770aee9e0a05023819a8c0ca9490.png

或者:

553e0ac331a0780669ec0586eccc3356.png

1.4.2.删除DN状态节点

运行nodetoolremovenode命令

115eae3dc4f7cdd0db241d168b3be071.png注意

如果以上步骤无法删除,可能是由于节点存在脏数据,请运行nodetool assassinate,强制删除

1.5.修改ReplicationFactor

1.5.1.ReplicationFactor减少

运行nodetool cleanup,删除脏数据

或者:

4dbed72628c02b327038308b573347d6.png

1.5.2.ReplicationFactor增加

运行nodetool repair,迁移数据

或者:

5b3e2301e0713e54a15802b35f889323.png

2.Cassandra优化

2.1.安装前配置建议

2.1.1.安装jemallocjemalloc适合多线程下内存分配管理

wget http://www.canonware.com/download/jemalloc/jemalloc-3.6.0.tar.bz2

tar xjf jemalloc-3.6.0.tar.bz2

cd jemalloc-3.6.0

./configure

make &&make install

echo '/usr/local/lib'>/etc/ld.so.conf.d/local.conf

ldconfig

be4601d99385a9c07d36b02bb20c0344.png

2.1.2.安装NTP (略)

2.1.3.Commit log和data目录在独立硬盘

7cdc208aa0f0340ad1b900fd71e186b5.png

7c3334075867e72fa089c32501e16b7a.png

2.1.4.硬盘类型硬盘类型SSD(微秒)SAS(毫秒)SATA(秒)

延迟100~1208~40>15

2.1.5.Linux优化

1.文件操作符

/etc/security/limits.conf* - nofile 65535

* - memlock unlimited

* – nofile 32768

* – as unlimited

/etc/security/limits.d/90-nproc.conf* - nproc 32768

2.Swap

/etc/sysctl.confvm.max_map_count = 131072

#最大限度使用物理内存

vm.swappiness = 0

使之生效sysctl -p

永久关闭swapswapoff –a

/etc/fstab:注释掉swap

26b15017ee2eb9d9c80b3585e4de8a3d.png

3.NUMAecho 0 > /proc/sys/vm/zone_reclaim_mode

4.文件系统类型EXT4

2.1.6.磁盘阵列RAID优化使用高效性能RAID0

sudo blockdev --setra 128 /dev/

2.1.7.cassandra-evn.sh配置建议

JVM配置在cassandra-evn.sh中MAX_HEAP_SIZE

生产环境建议8G

f5ed43cb74f786deb03d7070b248a009.pngHEAP_NEWSIZE

一般设置为MAX_HEAP_SIZE的1/4添加cassandra压缩线程级别,减少其资源占用-Dcassandra.compaction.priority=1打开JVM压缩,减少内存占用,适用于64位JVM-XX:+UseCompressedOops

cd31b5352f61f3d038b858bb893998be.png

2.1.8.cassandra.yaml配置建议concurrent_reads:16 * number_of_drives

concurrent_counter_writes:16 * number_of_drives

concurrent_writes:8 * number_of_cores

#使用Memory Mapped File IO,性能超过Standard IO,64位

disk_access_mode: mmap

#write性能提升5%

memtable_allocation_type: offheap_objects

2.2.安装后监控——定位——优化

2.2.1.nodetool tpstats

线程池使用统计,看是否有积压线程

1b787351ecb120d9942ea4d06ef5f26b.png

或者使用OpsCenter

bb21770b0ec875676823150f31794abc.png

b9fcbe016200feda8e54b48e9dd89367.png

2.2.2.Read Requests/Write Requests

结合CPU和Disk使用监控,来判断系统每秒可以支持的操作数量

3b7d2a25bc0534f3ed945c037cf53df8.png

f10893d63eb230450b4b3407fe9129cc.png

2.2.3.total Memtable size

与内存使用比较,确保大的memtable不会导致内存竞争,大的memtable有利于写多读少情况

2c01aab1b8e597eb9e47f34b00d3ab83.png

2.2.4.SSTable count

确保sstablecount比较低(个位数),每次读操作会检查所有sstable,太多的sstable影响read性能

5c7f12ec497f4a9cc0f63b8974770fbd.png

2.2.5.total bytes compacted

确保不会发生频繁操作

255e846270353de876025f2e0bbba503.png

2.2.6.read latency/write latency

确保延迟在可接受范围之内,不包含网络延迟

18b7c1d5d233ae86757454a8238d23a4.png

d27545f080c14378b589f9fa3fefc8a0.png

出问题后定位

writelatency写响应平均时长(以毫秒为单位)。依赖于consistency level和replication factor,也包含了写replicas的网络延迟

read latency受到硬盘,网络和应用程序读的方式等影响。比如,使用二级索引,读请求数据大小,client需要的consistencylevel都将影响readlatency。I/O的争用也会增加read latency。当SSTables有很多碎片,compaction跟不上写负载则读也会变慢。

2.2.7.partition size

监控表分区大小,确保max不超过100M

039b804b5dc7309dfb50ff3aee3febe9.png

2.2.8.cell count

监控表cell count,确保不超过20亿

ec90deb83c2df257e5ab391cd1b29e1b.png

2.2.9.write Read active

读写请求数

80e18944fe0cec4741594e49da535bea.png

2.2.10.OS系统监控

监控CPU、Memory、Disk的使用率、饱和度。

f8f211341bafe86bf53c7b000b1e10ba.png

fa467bdba0017ab17d6a4aa92b19e000.png

4f9adedbca85be70abf832df9c1413a4.png

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值