【Docker】Cassandra 容器部署

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

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

qinghub自动安装部署配置库

什么是 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_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 连接验证器。 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,在应用程序部分下添加变量名称和值:
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 映像

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

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) 加密

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
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 222,104评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,816评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,697评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,836评论 1 298
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,851评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,441评论 1 310
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,992评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,899评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,457评论 1 318
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,529评论 3 341
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,664评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,346评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,025评论 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,511评论 0 24
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,611评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 49,081评论 3 377
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,675评论 2 359

推荐阅读更多精彩内容