如何在整个集群中拥有相似的cassandra.yaml?

时间:2019-08-11 17:23:23

标签: cassandra

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

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

[SNIP] ...

listen_address:!include listen_address.yaml ...

以上对我不起作用。卡桑德拉有可能吗?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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