【Docker】Cassandra 容器部署及参数说明

本文围绕Apache Cassandra展开,它是开源分布式数据库管理系统。介绍了轻云Cassandra标准软件的构建与获取方式,阐述了快速启动、持久化数据的方法,详细说明了通过环境变量、设置服务器密码、自定义脚本等进行配置的过程,还提及传输层安全性加密和日志查看等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

轻云Cassandra标准软件基于Bitnami cassandra 构建。当前版本为4.0.12

你可以通过轻云UC部署工具直接安装部署,也可以手动按如下文档操作,该项目已经全面开源,可以从如下环境获取
配置文件地址: https://gitee.com/qingplus/qingcloud-platform

Qinghub Studio 在线体验

什么是 Apache Cassandra?

Apache Cassandra 是一种开源分布式数据库管理系统,旨在处理跨多个服务器的大量数据,提供高可用性且无单点故障。

快速启动

docker run --name cassandra bitnami/cassandra:latest

持久化数据

如果删除容器,所有数据和配置都将丢失,并且下次运行映像时,数据库将重新初始化。为了避免这种数据丢失,您应该安装一个即使在容器被删除后仍然存在的卷。

为了持久化,您应该在指定路径上挂载一个目录/bitnami。如果挂载的目录为空,则首次运行时会对其进行初始化。

docker run \
    -v /path/to/cassandra-persistence:/bitnami \
    bitnami/cassandra:latest

或使用 Docker Compose:

cassandra:
  image: bitnami/cassandra:latest
  volumes:
    - /path/to/cassandra-persistence:/bitnami

注意:由于这是一个非根容器,因此安装的文件和目录必须具有 UID 的适当权限1001。

配置

环境变量

