分布式微服务系统架构第127集:cassandra安装部署

加群联系作者vx:xiaoda0423

仓库地址:https://webvueblog.github.io/JavaPlusDoc/

https://1024bat.cn/

✅ 一、环境要求

  • 操作系统:建议 Ubuntu 20.04 / CentOS 7 / Rocky Linux / Mac

  • Java 版本:推荐 OpenJDK 8 or 11

  • Cassandra 版本:建议使用 Apache Cassandra 4.x

  • 网络要求:所有节点间网络互通,端口默认 9042, 7000, 7001, 7199 等需开放


✅ 二、单机安装(适合开发测试)

🔹 1. 安装依赖

go 复制代码
sudo apt update
sudo apt install openjdk-11-jdk -y

🔹 2. 添加 Apache Cassandra 仓库(Ubuntu)

go 复制代码
echo "deb https://downloads.apache.org/cassandra/debian 40x 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 update

🔹 3. 安装 Cassandra

go 复制代码
sudo apt install cassandra -y

🔹 4. 启动 Cassandra

go 复制代码
sudo systemctl start cassandra
sudo systemctl enable cassandra

🔹 5. 测试连接

go 复制代码
cqlsh

✅ 三、两节点集群部署(生产/测试集群)

假设两台服务器:

  • Node1: 192.168.1.101

  • Node2: 192.168.1.102

🔹 1. 安装 Cassandra(同上)

每台机器 安装 Java 和 Cassandra。


🔹 2. 修改配置文件 /etc/cassandra/cassandra.yaml

两台机器都要改,区别在于 IP 地址不同

👇 重点字段:
go 复制代码
cluster_name: 'MyCluster'

listen_address: 本机IP   # Node1 用 192.168.1.101, Node2 用 192.168.1.102
rpc_address: 0.0.0.0

seed_provider:
  - class_name: org.apache.cassandra.locator.SimpleSeedProvider
    parameters:
      - seeds: "192.168.1.101,192.168.1.102"

endpoint_snitch: GossipingPropertyFileSnitch

🔹 3. 修改 /etc/cassandra/cassandra-rackdc.properties

go 复制代码
dc=datacenter1
rack=rack1

🔹 4. 清理数据目录(初次配置很重要)

