sed - 在 VM 启动时更改 Cassandra 配置上的 IP 地址

sed - 在 VM 启动时更改 Cassandra 配置上的 IP 地址

我目前正在 Azure 中进行灾难恢复设置,我们在一个区域上运行着一个 cassandra 集群。计划是,如果该区域出现故障,我们将利用 Azure Site Recovery 将所有计算机故障转移到辅助区域。

每个区域都有自己的 IP 集,假设区域 A 是 10.1.0.x 区域 B 是 10.2.0.x

由于这意味着我需要更改 cassandra.yaml 文件,因此我创建了一个简单的文件,该文件在启动时使用 crontab 运行,该文件更改以下条目

- seeds: 10.1.0.101,10.1.0.102,10.1.0.103
rpc_address: 10.1.0.101
listen_address: 10.1.0.101

在辅助站点上执行以下操作

- seeds: 10.2.0.101,10.2.0.102,10.2.0.103
rpc_address: 10.2.0.101
listen_address: 10.2.0.101

种子是固定列表,所以我是这样制作的

# get node IP address
IPADDR=$(ip addr show eth0 | grep 'inet ' | cut -d' ' -f6 | awk '{ print $1}' | cut -d'/' -f1)

# breakdown IP address into IP blocks of sec1.sec2.sec3.sec4
slice="$IPADDR"
count=1
while [ "$count" -le 4 ]
do
        declare sec"$count"="${slice%%.*}"
        slice="${slice#*.}"
        count=$((count+1))
done

# check the sec2 block of the IP and define the IP seed list
if [[ $sec2 == 2 ]]
then
### the below seed list is only for use in ASR testing - need to reconfigure this when running failover/failback in actual production
    SEED="10.1.0.101,10.1.0.102,10.1.0.103"
else
    SEED="10.2.0.101,10.2.0.102,10.2.0.103"
fi

#change the seed list, rpc_address and listen_address of each cassandra nodes
sed -i "0,/^\s* - seeds:.*/s// \         \- seeds: $SEED/" /etc/cassandra/conf/cassandra.yaml

现在这部分工作正常,当我对虚拟机进行故障转移时,种子列表已正确更改。

现在对于 rpc_address 和listen_address,我这样做了

LOCALIPADDR=$(ip addr show eth0 | grep 'inet ' | cut -d' ' -f6 | awk '{ print $1}' | cut -d'/' -f1)
sed -i "0,/^rpc_address:.*/s//rpc_address: $LOCALIPADDR/" /etc/cassandra/conf/cassandra.yaml
sed -i "0,/^listen_address:.*/s//listen_address: $LOCALIPADDR/" /etc/cassandra/conf/cassandra.yaml

如果在我的 shell 上运行脚本,效果很好。 rpc_address 和listen_address 都会根据ip 地址进行更新。但是当启动时在 crontab 中运行时,我得到的只是

rpc_address: 
listen_address: 

文件中没有列出任何 IP 地址。

crontab 看起来像这样

@reboot /bin/sh /etc/cassandra/conf/asr-address-conf.sh

知道为什么脚本不能在 crontab 上运行吗?

相关内容