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

相关推荐
练习本3 分钟前
Android系统架构模式分析
android·java·架构·系统架构
夏影孤灯3 小时前
十七、统一建模语言 UML
系统架构·uml
Lucas6493 小时前
kafka的安装及简单使用
分布式·kafka
MZWeiei4 小时前
Spark任务调度流程详解
大数据·分布式·spark·scala
бесплатно5 小时前
Spark-Core(RDD行动算子)
大数据·分布式·spark
练习本5 小时前
Android MVC架构的现代化改造:构建清晰单向数据流
android·架构·mvc
Kookoos6 小时前
ABP vNext + Dapr 实现云原生微服务治理
微服务·云原生·架构·c#·.net
微学AI6 小时前
大模型的应用中A2A(Agent2Agent)架构的部署过程,A2A架构实现不同机器人之间的高效通信与协作
人工智能·架构·机器人·a2a