Cassandra操作和性能优化

2024-06-02 18:08
文章标签 操作 优化 性能 cassandra

本文主要是介绍Cassandra操作和性能优化,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

转载自:https://blog.51cto.com/eric100/1770036

 

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集群:

<span style="color:#333333"><span style="color:black"><code class="language-xml">cluster_name = ‘Test Cluster’
xxx_address = 192.168.92.148
seed_provider = 192.168.92.148</code></span></span>

wKiom1cppL3B4g3eAAAi2QSK7_A312.png

添加新节点192.168.92.149:

1.安装Cassandra

参考《Cassandra教程》

wKioL1cppdWBh1E0AAAqS7BJjj8685.png

2.修改cassandra.yaml

cluster_name:

wKiom1cppRyQgL1OAAAJH-7ICJM624.png

seed_provider

wKiom1cppTGRTNDYAAAFzgKBsxI614.png

listen_address:

wKiom1cppUKSINlaAAARH9Y2M4k195.png

rpc_address:

wKioL1cppiuSXaHTAAAwhOPL0cU905.png

3.启动Cassandra

wKiom1cppWrQEh_ZAAAHfko1RTA314.png

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

wKioL1cpplGjOAObAAAwiZhPyqs058.png

5.删除192.168.92.148上的脏数据

wKioL1cppnDRvX69AAAJU_XNzH8484.png

或者

wKiom1cppa6zkjcMAAEQ_CWmkCk571.png

1.1.3.     添加非seed多个节点

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

wKiom1cppcXgG_yVAAATIyr-29o972.png

wKioL1cppqqx_7fCAAAJIH1hzKU774.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:

wKioL1cppsGzufqHAADpeBCNoHM141.png

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

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

3.启动新节点,使用replace_address选项:

<span style="color:#333333"><span style="color:black"><code class="language-bash">$ <span style="color:#dd4a68">sudo</span> bin/cassandra -Dcassandra.replace_address<span style="color:#9a6e3a">=</span>address_of_dead_node</code></span></span>

 

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

    1.3.   替换一个running节点

由于升级新硬件等原因,需要使用新节点替换

  1. 添加新节点到集群中,参考步骤1.1.1

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

wKiom1cpphiDrWPlAAA1B_i8fJk015.png

4.删除running节点,参考1.4

1.4.   删除节点

1.4.1.     删除UN状态节点

运行nodetooldecommission删除UN节点

wKioL1cppv_j7ZivAAAH3iGF5ks849.png

或者:

wKiom1cppjmTCRaaAAE-5vBVfQI416.png

1.4.2.     删除DN状态节点

运行nodetoolremovenode命令

wKiom1cppkrQRrCpAAAItR3PQ6g995.png

<span style="color:#333333"><span style="color:black"><code class="language-java">注意
如果以上步骤无法删除,可能是由于节点存在脏数据,请运行nodetool assassinate,强制删除</code></span></span>

 

1.5.   修改ReplicationFactor

1.5.1.     ReplicationFactor减少

运行nodetool cleanup,删除脏数据

或者:

wKioL1cpp0Situ8oAAEQ_GnCSZU529.png

1.5.2.     ReplicationFactor增加

运行nodetool repair,迁移数据

或者:

wKioL1cpp2bw3WA-AAEwA_ieu7E092.png

2.     Cassandra优化

2.1.   安装前配置建议

2.1.1.     安装jemalloc

<span style="color:#333333"><span style="color:black"><code class="language-bash">jemalloc适合多线程下内存分配管理
<span style="color:#dd4a68">wget</span> http://www.canonware.com/download/jemalloc/jemalloc-3.6.0.tar.bz2
<span style="color:#dd4a68">tar</span> xjf jemalloc-3.6.0.tar.bz2
<span style="color:#dd4a68">cd</span> jemalloc-3.6.0
./configure
<span style="color:#dd4a68">make</span> <span style="color:#9a6e3a">&&</span><span style="color:#dd4a68">make</span> <span style="color:#dd4a68">install</span>
<span style="color:#0077aa">echo</span> <span style="color:#669900">'/usr/local/lib'</span><span style="color:#9a6e3a">></span>/etc/ld.so.conf.d/local.conf
ldconfig</code></span></span>

