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

发布于:2025-05-12 ⋅ 阅读:(18) ⋅ 点赞:(0)

加群联系作者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

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


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

🔹 1. 安装依赖

sudo apt update
sudo apt install openjdk-11-jdk -y

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

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

sudo apt install cassandra -y

🔹 4. 启动 Cassandra

sudo systemctl start cassandra
sudo systemctl enable cassandra

🔹 5. 测试连接

cqlsh

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

假设两台服务器:

  • Node1: 192.168.1.101

  • Node2: 192.168.1.102

🔹 1. 安装 Cassandra(同上)

在 每台机器 安装 Java 和 Cassandra。


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

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

👇 重点字段:
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

dc=datacenter1
rack=rack1

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

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. 启动两台节点

sudo systemctl start cassandra

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

nodetool status

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


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

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,noatimedeadline/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)

# 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 参数重点

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_options 与 client_encryption_options

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

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


7. 监控与运维

  • nodetoolstatuscfstatstpstatsflushrepair

  • JMX Exporter → Prometheus / Grafana。

  • 关键指标Read/Write LatencyPending CompactionsHeap UsageDisk Space UsedDropped 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 数据正常删除


参考链接

  • 官方下载页 (5.0.4) (cassandra.apache.org)

  • 5.0 发行说明 (cassandra.apache.org)

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


网站公告

今日签到

点亮在社区的每一天
去签到