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

この部分は正常に機能し、VMをフェイルオーバーするとシードリストが正しく変更されます。

rpc_address と listening_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

シェルからスクリプトを実行すると、うまく動作します。 rpc_address と listening_address の両方が IP アドレスに基づいて更新されます。しかし、起動時にcrontabを実行すると、私が得るものは

rpc_address: 
listen_address: 

ファイルにリストされているIPアドレスがありません。

クローンタブはこんな感じです。

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

スクリプトがcrontabで実行されない理由をご存知ですか?

ベストアンサー1

おすすめ記事