Linuxゲートウェイ+***クライアント高可用性の実装
21171 ワード
一、需要
業務の発展の需要によって、会社のアメリカ支社は***ダイヤルを通じて香港の機械室と接続して、ダイヤルしたクライアントは***のクライアントとして機能して、同時にそれをlinuxゲートウェイとして使って、現在1台しかなくて、その機に着いた後に、アメリカの香港は連絡することができなくて、ついにその高可用性を配置して1台の機械の機を実現して、別の機械の正常な運行を保証することができます.
二、計画メインノード:172.18.5.105予備ノード:172.18.5.106 keepalived-1.2.8を利用して両ノードの高利用可能な構成システムを実現する:centos 5.5
三、手順
(一)ファイアウォールにvrrpおよび***プロトコルを許可するルールを追加する
-A RH-Firewall-1-INPUT -p gre -j ACCEPT-A RH-Firewall-1-INPUT -p ipip -j ACCEPT-A RH-Firewall-1-INPUT -i eth0 -p vrrp -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp --dport 53 -j ACCEPT-A RH-Firewall-1-INPUT -p udp --dport 53 -j ACCEPT
(二)selinuxsetenforce 0を閉じる
(三)同期時間
1、同期時間ダブルクリック相互通信を確立する
#ntpdate+タイムサーバ
#ssh-keygen -t rsa -P ''
# ssh-copy-id -i .ssh/id_rsa.pub 172.18.5.106
スクリプトで相手ノードにコマンドを実行できるようにすることを目的としています.
(四)コンパイルインストールkeepalived-1.2.8
http://www.keepalived.org/download.html最新のものが必ずしもベストとは限らないので、1.2.8を選びます tar xf keepalived-1.2.8.tar.gz cd keepalived-1.2.8 mkdir -p/data/soft/keepalived ./configure--prefix=/data/soft/keepalived注意:インストールをコンパイルする前に、gccと追加のパッケージをインストールする必要がある場合があります. を自分で解決してください. make&&make installコンパイルエラー../include/vrrp_ipaddress.h:32:27: error: linux/if_addr.h: No such file or directoryIn file included from ../include/vrrp.h:31,from ../include/smtp.h:34,from smtp.c:27:../include/vrrp_ipaddress.h:41:error:field‘ifa’has incomplete typemake 2:*[smtp.o]Error 1 make 2:Leaving directory`/root/keepalived-1.2.7/keepalived/core'make 1:[all]Error 1 make 1:Leaving directory`/root/keepalived-1.2.7/keepalived'make:*[all]Error 2原因と解決策:kernel-headersソフトウェアバージョンが低すぎることによる yum-y install kernel-headers問題解決ファイルを正しい場所に転送 mkdir/etc/keepalived pwd/data/soft/keepalived cp etc/keepalived/keepalived.conf/etc/keepalived/ cp etc/rc.d/init.d/keepalived/etc/init.d/ cp etc/sysconfig/keepalived/etc/sysconfig/ cp sbin/keepalived/usr/sbin/ chkconfig --add keepalived service keepalived startStarting keepalived: [ OK ] chkconfig --add keepalived chkconfig keepalived onコンパイルが完了し、プライマリ・スタンバイ・ノードがコンパイル完了して起動しても問題ない後、keepalivedをプライマリ・セカンダリ構成します.その前に、まず***をインストールするクライアントをコンパイルします.
(五)コンパイルインストールpptp-1.7.1
http://pkgs.fedoraproject.org/repo/pkgs/pptp/ tar xf pptp-1.7.1.tar.gz cd pptp-1.7.1 make&&make install構成クライアント vim/etc/ppp/peers/**pty「pptp 172.18.8.254--nolaunchpppd」/***サーバのアドレスは、リモートダイヤルであれば、必ず***パブリックネットワークiplocknoauthnobsdcompnodeflatename amosと書きます.lu//***ダイヤルアップのユーザーremotename*//リモートサーバで作成された接続の名前.この2つの名前はchap-secretsのフィールドと一致するようにipparam*//上の名前と一致するようにしたほうがいいrequire-mppe-128//リモート***サーバが暗号化を要求したら、書きます.要求しないで、書く必要はありません. vim/etc/ppp/chap-secretsユーザー名remotenameパスワード*(デフォルトではip)サーバ側のユーザーがすでに存在する場合は、ダイヤルアップ接続が可能です. /usr/sbin/pppd call***logfd 1 updetach//この***は/etc/ppp/peers/***ディレクトリUsing interface ppp 0 Connect:ppp 0/dev/pts/3 CHAP authentication succeedMPPE 128-bit stateless compression enabledlocal IP address 172.18.01 remote IP address 172.18.54ダイヤル成功!プライマリスレーブノードも同様に構成すればよい
(六)高可用性構成の実現
プライマリノードプロファイル
監視スクリプト
# vim/etc/keepalived/monitor.sh
ノードプロファイルから
監視スクリプト
# vim/etc/keepalived/monitor.sh
3.5、何を実現しましたか.2つのノードがkeepalivedを同時に起動してプライマリノードを観察 ip addr1: lo: mtu 16436 qdisc noqueue link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host loinet6::1/128 scope host valid_lft forever preferred_lft forever2: eth0: mtu 1500 qdisc pfifo_fast qlen 1000link/ether 00:50:56:b3:71:ec brd ff:ff:ff:ff:ff:ffinet 172.18.5.106/24 brd 172.18.5.255 scope global eth0inet 172.18.5.10/32 scope global eth0 -------------------------》vipinet6 fe80::250:56ff:feb3:71ec/64 scope link valid_lft forever preferred_lft forever3: sit0: mtu 1480 qdisc noop link/sit 0.0.0.0 brd 0.0.0.04: virbr0: mtu 1500 qdisc noqueue link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ffinet 192.168.122.1/24 brd 192.168.122.255 scope global virbr06: ppp0: mtu 1496 qdisc pfifo_fast qlen 3 link/ppp inet 172.18.8.97 peer 172.18.8.254/32 scope global ppp 0-----」ダイヤルアップ成功 ip route show table main172.18.8.254 via 172.18.5.1 dev eth 0 src 172.18.5.106 172.18.254 dev ppp 0 proto kernel scope link src 172.18.97 172.8.5.0/24 dev eth 0 proto kernel scope link src 172.8.5.106 172.8.8.0/24 via 172.18.8.254 dev ppp 0--------------->スクリプトで実現されるパスは、ポリシー192.168.122.0/24 dev virbr 0 proto kernel scope link src 192.168.11 dev eth0 scope link default via 172.18.5.1 dev eth0
プライマリノードを停止してスタンバイノードを観察 ip addr1: lo: mtu 16436 qdisc noqueue link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host loinet6::1/128 scope host valid_lft forever preferred_lft forever2: eth0: mtu 1500 qdisc pfifo_fast qlen 1000 link/ether 00:50:56:b 3:7 d:3 a brd ff:ff:ff:ff:ff:ffinet 172.8.5.104/24 brd 172.18.5.255 scope global eth 0 inet 172.8.5.10/32 scope global eth 0-----」vipはinet 6 fe 80::250:56 ff:feb 3:7 d 3 a/64 scope link valid_lft forever preferred_lft forever3: sit0: mtu 1480 qdisc noop link/sit 0.0.0.0 brd 0.0.0.027: ppp0: mtu 1496 qdisc pfifo_fast qlen 3 link/ppp inet 172.18.8.97 peer 172.18.8.254/32 scope global ppp 0-----」ダイヤルアップ成功 ip route show table main172.18.8.254 dev ppp 0 proto kernel scope link src 172.18.97 172.18..0/24 dev eth 0 proto kernel scope link src 172.8.5.104 172.18.8.0/24 via 172.18.8.254 dev ppp 0---------------」スクリプトで実現されたルーティングポリシー169.254.0/16 dev eth 0 scope link default via 172.18.5.1 dev eth 0
(七)出会った問題
1、***ダイヤルが通じない;2、バックグラウンドsleepプロセスが多すぎて、cpu負荷が特に高い原因を分析する:keepalivedプロファイルの構成を開始し、スクリプトの応用時にvrrp_をこのように書くscript monitor{cript"/etc/keepalived/monitor.sh"interval 20}はこのように書いて、keepalivedを起動した後、ログはいつも故障を報告して、スクリプトプログラムの中断による可能性があって、後に変更します:vrrp_script monitor{script"while true;do/etc/keepalived/monitor.sh 2>/root/error.log;done&>/dev/null"interval 20}これによりcpu負荷が高くなり、現在の姿に変更されました:vrrp_script monitor{script"nohup/etc/keepalived/monitor.sh 2>/root/error.log&&>/dev/null"interval 20}システムを再起動すると、これまでバックグラウンドで実行されていた数百のsleepプロセスも消え、***ダイヤルが通じない問題も解決されます.
以上はpptpプロトコルに基づいて実現され、以下greプロトコルに基づいて実現される方式である.
一、vipがイントラネットipである場合、プロセス中に対端リモートホスト上にトンネルを構築するスクリプトを修正する必要があるため、ローカルとリモートのホストに対して相互信頼を確立する必要がある.以下はプロファイルだけで、ソフトウェアのインストールは上と同じです.
greプロトコルベースの実装
プライマリノード:
1.keepalived.confファイル
2.Monitor.shファイル
3.gre.shファイル
スペアノード
1.keepalived.confファイル
2.monitor.shファイル
3.gre.shファイル
二、vipがパブリックネットワークipである場合、greプロトコルに基づいて実現する
プライマリノードkeepalivedファイル
プライマリノードモニタshモニタリングスクリプト
メインノードは、スクリプトで実行するトンネルを貫通するスクリプトgreを監視する.sh
スペアノード
モニタスクリプトモニタsh
トンネルシナリオgre.sh
業務の発展の需要によって、会社のアメリカ支社は***ダイヤルを通じて香港の機械室と接続して、ダイヤルしたクライアントは***のクライアントとして機能して、同時にそれをlinuxゲートウェイとして使って、現在1台しかなくて、その機に着いた後に、アメリカの香港は連絡することができなくて、ついにその高可用性を配置して1台の機械の機を実現して、別の機械の正常な運行を保証することができます.
二、計画メインノード:172.18.5.105予備ノード:172.18.5.106 keepalived-1.2.8を利用して両ノードの高利用可能な構成システムを実現する:centos 5.5
三、手順
(一)ファイアウォールにvrrpおよび***プロトコルを許可するルールを追加する
-A RH-Firewall-1-INPUT -p gre -j ACCEPT-A RH-Firewall-1-INPUT -p ipip -j ACCEPT-A RH-Firewall-1-INPUT -i eth0 -p vrrp -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp --dport 53 -j ACCEPT-A RH-Firewall-1-INPUT -p udp --dport 53 -j ACCEPT
(二)selinuxsetenforce 0を閉じる
(三)同期時間
1、同期時間ダブルクリック相互通信を確立する
#ntpdate+タイムサーバ
#ssh-keygen -t rsa -P ''
# ssh-copy-id -i .ssh/id_rsa.pub 172.18.5.106
スクリプトで相手ノードにコマンドを実行できるようにすることを目的としています.
(四)コンパイルインストールkeepalived-1.2.8
http://www.keepalived.org/download.html最新のものが必ずしもベストとは限らないので、1.2.8を選びます
(五)コンパイルインストールpptp-1.7.1
http://pkgs.fedoraproject.org/repo/pkgs/pptp/
(六)高可用性構成の実現
プライマリノードプロファイル
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
}
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script monitor {
script "nohup /etc/keepalived/monitor.sh 2> /root/error.log & &> /dev/null"
interval 20
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 200
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.18.5.10
}
track_script {
monitor
}
notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"
notify_fault "/etc/keepalived/notify.sh fault"
}
監視スクリプト
# vim/etc/keepalived/monitor.sh
#!/bin/bash
function start_pppd(){
/sbin/ip addr show |grep "172.18.5.10/32" &> /dev/null
if [ $? -eq 0 ];then
ssh 172.18.5.104 "killall -0 pppd&> /dev/null ;[ $? -eq 0 ] && killall pppd &>/dev/null"
sleep 3
killall -0 pppd &> /dev/null
if [ $? -eq 1 ];then
/usr/sbin/pppd call *** logfd 1 updetach&> /dev/null
sleep 10
killall -0 pppd &> /dev/null
if [ $? -eq 1 ];then
service keepalived stop
fi
fi
fi
}
function add_route(){
killall -0 pppd &> /dev/null
if [ $? -eq 0 ];then
PPP=`ifconfig | grep ppp | awk -F' ' '{print$1}'`
ip route show table main | grep"172.18.8.0/24" &> /dev/null
if [ $? -ne 0 ];then
ip route add 172.18.8.0/24 via172.18.8.254 dev $PPP &>/dev/null
fi
fi
}
start_pppd
sleep 5
add_route
ノードプロファイルから
#vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
}
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script monitor {
script "nohup /etc/keepalived/monitor.sh 2> /root/error.log & &> /dev/null"
interval 20
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 200
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.18.5.10
}
track_script {
monitor
}
notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"
notify_fault "/etc/keepalived/notify.sh fault"
}
監視スクリプト
# vim/etc/keepalived/monitor.sh
#!/bin/bash
function start_pptp(){
/sbin/ip addr show |grep "172.18.5.10/32" &> /dev/null
if [ $? -eq 0 ];then
ssh 172.18.5.106 "killall -0 pppd&> /dev/null ;[ $? -eq 0 ] && killall pppd &>/dev/null"
sleep 3
killall -0 pppd &> /dev/null
if [ $? -ne 0 ];then
/usr/sbin/pppd call *** logfd 1 updetach&> /dev/null
sleep 10
killall -0 pppd &> /dev/null
if [ $? -ne 0 ];then
service keepalived stop
fi
fi
fi
}
function add_route(){
killall -0 pppd &> /dev/null
if [ $? -eq 0 ];then
PPP=`ifconfig | grep ppp | awk -F' ''{print $1}'`
ip route show table main | grep"172.18.8.0/24" &> /dev/null
if [ $? -ne 0 ];then
ip route add 172.18.8.0/24 via172.18.8.254 dev $PPP &> /dev/null
fi
fi
}
start_pptp
sleep 5
add_route
3.5、何を実現しましたか.2つのノードがkeepalivedを同時に起動してプライマリノードを観察
プライマリノードを停止してスタンバイノードを観察
(七)出会った問題
1、***ダイヤルが通じない;2、バックグラウンドsleepプロセスが多すぎて、cpu負荷が特に高い原因を分析する:keepalivedプロファイルの構成を開始し、スクリプトの応用時にvrrp_をこのように書くscript monitor{cript"/etc/keepalived/monitor.sh"interval 20}はこのように書いて、keepalivedを起動した後、ログはいつも故障を報告して、スクリプトプログラムの中断による可能性があって、後に変更します:vrrp_script monitor{script"while true;do/etc/keepalived/monitor.sh 2>/root/error.log;done&>/dev/null"interval 20}これによりcpu負荷が高くなり、現在の姿に変更されました:vrrp_script monitor{script"nohup/etc/keepalived/monitor.sh 2>/root/error.log&&>/dev/null"interval 20}システムを再起動すると、これまでバックグラウンドで実行されていた数百のsleepプロセスも消え、***ダイヤルが通じない問題も解決されます.
以上はpptpプロトコルに基づいて実現され、以下greプロトコルに基づいて実現される方式である.
一、vipがイントラネットipである場合、プロセス中に対端リモートホスト上にトンネルを構築するスクリプトを修正する必要があるため、ローカルとリモートのホストに対して相互信頼を確立する必要がある.以下はプロファイルだけで、ソフトウェアのインストールは上と同じです.
greプロトコルベースの実装
プライマリノード:
1.keepalived.confファイル
! Configuration File for keepalived
global_defs {
notification_email {
[email protected]
}
notification_email_from [email protected]
smtp_server hzmx.sky-mobi.com
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script monitor {
script "nohup /etc/keepalived/monitor.sh 2> /root/error.log & &> /dev/null"
interval 3
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 100
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.18.5.10
}
track_script {
monitor
}
}
2.Monitor.shファイル
#!/bin/bash
HASSH=172.18.5.104
ETH=172.18.50.10/24
SELF=172.18.5.106
REMOTE=172.18.3.222
VIP=172.18.5.10/32
/sbin/ip addr show | grep $VIP &> /dev/null
if [ $? -eq 0 ];then
ssh $HASSH " [ `ifconfig | grep -c tun253` -eq 1 ] && { /etc/keepalived/gre.sh down ;ifconfig eth0:1 down &> /dev/null; }"
sleep 10
ssh $REMOTE "grep -c $HASSH /etc/keepalived/gre.sh && { /etc/keepalived/gre.sh down;sed -i "s/$HASSH/$SELF/" /etc/keepalived/gre.sh;/etc/keepalived/gre.sh &> /dev/nul
l; }"
if [ `ifconfig | grep -c tun253` -eq 0 ];then
/etc/keepalived/gre.sh &> /dev/null
/sbin/ifconfig eth0:1 $ETH up
fi
if [ `ifconfig | grep -c eth0:1` -eq 0 ];then
/sbin/ifconfig eth0:1 $ETH up
fi
fi
3.gre.shファイル
REMOTE_ADDR='172.18.3.222'
LOCAL_ADDR='172.18.5.106'
LOCAL_DEV='eth0'
TUN_NAME='tun253'
MODE='gre' # ipip gre
TUN_IPADDR='192.168.80.254'
TUN_GATEWAY='192.168.80.253'
ACTION="up"
if (($# != 0)); then
if [ "$1" != "up" -a "$1" != "down" ]; then
echo "error"
exit 1
else
ACTION="$1"
fi
fi
if ((`lsmod | grep -c "ip_gre"` == 0));then
modprobe ip_gre
fi
if [ "${ACTION}" = "up" ]; then
if ((`ifconfig | grep -c ${TUN_NAME}` > 0)); then
exit 1
fi
ip tunnel add ${TUN_NAME} mode ${MODE} remote ${REMOTE_ADDR} local ${LOCAL_ADDR} dev ${LOCAL_DEV} ttl 64
ip link set ${TUN_NAME} up
ip addr add ${TUN_IPADDR} dev ${TUN_NAME}
ip route add ${TUN_GATEWAY} dev ${TUN_NAME}
if ((`ip route show | grep -c 172.18.30.0/24` > 0));then
exit 1
fi
ip route add 172.18.30.0/24 via $TUN_IPADDR
fi
if [ "${ACTION}" = "down" ]; then
if ((`ifconfig | grep -c ${TUN_NAME}` > 0)); then
echo "down ${TUN_NAME}"
ip link set ${TUN_NAME} down
ip tunnel del ${TUN_NAME}
fi
fi
スペアノード
1.keepalived.confファイル
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
}
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script monitor {
script "nohup /etc/keepalived/monitor.sh 2> /root/error.log & &> /dev/null"
interval 3
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 100
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.18.5.10
}
track_script {
monitor
}
}
2.monitor.shファイル
#!/bin/bash
HASSH=172.18.5.106
ETH=172.18.50.10/24
SELF=172.18.5.104
REMOTE=172.18.3.222
VIP=172.18.5.10/32
/sbin/ip addr show | grep $VIP &> /dev/null
if [ $? -eq 0 ];then
ssh $HASSH " [ `ifconfig | grep -c tun253` -eq 1 ] && { /etc/keepalived/gre.sh down ;ifconfig eth0:1 down &> /dev/null; }"
sleep 10
ssh $REMOTE "grep -c "$HASSH" /etc/keepalived/gre.sh && { /etc/keepalived/gre.sh down;sed -i "s/$HASSH/$SELF/" /etc/keepalived/gre.sh;/etc/keepalived/gre.sh &> /dev/n
ull; }"
if [ `ifconfig | grep -c tun253` -eq 0 ];then
/etc/keepalived/gre.sh &> /dev/null
/sbin/ifconfig eth0:1 $ETH up
fi
if [ `ifconfig | grep -c eth0:1` -eq 0 ];then
/sbin/ifconfig eth0:1 $ETH up
fi
fi
3.gre.shファイル
REMOTE_ADDR='172.18.3.222'
LOCAL_ADDR='172.18.5.104'
LOCAL_DEV='eth0'
TUN_NAME='tun253'
MODE='gre' # ipip gre
TUN_IPADDR='192.168.80.254'
TUN_GATEWAY='192.168.80.253'
ACTION="up"
if (($# != 0)); then
if [ "$1" != "up" -a "$1" != "down" ]; then
echo "error"
exit 1
else
ACTION="$1"
fi
fi
if ((`lsmod | grep -c "ip_gre"` == 0));then
modprobe ip_gre
fi
if [ "${ACTION}" = "up" ]; then
if ((`ifconfig | grep -c ${TUN_NAME}` > 0)); then
exit 1
fi
ip tunnel add ${TUN_NAME} mode ${MODE} remote ${REMOTE_ADDR} local ${LOCAL_ADDR} dev ${LOCAL_DEV} ttl 64
ip link set ${TUN_NAME} up
ip addr add ${TUN_IPADDR} dev ${TUN_NAME}
ip route add ${TUN_GATEWAY} dev ${TUN_NAME}
if ((`ip route show | grep -c 172.18.30.0/24` > 0));then
exit 1
fi
ip route add 172.18.30.0/24 via $TUN_IPADDR
fi
if [ "${ACTION}" = "down" ]; then
if ((`ifconfig | grep -c ${TUN_NAME}` > 0)); then
echo "down ${TUN_NAME}"
ip link set ${TUN_NAME} down
ip tunnel del ${TUN_NAME}
fi
fi
二、vipがパブリックネットワークipである場合、greプロトコルに基づいて実現する
プライマリノードkeepalivedファイル
! Configuration File for keepalived
global_defs {
notification_email {
[email protected]
}
notification_email_from [email protected]
smtp_server hzmx.sky-mobi.com
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script monitor {
script "nohup /etc/keepalived/monitor.sh 2> /root/error.log & &> /dev/null"
interval 3
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 100
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.18.1.222
}
track_script {
monitor
}
}
プライマリノードモニタshモニタリングスクリプト
#!/bin/bash
HASSH=172.18.5.104
ETH=172.18.50.10/24
REMOTE=172.18.3.222
VIP=172.18.1.222/32
/sbin/ip addr show | grep $VIP &> /dev/null
if [ $? -eq 0 ];then
ssh $HASSH " ifconfig | grep -c tun253 && { /etc/keepalived/gre.sh down ;ifconfig eth0:1 down &> /dev/null; }"
sleep 10
if [ `ifconfig | grep -c tun253` -eq 0 ];then
/etc/keepalived/gre.sh &> /dev/null
/sbin/ifconfig eth0:1 $ETH up
fi
if [ `ifconfig | grep -c eth0:1` -eq 0 ];then
/sbin/ifconfig eth0:1 $ETH up
fi
fi
メインノードは、スクリプトで実行するトンネルを貫通するスクリプトgreを監視する.sh
REMOTE_ADDR='172.18.3.222'
LOCAL_ADDR='172.18.1.222'
LOCAL_DEV='eth0'
TUN_NAME='tun253'
MODE='gre' # ipip gre
TUN_IPADDR='192.168.80.254'
TUN_GATEWAY='192.168.80.253'
ACTION="up"
if (($# != 0)); then
if [ "$1" != "up" -a "$1" != "down" ]; then
echo "error"
exit 1
else
ACTION="$1"
fi
fi
if ((`lsmod | grep -c "ip_gre"` == 0));then
modprobe ip_gre
fi
if [ "${ACTION}" = "up" ]; then
if ((`ifconfig | grep -c ${TUN_NAME}` > 0)); then
exit 1
fi
ip tunnel add ${TUN_NAME} mode ${MODE} remote ${REMOTE_ADDR} local ${LOCAL_ADDR} dev ${LOCAL_DEV} ttl 64
ip link set ${TUN_NAME} up
ip addr add ${TUN_IPADDR} dev ${TUN_NAME}
ip route add ${TUN_GATEWAY} dev ${TUN_NAME}
if ((`ip route show | grep -c 172.18.30.0/24` > 0));then
exit 1
fi
ip route add 172.18.30.0/24 via $TUN_IPADDR
fi
if [ "${ACTION}" = "down" ]; then
if ((`ifconfig | grep -c ${TUN_NAME}` > 0)); then
echo "down ${TUN_NAME}"
ip link set ${TUN_NAME} down
ip tunnel del ${TUN_NAME}
fi
fi
スペアノード
keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
}
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_script monitor {
script "nohup /etc/keepalived/monitor.sh 2> /root/error.log & &> /dev/null"
interval 3
}
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 100
priority 50
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
172.18.1.222
}
track_script {
monitor
}
}
モニタスクリプトモニタsh
#!/bin/bash
HASSH=172.18.5.106
ETH=172.18.50.10/24
REMOTE=172.18.3.222
VIP=172.18.1.222/32
/sbin/ip addr show | grep $VIP &> /dev/null
if [ $? -eq 0 ];then
ssh $HASSH " ifconfig | grep -c tun253 && { /etc/keepalived/gre.sh down ;ifconfig eth0:1 down &> /dev/null; }"
sleep 10
if [ `ifconfig | grep -c tun253` -eq 0 ];then
/etc/keepalived/gre.sh &> /dev/null
/sbin/ifconfig eth0:1 $ETH up
fi
if [ `ifconfig | grep -c eth0:1` -eq 0 ];then
/sbin/ifconfig eth0:1 $ETH up
fi
fi
トンネルシナリオgre.sh
REMOTE_ADDR='172.18.3.222'
LOCAL_ADDR='172.18.1.222'
LOCAL_DEV='eth0'
TUN_NAME='tun253'
MODE='gre' # ipip gre
TUN_IPADDR='192.168.80.254'
TUN_GATEWAY='192.168.80.253'
ACTION="up"
if (($# != 0)); then
if [ "$1" != "up" -a "$1" != "down" ]; then
echo "error"
exit 1
else
ACTION="$1"
fi
fi
if ((`lsmod | grep -c "ip_gre"` == 0));then
modprobe ip_gre
fi
if [ "${ACTION}" = "up" ]; then
if ((`ifconfig | grep -c ${TUN_NAME}` > 0)); then
exit 1
fi
ip tunnel add ${TUN_NAME} mode ${MODE} remote ${REMOTE_ADDR} local ${LOCAL_ADDR} dev ${LOCAL_DEV} ttl 64
ip link set ${TUN_NAME} up
ip addr add ${TUN_IPADDR} dev ${TUN_NAME}
ip route add ${TUN_GATEWAY} dev ${TUN_NAME}
if ((`ip route show | grep -c 172.18.30.0/24` > 0));then
exit 1
fi
ip route add 172.18.30.0/24 via $TUN_IPADDR
fi
if [ "${ACTION}" = "down" ]; then
if ((`ifconfig | grep -c ${TUN_NAME}` > 0)); then
echo "down ${TUN_NAME}"
ip link set ${TUN_NAME} down
ip tunnel del ${TUN_NAME}
fi
fi