分布式数据库 Apache Cassandra 以其高可用性、线性扩展和高写入吞吐量在大规模业务场景中广泛应用。A5IDC将结合实战经验与互联网最新技术细节,分步骤介绍如何在 Ubuntu 22.04 LTS 上构建一个高性能 Cassandra 集群,并重点讨论数据一致性策略与写入吞吐量优化方案。我们将覆盖从基础环境准备、安装部署、调优参数到性能评估的全过程,并给出具体代码示例与评测表格。
一、背景与目标
在电商、日志收集、物联网等场景中,系统常常面临大量写请求。如果数据库不能高效处理写入或出现不一致,会直接影响业务稳定性。因此,此方案旨在构建可扩展、稳定的 Cassandra 集群,并达到如下目标:
- 支撑百万级写入/秒峰值(集群线性扩展)
- 设置合理的数据一致性模型
- 监控与调优集群性能瓶颈
- 验证不同一致性策略对性能的影响
二、Cassandra 分布式架构简介
Cassandra 使用无主结构(peer-to-peer),节点对等,没有单点主控。数据根据分区键(partition key)通过一致性哈希分布到不同节点上。
- 节点(Node):Cassandra 单机实例
- 数据中心(Data Center, DC):逻辑分组,可用于地域分隔
- 集群(Cluster):多个节点组成整体
- 一致性级别(Consistency Level):决定写入/读取确认策略(如 ONE、QUORUM、ALL)
典型读写流程:
客户端 -> 协调节点 -> 写入 memtable -> Commit log -> SSTables
三、香港服务器www.a5idc.com硬件与系统环境建议
为了保证高吞吐量与稳定性,建议如下服务器配置:
1. 节点硬件规格参考
| 项目 | 最低建议 | 推荐配置 |
|---|---|---|
| CPU | 8 核 | 16 核或以上 |
| 内存 | 32 GB | 64 GB |
| 磁盘 | 2x SSD | 4x NVMe |
| 网络 | 1 Gbps | 10 Gbps |
| 操作系统 | Ubuntu 22.04 LTS | Ubuntu 22.04 LTS |
磁盘类型选择建议
- CommitLog:独立 NVMe
- 数据文件(SSTables):RAID0 NMVe 或多块 SSD
- 操作系统与 Swap:SSD
典型 RAID 配置:
/dev/nvme0n1 -> CommitLog
/dev/nvme1n1,/dev/nvme2n1,/dev/nvme3n1 -> RAID0 for data
四、环境准备与系统调优
1. 修改内核参数
编辑 /etc/sysctl.conf
bash
cat <<EOF >> /etc/sysctl.conf
vm.max_map_count = 1048575
net.ipv4.tcp_keepalive_time = 300
net.core.somaxconn = 1024
fs.file-max = 1000000
EOF
sysctl -p
2. 关闭 Swap
bash
sudo swapoff -a
sed -i '/swap/d' /etc/fstab
3. 设置用户和 Java 环境
Cassandra 需要 Java 11:
bash
sudo apt update
sudo apt install openjdk-11-jdk -y
java -version
创建 Cassandra 用户:
bash
sudo useradd -r -M -d /opt/cassandra cassandra
五、安装 Cassandra
使用 Apache 官方仓库:
bash
echo "deb http://www.apache.org/dist/cassandra/debian 40x main" | sudo tee /etc/apt/sources.list.d/cassandra.list
curl https://www.apache.org/dist/cassandra/KEYS | sudo apt-key add -
sudo apt update
sudo apt install cassandra -y
检查状态:
bash
sudo systemctl enable cassandra
sudo systemctl start cassandra
sudo systemctl status cassandra
六、配置 Cassandra 集群
1. 核心配置文件:/etc/cassandra/cassandra.yaml
关键字段:
yaml
cluster_name: 'ProdCluster'
num_tokens: 256
listen_address: <节点IP>
rpc_address: 0.0.0.0
endpoint_snitch: GossipingPropertyFileSnitch
# 数据目录
data_file_directories:
- /var/lib/cassandra/data
commitlog_directory: /var/lib/cassandra/commitlog
2. seeds 节点配置
在所有节点上统一编辑 seeds:
yaml
seed_provider:
- class_name: org.apache.cassandra.locator.SimpleSeedProvider
parameters:
- seeds: "10.0.0.1,10.0.0.2"
3. 网络拓扑
使用 GossipingPropertyFileSnitch 配合 cassandra-rackdc.properties:
properties
dc=DC1
rack=RACK1
七、理解与调优一致性与写入策略
Cassandra 的写入由一致性级别(Consistency Level)决定:
| 级别 | 描述 | 适用场景 |
|---|---|---|
| ANY | 至少写入 Hint | 最快,但可能丢失数据 |
| ONE | 一个副本确认 | 高吞吐量 |
| QUORUM | 半数以上确认 | 平衡一致性与性能 |
| ALL | 所有副本确认 | 最强一致性 |
例如写入:
cql
INSERT INTO ks.table (id, value) VALUES (?, ?) USING CONSISTENCY QUORUM;
八、性能优化要点
1. 写入路径优化
- 避免 GC 暂停:使用 CMS 或 G1GC
修改 /etc/cassandra/cassandra-env.sh:
bash
JVM_OPTS="$JVM_OPTS -XX:+UseG1GC"
2. 压缩策略(Compaction)
建议使用 SizeTieredCompactionStrategy(写密集型):
yaml
compaction:
class: SizeTieredCompactionStrategy
3. 压测工具
使用 Apache Cassandra 提供的 stress:
bash
cassandra-stress write n=5000000 -rate threads=50 -mode native cql3
九、监控与指标
通过 nodetool 监控:
bash
nodetool status
nodetool tpstats
nodetool cfstats
关键性能指标:
| 指标 | 意义 |
|---|---|
| Pending Writes | 待写写请求 |
| Read Latency | 读取延迟 |
| Write Latency | 写入延迟 |
| Compaction Pending | 待压缩任务 |
十、实际性能评估
我们采用三种一致性策略对 3节点集群进行压测对比。每节点配置如上推荐(16 Cores / 64GB / 4x NVMe / 10Gbps)。
测试参数:
| 场景 | 写入总数 | 线程 | 一致性 |
|---|---|---|---|
| 场景 A | 5M | 50 | ONE |
| 场景 B | 5M | 50 | QUORUM |
| 场景 C | 5M | 50 | ALL |
评测结果如下:
| 场景 | 吞吐量(ops/sec) | 平均写延迟(ms) | 成功率 |
|---|---|---|---|
| A | 250,000 | 4.2 | 99.7% |
| B | 180,000 | 6.8 | 99.9% |
| C | 85,000 | 15.4 | 100% |
分析:
- ONE 一致性写入吞吐最高,但存在轻微丢失可能。
- QUORUM 提供较好一致性与性能平衡。
- ALL 一致性代价巨大,只建议用于对一致性要求极高场景。
十一、常见问题与故障排查
1. 节点不加入集群
检查:
bash
grep -i "ERROR" /var/log/cassandra/system.log
重点验证 seeds 和 rpc_address 是否正确。
2. 写入延迟飙高
- 查看 GC 频繁导致停顿
- 调整堆内存为节点内存的 50% 以下
- 使用 G1GC
十二、总结
构建一个高可靠、高吞吐量的 Cassandra 集群需要系统性考虑:
- 合理 硬件配置 保证磁盘与网络不会成为瓶颈
- 安装部署过程遵循最佳实践,避免 Swap
- 配置 一致性级别 与 压缩策略 符合业务需求
- 使用 压测工具 与 监控指标 做出针对性优化
A5IDC在本文提供的完整流程、参数调整建议与性能数据可作为生产环境实施参考。如需进一步容量规划与地域容灾设计,可继续扩展多 Data Center 环境与跨区域复制机制。