lvs:内部ロードバランサー クライアント自動設定shell
題名長いすね・・たとえば、MySQLのSLAVEを利用した内部ロードバランサーを構築した場合など、振り分け先のリアルサーバにちょっとした細工をする必要があるのですが、慣れればいいのですが私はこの手のものは、なかなか慣れないのですべてスクリプト化しちゃいます。ようは、実行してはい終わりって感じにしたい。Keepalived LVSにつきましては、大昔に、「負荷分散について考えてみる②: keepalivedの設定」でこの話に触れている部分がありますので参考にしてみてくださいね。でも今回のスクリプトは前回の設定内容とは大きく違います。今回の設定スクリプトはnicの設定をいじる方法でやっております。実際こちらのほうが楽です。
以下にスクリプトを掲載します。前述の通り、この設定は、keeplivedをインストールしたサーバの話ではなく、振り分け先のリアルサーバ用のスクリプトです。今回は、VIPを192.168.101.70とした場合のスクリプト例なので、みなさまの環境に合わせ適宜修正いただけたらと思います。 [shell]
!/bin/bash
echo "#" echo "# mysql lvsの設定を行う" echo "#"
共通変数
日付ファイル
_wdate=date +"%Y%m%d%H%M%S"
各種コンフィグファイルのバックアップ用のディレクトリを指定
_backupdir=/backups/${HOSTNAME}
ワーク用のディレクトリを指定(このディレクトリ配下に作成されたファイルは削除されます
_workdir=/tmp
ネットワーク関連のディレクトリファイル
_networkfile="/etc/sysconfig/network-scripts"
loopback addr file
_roopbackfile="ifcfg-lo:0"
vip setting
********************************************
device="lo:0" ipaddr="192.168.101.70" netmask="255.255.255.255" network="192.168.101.0" broadcast="192.168.101.255" onboot="yes"
********************************************
初期処理
if [ ! -d $backupdir ]; then echo "create directory $backupdir" mkdir -p $_backupdir fi
if [ ! -d $workdir ]; then echo "create directory $workdir" mkdir -p $_workdir fi
lvs の設定を行う
cat << EOF > ${networkfile}/${roopbackfile} DEVICE=${device} IPADDR=${ipaddr} NETMASK=${netmask} NETWORK=${network} BROADCAST=${_broadcast} ONBOOT=${onboot}
EOF
ループバックインターフェースの起動
ifup ${_device}
cnt=cat /etc/sysctl.conf | grep -i net.ipv4.conf.all.arp_ignore | wc -l
if [ "$cnt" = "0" ];
then
echo "net.ipv4.conf.all.arp_ignore = 1" >> /etc/sysctl.conf
else
echo "net.ipv4.conf.all.arp_ignore = 1"
echo "--> 既に設定済みのため処理をスキップします"
fi
cnt=cat /etc/sysctl.conf | grep -i net.ipv4.conf.all.arp_announce | wc -l
if [ "$cnt" = "0" ];
then
echo "net.ipv4.conf.all.arp_announce = 2" >> /etc/sysctl.conf
else
echo "net.ipv4.conf.all.arp_announce = 2"
echo "--> 既に設定済みのため処理をスキップします"
fi
設定のバックアップ
cp /etc/sysctl.conf ${backupdir}/sysctl.conf.${wdate}
設定の反映
echo "> sysctl.conf " sysctl -p echo "> ifconfig ***"
network 確認
/sbin/ifconfig
network 確認
echo "> ip addr *************************************" ip addr
exit 0
[/shell]