Database JUNKY

MySQL,MariaDBを中心としたブログです

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]