轻云Cassandra标准软件基于Bitnami cassandra 构建。当前版本为4.0.12
你可以通过轻云UC部署工具直接安装部署,也可以手动按如下文档操作,该项目已经全面开源,可以从如下环境获取
配置文件地址: https://gitee.com/qingplus/qingcloud-platform
什么是 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