apache/cassandra-bullseye-buildApache Cassandra是一款开源分布式NoSQL数据库,以高可用性、线性扩展能力和容错性著称。本Docker镜像封装了Apache Cassandra的稳定版本,提供快速部署、环境隔离和一致性的运行环境,适用于开发、测试及生产环境中快速搭建Cassandra集群或单节点实例。通过容器化部署,可简化配置流程,降低环境依赖冲突,同时支持灵活的资源调整和数据持久化。
bashdocker run --name cassandra -d \ -p 9042:9042 \ # CQL客户端端口(默认用于应用连接) -p 7000:7000 \ # 节点间通信端口(内部集群通信) -v cassandra-data:/var/lib/cassandra \ # 挂载数据卷持久化数据 cassandra:latest
说明:
cassandra-data为命名卷,自动创建并持久化数据,避免容器删除导致数据丢失。
yamlversion: '3.8' services: cassandra: image: cassandra:latest container_name: cassandra ports: - "9042:9042" # CQL端口 - "7000:7000" # 节点间通信端口(TCP) - "7001:7001" # 节点间SSL通信端口(可选) - "7199:7199" # JMX监控端口(可选) volumes: - cassandra-data:/var/lib/cassandra - ./cassandra.yaml:/etc/cassandra/cassandra.yaml # 自定义配置文件(可选) environment: - CASSANDRA_CLUSTER_NAME=MyCluster # 集群名称(默认:Test Cluster) - CASSANDRA_NUM_TOKENS=256 # 每个节点的令牌数(默认:256,影响数据分布均匀性) - MAX_HEAP_SIZE=2G # JVM最大堆内存(根据宿主机资源调整) - HEAP_NEWSIZE=512M # JVM新生代内存(建议为MAX_HEAP_SIZE的1/4) restart: unless-stopped volumes: cassandra-data:
bashdocker network create cassandra-network
bashdocker run --name cassandra-seed -d \ --network cassandra-network \ -e CASSANDRA_CLUSTER_NAME=MyCluster \ -e CASSANDRA_NUM_TOKENS=256 \ -v cassandra-seed-data:/var/lib/cassandra \ cassandra:latest
bashdocker run --name cassandra-node2 -d \ --network cassandra-network \ -e CASSANDRA_CLUSTER_NAME=MyCluster \ -e CASSANDRA_SEEDS=cassandra-seed # 种子节点主机名(需与网络内节点名称一致) \ -e CASSANDRA_NUM_TOKENS=256 \ -v cassandra-node2-data:/var/lib/cassandra \ cassandra:latest
验证集群状态:进入任一容器执行
nodetool status,输出应显示所有节点状态为UN(Up/Normal)。
| 环境变量 | 描述 | 默认值 |
|---|---|---|
CASSANDRA_CLUSTER_NAME | 集群名称,同一集群内所有节点需一致 | Test Cluster |
CASSANDRA_SEEDS | 种子节点IP/主机名列表(用于集群初始化和节点发现),多个节点用逗号分隔 | 容器自身IP |
CASSANDRA_LISTEN_ADDRESS | 节点间通信绑定地址(内部集群通信) | 容器IP(自动检测) |
CASSANDRA_RPC_ADDRESS | CQL客户端通信绑定地址(应用连接端口) | 0.0.0.0(允许所有接口) |
CASSANDRA_BROADCAST_ADDRESS | 对外广播的节点地址(跨网络通信时使用) | 容器IP |
CASSANDRA_NUM_TOKENS | 每个节点的令牌数(影响数据分片均匀性,推荐256或512) | 256 |
CASSANDRA_ENDPOINT_SNITCH | 节点位置感知策略(如跨数据中心部署需配置为GossipingPropertyFileSnitch) | SimpleSnitch |
MAX_HEAP_SIZE | JVM最大堆内存(如2G),建议不超过物理内存的50% | 物理内存的1/4(自动计算) |
HEAP_NEWSIZE | JVM新生代内存,建议为MAX_HEAP_SIZE的1/4 | MAX_HEAP_SIZE的1/4 |
-v <宿主机路径>:/var/lib/cassandra挂载数据卷,确保容器删除后数据不丢失。生产环境建议使用高性能存储(如SSD)以提升IO性能。nodetool snapshot创建数据快照,或使用cqlsh导出数据(COPY命令),备份文件建议存储在容器外部持久化存储中。应用或工具可通过CQL协议(默认端口9042)连接Cassandra实例:
docker exec -it cassandra cqlshcqlsh、DataStax Studio)连接宿主机IP:9042,需确保宿主机端口映射正确且防火墙开放9042端口。MAX_HEAP_SIZE和HEAP_NEWSIZE优化JVM性能。authenticator: PasswordAuthenticator)和授权(authorizer: CassandraAuthorizer),并通过环境变量或自定义cassandra.yaml配置。
manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务