LVS+Keepalived實現負載均衡高可用

使用腳本實現LVS負載均衡

環境:

3臺主機

DS:192.168.100.1

RS1:192.168.100.11

RS2:192.168.100.12

VIP:192.168.100.100

安裝ipvsadm

./configure --prefix=/usr/local/ipvsadm

make && make install

DS腳本如下:

#!/bin/bash 

# description: start LVS of DirectorServer 

VIP=192.168.100.100 

RIP1=192.168.100.11

RIP2=192.168.100.12 

./etc/rc.d/init.d/functions 

 

logger LVS is $1 

case "$1" in 

start) 

           /sbin/ipvsadm --set 30 5 60 

           /sbin/ifconfig eth0:0 $VIP broadcast $VIP netmask 255.255.255.255 up 

           /sbin/route add -host $VIP dev eth0:0 

           /sbin/ipvsadm -A -t $VIP:80 -s wrr -p 3 

           /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g -w 1 

           /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g -w 1 

           touch /var/lock/subsys/ipvsadm >/dev/null 2>&1 

           echo "LVS is started!"

       ;; 

stop) 

           /sbin/ipvsadm -C 

           /sbin/ipvsadm -Z 

           ifconfig eth0:0 down 

           ifconfig eth0:1 down 

           route del $VIP 

           route del $VIP 

           rm -rf /var/lock/subsys/ipvsadm >/dev/null 2>&1 

           echo "LVS is stoped" 

           ;; 

status) 

             if [ ! -e /var/lock/subsys/ipvsadm ];then 

                echo "ipvsadm has stoped" 

           else 

                echo "ipvsadm has started" 

           fi 

           ;; 

*) 

          echo "Usage: $0 {start|stop|status}" 

           exit 1 

esac 

exit 0 

 

RS腳本如下:

#!/bin/bash 

# description: Config realserver lo and apply noarp  

VIP=192.168.100.100

. /etc/rc.d/init.d/functions 

case "$1" in 

start) 

       ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP 

       /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 >/dev/null 2>&1 

       echo "RealServer Start OK" 

       ;; 

stop) 

       ifconfig lo:0 down 

       route del $VIP >/dev/null 2>&1 

       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" 

       ;; 

*) 

       echo "Usage: $0 {start|stop}" 

       exit 1 

esac 

exit 0 

 

LVS+Keepalived實現負載均衡高可用

環境:

DS1:192.168.100.1

DS2:192.168.100.2

RS1:192.168.100.11

RS2:192.168.100.12

VIP:192.168.100.100

之前已經安裝ipvsadm這裏不再闡述

安裝keepalived

./configure --prefix=/usr/local/keepalived --with-kernel-dir=/usr/src/kernels/2.6.xxxxx

make && make install

mkdir /etc/keepalived

cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/

cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

cp /usr/local/keepalived/sbin/keepalived /sbin

配置keepalived.conf

DS1:

global_defs {

   notification_email {

        root@localhost

   }

   notification_email_from root@localhost

   smtp_server 127.0.0.1

   smtp_connect_timeout 30

   router_id LVS_DEVEL

}

 

vrrp_instance VI_1 {

    state MASTER

    interface eth0

    virtual_router_id 51

    priority 100

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        192.168.100.100

    }

}

 

virtual_server 192.168.100.100 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.100.11 80 {

        weight 1

        TCP_CHECK {

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

        }

    }

    real_server 192.168.100.12 80 {

        weight 1

        TCP_CHECK {

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

        }

DS2:

global_defs {

   notification_email {

        root@localhost

   }

   notification_email_from root@localhost

   smtp_server 127.0.0.1

   smtp_connect_timeout 30

   router_id LVS_DEVEL

}

 

vrrp_instance VI_1 {

    state BACKUP

    interface eth0

    virtual_router_id 51

    priority 90

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        192.168.100.100

    }

}

 

virtual_server 192.168.100.100 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.100.11 80 {

        weight 1

        TCP_CHECK {

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

        }

    }

    real_server 192.168.100.12 80 {

        weight 1

        TCP_CHECK {

            connect_timeout 3

            nb_get_retry 3

            delay_before_retry 3

        }

兩臺DS都啓動keepalived

/etc/init.d/keepalived start

兩臺RS也需要都運行上文的腳本

ipvsadm -ln 查看LVS狀態

ipvsadm -lnc 查看LVS鏈接狀態

可通過一個測試頁面進行測試,代碼如下(每兩秒刷新一次,不緩存數據):

通過不同的客戶端訪問,頁面會輪流出現node1和node2

<html>

<head>

        <title>test</title>

        <meta HTTP-EQUIV="Cache-Control" CONTENT="no-cache"/>

        <meta http-equiv="Refresh" content="2"/>

</head>

<body>this is node1或2</body>

</html>

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章