Apache Cassandra是一款开源的分布式存储系统。
收藏数: 1.6千
下载次数: 243340716
类型:

library/cassandraApache Cassandra 是一个开源分布式数据库管理系统,设计用于跨多台商用服务器处理大量数据,提供高可用性且无单点故障。该系统支持跨多个数据中心的集群部署,通过异步无主复制机制为所有客户端提供低延迟操作。作为分布式存储系统,Cassandra 适用于需要横向扩展、高吞吐量和容错能力的场景。
| 标签 | Dockerfile 链接 |
|---|---|
5.0.5, 5.0, 5, latest, 5.0.5-jammy, 5.0-jammy, 5-jammy, jammy | 5.0/Dockerfile |
4.1.10, 4.1, 4, 4.1.10-jammy, 4.1-jammy, 4-jammy | 4.1/Dockerfile |
4.0.18, 4.0, 4.0.18-jammy, 4.0-jammy | 4.0/Dockerfile |
3.11.19, 3.11, 3, 3.11.19-jammy, 3.11-jammy, 3-jammy | 3.11/Dockerfile |
3.0.32, 3.0, 3.0.32-jammy, 3.0-jammy | 3.0/Dockerfile |
amd64、arm32v7、arm64v8、ppc64le、s390x(更多信息)repos/cassandra/ 目录(包含元数据、传输大小等)library/cassandra 标签 及 配置文件cassandra/ 目录启动 Cassandra 实例的基本命令如下:
bashdocker run --name some-cassandra --network some-network -d cassandra:tag
--name some-cassandra:指定容器名称(可自定义)。--network some-network:将容器加入自定义网络(建议使用,便于集群通信)。-d:后台运行容器。cassandra:tag:指定镜像标签(如 latest、5.0 等,见“支持的标签”)。通过环境变量可配置两种集群场景:同机多节点和跨机多节点。
启动第一个节点(种子节点):
bashdocker run --name some-cassandra --network some-network -d cassandra:tag
启动后续节点,指定种子节点为第一个节点的容器名:
bashdocker run --name some-cassandra2 --network some-network -d -e CASSANDRA_SEEDS=some-cassandra cassandra:tag
假设服务器 A IP 为 10.42.42.42,服务器 B IP 为 10.43.43.43。
服务器 A 启动种子节点,暴露 gossip 端口(7000)并指定广播地址:
bashdocker run --name some-cassandra -d -e CASSANDRA_BROADCAST_ADDRESS=10.42.42.42 -p 7000:7000 cassandra:tag
服务器 B 启动节点,指定种子节点为服务器 A 的 IP,并暴露端口:
bashdocker run --name some-cassandra -d -e CASSANDRA_BROADCAST_ADDRESS=10.43.43.43 -p 7000:7000 -e CASSANDRA_SEEDS=10.42.42.42 cassandra:tag
使用 cqlsh(Cassandra 查询语言 shell)连接运行中的 Cassandra 容器:
bashdocker run -it --network some-network --rm cassandra cqlsh some-cassandra
-it:交互模式,分配终端。--network some-network:与目标 Cassandra 容器在同一网络。--rm:命令执行后自动删除临时容器。some-cassandra:目标 Cassandra 容器名称(或 IP)。更多 CQL 语法参考 Cassandra 官方文档。
通过 docker exec 进入运行中的容器:
bashdocker exec -it some-cassandra bash
通过 Docker 容器日志命令查看 Cassandra 服务日志:
bashdocker logs some-cassandra
最灵活的方式是通过挂载自定义 cassandra.yaml 文件覆盖默认配置:
bashdocker run --name some-cassandra -v /path/on/host/cassandra.yaml:/etc/cassandra/cassandra.yaml -d cassandra:tag
如需使用非默认配置文件名,可通过启动参数指定:
bashdocker run --name some-cassandra -d cassandra:tag -Dcassandra.config=/path/to/custom-config.yaml
镜像支持通过环境变量修改 cassandra.yaml 及 cassandra-rackdc.properties 中的关键配置,如下表:
| 环境变量 | 描述 | 默认值 | 对应配置项 |
|---|---|---|---|
CASSANDRA_LISTEN_ADDRESS | 监听入站连接的 IP 地址。 | auto(容器启动时 IP) | cassandra.yaml 的 listen_address |
CASSANDRA_BROADCAST_ADDRESS | 向其他节点广播的 IP 地址(用于集群通信)。 | CASSANDRA_LISTEN_ADDRESS 的值 | cassandra.yaml 的 broadcast_address 和 broadcast_rpc_address |
CASSANDRA_RPC_ADDRESS | Thrift RPC 服务器绑定地址。 | 0.0.0.0(通配地址) | cassandra.yaml 的 rpc_address |
CASSANDRA_START_RPC | 是否启动 Thrift RPC 服务器。 | false | cassandra.yaml 的 start_rpc |
CASSANDRA_SEEDS | 集群启动时 gossip 协议的种子节点 IP 列表(逗号分隔)。 | 自动添加当前节点 IP | cassandra.yaml 的 seed_provider 中的 seeds |
CASSANDRA_CLUSTER_NAME | 集群名称(所有节点必须一致)。 | Test Cluster | cassandra.yaml 的 cluster_name |
CASSANDRA_NUM_TOKENS | 节点的令牌数量(影响数据分片)。 | 256 | cassandra.yaml 的 num_tokens |
CASSANDRA_DC | 节点所属数据中心名称(需配合 GossipingPropertyFileSnitch)。 | - | cassandra-rackdc.properties 的 dc |
CASSANDRA_RACK | 节点所属机架名称(需配合 GossipingPropertyFileSnitch)。 | - | cassandra-rackdc.properties 的 rack |
CASSANDRA_ENDPOINT_SNITCH | 节点使用的 endpoint snitch 实现(控制数据分布策略)。 | SimpleSnitch | cassandra.yaml 的 endpoint_snitch |
以下是使用 docker-compose.yml 启动 3 节点集群的示例:
yamlversion: '3' services: cassandra-seed: image: cassandra:latest container_name: cassandra-seed environment: - CASSANDRA_CLUSTER_NAME=MyCluster - CASSANDRA_NUM_TOKENS=256 - CASSANDRA_ENDPOINT_SNITCH=GossipingPropertyFileSnitch - CASSANDRA_DC=DC1 - CASSANDRA_RACK=Rack1 volumes: - cassandra-seed-data:/var/lib/cassandra ports: - "7000:7000" # Gossip 端口 - "9042:9042" # CQL 端口 cassandra-node1: image: cassandra:latest container_name: cassandra-node1 environment: - CASSANDRA_CLUSTER_NAME=MyCluster - CASSANDRA_SEEDS=cassandra-seed - CASSANDRA_ENDPOINT_SNITCH=GossipingPropertyFileSnitch - CASSANDRA_DC=DC1 - CASSANDRA_RACK=Rack1 volumes: - cassandra-node1-data:/var/lib/cassandra depends_on: - cassandra-seed cassandra-node2: image: cassandra:latest container_name: cassandra-node2 environment: - CASSANDRA_CLUSTER_NAME=MyCluster - CASSANDRA_SEEDS=cassandra-seed - CASSANDRA_ENDPOINT_SNITCH=GossipingPropertyFileSnitch - CASSANDRA_DC=DC1 - CASSANDRA_RACK=Rack2 volumes: - cassandra-node2-data:/var/lib/cassandra depends_on: - cassandra-seed volumes: cassandra-seed-data: cassandra-node1-data: cassandra-node2-data:
启动集群:
bashdocker-compose up -d
Cassandra 默认将数据存储在容器内的 /var/lib/cassandra。为避免数据丢失,建议通过卷挂载将数据持久化到主机:
bashdocker run --name some-cassandra -v /host/datadir:/var/lib/cassandra -d cassandra:tag
/host/datadir:主机上的目录(需提前创建并设置权限)。/var/lib/cassandra:容器内数据目录。容器启动时,若未初始化数据库,会自动创建默认数据库。此过程中 Cassandra 不接受连接,可能导致自动化工具(如 docker-compose)启动多容器时出现连接失败。建议通过脚本检测节点状态(如 nodetool status),确认初始化完成后再进行后续操作。
Cassandra 软件使用 Apache 许可证。
镜像可能包含其他软件(如 Bash、基础系统组件等),其许可证可能不同。更多信息可参考 repo-info 仓库的 cassandra/ 目录。
使用本镜像需确保遵守所有包含软件的相关许可证。
以下是 cassandra 相关的常用 Docker 镜像,适用于 不同场景 等不同场景:
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 版本下载页面。
manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务