可定制的环境变量
名称描述Default Value
CASSANDRA_VOLUME_DIRCassandra 持久性目录。/bitnami/cassandra
CASSANDRA_DATA_DIRCassandra 存储数据目录.${CASSANDRA_VOLUME_DIR}/data
CASSANDRA_COMMITLOG_DIRCassandra 提交日志目录。${CASSANDRA_DATA_DIR}/commitlog
CASSANDRA_MOUNTED_CONF_DIRCassandra 用于挂载置文件目录。${CASSANDRA_VOLUME_DIR}/conf
CASSANDRA_CLIENT_ENCRYPTION启用客户端加密。false
CASSANDRA_CLUSTER_NAMECassandra 集群名称。My Cluster
CASSANDRA_DATACENTERCassandra 数据中心名称。dc1
CASSANDRA_ENABLE_REMOTE_CONNECTIONS启用来自远程位置的连接。true
CASSANDRA_ENABLE_RPC在 Cassandra 中启用 RPC 端点。true
CASSANDRA_ENABLE_USER_DEFINED_FUNCTIONS启用用户定义的功能。false
CASSANDRA_ENABLE_SCRIPTED_USER_DEFINED_FUNCTIONS启用脚本化的用户定义函数。false
CASSANDRA_ENDPOINT_SNITCH集群端点告密者的名称。SimpleSnitch
CASSANDRA_INTERNODE_ENCRYPTION节点间加密类型。none
CASSANDRA_NUM_TOKENS集群连接中的令牌数量。256
CASSANDRA_PASSWORD_SEEDER将节点设置为集群中的密码播种者。no
CASSANDRA_SEEDS簇种子列表。$CASSANDRA_HOST
CASSANDRA_PEERScluster peers.$CASSANDRA_SEEDS
CASSANDRA_RACKCassandra 机架名称。rack1
CASSANDRA_AUTOMATIC_SSTABLE_UPGRADE升级后自动升级sstables。false
CASSANDRA_IGNORE_INITDB_SCRIPTS忽略初始化脚本的执行no
CASSANDRA_CQL_PORT_NUMBERCQL port.9042
CASSANDRA_JMX_PORT_NUMBERJMX port.7199
CASSANDRA_TRANSPORT_PORT_NUMBERTransport port.7000
CASSANDRA_CQL_MAX_RETRIESCQL 启动操作的最大重试次数。20
CASSANDRA_CQL_SLEEP_TIMECQL 启动操作的休眠时间。5
CASSANDRA_INIT_MAX_RETRIESinit 启动操作的最大重试次数。100
CASSANDRA_INIT_SLEEP_TIMEinit 启动操作的睡眠时间。5
CASSANDRA_PEER_CQL_MAX_RETRIESpeer启动操作的最大重试次数。100
CASSANDRA_PEER_CQL_SLEEP_TIME对等启动操作的睡眠时间。10
CASSANDRA_DELAY_START_TIME将 Cassandra 启动延迟所提供的秒数。0
CASSANDRA_AUTO_SNAPSHOT_TTL在截断键空间或删除表之前自动拍摄数据快照30d
ALLOW_EMPTY_PASSWORD装中不允许任何凭据。no
CASSANDRA_AUTHORIZERCassandra 连接授权者。CassandraAuthorizer
CASSANDRA_AUTHENTICATORCassandra c连接验证器。PasswordAuthenticator
CASSANDRA_USERCassandra username.cassandra
CASSANDRA_KEYSTORE_PASSWORDCassandra keystore password.cassandra
CASSANDRA_TRUSTSTORE_PASSWORDCassandra truststore password.cassandra
CASSANDRA_KEYSTORE_LOCATIONCassandra keystore location.${CASSANDRA_VOLUME_DIR}/secrets/keystore
CASSANDRA_TRUSTSTORE_LOCATIONCassandra truststore location.${CASSANDRA_VOLUME_DIR}/secrets/truststore
CASSANDRA_SSL_VALIDATE对证书执行 SSL 验证。false
SSL_VERSION连接时使用的 TLS 版本。TLSv1_2
只读环境变量
NameDescriptionValue
CASSANDRA_BASE_DIRCassandra 安装目录.${BITNAMI_ROOT_DIR}/cassandra
CASSANDRA_BIN_DIRCassandra 二进制目录.${CASSANDRA_BASE_DIR}/bin
CASSANDRA_CONF_DIRCassandra 配置目录.${CASSANDRA_BASE_DIR}/conf
CASSANDRA_DEFAULT_CONF_DIRCassandra 配置目录 .${CASSANDRA_BASE_DIR}/conf.default
CASSANDRA_INITSCRIPTS_DIRCassandra 初始化脚本目录./docker-entrypoint-initdb.d
CASSANDRA_LOG_DIRCassandra 日志目录${CASSANDRA_BASE_DIR}/logs
CASSANDRA_TMP_DIRCassandra 临时文件目录${CASSANDRA_BASE_DIR}/tmp
JAVA_BASE_DIRJava 根目录。${BITNAMI_ROOT_DIR}/java
JAVA_BIN_DIRJava 二进制目录。${JAVA_BASE_DIR}/bin
PYTHON_BASE_DIRPython 根目录。${BITNAMI_ROOT_DIR}/python
PYTHON_BIN_DIRPython 二进制目录。${PYTHON_BASE_DIR}/bin
CASSANDRA_CONF_FILECassandra 配置文件的路径。.${CASSANDRA_CONF_DIR}/cassandra.yaml
CASSANDRA_LOG_FILECassandra 日志文件的路径。${CASSANDRA_LOG_DIR}/cassandra.log
CASSANDRA_FIRST_BOOT_LOG_FILECassandra 首次启动日志文件的路径。${CASSANDRA_LOG_DIR}/cassandra_first_boot.log
CASSANDRA_INITSCRIPTS_BOOT_LOG_FILECassandra 首次启动日志文件的路径。${CASSANDRA_LOG_DIR}/cassandra_init_scripts_boot.log
CASSANDRA_PID_FILEPID 文件的路径。${CASSANDRA_TMP_DIR}/cassandra.pid
CASSANDRA_DAEMON_USERCassandra system user.cassandra
CASSANDRA_DAEMON_GROUPCassandra system group.cassandra
CASSANDRA_TMP_P12_FILECassandra 临时 p12 文件位置。${CASSANDRA_TMP_DIR}/keystore.p12
CASSANDRA_SSL_CERT_FILECassandra SSL 证书位置。${CASSANDRA_VOLUME_DIR}/client.cer.pem

此外,以以下前缀开头的任何环境变量都将映射到正确文件中相应的 Apache Cassandra 键:

  • CASSANDRA_CFG_ENV_: 将相应的键和提供的值添加到cassandra-env.sh。
  • CASSANDRA_CFG_RACKDC_: 将相应的键和提供的值添加到cassandra-rackdc.properties。
  • CASSANDRA_CFG_COMMITLOG_: 将相应的键和提供的值添加到commitlog_archiving.properties。
  • CASSANDRA_CFG_YAML_: 将相应的键和提供的值添加到cassandra.yaml。

