我想配置一个cassandra集群,并且我希望cassandra.yaml配置文件在节点之间是相同的。问题是每个节点上的listen_address必须不同。由于这是一个Yaml文件,是否可以包含另一个Yaml文件?这样,整个集群中的主要cassandra.yaml都相同,只是listen_address.yaml会有所不同。
我不确定yaml语法,但是我知道它可以包含文件-卡桑德拉会使用它吗?
[SNIP] ...
listen_address:!include listen_address.yaml ...
以上对我不起作用。卡桑德拉有可能吗?
答案 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