LVS keepalive VRRP DSR構成 でkeepalive.confを自動生成するスクリプト
LVS keepalive構成で、keepalive.confが単一ファイルであるため、メンテナンスが非常にめんどうです。そこで、コンフィグファイルを複数に分けてmakeでコンフィグファイルをmakeするといったことはklabさんとかでもされているようです。しかし、klabさんでもこの部分は公開されておらず、また、なかなか公開しているところもないようですので、オリジナルのものを晒してみます。
ルータのarpテーブルのキャッシュを強制クリアするスクリプト
- /etc/keepalived/bin/arping.sh
#!/bin/bash echo 1 > /proc/sys/net/ipv4/ip_nonlocal_bind /sbin/arping -I eth0 -c 3 -U -s LVS 仮想IPアドレス ルーターIPアドレス echo 0 > /proc/sys/net/ipv4/ip_nonlocal_bind
keepalived.confを生成するスクリプト
- /etc/keepalived/bin/makeconf.sh
#!/bin/bash cd /etc/keepalived/vsg/ if [ -f vrrp.conf ];then cat vrrp.conf fi echo for vsg in *; do if [ -d $vsg ]; then echo "virtual_server_group $vsg {" for vs in $vsg/*.*.*.*;do echo -n " `basename $vs` ";cat $vs;done echo "}" echo echo "virtual_server group $vsg {" if [ -f $vsg/vs.conf ];then cat $vsg/vs.conf fi if [ -d $vsg/real ];then for f in $vsg/real/*.*.*.*;do echo -n " real_server `basename $f` ";cat $f;done fi echo "}" echo fi; done
keepalived.confを生成するMakefile
keepalivedの制御・configのコピーをもできる。
- /etc/keepalived/Makefile
restart: @echo "再起動" @service keepalived restart sync: @echo "keepalived.confを同期" @cat /etc/keepalived/keepalived.conf |sed 's/priority 101/priority 100/g' |ssh root@lv2 'cat > /etc/keepalived/keepalived.conf' rrestart: @echo "リモートサーバー再起動" @ssh lv2 'service keepalived restart' makeconf: @echo "コンフィグのチェックアウト" @co -l keepalived.conf @./bin/makeconf.sh > keepalived.conf @echo "コンフィグ作成中" @echo "コンフィグのチェックイン" @ci -u keepalived.conf
設定ファイル
/etc/keepalived/vrrp/vsg/以下にファイルを置いて書く
直下のvrrp.confはvrrpの設定
- vrrp.conf
vrrp_instance VI { state BACKUP interface eth0 lvs_sync_daemon_interface eth0 garp_master_delay 5 virtual_router_id 1 priority 101 nopreempt advert_int 1 authentication { auth_type PASS auth_pass パスワード } virtual_ipaddress { LVS 仮想IPアドレス/24 dev eth0 } notify_master /etc/keepalived/bin/arping.sh }
- /etc/keepalived/vrrp/vsg/のディレクトリにはVSG*1『大文字』でプロトコル名*2のディレクトリを作成、それぞれのディレクトリにそれぞれの設定ファイルを設置する。ようするにkeepalived.confの内容をプロトコル別に設定したいということやね。
la -al /etc/keepalived/vrrp/vsg/ DNS HTTP SMTP SSH vrrp.conf
それぞれのプロトコルの設定をvs.confで設定。以下はHTTPの場合をサンプルで
- /etc/keepalived/vrrp/vsg/HTTP/vs.conf
delay_loop 3 lvs_sched rr lvs_method DR protocol TCP virtualhost ヴァーチャルホスト名 sorry_server <ソーリーサーバーIP> 80
同ディレクトリに対象IPアドレスのファイルを作り、対象Portを記述
- /etc/keepalived/vrrp/vsg/HTTP/10.0.0.1-20
80 || >|sh| cat 80 > 10.0.0.1-20
などとして作る。
次はディレクトリrealをつくりそこでrealサーバーの設定を置く
- /etc/keepalived/vrrp/vsg/HTTP/real/
はrealサーバーの設定が冗長になりがちなので、テンプレートファイルを以下のように作り
- /etc/keepalived/vrrp/vsg/HTTP/real/template
80 { weight 1 inhibit_on_failure HTTP_GET { url { path / status_code 200 } connect_timeout 3 } }
ls -al /etc/keepalived/vrrp/vsg/HTTP/real/template 10.0.0.50 -> template template
ln -s template 10.0.0.51
のようにシンボリックリンクを作成して使う。