最近刚辞掉工作,兼职做给一些小客户做一些系统维护的工作,给一个客户搭建lvs+keepalived软负载,以前都是手动做的,因为确实也很快,但是后来闲来无聊,发现其实脚本的话更快,而且也避免了人工出错的概率。keepalived似乎就是为lvs而生的,他的两大功能;healthcheck和failover分别解决了对集群的健康监测已经对备用directServer的自动切换共嫩,确实很棒!话不多说了,直接上脚本吧!keepalived的主备端的配置文件keepalived.conf,你们根据自己生产环境的实际情况自己添加吧

auto_lvsserver.sh

___________________________________________________

#!/bin/bash
# description: auto install lvs and keepalived

yum -y install popt-static kernel-develmakegcc  openssl-devel lftp  libnl*   popt*

# website director vip.
VIP=192.168.1.181  
RIP1=192.168.1.101
RIP2=192.168.1.102
#RIP3=192.168.1.103
#RIP4=192.168.1.104

verName="$(uname -r)"
ln -s /usr/src/kernels/${verName} /usr/src/linux
path=/home/tools
mkdir -p /home/tools
cd $path
wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24.tar.gz
tar zxvf ipvsadm-1.24.tar.gz
cd ipvsadm-1.24 && make && make install
ipvsadm

ipvsadm -A -t $VIP:80 -s rr -p 20
ipvsadm -a -t $VIP:80 -r $RIP1:80 -g
ipvsadm -a -t $VIP:80 -r $RIP2:80 -g

ipvsadm-save > /etc/sysconfig/ipvsadm
/etc/init.d/ipvsadm restart
echo "lvs server is install successful"

echo "#install keepalived tools---------------------------------------->"

#download keepalived
cd $path
wget http://www.keepalived.org/software/keepalived-1.2.7.tar.gz
tar zxvf keepalived-1.2.7.tar.gz 
cd keepalived-1.2.7
./configure
[ $? -ne 0 ] && echo "ERROR,Keepalived Configure." && exit 1
make && make install
[ $? -ne 0 ] && echo "ERROR,Keepalived Installing." && exit 1
cd

echo "#check follow file and folder--------------------->"
ls -l /usr/local/sbin/keepalived
ls -l /usr/local/etc/rc.d/init.d/keepalived
ls -l /usr/local/etc/sysconfig/keepalived
ls -l /usr/local/etc/keepalived

echo "#copy keepalived command and  keepalived configuration--------------->"
mkdir -p /etc/keepalived
cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
cp /usr/local/etc/keepalived/keepalived.conf /etc/keepalived/
cp /usr/local/sbin/keepalived /usr/sbin/


echo "set system ipv4 forward------------------------------------>"
sed -i 's#net.ipv4.ip_forward = 0#net.ipv4.ip_forward = 1#g' /etc/sysctl.conf
sysctl -p

echo "start keepalived -------------------------------->"
service keepalived start

#check 
ps -ef |grep keepalived
ipvsadm -L -n
service keepalived stop

#END

------------------------------------------------------------------------------

后端RealServer的本地回环地址需要绑定VIP地址,同时又要抑制arp,放到/etc/init.d/lvs下

chmod 755 /etc/init.d/lvs

#!/bin/bash
# Written by jerry
# description: Config realserver lo and apply noarp
VIP=192.168.1.181

. /etc/init.d/functions

case "$1" in
start)
       ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP up
       echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
       echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
       echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
       echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
       echo "RealServer Start OK"
       ;;
stop)
       ifconfig lo:0 down
       echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
       echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
       echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
       echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
       echo "RealServer Stoped"
       ;;
restart)
        $0 stop
        $0 start
        ;;
        *)
        echo "Usage: $0 {start|stop}"
        esac
        exit 1

-------------------------------------------------------------------------------

keepalived.conf配置文件,路径在/etc/keepailved/keepalived.conf

---------------------------------------------------------------------------------

! Configuration File for keepalived

global_defs {
   notification_email {
64782575@qq.com
   }
   notification_email_from keepalived@localhost
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS01
}

vrrp_instance VI_1 {
    state MASTER                #备份服务器上MASTER为BACKUP
    interface eth0
    lvs_sync_daemon_inteface eth0
    virtual_router_id 51
    priority 100                #备份服务上优先级要低于100,如改为90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
      192.168.1.181
    }
}
#
virtual_server 192.168.1.181 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    nat_mask 255.255.255.0
    #persistence_timeout 50
    protocol TCP

real_server 192.168.1.101 80 {
        weight 1              
        TCP_CHECK {
        connect_timeout 8       
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
    }

    real_server 192.168.1.102 80 {
        weight 1              
        TCP_CHECK {
        connect_timeout 8       
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
        }
    }
}

     特别提醒

刷新没切换页面,可以查这两个原因:
1)ipvsadm是否使用persistent,使用ipvsadm -ln就可以查看到。
2)绝大部分是因为浏览器keep-alive造成的,也就是长连接。你可以使用firefox来测试,在地址栏输入about:config,进去之后修改network.http.keep-alive=false,取消长连接。这样你每次刷新都会看到不同的页面。