当前位置: 首页 > article >正文

cassandra指定配置文件的docker启动方法

在使用 Docker 部署 Cassandra 时,您可能需要自定义 Cassandra 的配置文件(如 cassandra.yaml)以满足特定需求,例如配置集群名称、种子节点、数据中心等。以下是如何在 Docker 容器运行时指定和使用自定义配置文件的详细步骤和说明:

步骤概述

  1. 安装 Docker(已完成)
  2. 创建 Docker 网络(已完成)
  3. 准备数据存储目录(已完成)
  4. 拉取 Cassandra 镜像(已完成)
  5. 准备自定义配置文件
  6. 运行 Cassandra 容器并挂载配置文件
  7. 配置多节点集群(如果需要)

步骤 5: 准备自定义配置文件

要自定义 Cassandra 的配置,您需要准备一个或多个配置文件,并将它们挂载到容器内的相应目录。以下是具体步骤:

5.1 创建配置文件目录

在宿主机上创建一个目录用于存放 Cassandra 的配置文件。例如:

mkdir -p /root/cassandra/conf
5.2 获取默认配置文件

您需要获取 Cassandra 镜像中的默认配置文件,以便进行修改。可以通过以下命令启动一个临时容器并复制配置文件:

docker run --rm cassandra cat /etc/cassandra/cassandra.yaml > /root/cassandra/conf/cassandra.yaml
5.3 编辑配置文件

使用您喜欢的文本编辑器(如 vimnano)编辑 /root/cassandra/conf/cassandra.yaml 文件,根据您的需求进行修改。以下是一些常见的配置项及其说明:

cluster_name: "YourClusterName"  # 集群名称,所有节点必须一致

num_tokens: 256  # 每个节点的令牌数,决定数据分片的数量

seed_provider:
  - class_name: org.apache.cassandra.locator.SimpleSeedProvider
    parameters:
      - seeds: "192.168.1.101,192.168.1.102"  # 种子节点的 IP 地址列表

listen_address: "192.168.1.101"  # 当前节点的 IP 地址

rpc_address: "0.0.0.0"  # RPC 服务的监听地址

endpoint_snitch: GossipingPropertyFileSnitch  # 用于数据中心和机架感知的 Snitch

# 数据目录和提交日志目录(如果需要自定义)
data_file_directories:
  - /var/lib/cassandra/data
commitlog_directory: /var/lib/cassandra/commitlog

注意事项:

  • 种子节点(Seed Nodes):seed_provider 中列出集群中一部分种子节点的 IP 地址。通常不需要列出所有节点,只需至少两个种子节点以确保集群的稳定性。
  • 集群名称(cluster_name): 确保所有节点的 cluster_name 一致。
  • 监听地址(listen_address)和 RPC 地址(rpc_address): 配置为每个节点的实际 IP 地址。对于多节点集群,每个节点的 listen_address 应该是唯一的。
  • Snitch 配置: 根据您的网络拓扑选择合适的 endpoint_snitchGossipingPropertyFileSnitch 是常用且灵活的选择,适用于大多数场景。
5.4 配置其他文件(可选)

如果需要自定义其他配置文件,如 cassandra-rackdc.properties,您可以按照类似的步骤复制并修改这些文件,然后挂载到容器中相应的位置。

步骤 6: 运行 Cassandra 容器并挂载配置文件

使用 docker run 命令启动 Cassandra 容器,并将自定义的配置文件挂载到容器内。以下是修改后的运行命令示例:

docker run -d \
  --name zd-cassandra \
  --restart always \
  -p 9042:9042 \
  --network cassandra \
  -v /root/cassandra:/var/lib/cassandra \
  -v /root/cassandra/conf/cassandra.yaml:/etc/cassandra/cassandra.yaml \
  -e CASSANDRA_USER=cassandra \
  -e CASSANDRA_PASSWORD=cassandra \
  cassandra

命令说明:

  • -v /root/cassandra/conf/cassandra.yaml:/etc/cassandra/cassandra.yaml:将宿主机的自定义 cassandra.yaml 文件挂载到容器内的 /etc/cassandra/cassandra.yaml,覆盖默认配置。
  • 其他参数保持不变,用于配置网络、端口映射、数据存储和环境变量等。

多个配置文件挂载示例:

如果您还自定义了其他配置文件(如 cassandra-rackdc.properties),可以按如下方式挂载:

docker run -d \
  --name zd-cassandra \
  --restart always \
  -p 9042:9042 \
  --network cassandra \
  -v /root/cassandra:/var/lib/cassandra \
  -v /root/cassandra/conf/cassandra.yaml:/etc/cassandra/cassandra.yaml \
  -v /root/cassandra/conf/cassandra-rackdc.properties:/etc/cassandra/cassandra-rackdc.properties \
  -e CASSANDRA_USER=cassandra \
  -e CASSANDRA_PASSWORD=cassandra \
  cassandra

步骤 7: 配置多节点集群(如果需要)

