分布式微服务系统架构第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,可进一步补充。

相关推荐
观无30 分钟前
redis分布式锁
数据库·redis·分布式
颜淡慕潇37 分钟前
Redis 实现分布式锁:深入剖析与最佳实践(含Java实现)
java·redis·分布式
啾啾Fun2 小时前
【Java微服务组件】分布式协调P4-一文打通Redisson:从API实战到分布式锁核心源码剖析
java·redis·分布式·微服务·lua·redisson
EndingCoder6 小时前
React从基础入门到高级实战:React 实战项目 - 项目三:实时聊天应用
前端·react.js·架构·前端框架
记得开心一点嘛10 小时前
使用MinIO搭建自己的分布式文件存储
分布式·spring cloud·minio
叶落闲庭10 小时前
【k8s】k8s集群搭建
云原生·容器·kubernetes
藥瓿亭10 小时前
K8S认证|CKS题库+答案| 3. 默认网络策略
运维·ubuntu·docker·云原生·容器·kubernetes·cks
纪元A梦11 小时前
分布式拜占庭容错算法——PBFT算法深度解析
java·分布式·算法
椰汁菠萝11 小时前
k8s集群安装坑点汇总
云原生·容器·kubernetes