我们正在运行时创建一个cassandra集群,“cluster-name”等信息和“种子”的IP地址仅在运行时可用。是否有cassandra.yaml的java包装器,它允许cassandra.yaml的setter和getter并将其保存到磁盘?我知道我自己总能创建一个包装器,但想知道是否已经有一个可用的。
答案 0 :(得分:1)
是否有cassandra.yaml的java包装器允许cassandra.yaml的setter和getter并将其保存到磁盘?
不是我知道的。虽然,这对于OpenSource项目来说是个好主意!
我过去曾采用过几种不同的方法。一个是Chef和consul-template的组合。从本质上讲,您的cassandra.yaml包含可变占位符,当您的部署配方运行时,它们由默认属性(Chef)和特定于群集的设置(consul-template)组合填充。
我还使用sed
(对于我们的一些非Chef环境)使用Bash脚本完成了此操作。这是我编写的用于将DataStax Enterprise安装迁移到Apache Cassandra(开源)安装的脚本的摘录:
#!/bin/bash
cp /etc/dse/cassandra/cassandra.yaml /etc/cassandra/conf
#set GossipingPropertyFileSnitch in cassandra.yaml
sed -i 's/endpoint_snitch: com.datastax.bdp.snitch.DseDelegateSnitch/endpoint_snitch: GossipingPropertyFileSnitch/' /etc/cassandra/conf/cassandra.yaml
#set truststore location
sed -i 's/truststore: \/etc\/dse\/cassandra\//truststore: \/etc\/cassandra\/conf\//g' /etc/cassandra/conf/cassandra.yaml
#set keystore location
sed -i 's/keystore: \/etc\/dse\/cassandra\//keystore: \/etc\/cassandra\/conf\//g' /etc/cassandra/conf/cassandra.yaml
基本上,在这里,您正在为特定的yaml属性设置进行正则表达式替换。具体来说,我需要更新snitch以及keystore / truststore的位置。它并不漂亮,但它确实有效。