如果您计划在多个服务器上部署 Cassandra 节点,确保每个节点都按照以下步骤配置:

  1. 准备每个节点的配置文件:

    • 为每个节点创建独立的配置文件目录(如 /root/cassandra_node1/conf/root/cassandra_node2/conf)。
    • 修改每个节点的 cassandra.yaml,确保 listen_addressrpc_address 设置为各自节点的 IP 地址。
    • seed_provider 中包含集群中至少一个种子节点的 IP 地址。
  2. 启动每个节点的 Cassandra 容器:

    docker run -d \
      --name zd-cassandra-node1 \
      --restart always \
      -p 9042:9042 \
      --network cassandra \
      -v /root/cassandra_node1:/var/lib/cassandra \
      -v /root/cassandra_node1/conf/cassandra.yaml:/etc/cassandra/cassandra.yaml \
      -e CASSANDRA_USER=cassandra \
      -e CASSANDRA_PASSWORD=cassandra \
      cassandra
    
    docker run -d \
      --name zd-cassandra-node2 \
      --restart always \
      -p 9043:9042 \  # 注意端口映射避免冲突
      --network cassandra \
      -v /root/cassandra_node2:/var/lib/cassandra \
      -v /root/cassandra_node2/conf/cassandra.yaml:/etc/cassandra/cassandra.yaml \
      -e CASSANDRA_USER=cassandra \
      -e CASSANDRA_PASSWORD=cassandra \
      cassandra
    

    注意:

    • 每个节点的容器应使用不同的主机端口(如 90429043)映射到容器内的 9042 端口,以避免端口冲突。
    • 确保每个节点的 cassandra.yaml 文件正确配置了各自的 IP 地址和种子节点列表。

总结

通过上述步骤,您可以在 Docker 容器中部署和配置多个 Cassandra 节点,确保它们能够作为一个集群协同工作。关键点如下:

  • 自定义配置文件: 创建和编辑自定义的 cassandra.yaml 文件,并通过 Docker 卷挂载到容器内,覆盖默认配置。
  • 种子节点配置:cassandra.yaml 中指定种子节点的 IP 地址,确保新节点能够通过种子节点加入集群。
  • 独立端口映射: 如果在同一台服务器上运行多个 Cassandra 容器,确保它们的主机端口映射不同,避免端口冲突。
  • 数据持久化: 使用 Docker 卷挂载宿主机的目录到容器内,确保数据在容器重启或删除后依然持久化。

示例:自定义 cassandra.yaml

以下是一个自定义的 cassandra.yaml 示例,用于多节点集群:

cluster_name: "Thingsboard Cluster"

num_tokens: 256

seed_provider:
  - class_name: org.apache.cassandra.locator.SimpleSeedProvider
    parameters:
      - seeds: "192.168.1.101,192.168.1.102"

listen_address: "192.168.1.103"  # 当前节点的 IP 地址

rpc_address: "0.0.0.0"

endpoint_snitch: GossipingPropertyFileSnitch

data_file_directories:
  - /var/lib/cassandra/data
commitlog_directory: /var/lib/cassandra/commitlog
saved_caches_directory: /var/lib/cassandra/saved_caches

# 其他自定义配置项...

在这个示例中:

  • cluster_name: 设置为 "Thingsboard Cluster",确保所有节点一致。
  • seeds: 列出种子节点的 IP 地址,例如 "192.168.1.101,192.168.1.102"
  • listen_address: 当前节点的 IP 地址,例如 "192.168.1.103"
  • rpc_address: 设置为 "0.0.0.0",允许外部访问 RPC 服务。

常见问题

  1. 配置文件修改后容器未生效:

    • 确保配置文件路径正确,并且挂载的配置文件覆盖了容器内的默认文件。
    • 重启容器以应用新的配置:
      docker restart zd-cassandra
      
  2. 节点无法加入集群:

    • 检查网络连接,确保所有节点能够相互访问。
    • 确保种子节点配置正确,并且种子节点正在运行。
    • 检查 Cassandra 日志(通常位于 /var/log/cassandra/ 或容器内的 /var/lib/cassandra/log)以获取错误信息。
  3. 端口冲突:

    • 在同一台服务器上运行多个 Cassandra 容器时,确保主机端口(如 90429043)不重复。
    • 使用不同的宿主机端口映射到容器内的 9042 端口。

通过正确配置和部署,您可以在 Docker 环境中高效地运行一个多节点的 Cassandra 集群,为 ThingsBoard 提供可靠的后端数据库支持。


http://www.kler.cn/a/312122.html

相关文章:

  • Apache ECharts
  • 用户裂变数据分析
  • 【系统架构设计师】真题论文: 论软件可靠性设计与应用(包括解题思路和素材)
  • GFPS技术原理(四)GATT特征值
  • linux详解,基本网络枚举
  • 关于git使用的图文教程(包括基本使用,处理冲突问题等等)超详细
  • 【学术会议征稿】第四届计算机、信息工程与电子材料国际学术会议 (CTIEEM 2024)
  • 微信小程序能不能有一种公共的分包,能被普通的分包引用其资源?(内有解决方案)
  • 【测试】博客系统测试报告
  • docker面经
  • 【Mac】系统环境配置
  • mybatisplus分页查询学习
  • QT应用开发的C++功能框架以及实战入门开发项目场景
  • 计算机网路(应用层)
  • 中台架构下的数据仓库与非结构化数据整合
  • Nuxt Kit 中的插件:创建与使用
  • ffmpeg实现视频的合成与分割
  • 特征融合魔改,看这一篇就够了
  • Microsoft Edge 五个神级插件
  • vue 中属性值上变量和字符串怎么拼接
  • layui table中的checkbox禁用问题
  • Vue3.0组合式API:使用ref获取DOM元素
  • 中国电子学会202403青少年软件编程(Python)等级考试试卷(二级)真题
  • 数据库———事务及bug的解决
  • SpringCloud~
  • idea 恢复 pom 文件呈现灰色并带删除线