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

相关文章

python panda库从基础到高级操作分析

《pythonpanda库从基础到高级操作分析》本文介绍了Pandas库的核心功能,包括处理结构化数据的Series和DataFrame数据结构,数据读取、清洗、分组聚合、合并、时间序列分析及大数据... 目录1. Pandas 概述2. 基本操作:数据读取与查看3. 索引操作:精准定位数据4. Group

Python操作PDF文档的主流库使用指南

《Python操作PDF文档的主流库使用指南》PDF因其跨平台、格式固定的特性成为文档交换的标准,然而,由于其复杂的内部结构,程序化操作PDF一直是个挑战,本文主要为大家整理了Python操作PD... 目录一、 基础操作1.PyPDF2 (及其继任者 pypdf)2.PyMuPDF / fitz3.Fre

Python对接支付宝支付之使用AliPay实现的详细操作指南

《Python对接支付宝支付之使用AliPay实现的详细操作指南》支付宝没有提供PythonSDK,但是强大的github就有提供python-alipay-sdk,封装里很多复杂操作,使用这个我们就... 目录一、引言二、准备工作2.1 支付宝开放平台入驻与应用创建2.2 密钥生成与配置2.3 安装ali

MySQL 强制使用特定索引的操作

《MySQL强制使用特定索引的操作》MySQL可通过FORCEINDEX、USEINDEX等语法强制查询使用特定索引,但优化器可能不采纳,需结合EXPLAIN分析执行计划,避免性能下降,注意版本差异... 目录1. 使用FORCE INDEX语法2. 使用USE INDEX语法3. 使用IGNORE IND

小白也能轻松上手! 路由器设置优化指南

《小白也能轻松上手!路由器设置优化指南》在日常生活中,我们常常会遇到WiFi网速慢的问题,这主要受到三个方面的影响,首要原因是WiFi产品的配置优化不合理,其次是硬件性能的不足,以及宽带线路本身的质... 在数字化时代,网络已成为生活必需品,追剧、游戏、办公、学习都离不开稳定高速的网络。但很多人面对新路由器

Python使用openpyxl读取Excel的操作详解

《Python使用openpyxl读取Excel的操作详解》本文介绍了使用Python的openpyxl库进行Excel文件的创建、读写、数据操作、工作簿与工作表管理,包括创建工作簿、加载工作簿、操作... 目录1 概述1.1 图示1.2 安装第三方库2 工作簿 workbook2.1 创建:Workboo

Zabbix在MySQL性能监控方面的运用及最佳实践记录

《Zabbix在MySQL性能监控方面的运用及最佳实践记录》Zabbix通过自定义脚本和内置模板监控MySQL核心指标(连接、查询、资源、复制),支持自动发现多实例及告警通知,结合可视化仪表盘,可有效... 目录一、核心监控指标及配置1. 关键监控指标示例2. 配置方法二、自动发现与多实例管理1. 实践步骤

Ubuntu 24.04启用root图形登录的操作流程

《Ubuntu24.04启用root图形登录的操作流程》Ubuntu默认禁用root账户的图形与SSH登录,这是为了安全,但在某些场景你可能需要直接用root登录GNOME桌面,本文以Ubuntu2... 目录一、前言二、准备工作三、设置 root 密码四、启用图形界面 root 登录1. 修改 GDM 配

MySQL深分页进行性能优化的常见方法

《MySQL深分页进行性能优化的常见方法》在Web应用中,分页查询是数据库操作中的常见需求,然而,在面对大型数据集时,深分页(deeppagination)却成为了性能优化的一个挑战,在本文中,我们将... 目录引言:深分页,真的只是“翻页慢”那么简单吗?一、背景介绍二、深分页的性能问题三、业务场景分析四、

Linux进程CPU绑定优化与实践过程

《Linux进程CPU绑定优化与实践过程》Linux支持进程绑定至特定CPU核心,通过sched_setaffinity系统调用和taskset工具实现,优化缓存效率与上下文切换,提升多核计算性能,适... 目录1. 多核处理器及并行计算概念1.1 多核处理器架构概述1.2 并行计算的含义及重要性1.3 并