一、环境准备
- 操作系统:建议使用 Ubuntu、CentOS 或类似的 Linux 发行版。
- JDK:Cassnadra 需要 Java 8(部分新版本支持 Java 11)。
二、安装 Cassandra
1. 安装 Java 环境
假设安装 OpenJDK 8:
sudo apt-get update
sudo apt-get install openjdk-8-jdk
java -version # 确认安装成功
2. 导入 Cassandra 仓库
以 Ubuntu 为例:
echo "deb https://debian.cassandra.apache.org 311x main" | sudo tee -a /etc/apt/sources.list.d/cassandra.sources.list
curl https://downloads.apache.org/cassandra/KEYS | sudo apt-key add -
sudo apt-get update
如遇网络问题,可直接下载二进制包解压安装:
wget https://downloads.apache.org/cassandra/4.1.3/apache-cassandra-4.1.3-bin.tar.gz
tar -xvf apache-cassandra-4.1.3-bin.tar.gz
cd apache-cassandra-4.1.3
3. 安装 Cassandra
如果用 apt:
sudo apt-get install cassandra
或者直接运行解压的二进制包:
cd apache-cassandra-4.1.3
bin/cassandra -f # 前台启动
三、Cassandra 基本配置
修改 conf/cassandra.yaml 文件。
重点参数:
- cluster_name:集群名称,所有节点需一致。
- listen_address:本地监听地址,填写你的主机 IP。
- rpc_address:客户端访问地址,通常与 listen_address 一样。
- seed_nodes:种子节点(集群启动时用来发现其他节点)。
单机示例
cluster_name: 'MyCassandraCluster'
listen_address: 127.0.0.1
rpc_address: 127.0.0.1
seed_provider:
- class_name: org.apache.cassandra.locator.SimpleSeedProvider
parameters:
- seeds: "127.0.0.1"
集群示例(3节点)
假设有3台机器,IP 分别为:192.168.0.101, 192.168.0.102, 192.168.0.103
每台节点都配置:
cluster_name: 'MyCassandraCluster'
listen_address: 本机IP (例如 192.168.0.101)
rpc_address: 本机IP (如 192.168.0.101)
seed_provider:
- class_name: org.apache.cassandra.locator.SimpleSeedProvider
parameters:
- seeds: "192.168.0.101,192.168.0.102"
种子节点至少指定两台机器的 IP,所有节点配置一致(都写两台即可,不必都写三台)。
其他参数(可按需求调整):
data_file_directories:数据存储路径commitlog_directory:日志存储路径
四、启动 Cassandra
# 单机/每个节点都执行
bin/cassandra # 后台启动
bin/cassandra -f # 前台启动
bin/nodetool status # 查看节点状态
如需关闭:
bin/nodetool stopdaemon
五、常用管理命令
进入 Cassandra Shell(cqlsh):
bin/cqlsh
集群管理:
bin/nodetool status # 查看节点和集群状态
bin/nodetool ring # 查看数据分布
bin/nodetool info # 查看节点信息
六、高级配置建议
-
JVM 内存参数
修改conf/jvm-server.options,如:-Xms2G -Xmx2G -
防火墙配置
确保 7000(TCP), 9042(CQL), 7199(JMX)等端口开放。 -
集群扩容
新节点只需加入合适的 IP、配置种子节点后启动即可自动加入集群。
七、常见问题
- 配置文件中的 IP 写错,启动失败
需确保 IP 可被其他节点访问。 - Java 版本不兼容
用java -version检查并切换至兼容版本。
九、常用进阶配置
1. 节点压缩与数据分区(分片策略)
-
分区器(partitioner)
-
常用:
Murmur3Partitioner(默认,性能好);老版本可能写RandomPartitioner或ByteOrderedPartitioner。 -
配置示例(cassandra.yaml):
partitioner: org.apache.cassandra.dht.Murmur3Partitioner
-
-
数据压缩
-
可在建表时选择压缩算法,例如:
CREATE TABLE users ( id UUID PRIMARY KEY, name TEXT, ... ) WITH compression = { 'class': 'org.apache.cassandra.compress.LZ4Compressor' };
-
2. 副本数与容错设置
- 副本因子(replication_factor):
-
决定每份数据存储的节点数。
-
推荐大于等于3,这保证高可用。
-
建 keyspace 时指定:
CREATE KEYSPACE myks WITH REPLICATION = { 'class': 'SimpleStrategy', 'replication_factor': 3 }; -
如果是多数据中心:
CREATE KEYSPACE myksdc WITH REPLICATION = { 'class' : 'NetworkTopologyStrategy', 'dc1' : 3, 'dc2' : 2 };
-
3. 节点间通信加密和认证
-
启用 SSL/TLS:
- 修改
conf/cassandra.yaml及conf/cassandra-env.sh,按官方文档配置 SSL 证书。 - 配置相关参数(如
client_encryption_options,server_encryption_options)。
- 修改
-
用户认证与权限:
-
Cassandra 支持内置用户认证。编辑
cassandra.yaml:authenticator: PasswordAuthenticator authorizer: CassandraAuthorizer -
进入
cqlsh,初始账号为cassandra,可管理角色,如:CREATE ROLE admin WITH PASSWORD = 'yourpassword' AND LOGIN = true AND SUPERUSER = true;
-
十、数据备份与恢复
1. 备份数据
-
快照备份:
bin/nodetool snapshot快照文件保存在数据目录下的
snapshots文件夹。 -
恢复快照:
- 停止 Cassandra 服务
- 拷贝快照文件至数据目录
- 启动 Cassandra,数据即可自动恢复
2. 导入/导出表数据
-
使用
cqlsh导出表数据bin/cqlsh -e "COPY myks.mytable TO 'mytable.csv';" -
导入数据
bin/cqlsh -e "COPY myks.mytable FROM 'mytable.csv';"
十一、监控与维护
1. Cassandra 自带工具
-
nodetool
nodetool status:查看节点健康nodetool repair:修复副本一致性nodetool flush:强制写磁盘nodetool cleanup:清理无用数据
-
日志文件
- 日志默认在
logs/目录,启动与错误日志对排查故障很重要。
- 日志默认在
2. 集群扩容与瘦身
-
添加节点
- 新节点准备好后,配置 seed 节点和 cluster_name 后启动即可自动加入。
-
移除节点
bin/nodetool decommission
十二、高级参数优化(性能调优建议)
-
内存与JVM调参
conf/jvm-server.options文件设置 JVM 堆大小。建议:
-Xmx和-Xms设为服务器物理内存50-70%。如8G内存可设为4G。
-
磁盘与缓存参数
- 数据目录和 commitlog 最好分不同物理盘,提高 IO 性能。
- 默认磁盘参数即可,特殊场合可调大缓存。
-
定期 repair 操作
- 多副本情况下,建议定期执行
nodetool repair保证一致性。
- 多副本情况下,建议定期执行
十三、常见故障排查
- 启动报错多半是IP、端口冲突或内存不足。
- 用
nodetool status、日志文件分析节点状态。 - 端口未开放或防火墙问题导致集群无法互相识别。
- 数据库突然挂起,需检查磁盘空间和 JVM 内存日志。
十四、Cassandra 生产环境运维建议
1. 节点上下线 & 数据再均衡
-
扩容节点步骤:
- 新机安装好 Cassandra,配置为同一个 cluster_name 和种子节点。
- 新节点启动后会自动发现集群,其数据分片会自动均衡,整个 ring 结构会发生轻微变化。
- 建议扩容后,执行
nodetool repair和nodetool cleanup增强集群一致性。
-
安全下线节点:
在要移除的节点上执行:nodetool decommission等待迁移数据完成即可关停。
2. 动态配置参数调整
很多参数(如日志级别、JVM调优等)需重启服务才生效。部分参数可热加载(参见官方配置说明)。
热点 Key(分区)问题
- Cassandra采用分区键做数据路由,热点分区(比如某些分区写入极多)会影响性能。
- 优化建议:合理设计 RowKey,避免集中写入;如果有时间序列数据可加随机前缀或 hash。
3. 日常监控工具推荐
- 官方 JMX 和 Nodetool(适合小型集群)
- Prometheus + Grafana
Cassandra 支持导出 JMX 到 Prometheus,结合 Grafana 可实现集群性能可视化。 - 第三方工具:如 Datastax OpsCenter(更适合大型集群)。
关键监控指标
- 节点状态(Up/Down)
- Pending Tasks(写入/读取挂起数量)
- Heap Usage(堆内存利用率)
- Disk Latency(磁盘读写延迟)
- Compaction 信息(数据压缩与整理进度)
十五、Cassandra 高可用与多数据中心部署
1. 多数据中心配置
-
NetworkTopologyStrategy:适合数据中心部署。
可为每个数据中心指定副本数,实现异地容灾和跨机房高可用。CREATE KEYSPACE mydc WITH REPLICATION = { 'class': 'NetworkTopologyStrategy', 'dc1': 3, 'dc2': 3 }; -
各数据中心设置自己的种子节点,但种子需要可以互通(网络打通)。
2. 跨地域同步与读写策略
-
Cassandra 采用 最终一致性,可调节一致性等级(Consistency Level):
ONE:只需一个副本响应QUORUM:多数副本响应ALL:所有副本都需成功
读写性能、强一致性与可用性的权衡由此决定。
十六、安全防护实践
-
启用
authenticator: PasswordAuthenticator -
密码和密钥文件做好权限控制。
-
集群间流量建议开启 TLS 加密(配置 client_encryption_options, server_encryption_options)
-
生产环境关闭未用端口(如 Thrift),保证只暴露必要端口(CQL, JMX)。
十七、常见数据模型设计误区
- 大宽表:不建议单表含百万级列,容易引发读写瓶颈。
- 过度小表/频繁查询表结构变化:Cassandra适合 Schema 稳定的大数据访问,不适合频繁 alter、DDL。
- 不适合高事务场景:不推荐直接用于高ACID事务处理。
十八、常用故障诊断思路
-
- 节点宕机无法启动:检查日志(logs/system.log),抓取异常信息;常见原因是端口冲突、配置错误、磁盘空间用光。
-
- 写入延迟高:聚焦 Heap 用量、SSD 磁盘性能、Compaction 速率。
-
- 数据不一致/丢失疑问:查看 Consistency Level、定期 repair;设置合理副本数和 read/write consistency。
十九、Cassandra 版本升级注意事项
- 停止写入,逐步滚动升级(逐个节点),确保数据兼容。
- 备份数据目录和配置文件。
- 检查升级文档有无参数变化,部分 YAML 参数名会有更改。
二十、运维脚本与自动化建议
-
运维常用脚本
- 定时触发
nodetool repair - 备份脚本(快照目录复制到备份服务器)
- 简单监控报警(利用 Nodetool status 定时巡检)
- 定时触发
-
自动化配置管理
- 推荐用 SaltStack、Ansible 运维 Cassandra 集群。批量改配置、扩容、上线脚本能大大提升可靠性。
总结
Cassandra 是一套高度可扩展、分布式 NoSQL 数据库系统,配置和维护多以配置文件参数和命令行为主。你可以根据实际生产需求调整副本策略、加密认证等高级参数,建议每次修改配置后都备份数据目录和测试节点状态。
1257

被折叠的 条评论
为什么被折叠?



