Apache Cassandra 是一个高度可扩展的分布式 NoSQL 数据库,专为处理大量结构化和半结构化数据而设计,具有高可用性、线性扩展能力和容错特性。Docker 镜像封装了 Apache Cassandra 的运行环境,简化了部署流程,确保环境一致性,并支持快速集成到容器化架构中。
主要用途:
***维护的 Apache Cassandra Docker 镜像可通过 Docker Hub 获取:
bashdocker pull cassandra:latest # 获取最新稳定版 # 或指定版本(如 4.0) docker pull cassandra:4.0
bashdocker run --name cassandra-node1 -d \ -p 7000:7000 \ # 节点间通信端口(内部) -p 7001:7001 \ # SSL 节点间通信端口 -p 9042:9042 \ # CQL 客户端端口(默认 9042) -p 9160:9160 \ # Thrift 客户端端口(已 deprecated,可选) cassandra:latest
bash# 查看容器日志 docker logs -f cassandra-node1 # 进入容器并连接 CQL Shell docker exec -it cassandra-node1 cqlsh
为避免容器重启后数据丢失,需挂载宿主机目录存储数据:
bashdocker run --name cassandra-node1 -d \ -p 7000:7000 -p 9042:9042 \ -v /path/on/host/cassandra/data:/var/lib/cassandra \ # 数据目录 -v /path/on/host/cassandra/logs:/var/log/cassandra \ # 日志目录 cassandra:latest
注意:宿主机目录需提前创建并赋予权限(如
chmod 777 /path/on/host/cassandra,生产环境建议使用更严格的权限控制)。
通过 -e 参数指定环境变量,覆盖默认配置(无需手动修改 cassandra.yaml)。常用变量如下:
| 环境变量 | 作用描述 | 默认值 |
|---|---|---|
CASSANDRA_CLUSTER_NAME | 集群名称 | Test Cluster |
CASSANDRA_SEEDS | 集群种子节点 IP(用于节点发现) | 容器 IP |
CASSANDRA_LISTEN_ADDRESS | 节点间通信监听地址(内部集群通信) | 容器 IP |
CASSANDRA_RPC_ADDRESS | CQL 客户端通信地址(外部访问) | 0.0.0.0(允许所有 IP) |
CASSANDRA_BROADCAST_ADDRESS | 广播地址(用于跨主机/容器通信时告知其他节点自身可访问地址) | 容器 IP |
CASSANDRA_NUM_TOKENS | 每个节点的令牌数量(影响数据分布均匀性) | 256 |
CASSANDRA_ENDPOINT_SNITCH | 节点位置感知策略(如 SimpleSnitch、GossipingPropertyFileSnitch) | SimpleSnitch |
示例:自定义集群名称和种子节点
bashdocker run --name cassandra-node1 -d \ -e CASSANDRA_CLUSTER_NAME="MyAppCluster" \ -e CASSANDRA_LISTEN_ADDRESS="172.17.0.2" \ # 容器 IP(需提前确认或使用 --network 固定) -p 9042:9042 \ cassandra:latest
通过 Docker Compose 快速搭建多节点集群(以 3 节点为例):
docker-compose.ymlyamlversion: '3.8' services: cassandra-seed: image: cassandra:latest container_name: cassandra-seed ports: - "9042:9042" environment: - CASSANDRA_CLUSTER_NAME=MyCluster - CASSANDRA_SEEDS=cassandra-seed # 种子节点自身 - CASSANDRA_LISTEN_ADDRESS=cassandra-seed # 容器名作为 hostname(需 Docker 网络支持) - CASSANDRA_RPC_ADDRESS=0.0.0.0 volumes: - seed-data:/var/lib/cassandra networks: - cassandra-net cassandra-node1: image: cassandra:latest container_name: cassandra-node1 depends_on: - cassandra-seed environment: - CASSANDRA_CLUSTER_NAME=MyCluster - CASSANDRA_SEEDS=cassandra-seed # 指向种子节点 - CASSANDRA_LISTEN_ADDRESS=cassandra-node1 - CASSANDRA_RPC_ADDRESS=0.0.0.0 volumes: - node1-data:/var/lib/cassandra networks: - cassandra-net cassandra-node2: image: cassandra:latest container_name: cassandra-node2 depends_on: - cassandra-seed environment: - CASSANDRA_CLUSTER_NAME=MyCluster - CASSANDRA_SEEDS=cassandra-seed - CASSANDRA_LISTEN_ADDRESS=cassandra-node2 - CASSANDRA_RPC_ADDRESS=0.0.0.0 volumes: - node2-data:/var/lib/cassandra networks: - cassandra-net volumes: seed-data: node1-data: node2-data: networks: cassandra-net: driver: bridge
bashdocker-compose up -d
bash# 进入种子节点容器 docker exec -it cassandra-seed nodetool status # 预期输出(3 个节点均为 UN 状态,即 Up/Normal): # Datacenter: datacenter1 # =============== # Status=Up/Down # |/ State=Normal/Leaving/Joining/Moving # -- Address Load Tokens Owns (effective) Host ID Rack # UN 172.20.0.2 70.52 KiB 256 66.2% xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx rack1 # UN 172.20.0.3 68.4 KiB 256 67.9% xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx rack1 # UN 172.20.0.4 68.4 KiB 256 65.9% xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx rack1
nodetool snapshot)bash# 进入容器创建快照 docker exec -it cassandra-node1 nodetool snapshot -t my_backup my_keyspace # 快照默认存储路径:/var/lib/cassandra/data/<keyspace>/<table>-<uuid>/snapshots/my_backup # 通过挂载卷将快照复制到宿主机: docker cp cassandra-node1:/var/lib/cassandra/data/my_keyspace/ /path/on/host/backups/
bash# 将备份数据复制到目标节点 docker cp /path/on/host/backups/my_keyspace cassandra-node1:/var/lib/cassandra/data/ # 进入容器恢复快照 docker exec -it cassandra-node1 nodetool refresh my_keyspace my_table
volumes 挂载宿主机目录(避免容器内存储性能瓶颈)。CASSANDRA_BROADCAST_ADDRESS 需设置为宿主机可访问的 IP。--cpus 2 -m 4g),避免资源竞争导致性能下降。cassandra.yaml 中的 server_encryption_options),并限制 RPC 访问 IP。
来自真实用户的反馈,见证轩辕镜像的优质服务
免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像加速服务
在 Docker Desktop 配置镜像加速
Docker Compose 项目配置加速
Kubernetes 集群配置 Containerd
在宝塔面板一键配置镜像加速
Synology 群晖 NAS 配置加速
飞牛 fnOS 系统配置镜像加速
极空间 NAS 系统配置加速服务
爱快 iKuai 路由系统配置加速
绿联 NAS 系统配置镜像加速
QNAP 威联通 NAS 配置加速
Podman 容器引擎配置加速
HPC 科学计算容器配置加速
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名加速
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429