【问题标题】:How to have similar cassandra.yaml across cluster?如何在集群中拥有类似的 cassandra.yaml?
【发布时间】:2019-08-12 21:00:52
【问题描述】:

我想配置一个 cassandra 集群,并且我希望 cassandra.yaml 配置文件在节点之间是相同的。问题是每个节点上的listen_address 必须不同。由于这是一个 yaml 文件,是否可以包含另一个 yaml 文件?这样主要的 cassandra.yaml 是相同的,只是 listen_address.yaml 在集群中会有所不同。

我不确定 yaml 语法,但我知道它可以包含文件 - cassandra 会使用它吗?

[剪辑] ...

listen_address: !include listen_address.yaml ...

以上对我不起作用。 cassandra有可能吗?

【问题讨论】:

    标签: cassandra


    【解决方案1】:

    不可能直接在 yaml 文件中包含,但没有什么能阻止您使用 Ansible/Puppet/Chef 或任何其他框架来处理 cassandra.yaml 文件的模板,并替换变量以生成真实的 cassandra.yaml

    【讨论】:

    • 谢谢。作为恐龙,我不得不承认我讨厌ansible之类的。我是一个谦逊的 bash/sed/awk 类型的人......我确实希望 cassandra 的人会努力支持包含,因为 90% 的文件在节点上是相似的。
    【解决方案2】:

    就 Alex 而言,您会发现使用实际的部署框架要容易得多。

    在我们实现我们的之前,我曾经使用一个简单的 Bash 脚本进行部署。本质上,相同的 yaml(和其他配置文件)被分发到每个节点(通过 SCP)。我已经预先编辑了文件,并为需要更改的属性设置了常量:

    #cassandra.yaml
    listen_address: INTERNALIP
    broadcast_address: EXTERNALIP
    rpc_address: INTERNALIP
    broadcast_rpc_address: EXTERNALIP
    
    #cassandra-rackdc.properties
    dc=DATACENTER
    rack=AZONE
    

    然后我运行我的 Bash 脚本,用基于 sed 的正则表达式替换了独特的部分,如下所示:

    INTERNALTP=$1
    EXTERNALIP=$2
    DATACENTER=$3
    AZONE=$4
    
    #set listen_address to internal IP
    sed -i "s/INTERNALIP/$INTERNALIP/g" $CASSANDRA_HOME/conf/cassandra.yaml
    
    #set broadcast_rpc_address to external IP
    sed -i "s/EXTERNALIP/$EXTERNALIP/g" $CASSANDRA_HOME/conf/cassandra.yaml
    
    #set AZONE and DATACENTER in rackdc properties
    sed -i "s/DATACENTER/$DATACENTER/" $CASSANDRA_HOME/conf/cassandra-rackdc.properties
    sed -i "s/AZONE/$AZONE/" $CASSANDRA_HOME/conf/cassandra-rackdc.properties
    

    【讨论】:

    • 谢谢。我正在做类似的事情,但我真的很想使用包含。我们可以给 cassandra 的家伙添加一个 TODO 吗?
    • 随意为它打开JIRA
    猜你喜欢
    • 2020-01-03
    • 2019-10-18
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    • 2018-08-08
    • 2023-03-02
    • 2014-05-12
    相关资源
    最近更新 更多