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

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

你可以通过轻云UC部署工具直接安装部署,也可以手动按如下文档操作,该项目已经全面开源,可以从如下环境获取

配置文件地址: https://gitee.com/qingplus/qingcloud-platform

qinghub自动安装部署配置库

什么是 Apache Cassandra?

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

快速启动

console 复制代码
docker run --name cassandra bitnami/cassandra:latest

持久化数据

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

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

console 复制代码
docker run \
    -v /path/to/cassandra-persistence:/bitnami \
    bitnami/cassandra:latest

或使用 Docker Compose:

yaml 复制代码
cassandra:
  image: bitnami/cassandra:latest
  volumes:
    - /path/to/cassandra-persistence:/bitnami

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

配置

环境变量

可定制的环境变量
名称 描述 Default Value
CASSANDRA_VOLUME_DIR Cassandra 持久性目录。 /bitnami/cassandra
CASSANDRA_DATA_DIR Cassandra 存储数据目录. ${CASSANDRA_VOLUME_DIR}/data
CASSANDRA_COMMITLOG_DIR Cassandra 提交日志目录。 ${CASSANDRA_DATA_DIR}/commitlog
CASSANDRA_MOUNTED_CONF_DIR Cassandra 用于挂载置文件目录。 ${CASSANDRA_VOLUME_DIR}/conf
CASSANDRA_CLIENT_ENCRYPTION 启用客户端加密。 false
CASSANDRA_CLUSTER_NAME Cassandra 集群名称。 My Cluster
CASSANDRA_DATACENTER Cassandra 数据中心名称。 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_PEERS cluster peers. $CASSANDRA_SEEDS
CASSANDRA_RACK Cassandra 机架名称。 rack1
CASSANDRA_AUTOMATIC_SSTABLE_UPGRADE 升级后自动升级sstables。 false
CASSANDRA_IGNORE_INITDB_SCRIPTS 忽略初始化脚本的执行 no
CASSANDRA_CQL_PORT_NUMBER CQL port. 9042
CASSANDRA_JMX_PORT_NUMBER JMX port. 7199
CASSANDRA_TRANSPORT_PORT_NUMBER Transport port. 7000
CASSANDRA_CQL_MAX_RETRIES CQL 启动操作的最大重试次数。 20
CASSANDRA_CQL_SLEEP_TIME CQL 启动操作的休眠时间。 5
CASSANDRA_INIT_MAX_RETRIES init 启动操作的最大重试次数。 100
CASSANDRA_INIT_SLEEP_TIME init 启动操作的睡眠时间。 5
CASSANDRA_PEER_CQL_MAX_RETRIES peer启动操作的最大重试次数。 100
CASSANDRA_PEER_CQL_SLEEP_TIME 对等启动操作的睡眠时间。 10
CASSANDRA_DELAY_START_TIME 将 Cassandra 启动延迟所提供的秒数。 0
CASSANDRA_AUTO_SNAPSHOT_TTL 在截断键空间或删除表之前自动拍摄数据快照 30d
ALLOW_EMPTY_PASSWORD 装中不允许任何凭据。 no
CASSANDRA_AUTHORIZER Cassandra 连接授权者。 CassandraAuthorizer
CASSANDRA_AUTHENTICATOR Cassandra c连接验证器。 PasswordAuthenticator
CASSANDRA_USER Cassandra username. cassandra
CASSANDRA_KEYSTORE_PASSWORD Cassandra keystore password. cassandra
CASSANDRA_TRUSTSTORE_PASSWORD Cassandra truststore password. cassandra
CASSANDRA_KEYSTORE_LOCATION Cassandra keystore location. ${CASSANDRA_VOLUME_DIR}/secrets/keystore
CASSANDRA_TRUSTSTORE_LOCATION Cassandra truststore location. ${CASSANDRA_VOLUME_DIR}/secrets/truststore
CASSANDRA_SSL_VALIDATE 对证书执行 SSL 验证。 false
SSL_VERSION 连接时使用的 TLS 版本。 TLSv1_2
只读环境变量
Name Description Value
CASSANDRA_BASE_DIR Cassandra 安装目录. ${BITNAMI_ROOT_DIR}/cassandra
CASSANDRA_BIN_DIR Cassandra 二进制目录. ${CASSANDRA_BASE_DIR}/bin
CASSANDRA_CONF_DIR Cassandra 配置目录. ${CASSANDRA_BASE_DIR}/conf
CASSANDRA_DEFAULT_CONF_DIR Cassandra 配置目录 . ${CASSANDRA_BASE_DIR}/conf.default
CASSANDRA_INITSCRIPTS_DIR Cassandra 初始化脚本目录. /docker-entrypoint-initdb.d
CASSANDRA_LOG_DIR Cassandra 日志目录 ${CASSANDRA_BASE_DIR}/logs
CASSANDRA_TMP_DIR Cassandra 临时文件目录 ${CASSANDRA_BASE_DIR}/tmp
JAVA_BASE_DIR Java 根目录。 ${BITNAMI_ROOT_DIR}/java
JAVA_BIN_DIR Java 二进制目录。 ${JAVA_BASE_DIR}/bin
PYTHON_BASE_DIR Python 根目录。 ${BITNAMI_ROOT_DIR}/python
PYTHON_BIN_DIR Python 二进制目录。 ${PYTHON_BASE_DIR}/bin
CASSANDRA_CONF_FILE Cassandra 配置文件的路径。. ${CASSANDRA_CONF_DIR}/cassandra.yaml
CASSANDRA_LOG_FILE Cassandra 日志文件的路径。 ${CASSANDRA_LOG_DIR}/cassandra.log
CASSANDRA_FIRST_BOOT_LOG_FILE Cassandra 首次启动日志文件的路径。 ${CASSANDRA_LOG_DIR}/cassandra_first_boot.log
CASSANDRA_INITSCRIPTS_BOOT_LOG_FILE Cassandra 首次启动日志文件的路径。 ${CASSANDRA_LOG_DIR}/cassandra_init_scripts_boot.log
CASSANDRA_PID_FILE PID 文件的路径。 ${CASSANDRA_TMP_DIR}/cassandra.pid
CASSANDRA_DAEMON_USER Cassandra system user. cassandra
CASSANDRA_DAEMON_GROUP Cassandra system group. cassandra
CASSANDRA_TMP_P12_FILE Cassandra 临时 p12 文件位置。 ${CASSANDRA_TMP_DIR}/keystore.p12
CASSANDRA_SSL_CERT_FILE Cassandra 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,在应用程序部分下添加变量名称和值:
yaml 复制代码
cassandra:
  image: bitnami/cassandra:latest
  environment:
    - CASSANDRA_TRANSPORT_PORT_NUMBER=7000
  • 对于手动执行,-e为每个变量和值添加一个选项:
