1. 首页 > Cassandra教程 > 正文

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

Cassandra数据库发展历程:

  • 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

# Cassandra数据分区原理说明
# 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数据库支持多种一致性级别,可根据业务需求在一致性和可用性之间权衡:

# Cassandra一致性级别说明
ONE: 等待一个副本确认
QUORUM: 等待多数副本确认 (replication_factor/2 + 1)
ALL: 等待所有副本确认
LOCAL_QUORUM: 等待本地数据中心多数副本确认
EACH_QUORUM: 等待每个数据中心多数副本确认

1.3.5 高写入性能

Cassandra数据库采用LSM树存储引擎,写入操作先写入内存(MemTable),再异步刷写到磁盘(SSTable),提供极高的写入性能。

1.4 Cassandra数据库应用场景

Cassandra数据库适用于以下应用场景:

  • 物联网数据存储:海量设备数据写入和查询
  • 日志分析系统:大规模日志数据存储和分析
  • 用户行为分析:用户行为数据收集和分析
  • 实时推荐系统:用户偏好数据存储和查询
  • 金融交易系统:交易记录存储和查询
  • 社交网络:用户关系和消息存储
风哥提示:Cassandra数据库最适合写多读少、数据量大、需要高可用性的场景。对于复杂查询和事务支持要求高的场景,建议考虑关系型数据库。

1.5 Cassandra数据库学习前景

Cassandra数据库作为Apache顶级项目,在大数据领域应用广泛,学习前景良好:

  • 市场需求:互联网公司、金融机构、电信运营商等广泛使用
  • 薪资水平:Cassandra DBA和开发人员薪资较高
  • 技术发展:持续更新迭代,4.x版本引入众多新特性
  • 生态完善:丰富的客户端驱动和工具支持
  • 社区活跃:Apache社区支持,文档和资源丰富

Part02-生产环境规划与建议

2.1 Cassandra数据库硬件要求

Cassandra数据库对硬件资源有一定要求,合理的硬件配置是保障系统性能的基础。

2.1.1 Cassandra数据库CPU要求

# 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以上
  • 存储分离:数据目录、提交日志、缓存目录分离存储
生产环境存储建议:使用SSD存储,数据目录和提交日志目录分离,配置RAID10提高可靠性和性能。更多学习教程公众号风哥教程itpux_com

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运行环境要求
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数据库目录规划
# 安装目录
安装路径: /cassandra/app

# 数据目录
数据路径: /cassandra/fgdata

# 提交日志目录
提交日志: /cassandra/commitlog

# 缓存目录
缓存路径: /cassandra/saved_caches

# 日志目录
日志路径: /cassandra/logs

# 配置文件目录
配置路径: /cassandra/app/conf

2.3.2 Cassandra数据库用户规划

# 创建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 (已废弃)

风哥提示:生产环境建议至少3节点集群,副本因子设置为3,确保数据高可用性。多数据中心部署时,每个数据中心至少3个节点。from Cassandra视频:www.itpux.com

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

# 检查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安装

# 安装OpenJDK 11
# 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参数规划

# Java堆内存规划
# 系统内存32GB配置示例
# 堆内存建议: 8GB-16GB

# JVM参数配置(在cassandra-env.sh中配置)
# 初始堆内存
-Xms8G

# 最大堆内存
-Xmx8G

# 新生代大小
-Xmn2G

# 垃圾回收器
-XX:+UseG1GC

# G1相关参数
-XX:MaxGCPauseMillis=200
-XX:InitiatingHeapOccupancyPercent=35

# 元空间大小
-XX:MaxMetaspaceSize=256M

生产环境建议:Java堆内存设置为系统内存的1/4到1/2,最大不超过32GB。超过32GB会导致指针压缩失效,降低性能。使用G1垃圾回收器,设置合理的GC暂停目标。

Part04-生产案例与实战讲解

4.1 Cassandra数据库架构分析实战

通过实际案例深入理解Cassandra数据库架构原理。

4.1.1 Cassandra数据库集群架构分析

# 查看集群状态(假设已安装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数据库高可用性演示

# 连接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 1000 10

# 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

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息