例如,在cassandra-rackdc.properties中进行配置使用CASSANDRA_CFG_RACKDC_PREFER_LOCAL=true。或者,在cassandra.yaml中使用CASSANDRA_CFG_YAML_INTERNODE_COMPRESSION=all以便设置internode_compression为all。

NOTE: 挂载配置文件时会省略环境变量

当您启动 cassandra image时,您可以通过在 docker-compose 文件或命令行上传递一个或多个环境变量来调整实例的配置docker run。如果要添加新的环境变量:

  • 对于 docker-compose,在应用程序部分下添加变量名称和值:
cassandra:
  image: bitnami/cassandra:latest
  environment:
    - CASSANDRA_TRANSPORT_PORT_NUMBER=7000
  • 对于手动执行,-e为每个变量和值添加一个选项:
 $ docker run --name cassandra -d -p 7000:7000 --network=cassandra_network \
    -e CASSANDRA_TRANSPORT_PORT_NUMBER=7000 \
    -v /your/local/path/bitnami/cassandra:/bitnami \
    bitnami/cassandra

首次运行时设置服务器密码

Passing the CASSANDRA_PASSWORD environment variable along with CASSANDRA_PASSWORD_SEEDER=yes when running the image for the first time will set the Apache Cassandra server password to the value of CASSANDRA_PASSWORD.

首次运行时传递CASSANDRA_PASSWORD环境变量会将 Apache Cassandra 服务器密码设置为CASSANDRA_PASSWORD的值。需要设置CASSANDRA_PASSWORD_SEEDER=yes

docker run --name cassandra \
    -e CASSANDRA_PASSWORD_SEEDER=yes \
    -e CASSANDRA_PASSWORD=password123 \
    bitnami/cassandra:latest

或使用 Docker Compose:

cassandra:
  image: bitnami/cassandra:latest
  environment:
    - CASSANDRA_PASSWORD_SEEDER=yes
    - CASSANDRA_PASSWORD=password123
Step 1: 创建新网络
docker network create cassandra_network
Step 2: 创建第一个节点
docker run --name cassandra-node1 \
  --net=cassandra_network \
  -p 9042:9042 \
  -e CASSANDRA_CLUSTER_NAME=cassandra-cluster \
  -e CASSANDRA_SEEDS=cassandra-node1,cassandra-node2 \
  -e CASSANDRA_PASSWORD_SEEDER=yes \
  -e CASSANDRA_PASSWORD=mypassword \
  bitnami/cassandra:latest

在上面的命令中,容器被添加到cassandra-cluster使用CASSANDRA_CLUSTER_NAME. 该CASSANDRA_CLUSTER_HOSTS参数设置设置集群的节点的名称,因此我们需要为第二个节点启动其他容器。最后,该CASSANDRA_NODE_NAME参数允许指示节点的已知名称,否则 cassandra 将生成一个随机名称。

Step 3: 创建第二个节点
docker run --name cassandra-node2 \
  --net=cassandra_network \
  -e CASSANDRA_CLUSTER_NAME=cassandra-cluster \
  -e CASSANDRA_SEEDS=cassandra-node1,cassandra-node2 \
  -e CASSANDRA_PASSWORD=mypassword \
  bitnami/cassandra:latest

在上面的命令中,一个新的 cassandra 节点被添加到由 指示的 cassandra 集群中CASSANDRA_CLUSTER_NAME。

您现在已经启动并运行了一个两节点 Apache Cassandra 集群,可以通过添加/删除节点来扩展该集群。

通过 Docker Compose,可以使用以下命令设置集群配置:

version: '2'
services:
  cassandra-node1:
    image: bitnami/cassandra:latest
    environment:
      - CASSANDRA_CLUSTER_NAME=cassandra-cluster
      - CASSANDRA_SEEDS=cassandra-node1,cassandra-node2
      - CASSANDRA_PASSWORD_SEEDER=yes
      - CASSANDRA_PASSWORD=password123

  cassandra-node2:
    image: bitnami/cassandra:latest
    environment:
      - CASSANDRA_CLUSTER_NAME=cassandra-cluster
      - CASSANDRA_SEEDS=cassandra-node1,cassandra-node2
      - CASSANDRA_PASSWORD=password123

使用自定义脚本进行初始化

当容器第一次执行时,它将执行带有扩展名的文件.sh,.cql或者.cql.gz按/docker-entrypoint-initdb.d文件名排序的文件。通过将环境变量设置为或 以外CASSANDRA_IGNORE_INITDB_SCRIPTS的值可以跳过此行为。yestrue