wKioL1cpp5HyAG8oAAA3jpQPa8Y101.png

2.1.2.     安装NTP (略)

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

wKioL1cpp6PyIWveAAAvC7KYWAI807.png

wKiom1cppt2gKIqAAAAhpSf2WaI010.png

2.1.4.     硬盘类型

硬盘类型

SSD(微秒)

SAS(毫秒)

SATA(秒)

延迟

100~120

8~40

>15

2.1.5.     Linux优化

1.文件操作符

/etc/security/limits.conf

<span style="color:#333333"><span style="color:black"><code class="language-xml">* - nofile 65535
* - memlock unlimited
* – nofile 32768
* – as unlimited</code></span></span>

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

<span style="color:#333333"><span style="color:black"><code class="language-xml">* - nproc 32768</code></span></span>

 

2.Swap

/etc/sysctl.conf

<span style="color:#333333"><span style="color:black"><code class="language-xml">vm.max_map_count = 131072
#最大限度使用物理内存
vm.swappiness = 0</code></span></span>

使之生效

<span style="color:#333333"><span style="color:black"><code class="language-xml">sysctl -p</code></span></span>

 

永久关闭swap

<span style="color:#333333"><span style="color:black"><code class="language-xml">swapoff –a</code></span></span>

/etc/fstab:注释掉swap

wKiom1cppyKA6sJrAAAzLjQpz9o105.png

3.NUMA

<span style="color:#333333"><span style="color:black"><code class="language-xml">echo 0 > /proc/sys/vm/zone_reclaim_mode</code></span></span>

4.文件系统类型

<span style="color:#333333"><span style="color:black"><code class="language-xml">EXT4</code></span></span>

2.1.6.     磁盘阵列RAID优化

<span style="color:#333333"><span style="color:black"><code class="language-xml">使用高效性能RAID0
sudo blockdev --setra 128 /dev/<span style="color:#990055"><span style="color:#990055"><span style="color:#999999"><</span>device</span><span style="color:#999999">></span></span></code></span></span>

2.1.7.     cassandra-evn.sh配置建议

JVM配置在cassandra-evn.sh中

  1. MAX_HEAP_SIZE

生产环境建议8G

wKiom1cpp1GwzHp0AACEXhULvLs062.png

  1. HEAP_NEWSIZE

一般设置为MAX_HEAP_SIZE的1/4

  1. 添加cassandra压缩线程级别,减少其资源占用

<span style="color:#333333"><span style="color:black"><code class="language-xml">-Dcassandra.compaction.priority=1</code></span></span>
  1. 打开JVM压缩,减少内存占用,适用于64位JVM

<span style="color:#333333"><span style="color:black"><code class="language-xml">-XX:+UseCompressedOops</code></span></span>

wKiom1cpp4KxPqHZAABZY1Ttqvc623.png

2.1.8.     cassandra.yaml配置建议

<span style="color:#333333"><span style="color:black"><code class="language-xml">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</code></span></span>

 

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

2.2.1.     nodetool tpstats

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

wKiom1cpp6nTmTMAAABUQAaTpeo434.png

或者使用OpsCenter

wKioL1cpqJCz6-lvAAA-lJo_EU0610.png

wKioL1cpqKWDALVwAAAmDlC-FsU281.png

2.2.2.     Read Requests/Write Requests

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

wKiom1cpp_DQtQE8AABRdkfpp3w679.png

wKioL1cpqMbC1TDwAAA-wD4PguY526.png

2.2.3.     total Memtable size

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

