Cain是Kubernetes环境下的Cassandra备份与恢复工具,名称源自DC漫画超级英雄Cassandra Cain。该工具支持多种云存储服务,已成为Helm https://github.com/helm/charts/tree/master/incubator/cassandra%E5%9B%BE%E8%A1%A8%E7%9A%84%E5%AE%98%E6%96%B9%E7%BB%84%E6%88%90%E9%83%A8%E5%88%86%E3%80%82
从https://github.com/nuvo/cain/releases%E4%B8%8B%E8%BD%BD%E6%9C%80%E6%96%B0%E7%89%88%E6%9C%AC%EF%BC%8C%E6%88%96%E7%9B%B4%E6%8E%A5%E4%BD%BF%E7%94%A8https://hub.docker.com/r/nuvo/cain%E3%80%82
bashmkdir -p $GOPATH/src/github.com/nuvo && cd $_ git clone https://github.com/nuvo/cain.git && cd cain make
工作流程
cqlsh备份keyspace模式nodetool snapshot在指定命名空间的所有Cassandra Pod中创建keyspace快照使用方法
bash$ cain backup --help backup cassandra cluster to cloud storage Usage: cain backup [flags] Flags: -a, --authentication 为nodetool和cqlsh启用认证。覆盖$CAIN_AUTHENTICATION -b, --buffer-size float 文件复制的内存缓冲区大小(MB/文件)。覆盖$CAIN_BUFFER_SIZE (默认 6.75) --cassandra-data-dir string Cassandra数据目录。覆盖$CAIN_CASSANDRA_DATA_DIR (默认 "/var/lib/cassandra/data") -u, --cassandra-username string Cassandra用户名。覆盖$CAIN_CASSANDRA_USERNAME (默认 "cain") -c, --container string 操作的容器名称。覆盖$CAIN_CONTAINER (默认 "cassandra") --dst string 备份目标路径。示例:s3://bucket/cassandra。覆盖$CAIN_DST -h, --help backup命令帮助 -k, --keyspace string 操作的keyspace。覆盖$CAIN_KEYSPACE -n, --namespace string Cassandra集群所在命名空间。覆盖$CAIN_NAMESPACE (默认 "default") --nodetool-credentials-file string nodetool凭证文件路径。覆盖$CAIN_NODETOOL_CREDENTIALS_FILE (默认 "/home/cassandra/.nodetool/credentials") -p, --parallel int 并行复制文件数(0表示最大并行度)。覆盖$CAIN_PARALLEL (默认 1) -l, --selector string 筛选Pod的选择器。覆盖$CAIN_SELECTOR (默认 "app=cassandra")
示例
备份至AWS S3
bashcain backup \ -n default \ -l release=cassandra \ -k keyspace \ --dst s3://db-backup/cassandra
启用Cassandra认证备份至AWS S3
bashcain backup \ -n default \ -l release=cassandra \ -k keyspace \ --dst s3://db-backup/cassandra \ -a \ -u cain \ --nodetool-credentials-file /home/cassandra/.nodetool/credentials
备份至Azure Blob Storage
bashcain backup \ -n default \ -l release=cassandra \ -k keyspace \ --dst abs://my-account/db-backup-container/cassandra
工作流程
schema参数,则恢复模式keyspace/<keyspaceSchemaHash>/tag/)复制文件(仅支持相同keyspace模式的恢复)nodetool refresh加载新数据使用方法
bash$ cain restore --help restore cassandra cluster from cloud storage Usage: cain restore [flags] Flags: -a, --authentication 为nodetool和cqlsh启用认证。覆盖$CAIN_AUTHENTICATION -b, --buffer-size float 文件复制的内存缓冲区大小(MB/文件)。覆盖$CAIN_BUFFER_SIZE (默认 6.75) --cassandra-data-dir string Cassandra数据目录。覆盖$CAIN_CASSANDRA_DATA_DIR (默认 "/var/lib/cassandra/data") -u, --cassandra-username string Cassandra用户名。覆盖$CAIN_CASSANDRA_USERNAME (默认 "cain") -c, --container string 操作的容器名称。覆盖$CAIN_CONTAINER (默认 "cassandra") -h, --help restore命令帮助 -k, --keyspace string 操作的keyspace。覆盖$CAIN_KEYSPACE -n, --namespace string Cassandra集群所在命名空间。覆盖$CAIN_NAMESPACE (默认 "default") -f, --nodetool-credentials-file string nodetool凭证文件路径。覆盖$CAIN_NODETOOL_CREDENTIALS_FILE (默认 "/home/cassandra/.nodetool/credentials") -p, --parallel int 并行复制文件数(0表示最大并行度)。覆盖$CAIN_PARALLEL (默认 1) -s, --schema string 要恢复的模式版本(可选)。覆盖$CAIN_SCHEMA -l, --selector string 筛选Pod的选择器。覆盖$CAIN_SELECTOR (默认 "app=cassandra") --src string 恢复源路径。示例:s3://bucket/cassandra/namespace/cluster-name。覆盖$CAIN_SRC -t, --tag string 要恢复的标签。覆盖$CAIN_TAG --user-group string 恢复文件的属主用户组。覆盖$CAIN_USER_GROUP (默认 "cassandra:cassandra")
示例
从S3恢复
bashcain restore \ --src s3://db-backup/cassandra/default/ring01 \ -n default \ -k keyspace \ -l release=cassandra \ -t 20180903091624
从Azure Blob Storage恢复
bashcain restore \ --src abs://my-account/db-backup-container/cassandra/default/ring01 \ -n default \ -k keyspace \ -l release=cassandra \ -t 20180903091624
功能
使用cqlsh获取keyspace模式,可返回模式内容或模式文件校验和(用于备份与恢复验证)。
使用方法
bash$ cain schema --help get schema of cassandra cluster Usage: cain schema [flags] Flags: -c, --container string 操作的容器名称。覆盖$CAIN_CONTAINER (默认 "cassandra") -k, --keyspace string 操作的keyspace。覆盖$CAIN_KEYSPACE -n, --namespace string Cassandra集群所在命名空间。覆盖$CAIN_NAMESPACE (默认 "default") -l, --selector string 筛选Pod的选择器。覆盖$CAIN_SELECTOR (默认 "app=cassandra") --sum 仅输出校验和。覆盖$CAIN_SUM
示例
获取模式内容
bashcain schema \ -n default \ -l release=cassandra \ -k keyspace
获取模式校验和
bashcain schema \ -n default \ -l release=cassandra \ -k keyspace \ --sum
所有命令参数均可通过环境变量配置(变量名格式:CAIN_+参数名,横杠-替换为下划线_)。例如:
bashexport CAIN_NAMESPACE=default export CAIN_SELECTOR=release=cassandra export CAIN_KEYSPACE=keyspace export CAIN_DST=s3://db-backup/cassandra cain backup
Cain通过https://github.com/nuvo/skbn%E5%AE%9E%E7%8E%B0%E5%AD%98%E5%82%A8%E6%9C%8D%E5%8A%A1%E9%9B%86%E6%88%90%EF%BC%8C%E6%B7%BB%E5%8A%A0%E6%96%B0%E5%AD%98%E5%82%A8%E6%9C%8D%E5%8A%A1%E6%94%AF%E6%8C%81%E7%AE%80%E5%8D%95%E3%80%82%E8%AF%A6%E6%83%85%E5%8F%82%E8%80%83%E7%9B%B8%E5%85%B3%E6%96%87%E7%AB%A0%E3%80%82
| Cain版本 | Skbn版本 |
|---|---|
| 0.5.2 | 0.4.2 |
| 0.5.1 | 0.4.2 |
| 0.5.0 | 0.4.1 |
| 0.4.2 | 0.4.1 |
| 0.4.1 | 0.4.1 |
| 0.4.0 | 0.4.0 |
| 0.3.0 | 0.3.0 |
| 0.2.0 | 0.2.0 |
| 0.1.0 | 0.1.1 |
Cain按以下顺序获取Kubernetes凭证:
KUBECONFIG环境变量,使用该配置文件的当前上下文~/.kube/config,使用该文件的当前上下文(集群外客户端配置)~/.kube/config,假定在Pod内运行,使用集群内客户端配置Skbn使用AWS默认凭证链。
Skbn通过AZURE_STORAGE_ACCOUNT和AZURE_STORAGE_ACCESS_KEY环境变量进行认证。
启用认证时,Cain默认读取以下凭证:
cqlsh凭证:/home/cassandra/.cassandra/credentialsnodetool凭证:/home/cassandra/.nodetool/credentials(可通过--nodetool-credentials-file参数覆盖)使用认证时,需确保Cassandra容器中存在对应凭证文件,且用户名和密码正确。指定--nodetool-credentials-file时,需同时提供用户名。
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。


探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务