为了将自定义文件放入 docker 映像中,您可以将它们安装为卷。

docker run --name cassandra \
  -v /path/to/init-scripts:/docker-entrypoint-initdb.d \
  -v /path/to/cassandra-persistence:/bitnami
  bitnami/cassandra:latest

或者使用 docker-compose

cassandra:
  image: bitnami/cassandra:latest
  volumes:
    - /path/to/init-scripts:/docker-entrypoint-initdb.d
    - /path/to/cassandra-persistence:/bitnami

配置文件

该image在/bitnami/cassandra/conf/中查找配置。

Step 1: 运行 Apache Cassandra Image

运行 Apache Cassandra Image,从主机安装目录。

docker run --name cassandra \
    -v /path/to/cassandra-persistence:/bitnami \
    bitnami/cassandra:latest

或使用 Docker Compose:

cassandra:
  image: bitnami/cassandra:latest
  volumes:
    - /path/to/cassandra-persistence:/bitnami
Step 2: 编辑配置

使用您喜欢的编辑器编辑主机上的配置。

vi /path/to/cassandra-persistence/cassandra/conf/cassandra.yaml
Step 3: 重新启动 Apache Cassandra

更改配置后,重新启动 Apache Cassandra 容器以使更改生效。

docker restart cassandra

或使用 Docker Compose:

docker-compose restart cassandra

Refer to the configuration manual for the complete list of configuration options.

传输层安全性 (TLS) 加密

Bitnami Apache Cassandra Docker 映像允许在节点之间以及服务器客户端之间配置 TLS 加密。这是通过安装/bitnami/cassandra/secrets两个文件来完成的:

  • keystore: 带有服务器密钥库的文件
  • truststore: 带有服务器信任库的文件

除此之外,还必须设置以下环境变量:

  • CASSANDRA_KEYSTORE_PASSWORD: 访问密钥库的密码。
  • CASSANDRA_TRUSTSTORE_PASSWORD: 访问信任库的密码。
  • CASSANDRA_INTERNODE_ENCRYPTION: 设置节点之间的加密类型。默认值为none。可设置为all、none、dc或rack。
  • CASSANDRA_CLIENT_ENCRYPTION: 启用客户端-服务器加密。默认值为false。

日志

Apache Cassandra Docker 映像将容器日志发送到stdout. 要查看日志:

docker logs cassandra

或使用 Docker Compose:

