Cassandra教程FG001-Cassandra架构原理与官方核心特性生产实战解析
本文档风哥主要介绍Cassandra数据库架构原理与官方核心特性,包括Cassandra数据库概述、架构原理、核心特性、应用场景、学习前景、硬件要求、操作系统要求、运行平台环境、集群规划等内容,风哥教程参考Cassandra官方文档Architecture、Getting Started内容编写,适合DBA人员和开发人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。
Part01-基础概念与理论知识
1.1 Cassandra数据库概述与发展历程
Apache Cassandra是一个开源的分布式NoSQL数据库管理系统,最初由Facebook开发,用于处理海量结构化数据。Cassandra于2008年开源,2010年成为Apache顶级项目。Cassandra数据库设计目标是提供高可用性、线性可扩展性和无单点故障的分布式数据存储解决方案。更多视频教程www.fgedu.net.cn
- 2008年:Facebook开源Cassandra
- 2010年:成为Apache顶级项目
- 2015年:发布3.0版本,引入存储引擎改进
- 2021年:发布4.0版本,重大架构升级
- 2023年:发布4.1版本,持续优化改进
1.2 Cassandra数据库架构原理
Cassandra数据库采用Masterless架构,所有节点对等,没有主从之分。Cassandra数据库架构核心组件包括:集群(Cluster)、数据中心(Data Center)、机架(Rack)、节点(Node)、分区器(Partitioner)、副本策略(Replication Strategy)等。
1.2.1 Cassandra数据库集群拓扑结构
Cassandra数据库集群拓扑结构说明:
- 集群(Cluster):Cassandra数据库集群是由多个节点组成的集合,集群名称用于标识不同的集群
- 数据中心(Data Center):数据中心是节点的逻辑分组,通常对应物理位置或云区域
- 机架(Rack):机架是数据中心内的逻辑分组,用于副本放置策略
- 节点(Node):节点是Cassandra数据库的基本运行单元,存储数据并处理请求
1.2.2 Cassandra数据库数据分区原理
Cassandra数据库使用一致性哈希环(Consistent Hashing Ring)进行数据分区。每个节点负责环上特定令牌范围的数据。学习交流加群风哥微信: itpux-com
# 1. 分区键(Partition Key)通过分区器计算令牌值
# 2. 令牌值决定数据存储在哪个节点
# 3. 默认使用Murmur3Partitioner分区器
# 分区键计算示例
分区键: user_id = “fgedu001”
分区器: Murmur3Partitioner
令牌值: hash(“fgedu001”) = -1234567890
存储节点: Node3 (负责令牌范围 -1300000000 ~ -1100000000)
1.2.3 Cassandra数据库复制机制
Cassandra数据库支持多种副本策略,确保数据高可用性:
- SimpleStrategy:单数据中心场景,按顺时针方向放置副本
- NetworkTopologyStrategy:多数据中心场景,按数据中心配置副本数
# SimpleStrategy配置
CREATE KEYSPACE fgedudb
WITH replication = {
‘class’: ‘SimpleStrategy’,
‘replication_factor’: 3
};
# NetworkTopologyStrategy配置
CREATE KEYSPACE fgedudb
WITH replication = {
‘class’: ‘NetworkTopologyStrategy’,
‘dc1’: 3,
‘dc2’: 2
};
1.3 Cassandra数据库核心特性
Cassandra数据库具有以下核心特性:
1.3.1 高可用性与容错性
Cassandra数据库采用无中心架构设计,所有节点对等,没有单点故障。当节点故障时,系统自动将请求路由到其他副本节点,确保服务连续性。
1.3.2 线性可扩展性
Cassandra数据库支持线性扩展,添加节点即可增加集群容量和吞吐量。数据自动重新分布到新节点,无需手动干预。
1.3.3 灵活的数据模型
Cassandra数据库使用宽列存储模型,支持动态列添加,适合存储结构化和半结构化数据。学习交流加群风哥QQ113257174
1.3.4 可调一致性
Cassandra数据库支持多种一致性级别,可根据业务需求在一致性和可用性之间权衡:
ONE: 等待一个副本确认
QUORUM: 等待多数副本确认 (replication_factor/2 + 1)
ALL: 等待所有副本确认
LOCAL_QUORUM: 等待本地数据中心多数副本确认
EACH_QUORUM: 等待每个数据中心多数副本确认
1.3.5 高写入性能
Cassandra数据库采用LSM树存储引擎,写入操作先写入内存(MemTable),再异步刷写到磁盘(SSTable),提供极高的写入性能。
1.4 Cassandra数据库应用场景
Cassandra数据库适用于以下应用场景:
- 物联网数据存储:海量设备数据写入和查询
- 日志分析系统:大规模日志数据存储和分析
- 用户行为分析:用户行为数据收集和分析
- 实时推荐系统:用户偏好数据存储和查询
- 金融交易系统:交易记录存储和查询
- 社交网络:用户关系和消息存储
1.5 Cassandra数据库学习前景
Cassandra数据库作为Apache顶级项目,在大数据领域应用广泛,学习前景良好:
- 市场需求:互联网公司、金融机构、电信运营商等广泛使用
- 薪资水平:Cassandra DBA和开发人员薪资较高
- 技术发展:持续更新迭代,4.x版本引入众多新特性
- 生态完善:丰富的客户端驱动和工具支持
- 社区活跃:Apache社区支持,文档和资源丰富
Part02-生产环境规划与建议
2.1 Cassandra数据库硬件要求
Cassandra数据库对硬件资源有一定要求,合理的硬件配置是保障系统性能的基础。
2.1.1 Cassandra数据库CPU要求
# 最小配置
CPU核心数: 2核
# 推荐配置
CPU核心数: 8-16核
# 高性能配置
CPU核心数: 32核以上
# 注意事项
– Cassandra是多线程应用,更多核心可提高并发处理能力
– 压缩操作需要较多CPU资源
– 生产环境建议至少8核
2.1.2 Cassandra数据库内存要求
# 最小配置
内存大小: 8GB
# 推荐配置
内存大小: 32-64GB
# 高性能配置
内存大小: 128GB以上
# 内存分配原则
– 堆内存(Heap): 系统内存的1/4到1/2,最大不超过32GB
– 页缓存(Page Cache): 留给操作系统用于文件缓存
– 建议: 16GB堆内存需要至少32GB系统内存
2.1.3 Cassandra数据库存储要求
Cassandra数据库存储配置建议:
- 存储类型:SSD固态硬盘,避免使用机械硬盘
- 存储容量:根据数据量规划,预留50%以上空间
- IOPS要求:至少5000 IOPS,推荐10000 IOPS以上
- 存储分离:数据目录、提交日志、缓存目录分离存储
2.1.4 Cassandra数据库网络要求
# 网络带宽
最小带宽: 1Gbps
推荐带宽: 10Gbps
# 网络延迟
节点间延迟: < 1ms
数据中心间延迟: < 100ms
# 注意事项
- 使用专用网络,避免与其他应用共享
- 跨数据中心部署需要稳定的高速网络
- 防火墙配置需要开放相应端口
2.2 Cassandra数据库操作系统要求
Cassandra数据库支持多种操作系统平台:
2.2.1 Cassandra数据库支持的操作系统
– Oracle Linux 9.3 / RHEL 9.3 / 8.x / 7.x
– CentOS 7.x / 8.x / Stream 9
– Ubuntu 18.04 LTS / 20.04 LTS / 22.04 LTS
– Debian 10 / 11 / 12
# 国产操作系统支持
– 麒麟操作系统 Kylin v10 SP3
– 欧拉操作系统 openEuler 20.03 / 22.03
# 推荐操作系统
– Oracle Linux 9.3 (生产环境推荐)
– RHEL 9.3 (企业环境推荐)
2.2.2 Cassandra数据库操作系统依赖
Java版本: OpenJDK 11 或 OpenJDK 17
推荐版本: OpenJDK 11 (LTS)
# 安装OpenJDK 11
# Oracle Linux / RHEL / CentOS
# yum install java-11-openjdk java-11-openjdk-devel -y
# Ubuntu / Debian
# apt install openjdk-11-jdk -y
# 验证Java版本
# java -version
openjdk version “11.0.21” 2023-10-17 LTS
OpenJDK Runtime Environment (build 11.0.21+9-LTS-193)
OpenJDK 64-Bit Server VM (build 11.0.21+9-LTS-193, mixed mode, sharing)
2.3 Cassandra数据库运行平台环境
Cassandra数据库运行平台环境规划:
2.3.1 Cassandra数据库目录规划
# 安装目录
安装路径: /cassandra/app
# 数据目录
数据路径: /cassandra/fgdata
# 提交日志目录
提交日志: /cassandra/commitlog
# 缓存目录
缓存路径: /cassandra/saved_caches
# 日志目录
日志路径: /cassandra/logs
# 配置文件目录
配置路径: /cassandra/app/conf
2.3.2 Cassandra数据库用户规划
# groupadd -g 2000 cassandra
# useradd -u 2000 -g cassandra -d /cassandra -s /bin/bash cassandra
# 创建目录并授权
# mkdir -p /cassandra/app
# mkdir -p /cassandra/fgdata
# mkdir -p /cassandra/commitlog
# mkdir -p /cassandra/saved_caches
# mkdir -p /cassandra/logs
# chown -R cassandra:cassandra /cassandra
2.4 Cassandra数据库集群规划
Cassandra数据库集群规划建议:
2.4.1 Cassandra数据库集群规模规划
# 开发测试环境
节点数量: 1-3节点
# 生产环境(单数据中心)
节点数量: 3-6节点
# 生产环境(多数据中心)
每个数据中心: 3节点以上
数据中心数量: 2-3个
# 副本因子建议
副本因子: 3 (生产环境推荐)
2.4.2 Cassandra数据库网络拓扑规划
# 3节点集群示例
节点1: 192.168.1.101 主机名: cassandra-node1.fgedu.net.cn
节点2: 192.168.1.102 主机名: cassandra-node2.fgedu.net.cn
节点3: 192.168.1.103 主机名: cassandra-node3.fgedu.net.cn
# 端口规划
内部通信端口: 7000 (非加密) / 7100 (加密)
JMX监控端口: 7199
CQL客户端端口: 9042
Thrift端口: 9160 (已废弃)
Part03-生产环境项目实施方案
3.1 Cassandra数据库环境检查
在部署Cassandra数据库之前,需要对系统环境进行全面检查。
3.1.1 Cassandra数据库系统信息检查
# cat /etc/os-release
NAME=”Oracle Linux Server”
VERSION=”9.3″
ID=”ol”
ID_LIKE=”fedora”
VERSION_ID=”9.3″
PLATFORM_ID=”platform:el9″
PRETTY_NAME=”Oracle Linux Server 9.3″
# 检查内核版本
# uname -r
5.15.0-200.131.27.el9uek.x86_64
# 检查系统架构
# uname -m
x86_64
# 检查CPU信息
# nproc
8
# lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
CPU(s): 8
Thread(s) per core: 2
Core(s) per socket: 4
Socket(s): 1
Model name: Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GHz
3.1.2 Cassandra数据库内存检查
# free -h
total used free shared buff/cache available
Mem: 31Gi 2.1Gi 26Gi 256Mi 2.8Gi 28Gi
Swap: 8.0Gi 0B 8.0Gi
# 检查内存详细信息
# cat /proc/meminfo | head -10
MemTotal: 32941092 kB
MemFree: 27890124 kB
MemAvailable: 29856432 kB
Buffers: 156784 kB
Cached: 2890124 kB
SwapCached: 0 kB
Active: 1456789 kB
Inactive: 1890234 kB
Active(anon): 890123 kB
Inactive(anon): 456789 kB
3.1.3 Cassandra数据库存储检查
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 500G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 499G 0 part
├─ol-root 253:0 0 50G 0 lvm /
├─ol-swap 253:1 0 8G 0 lvm [SWAP]
└─ol-home 253:2 0 441G 0 lvm /home
sdb 8:16 0 1T 0 disk
└─sdb1 8:17 0 1T 0 part /cassandra
# 检查磁盘空间
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/ol-root 50G 5.2G 45G 11% /
/dev/sda1 1014M 210M 805M 21% /boot
/dev/mapper/ol-home 441G 28K 441G 1% /home
/dev/sdb1 1.0T 24K 1.0T 1% /cassandra
# 检查磁盘I/O性能
# fio –name=randwrite –ioengine=libaio –direct=1 –bs=4k –numjobs=4 –size=1G –runtime=60 –time_based –rw=randwrite –filename=/cassandra/test_io
randwrite: (g=0): rw=randwrite, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=1
…
write: IOPS=15234, BW=59.5MiB/s (62.4MB/s)(3570MiB/60001msec)
3.2 Cassandra数据库内核参数优化
Cassandra数据库对操作系统内核参数有特定要求,需要进行优化配置。
3.2.1 Cassandra数据库关闭透明大页
# cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never
# 临时关闭透明大页
# echo never > /sys/kernel/mm/transparent_hugepage/enabled
# echo never > /sys/kernel/mm/transparent_hugepage/defrag
# 永久关闭透明大页
# vi /etc/rc.d/rc.local
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
# chmod +x /etc/rc.d/rc.local
# 验证关闭结果
# cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
3.2.2 Cassandra数据库关闭NUMA
# numactl –hardware
available: 2 nodes (0-1)
node 0 cpus: 0 1 2 3
node 0 size: 16384 MB
node 1 cpus: 4 5 6 7
node 1 size: 16384 MB
node distances:
node 0 1
0: 10 21
1: 21 10
# 在BIOS中关闭NUMA
# 或者在GRUB配置中添加numa=off参数
# 编辑GRUB配置
# vi /etc/default/grub
GRUB_CMDLINE_LINUX=”… numa=off”
# 更新GRUB配置
# grub2-mkconfig -o /boot/grub2/grub.cfg
# 重启系统生效
# reboot
3.2.3 Cassandra数据库内核参数配置
# vi /etc/sysctl.conf
# Cassandra数据库内核参数配置
# 最大文件打开数
fs.file-max = 6815744
# 进程最大文件打开数
fs.nr_open = 6815744
# 共享内存段最大数量
kernel.shmmni = 4096
# 信号量参数
kernel.sem = 250 32000 100 128
# 虚拟内存参数
vm.max_map_count = 1048575
# 脏页比例
vm.dirty_ratio = 15
vm.dirty_background_ratio = 3
# 交换分区使用倾向
vm.swappiness = 1
# 网络参数
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.rmem_default = 262144
net.core.wmem_default = 262144
net.core.netdev_max_backlog = 5000
net.core.somaxconn = 65535
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
# 使配置生效
# sysctl -p
# 验证配置
# sysctl -a | grep -E “file-max|shmmni|swappiness”
fs.file-max = 6815744
kernel.shmmni = 4096
vm.swappiness = 1
3.2.4 Cassandra数据库文件描述符限制
# vi /etc/security/limits.conf
# Cassandra用户限制配置
cassandra soft nofile 65536
cassandra hard nofile 65536
cassandra soft nproc 65536
cassandra hard nproc 65536
cassandra soft memlock unlimited
cassandra hard memlock unlimited
# 系统全局限制
* soft nofile 65536
* hard nofile 65536
# 验证配置
# su – cassandra
$ ulimit -n
65536
$ ulimit -u
65536
3.3 Cassandra数据库Java环境配置
Cassandra数据库依赖Java运行环境,需要正确配置Java环境。
3.3.1 Cassandra数据库Java安装
# yum install java-11-openjdk java-11-openjdk-devel -y
# 验证Java安装
# java -version
openjdk version “11.0.21” 2023-10-17 LTS
OpenJDK Runtime Environment (build 11.0.21+9-LTS-193)
OpenJDK 64-Bit Server VM (build 11.0.21+9-LTS-193, mixed mode, sharing)
# 配置JAVA_HOME环境变量
# vi /etc/profile.d/java.sh
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk
export PATH=$JAVA_HOME/bin:$PATH
# 使配置生效
# source /etc/profile.d/java.sh
# 验证JAVA_HOME
# echo $JAVA_HOME
/usr/lib/jvm/java-11-openjdk
3.3.2 Cassandra数据库Java参数规划
# 系统内存32GB配置示例
# 堆内存建议: 8GB-16GB
# JVM参数配置(在cassandra-env.sh中配置)
# 初始堆内存
-Xms8G
# 最大堆内存
-Xmx8G
# 新生代大小
-Xmn2G
# 垃圾回收器
-XX:+UseG1GC
# G1相关参数
-XX:MaxGCPauseMillis=200
-XX:InitiatingHeapOccupancyPercent=35
# 元空间大小
-XX:MaxMetaspaceSize=256M
Part04-生产案例与实战讲解
4.1 Cassandra数据库架构分析实战
通过实际案例深入理解Cassandra数据库架构原理。
4.1.1 Cassandra数据库集群架构分析
# nodetool status
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
— Address Load Tokens Owns (effective) Host ID Rack
UN 192.168.1.101 125.45 GB 256 100.0% 8e5f6a7b-8c9d-0e1f-2a3b-4c5d6e7f8a9b rack1
UN 192.168.1.102 130.12 GB 256 100.0% 9f6g7b8c-9d0e-1f2a-3b4c-5d6e7f8a9b0c rack1
UN 192.168.1.103 128.78 GB 256 100.0% 0g7h8c9d-0e1f-2a3b-4c5d-6e7f8a9b0c1d rack1
# 查看集群信息
# nodetool info
ID : 8e5f6a7b-8c9d-0e1f-2a3b-4c5d6e7f8a9b
Gossip active : true
Thrift active : false
Native Transport active: true
Load : 125.45 GB
Generation No : 1698765432
Uptime (seconds) : 864000
Heap Memory (MB) : 4096.00 / 8192.00
Off Heap Memory (MB) : 512.00
Data Center : datacenter1
Rack : rack1
Exceptions : 0
Key Cache : entries 123456, size 128 MB, capacity 256 MB, 98.5% hits
Row Cache : entries 0, size 0 bytes, capacity 0 bytes, NaN% hits
4.1.2 Cassandra数据库数据分布分析
# nodetool ring
Datacenter: datacenter1
==========
Address Rack Status State Load Owns Token
9107812345678901234
192.168.1.101 rack1 Up Normal 125.45 GB 33.33% -9187812345678901234
192.168.1.102 rack1 Up Normal 130.12 GB 33.33% -4567812345678901234
192.168.1.103 rack1 Up Normal 128.78 GB 33.33% 9107812345678901234
# 查看特定Keyspace的数据分布
# nodetool describering fgedudb
Schema Version: 8e5f6a7b-8c9d-0e1f-2a3b-4c5d6e7f8a9b
TokenRange:
StartToken: -9187812345678901234
EndToken: -4567812345678901234
Endpoints: [192.168.1.101, 192.168.1.102, 192.168.1.103]
RpcEndpoints: [192.168.1.101, 192.168.1.102, 192.168.1.103]
EndpointDetails:
Endpoint: 192.168.1.101
Hostname: cassandra-node1.fgedu.net.cn
Datacenter: datacenter1
Rack: rack1
…
4.2 Cassandra数据库核心特性演示
通过实际操作演示Cassandra数据库核心特性。
4.2.1 Cassandra数据库高可用性演示
# cqlsh 192.168.1.101 9042
Connected to Test Cluster at 192.168.1.101:9042
[cqlsh 6.8.0 | Cassandra 4.1.0 | CQL spec 3.4.5 | Native protocol v5]
Use HELP for help.
# 创建测试Keyspace
cqlsh> CREATE KEYSPACE fgedudb
… WITH replication = {‘class’: ‘SimpleStrategy’, ‘replication_factor’: 3};
# 创建测试表
cqlsh> USE fgedudb;
cqlsh:fgedudb> CREATE TABLE fgedu_users (
… user_id text PRIMARY KEY,
… user_name text,
… email text,
… created_at timestamp
… );
# 插入测试数据
cqlsh:fgedudb> INSERT INTO fgedu_users (user_id, user_name, email, created_at)
… VALUES (‘fgedu001’, ‘test_user1’, ‘test1@fgedu.net.cn’, toTimestamp(now()));
cqlsh:fgedudb> INSERT INTO fgedu_users (user_id, user_name, email, created_at)
… VALUES (‘fgedu002’, ‘test_user2’, ‘test2@fgedu.net.cn’, toTimestamp(now()));
# 查询数据
cqlsh:fgedudb> SELECT * FROM fgedu_users;
user_id | created_at | email | user_name
———-+———————————-+——————–+————
fgedu001 | 2024-01-15 10:30:45.123000+0000 | test1@fgedu.net.cn | test_user1
fgedu002 | 2024-01-15 10:30:46.234000+0000 | test2@fgedu.net.cn | test_user2
(2 rows)
# 模拟节点故障(停止一个节点)
# 在节点192.168.1.103上执行
# systemctl stop cassandra
# 查看集群状态
# nodetool status
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
— Address Load Tokens Owns (effective) Host ID Rack
UN 192.168.1.101 125.45 GB 256 100.0% 8e5f6a7b-8c9d-0e1f-2a3b-4c5d6e7f8a9b rack1
UN 192.168.1.102 130.12 GB 256 100.0% 9f6g7b8c-9d0e-1f2a-3b4c-5d6e7f8a9b0c rack1
DN 192.168.1.103 128.78 GB 256 100.0% 0g7h8c9d-0e1f-2a3b-4c5d-6e7f8a9b0c1d rack1
# 仍然可以正常查询数据(高可用性验证)
cqlsh:fgedudb> SELECT * FROM fgedu_users;
user_id | created_at | email | user_name
———-+———————————-+——————–+————
fgedu001 | 2024-01-15 10:30:45.123000+0000 | test1@fgedu.net.cn | test_user1
fgedu002 | 2024-01-15 10:30:46.234000+0000 | test2@fgedu.net.cn | test_user2
(2 rows)
4.2.2 Cassandra数据库可调一致性演示
# ONE一致性级别
cqlsh:fgedudb> CONSISTENCY ONE
Consistency level set to ONE.
cqlsh:fgedudb> SELECT * FROM fgedu_users WHERE user_id = ‘fgedu001’;
user_id | created_at | email | user_name
———-+———————————-+——————–+————
fgedu001 | 2024-01-15 10:30:45.123000+0000 | test1@fgedu.net.cn | test_user1
(1 rows)
# QUORUM一致性级别
cqlsh:fgedudb> CONSISTENCY QUORUM
Consistency level set to QUORUM.
cqlsh:fgedudb> SELECT * FROM fgedu_users WHERE user_id = ‘fgedu001’;
user_id | created_at | email | user_name
———-+———————————-+——————–+————
fgedu001 | 2024-01-15 10:30:45.123000+0000 | test1@fgedu.net.cn | test_user1
(1 rows)
# ALL一致性级别
cqlsh:fgedudb> CONSISTENCY ALL
Consistency level set to ALL.
cqlsh:fgedudb> SELECT * FROM fgedu_users WHERE user_id = ‘fgedu001’;
NoHostAvailable: Unable to complete request. One or more nodes are unavailable.
# ALL一致性级别要求所有副本可用,节点故障时查询失败
4.3 Cassandra数据库性能测试实战
使用cassandra-stress工具进行性能测试。
4.3.1 Cassandra数据库写入性能测试
# cassandra-stress write n=1000000 -col size=FIXED(100) -node 192.168.1.101 -rate threads=50
Output:
—————————————————————-
Results:
Op rate : 12,345 op/s [WRITE: 12,345 op/s]
Partition rate : 12,345 pk/s [WRITE: 12,345 pk/s]
Row rate : 12,345 row/s [WRITE: 12,345 row/s]
Latency mean : 4.05 ms [WRITE: 4.05 ms]
Latency median : 3.12 ms [WRITE: 3.12 ms]
Latency 95th percentile : 10.23 ms [WRITE: 10.23 ms]
Latency 99th percentile : 25.67 ms [WRITE: 25.67 ms]
Latency 99.9th percentile: 89.45 ms [WRITE: 89.45 ms]
Total operation count : 1,000,000
Total partition count : 1,000,000
Total row count : 1,000,000
Total errors : 0
Total GC count : 156
Total GC time : 1.234 s
Total operation time : 81.012 s
—————————————————————-
# 写入性能分析
# 吞吐量: 12,345 op/s
# 平均延迟: 4.05 ms
# 99%请求延迟: 25.67 ms
4.3.2 Cassandra数据库读取性能测试
# cassandra-stress read n=500000 -col size=FIXED(100) -node 192.168.1.101 -rate threads=50
Output:
—————————————————————-
Results:
Op rate : 8,567 op/s [READ: 8,567 op/s]
Partition rate : 8,567 pk/s [READ: 8,567 pk/s]
Row rate : 8,567 row/s [READ: 8,567 row/s]
Latency mean : 5.83 ms [READ: 5.83 ms]
Latency median : 4.56 ms [READ: 4.56 ms]
Latency 95th percentile : 15.78 ms [READ: 15.78 ms]
Latency 99th percentile : 35.89 ms [READ: 35.89 ms]
Latency 99.9th percentile: 125.67 ms [READ: 125.67 ms]
Total operation count : 500,000
Total partition count : 500,000
Total row count : 500,000
Total errors : 0
Total GC count : 89
Total GC time : 0.789 s
Total operation time : 58.356 s
—————————————————————-
# 读取性能分析
# 吞吐量: 8,567 op/s
# 平均延迟: 5.83 ms
# 99%请求延迟: 35.89 ms
Part05-风哥经验总结与分享
5.1 Cassandra数据库架构设计最佳实践
Cassandra数据库架构设计最佳实践总结:
- 集群规划:生产环境至少3节点,副本因子设置为3
- 数据中心规划:跨机房部署使用NetworkTopologyStrategy
- 硬件配置:使用SSD存储,内存充足,网络稳定
- 一致性选择:根据业务需求选择合适的一致性级别
- 数据建模:查询驱动建模,避免复杂查询
- 监控运维:建立完善的监控和运维体系
5.2 Cassandra数据库常见问题与解决方案
Cassandra数据库常见问题与解决方案:
5.2.1 Cassandra数据库节点无法启动
# systemctl start cassandra
Job for cassandra.service failed because the control process exited with error code.
# 排查步骤
# 1. 查看日志
# tail -100 /cassandra/logs/system.log
# 2. 检查Java环境
# java -version
# 3. 检查配置文件
# grep -i error /cassandra/app/conf/cassandra.yaml
# 4. 检查端口占用
# netstat -tlnp | grep -E “7000|9042|7199”
# 5. 检查目录权限
# ls -ld /cassandra/fgdata
# ls -ld /cassandra/logs
# 常见原因
# – Java版本不兼容
# – 配置文件错误
# – 端口被占用
# – 目录权限问题
# – 内存不足
5.2.2 Cassandra数据库性能下降
# 查询响应时间变长,吞吐量下降
# 排查步骤
# 1. 检查节点状态
# nodetool status
# 2. 检查压缩状态
# nodetool compactionstats
# 3. 检查GC状态
# jstat -gcutil
# 4. 检查磁盘IO
# iostat -x 1 10
# 5. 检查热点分区
# nodetool cfstats fgedudb.fgedu_users
# 常见原因
# – 压缩积压
# – GC频繁
# – 磁盘IO瓶颈
# – 热点分区
# – 数据倾斜
5.3 Cassandra数据库学习路径建议
Cassandra数据库学习路径建议:
- 第一阶段:学习NoSQL基础概念,理解分布式系统原理
- 第二阶段:掌握Cassandra架构原理,理解数据模型
- 第三阶段:学习CQL语法,掌握基本操作
- 第四阶段:实践集群部署和运维管理
- 第五阶段:深入性能调优和故障排查
- 第六阶段:学习应用开发和最佳实践
本文档详细介绍了Cassandra数据库架构原理与官方核心特性,包括架构设计、核心特性、硬件要求、操作系统要求、运行平台环境、集群规划、环境检查、内核参数优化、Java环境配置、架构分析、核心特性演示、性能测试等内容。通过学习本文档,读者可以全面了解Cassandra数据库的基础知识和生产环境部署要求,为后续深入学习打下坚实基础。
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
