rook/cassandraApache Cassandra是一款开源的分布式宽列存储NoSQL数据库管理系统,专为处理大规模结构化数据而设计。其核心定位是提供高可用性、线性可扩展性和容错能力,适用于需要在分布式环境中存储和管理海量数据的场景。该Docker镜像封装了Apache Cassandra的运行环境,简化了部署流程,支持快速搭建单节点或多节点集群,适用于开发、测试及生产环境。
采用无中心节点的分布式设计,数据自动分片并分布在多个节点,避免单点故障,支持集群动态扩缩容。
基于列族(Column Family)的数据模型,支持动态列扩展,适合存储半结构化数据,兼具关系型数据库的结构定义和NoSQL的灵活性。
通过副本机制(默认3副本)确保数据冗余,单个节点故障不影响集群可用性,支持自动故障检测和恢复。
集群性能随节点数量增加呈线性增长,可通过添加节点轻松扩展存储容量和处理能力。
采用基于Gossip协议的分布式一致性模型,支持可调的一致性级别(如ONE、QUORUM、ALL),平衡可用性与数据一致性。
原生支持跨数据中心部署,可配置数据副本跨区域分布,提升灾难恢复能力和全球访问性能。
优化写入路径,支持高吞吐量的写入操作,适合日志收集、物联网数据采集等写入密集型场景。
bashdocker run -d \ --name cassandra-node1 \ -p 9042:9042 \ # CQL客户端端口 -p 7000:7000 \ # 节点间通信端口 -e CASSANDRA_CLUSTER_NAME="MyCassandraCluster" \ # 集群名称 -e CASSANDRA_NODE_NAME="node1" \ # 节点名称 -v cassandra-data:/var/lib/cassandra \ # 数据持久化卷 cassandra:latest
yamlversion: '3' services: cassandra-seed: image: cassandra:latest container_name: cassandra-seed ports: - "9042:9042" environment: - CASSANDRA_CLUSTER_NAME=MyCluster - CASSANDRA_NODE_NAME=seed-node - CASSANDRA_SEEDS=cassandra-seed # 种子节点(自身) - CASSANDRA_LISTEN_ADDRESS=cassandra-seed # 监听地址(容器名) - CASSANDRA_RPC_ADDRESS=0.0.0.0 # 允许外部RPC连接 volumes: - seed-data:/var/lib/cassandra cassandra-node2: image: cassandra:latest container_name: cassandra-node2 depends_on: - cassandra-seed environment: - CASSANDRA_CLUSTER_NAME=MyCluster - CASSANDRA_NODE_NAME=node2 - CASSANDRA_SEEDS=cassandra-seed # 连接种子节点加入集群 - CASSANDRA_LISTEN_ADDRESS=cassandra-node2 - CASSANDRA_RPC_ADDRESS=0.0.0.0 volumes: - node2-data:/var/lib/cassandra volumes: seed-data: node2-data:
| 环境变量 | 描述 | 默认值 |
|---|---|---|
CASSANDRA_CLUSTER_NAME | 集群名称 | Test Cluster |
CASSANDRA_NODE_NAME | 节点名称 | 容器主机名 |
CASSANDRA_SEEDS | 种子节点IP/主机名(集群发现入口) | 容器IP |
CASSANDRA_LISTEN_ADDRESS | 节点间通信监听地址 | 0.0.0.0 |
CASSANDRA_RPC_ADDRESS | CQL客户端RPC监听地址 | 0.0.0.0 |
CASSANDRA_BROADCAST_ADDRESS | 对外广播地址(跨主机集群需配置) | 容器IP |
CASSANDRA_REPLICATION_FACTOR | 默认副本数(单数据中心) | 1 |
| 端口 | 用途 | 备注 |
|---|---|---|
| 7000 | 节点间通信(非SSL) | 集群内节点发现与数据同步 |
| 7001 | 节点间通信(SSL) | 启用SSL时使用 |
| 9042 | CQL客户端端口 | cqlsh、应用程序连接端口 |
| 9160 | Thrift RPC端口(已过时) | 仅兼容旧版客户端 |
为避免容器删除导致数据丢失,需通过Docker卷挂载数据目录:
bash# 创建命名卷(推荐) docker volume create cassandra-data # 运行容器时挂载卷 docker run -d \ --name cassandra \ -v cassandra-data:/var/lib/cassandra \ # 数据存储目录 -v cassandra-config:/etc/cassandra \ # 配置文件目录(可选) cassandra:latest
使用cqlsh客户端连接运行中的容器:
bash# 进入容器内部执行cqlsh docker exec -it cassandra-node1 cqlsh # 或从外部通过9042端口连接(需本地安装cqlsh) cqlsh <容器IP> 9042
如需修改cassandra.yaml配置(如调整缓存大小、超时时间等),可通过卷挂载自定义配置文件:
bashdocker run -d \ --name cassandra \ -v /host/path/to/custom-cassandra.yaml:/etc/cassandra/cassandra.yaml \ cassandra:latest
关键配置项:
seed_provider:种子节点列表(集群发现)data_file_directories:数据文件存储路径commitlog_directory:提交日志路径read_request_timeout_in_ms:读请求超时时间(默认5000ms)
manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务