console 复制代码
 $ 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

console 复制代码
docker run --name cassandra \
    -e CASSANDRA_PASSWORD_SEEDER=yes \
    -e CASSANDRA_PASSWORD=password123 \
    bitnami/cassandra:latest

或使用 Docker Compose:

yaml 复制代码
cassandra:
  image: bitnami/cassandra:latest
  environment:
    - CASSANDRA_PASSWORD_SEEDER=yes
    - CASSANDRA_PASSWORD=password123
Step 1: 创建新网络
console 复制代码
docker network create cassandra_network
Step 2: 创建第一个节点
console 复制代码
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: 创建第二个节点
console 复制代码
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,可以使用以下命令设置集群配置:

yaml 复制代码
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 映像中,您可以将它们安装为卷。

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

或者使用 docker-compose

yaml 复制代码
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,从主机安装目录。

console 复制代码
docker run --name cassandra \
    -v /path/to/cassandra-persistence:/bitnami \
    bitnami/cassandra:latest

或使用 Docker Compose:

yaml 复制代码
cassandra:
  image: bitnami/cassandra:latest
  volumes:
    - /path/to/cassandra-persistence:/bitnami
Step 2: 编辑配置

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

console 复制代码
vi /path/to/cassandra-persistence/cassandra/conf/cassandra.yaml
Step 3: 重新启动 Apache Cassandra

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

console 复制代码
docker restart cassandra

或使用 Docker Compose:

console 复制代码
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. 要查看日志:

console 复制代码
docker logs cassandra

或使用 Docker Compose:

console 复制代码
docker-compose logs cassandra
相关推荐
代码老y17 分钟前
Docker:容器化技术的基石与实践指南
运维·docker·容器
典学长编程40 分钟前
Linux操作系统从入门到精通!第二天(命令行)
linux·运维·chrome
DuelCode1 小时前
Windows VMWare Centos Docker部署Springboot 应用实现文件上传返回文件http链接
java·spring boot·mysql·nginx·docker·centos·mybatis
你想考研啊3 小时前
四、jenkins自动构建和设置邮箱
运维·jenkins
Code blocks3 小时前
使用Jenkins完成springboot项目快速更新
java·运维·spring boot·后端·jenkins
饥饿的半导体4 小时前
Linux快速入门
linux·运维
杨浦老苏5 小时前
开源服务运行监控工具Lunalytics
docker·群晖·网站监控
还是奇怪6 小时前
Linux - 安全排查 2
linux·运维·安全
牛奶咖啡137 小时前
Linux系统的常用操作命令——文件远程传输、文件编辑、软件安装的四种方式
运维·服务器·软件安装·linux云计算·scp文件远程传输·vi文件编辑·设置yum的阿里云源
难受啊马飞2.07 小时前
如何判断 AI 将优先自动化哪些任务?
运维·人工智能·ai·语言模型·程序员·大模型·大模型学习