wKioL1cpqOKCHLMgAAAk_7lutxM979.png

2.2.4.     SSTable count

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

wKioL1cpqPaDs7LMAAAncf0Pt6g071.png

2.2.5.     total bytes compacted

确保不会发生频繁操作

wKioL1cpqQiwB3gFAAA_LtjQpYs529.png

2.2.6.     read latency/write latency

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

wKioL1cpqSPCdxQWAAAnjLcjGm4907.png

wKiom1cpqE6TT1WAAAAnQwgF-7o431.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

wKiom1cpqG2zVpQaAAAl8484Yio823.png

2.2.8.     cell count

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

wKioL1cpqVeCp-SOAAAkXqDKpLU110.png

2.2.9.     write Read active

读写请求数

wKioL1cpqWnjxZXkAAAqG5kF0pA383.png

2.2.10. OS系统监控

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

wKioL1cpqYzy_ASAAAAhDAPQE1U728.png

wKiom1cpqLjjAFHLAAAlkQpGBhY571.png

wKioL1cpqY3QeNSrAAAhZsQei-k449.png

这篇关于Cassandra操作和性能优化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1024701

相关文章

Vue3 的 shallowRef 和 shallowReactive:优化性能

大家对 Vue3 的 ref 和 reactive 都很熟悉,那么对 shallowRef 和 shallowReactive 是否了解呢? 在编程和数据结构中,“shallow”(浅层)通常指对数据结构的最外层进行操作,而不递归地处理其内部或嵌套的数据。这种处理方式关注的是数据结构的第一层属性或元素,而忽略更深层次的嵌套内容。 1. 浅层与深层的对比 1.1 浅层(Shallow) 定义

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

HDFS—存储优化(纠删码)

纠删码原理 HDFS 默认情况下,一个文件有3个副本,这样提高了数据的可靠性,但也带来了2倍的冗余开销。 Hadoop3.x 引入了纠删码,采用计算的方式,可以节省约50%左右的存储空间。 此种方式节约了空间,但是会增加 cpu 的计算。 纠删码策略是给具体一个路径设置。所有往此路径下存储的文件,都会执行此策略。 默认只开启对 RS-6-3-1024k

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

MySQL高性能优化规范

前言:      笔者最近上班途中突然想丰富下自己的数据库优化技能。于是在查阅了多篇文章后,总结出了这篇! 数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用mysql保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) 数据库对象的命名要能做到见名识意,并且最后不要超过32个字符 临时库表必须以tmp_为前缀并以日期为后缀,备份

黑神话,XSKY 星飞全闪单卷性能突破310万

当下,云计算仍然是企业主要的基础架构,随着关键业务的逐步虚拟化和云化,对于块存储的性能要求也日益提高。企业对于低延迟、高稳定性的存储解决方案的需求日益迫切。为了满足这些日益增长的 IO 密集型应用场景,众多云服务提供商正在不断推陈出新,推出具有更低时延和更高 IOPS 性能的云硬盘产品。 8 月 22 日 2024 DTCC 大会上(第十五届中国数据库技术大会),XSKY星辰天合正式公布了基于星

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长描述更为科学。 本文让更多的科研人员和农业工作者

从状态管理到性能优化:全面解析 Android Compose

文章目录 引言一、Android Compose基本概念1.1 什么是Android Compose?1.2 Compose的优势1.3 如何在项目中使用Compose 二、Compose中的状态管理2.1 状态管理的重要性2.2 Compose中的状态和数据流2.3 使用State和MutableState处理状态2.4 通过ViewModel进行状态管理 三、Compose中的列表和滚动

动手学深度学习【数据操作+数据预处理】

import osos.makedirs(os.path.join('.', 'data'), exist_ok=True)data_file = os.path.join('.', 'data', 'house_tiny.csv')with open(data_file, 'w') as f:f.write('NumRooms,Alley,Price\n') # 列名f.write('NA