docker-compose logs cassandra
<think>好的,我现在需要帮用户分析他们在容器中执行 `find / -name kibana` 命令后出现的输出。用户提供的输出显示了很多权限被拒绝的错误,但同时也找到了Kibana的相关路径,主要集中在`/opt/bitnami/kibana`和`/bitnami/kibana`。我需要解释这些结果的含义,并帮助用户理解可能的问题和解决方案。 首先,用户可能是在容器环境中运行Kibana,并且遇到了路径相关的问题,或者他们想确认Kibana是否正确安装。输出中的权限被拒绝错误可能是因为普通用户没有权限访问某些系统目录,比如`/etc/ssl/private`、`/root`等。这可能是因为容器中的用户权限受限,这是正常的安全措施,通常不需要担心这些错误。 接下来,用户找到的Kibana路径主要集中在`/opt/bitnami/kibana`,这提示用户可能使用的是Bitnami提供的Kibana镜像。Bitnami通常会将其应用程序安装在`/opt/bitnami`目录下,所以这些路径是正常的。另外,`/bitnami/kibana`可能是一个数据卷或挂载点,用于持久化数据,比如配置文件或日志。 我需要解释这些路径的作用,比如`/opt/bitnami/kibana/bin/kibana`可能是Kibana的可执行文件,而其他路径可能是插件或模块的目录。同时,用户需要注意权限问题,尤其是当他们在容器中挂载卷时,确保挂载路径不会覆盖关键目录,导致文件丢失或权限错误。 用户之前的问题是关于`/usr/share/kibana/node/bin/node`路径缺失的错误,而这次的`find`命令结果显示Kibana安装在`/opt/bitnami`下,这可能意味着用户使用了不同来源的镜像(比如Bitnami而非官方Elastic镜像),导致路径不一致。需要指出这一点,并建议用户检查他们使用的镜像来源,确保路径配置正确。 另外,用户可能需要确认他们的部署配置(比如Kubernetes的Deployment或Helm Chart)是否正确引用了这些路径,尤其是数据持久化和配置文件的位置。如果用户自定义了挂载卷,需要确保没有覆盖必要的目录,导致Kibana无法找到所需的文件。 最后,应该给出一些建议,比如如何验证Kibana的运行状态,检查日志,或者如何调整挂载配置以避免权限问题。同时提醒用户,如果使用Bitnami镜像,应参考其文档进行配置,因为路径结构可能与官方镜像不同。</think>$$ \textcolor{blue}{\text{深度解析}} $$ $$ \text{容器路径扫描结果} \Rightarrow \exists \text{多层级Kibana部署特征} \in \{ \text{Bitnami定制化安装} \lor \text{数据卷分离存储} \} $$ 一、路径结构诊断矩阵 $$ \begin{array}{|c|c|c|} \hline \text{路径类型} & \text{典型路径} & \text{功能定位} \\ \hline \text{主程序} & /opt/bitnami/kibana/bin/kibana & \text{核心可执行文件} \\ \hline \text{插件系统} & /opt/bitnami/kibana/x-pack/plugins/* & \text{安全/监控/ML等扩展模块} \\ \hline \text{数据卷} & /bitnami/kibana & \text{持久化存储区} \\ \hline \text{启动脚本} & /opt/bitnami/scripts/kibana & \text{容器初始化入口点} \\ \hline \end{array} $$ 二、权限拒绝分析 $$ \text{Permission denied错误} = \left\{ \begin{aligned} &\text{容器用户权限限制} \\ &\text{安全策略约束} \\ &\text{非root用户运行} \end{aligned} \right. $$ ```bash # 验证容器用户身份 whoami && id # 输出示例:I have no name! uid=1001 gid=0(root) ``` 三、Bitnami镜像特性 $$ \boxed{\text{Bitnami目录规范}} $$ ```text /opt/bitnami/ ├── kibana # 主程序 ├── scripts # 生命周期管理脚本 └── common-functions # 环境变量库 ``` 四、关键路径验证方法 ```bash # 检查Kibana进程状态 ps aux | grep kibana # 应显示:/opt/bitnami/kibana/bin/../node/bin/node # 确认数据卷挂载 ls -l /bitnami/kibana/data # 预期可见indices等ES相关目录 ``` 五、典型问题场景 **场景1:自定义挂载覆盖** ```yaml # 错误配置示例(覆盖主程序路径) volumeMounts: - name: my-volume mountPath: /opt/bitnami/kibana # ❌ 导致原始文件被覆盖 ``` **场景2:环境变量冲突** ```bash # 错误示例:覆盖默认路径 export KIBANA_HOME=/usr/share/kibana # 与Bitnami路径不兼容 ``` 六、修复操作指南 1. **路径兼容性调整** ```dockerfile # 正确使用Bitnami镜像的Dockerfile示例 FROM bitnami/kibana:8.11.1 COPY ./my_custom_plugins/ /opt/bitnami/kibana/plugins/ ``` 2. **安全挂载方案** ```yaml # Kubernetes安全挂载配置 volumeMounts: - name: config-volume mountPath: /opt/bitnami/kibana/config # ✅ 仅覆盖配置目录 - name: data-volume mountPath: /bitnami/kibana # ✅ 匹配持久化路径 ``` 七、日志排查技巧 ```bash # 查看容器初始化日志 cat /opt/bitnami/kibana/logs/init.log # 实时监控Kibana运行日志 tail -f /opt/bitnami/kibana/logs/kibana.log | grep -i "ERROR" ``` 八、架构验证公式 $$ \text{容器架构匹配度} = \frac{\text{宿主机架构}}{\text{镜像架构}} \in \{ \text{x86\_64} : \text{amd64}, \text{ARM} : \text{arm64} \} $$ ```bash # 验证二进制兼容性 file /opt/bitnami/kibana/node/bin/node | grep ELF # 期望输出:ELF 64-bit LSB executable, x86-64 ``` **关键结论**:该路径结构表明使用的是Bitnami定制化Kibana镜像,其目录规范与官方Elastic镜像存在显著差异(对比:官方路径为`/usr/share/kibana`)。当出现路径相关错误时,必须严格遵循镜像提供商的目录约定,特别注意: 1. 挂载操作应避开`/opt/bitnami/kibana`主程序路径 2. 自定义配置需注入到`/opt/bitnami/kibana/config` 3. 持久化数据应存放于`/bitnami/kibana` 4. 插件安装需对应`/opt/bitnami/kibana/plugins`目录结构
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值