【Linux】通过LVS实现网站的负载均衡


[root@wallet03 ~]# vim /etc/sysctl.conf 
 net.ipv4.ip_forward = 1
[root@wallet03 ~]# sysctl -p 
[root@wallet03 ~]# cd /usr/local/src
[root@wallet03 src]# rpm -ivh epel-release-6-8.noarch.rpm
[root@wallet03 src]# yum install -y libnl libnl-devel
[root@wallet03 src]# tar zxvf keepalived-1.2.19.tar.gz
[root@wallet03 src]# cd keepalived-1.2.19
[root@wallet03 keepalived-1.2.19]# ./configure --sysconf=/etc --with-kernel-dir=/usr/src/kernels/2.6.32-431.el6.x86_64
[root@wallet03 keepalived-1.2.19]#  make && make install 
[root@wallet03 keepalived-1.2.19]# ln -s /usr/local/sbin/keepalived /sbin/
[root@wallet03 ~]# chkconfig --add keepalived
[root@wallet03 ~]# chkconfig --level 35 keepalived on
[root@wallet03 ~]# chkconfig --list |grep keepalived
[root@wallet03 ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id wallet03
vrrp_instance v01 {
    state MASTER
    interface eth1
    virtual_router_id 203
    priority 100
    advert_int 1
    nopreempt
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.200 dev eth0
    }
virtual_server 192.168.1.200 80 {
    delay_loop 3
    lb_algo rr
    lb_kind DR
    persistence_timeout 50
    protocol TCP
    real_server 192.168.1.201 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 1
            nb_get_retry 1
            delay_before_retry 1
        }
    }
    real_server 192.168.1.202 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 1
            nb_get_retry 1
            delay_before_retry 1
        }
    }
}
[root@wallet03 ~]# service keepalived start
[root@wallet01 ~]# vim /etc/init.d/lvsrs
#!/bin/sh
vip=192.168.1.200
/etc/rc.d/init.d/functions
case "$1" in
start)
echo "start lvs of rs"
/sbin/ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
/sbin/ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 -arp
/sbin/route add -host $vip dev lo:0
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
sysctl -p
;;
stop)
/sbin/ifconfig lo:0 down
echo "close lvs of rs"
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
sysctl -p
;;
*)
echo "Usage:$0{start|stop}"
exit 1
esac

[root@wallet01 ~]# chmod 755 /etc/rc.d/init.d/lvsrs
[root@wallet01 ~]# chmod 755 /etc/rc.d/init.d/functions
[root@wallet01 ~]# /etc/rc.d/init.d/lvsrs start


[root@wallet02 ~]# vim /etc/init.d/lvsrs
#!/bin/sh
vip=192.168.1.200
/etc/rc.d/init.d/functions
case "$1" in
start)
echo "start lvs of rs"
/sbin/ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
/sbin/ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 -arp
/sbin/route add -host $vip dev lo:0
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
sysctl -p
;;
stop)
/sbin/ifconfig lo:0 down
echo "close lvs of rs"
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
sysctl -p
;;
*)
echo "Usage:$0{start|stop}"
exit 1
esac

[root@wallet02 ~]# chmod 755 /etc/rc.d/init.d/lvsrs
[root@wallet02 ~]# chmod 755 /etc/rc.d/init.d/functions
[root@wallet02 ~]# /etc/rc.d/init.d/lvsrs start
[root@wallet03 ~]# yum install -y ipvsadm
[root@wallet03 ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.1.200:80 rr persistent 50
  -> 192.168.1.201:80               Route   1      6          0         
  -> 192.168.1.202:80               Route   1      0          0