go 复制代码
sudo systemctl stop cassandra
sudo rm -rf /var/lib/cassandra/data/*
sudo rm -rf /var/lib/cassandra/commitlog/*
sudo rm -rf /var/lib/cassandra/saved_caches/*

🔹 5. 启动两台节点

go 复制代码
sudo systemctl start cassandra

🔹 6. 查看集群状态(任意节点)

go 复制代码
nodetool status

✅ 你应该看到两个节点都 UN 状态(Up + Normal)


✅ 四、创建副本为 2 的 Keyspace(例如用于业务主库)

go 复制代码
CREATE KEYSPACE user_db
WITH replication = {
  'class': 'NetworkTopologyStrategy',
  'datacenter1': 2
};

✅ 五、常用命令

命令 说明
cqlsh 启动 CQL shell
nodetool status 查看节点状态
nodetool info 查看节点信息
sudo systemctl stop/start cassandra 停止/启动服务
cqlsh -e 'DESC KEYSPACES' 查看所有 keyspace

✅ 六、常见问题排查

问题 解决方式
端口被防火墙拦截 开放 7000, 7001, 7199, 9042
nodetool 报错连接失败 确保 JMX 配置正确或绑定 localhost
rpc_address 报冲突 0.0.0.0,或绑定实际 IP
数据不同步 seed 配置是否对,snitch 是否一致

Apache Cassandra 安装与部署指南(2025 年版)

适用对象:希望在生产环境(4 核 / 16 GB RAM 及以上)快速部署并维护 Apache Cassandra 的运维 / 开发人员。


1. 版本概览

版本 发布日期 状态
5.0.4 2025‑02‑03 最新 GA 版本,建议新集群直接使用(需 Java 17)
4.1.8 2025‑02‑03 上一稳定分支,维护至 5.2 发布
4.0.17 2025‑02‑07 长期稳定分支,维护至 5.1 发布

本文档后续步骤以 5.0 为例,其它版本除文件名差异外步骤一致。


2. 环境准备

资源 最低要求 建议生产配置
CPU 4 vCPU ≥8 vCPU(物理机或 NUMA 关闭的 VM)
内存 16 GB ≥32 GB(留一半给 Heap,一半给 OS Cache)
磁盘 SSD / NVMe,单节点 ≥ 500 GB RAID‑10 或多块 NVMe,noatime, deadline/none 调度器
OS Ubuntu 22.04 LTS / AlmaLinux 9.x / CentOS Stream 9 同左,内核 ≥ 5.15
Java Temurin 17 或 OpenJDK 17 与 Cassandra 官方测试版本保持一致

系统调优:

  • vm.swappiness = 1

  • fs.file-max = 100000

  • ulimit -n 100000ulimit -u 32768

  • 关闭 SELinux / firewalld 或放通端口 7000/7001/7199/9042/9142(5.0+TLS)


3. 安装方式对比

方式 优点 缺点
OS 包(APT/YUM) 一条命令,自动创建 systemd 服务 版本更新稍慢,难以并行多版本
官方 tgz 包 最新版、路径可自控 需手动创建用户 / 服务脚本
Docker / K8s 环境隔离、易扩容 需掌握持久化卷、运维复杂度略高

生产集群 推荐 二进制 tgz + systemd ,容器化建议使用 K8ssandra Operator


4. 单节点快速安装(tarball)

go 复制代码
# 4.1 下载
wget https://downloads.apache.org/cassandra/5.0.4/apache-cassandra-5.0.4-bin.tar.gz

# 4.2 创建用户与目录
useradd -r -M -s /bin/false cassandra
mkdir -p /opt/cassandra/{data,commitlog,saved_caches,hints}
chown -R cassandra:cassandra /opt/cassandra

# 4.3 解压并软链
tar -xzf apache-cassandra-5.0.4-bin.tar.gz -C /opt/cassandra
ln -s /opt/cassandra/apache-cassandra-5.0.4 /opt/cassandra/current
chown -R cassandra:cassandra /opt/cassandra

# 4.4 修改配置
vim /opt/cassandra/current/conf/cassandra.yaml
# 关键字段:
cluster_name: "DemoCluster"
listen_address: 192.168.1.10
seeds: "192.168.1.10"
endpoint_snitch: Ec2Snitch  # 或 GossipingPropertyFileSnitch

# 4.5 创建 systemd 服务
cat >/etc/systemd/system/cassandra.service <<'EOF'
[Unit]
Description=Apache Cassandra
After=network.target

[Service]
Type=simple
User=cassandra
Group=cassandra
LimitNOFILE=100000
ExecStart=/opt/cassandra/current/bin/cassandra -f
Restart=on-failure
TimeoutStopSec=300

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable --now cassandra

# 4.6 自检
/opt/cassandra/current/bin/nodetool status
/opt/cassandra/current/bin/cqlsh -e "SELECT release_version FROM system.local;"

5. 多节点生产部署

5.1 架构

  • 推荐奇数节点:3、5、7... 保证仲裁。

  • 跨机架 / 机房 / 可用区,保证副本分散。

  • 副本因子 NetworkTopologyStrategy:同 DC ≥3,跨 DC 按需。

5.2 参数重点

go 复制代码
num_tokens: 16                 # 新集群 5.0 默认 16
commitlog_sync_period: 10000ms # SSD 推荐 10s
concurrent_reads: 32           # ≈ CPU×2
concurrent_writes: 32          # ≈ CPU×2
memtable_flush_writers: 8      # NVMe 可设 >4
start_native_transport: true
native_transport_port: 9042
server_encryption_options:
  internode_encryption: all    # 开启节点间 TLS

# authentication & authorization
authenticator: PasswordAuthenticator
authorizer: CassandraAuthorizer

5.3 系统优化

  • echo 3 > /proc/sys/vm/drop_caches仅测试环境

  • echo deadline > /sys/block/<disk>/queue/scheduler

  • 配置 RAID‑10 stripe 256 KB。

5.4 扩容 & 维护

  • 加节点 → 修改 seeds,启动后执行 nodetool status 观察 JOINING

  • 滚动升级示例:4.1 → 5.0:停节点 → 备份配置 → 升级 JDK → 替换目录 → 启动 → 等 ring 绿 → 下一节点。


6. 安全加固

  1. 启用 TLS :在 conf 放置自签或 CA 证书,修改 server_encryption_optionsclient_encryption_options

  2. 强密码策略 :创建最小权限应用账号,禁用 cassandra/cassandra 默认账号。

  3. 审计日志 :在 cassandra.yaml 启用 audit_logging_options,配合 SIEM。


7. 监控与运维

  • nodetoolstatus, cfstats, tpstats, flush, repair

  • JMX Exporter → Prometheus / Grafana。

  • 关键指标Read/Write Latency, Pending Compactions, Heap Usage, Disk Space Used, Dropped Mutations


8. 备份与恢复

  • 快照:nodetool snapshot [keyspace]

  • 增量备份:incremental_backups: true + 外部任务(rsync / object storage)。

  • 恢复:停止节点 → 清理数据 → 拷贝快照 → nodetool refresh


9. 常见问题

现象 排查步骤
节点 UN 变 DN 检查 system.logOutOfMemoryError / disk full;观察 GC 日志。
写入超时 nodetool tpstats 查看 WRITE 队列,调整 concurrent_writes、扩容节点
磁盘膨胀 定期 nodetool cleanupcompact,确认 TTL 数据正常删除

参考链接

完成! 如需容器化、Operator 部署或细化监控 Grafana Dashboard,可进一步补充。

相关推荐
LabVIEW开发8 小时前
LabVIEW QMH 队列消息处理架构
架构·labview·labview知识·labview功能·labview程序
rising start9 小时前
二、全面理解MySQL架构
mysql·架构
麦客奥德彪9 小时前
Android Skills
架构·ai编程
姚不倒9 小时前
Go语言进阶:接口、错误处理与并发编程(goroutine/channel/context)
云原生·golang
candyTong10 小时前
Claude Code 的 Edit 工具是怎么工作的
javascript·后端·架构
沪漂阿龙11 小时前
面试题详解:智能客服 Agent 系统全栈拆解——Rasa Pro、对话管理、意图识别、GraphRAG、Qwen 与 RAG 优化实战
人工智能·架构
辰海Coding12 小时前
MiniSpring框架学习-完成的 IoC 容器
java·spring boot·学习·架构
云边云科技_云网融合13 小时前
企业大模型时代的网络架构五层演进:从连接到智能的范式重构
网络·重构·架构
Yunzenn13 小时前
字节最新研究cola-DLM第 01 章:语言生成的三次范式之争 —— 从 RNN 到 AR 到扩散
架构·github
她的男孩13 小时前
从零搭一个企业后台,为什么我把能力拆成 Starter 和 Plugin
java·后端·架构