1. 程式人生 > >LVS+keepalived 實現負載均衡

LVS+keepalived 實現負載均衡

一、資源規劃

    在開始搭建之前,我們首先需要準備和規劃好搭建所需的資源。因為效能等方面的考慮,我們使用當前比較流行的DR模式。

搭建前我們需要了解,搭建環境的機器必須在同一網段內,此次環境搭建需要1VIP和四臺機器(我這裡使用四臺VM

具體清單如下:

伺服器

IP地址

作業系統

閘道器

虛擬裝置名

VIP

部署

Master Director

30.16.252.190

Red Hat Enterprise  6.7 (Santiago)

30.16.252.128

eth0:0

30.16.252.240

Lvs+keepalived

Backup Director

30.16.252.191

Red Hat Enterprise  6.7 (Santiago)

30.16.252.128

eth0:0

30.16.252.240

Lvs+keepalived

Real Server

30.16.252.188

Red Hat Enterprise  6.7 (Santiago)

30.16.252.128

lo:0

30.16.252.240

tomcat

Real Server

30.16.252.189

Red Hat Enterprise  6.7 (Santiago)

30.16.252.128

lo:0

30.16.252.240

tomcat

二、配置real server

/usr/local/sbin下新建realserver.sh,並修改許可權為可執行。

在配置的過程中,需要注意VIP的掩碼需要配置成32

下面的配置用來在real server上啟用一個VIP,並讓這個VIP忽略網路中的ARP請求。

         #realserver.sh

        =========================================================================

           #!/bin/sh

RS_VIP=30.16.252.240

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

case "$1" in

start)

       ifconfig lo:0 $RS_VIP netmask 255.255.255.255 broadcast $RS_VIP

       /sbin/route add -host $RS_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 $RS_VIP >/dev/null2>&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

        ===========================================================================

配置完後,執行:sh realserver.sh start

         需要配置開機自啟動:echo "/usr/local/sbin/realserver.sh start" >> /etc/rc.local

兩臺real server的配置是相同的,都要啟動。

搭建應用:

在兩臺real server上部署tomcat,並新建應用test,在test下新建index.html

         #index.html

        [30.16.252.188:8080]   #根據兩臺機器真實值填寫。

、安裝keepalived

1. 我們選擇keepalived的版本為1.2.8. 具體安裝步驟如下:

         cd /usr/local

         tar -zxvf keepalived-1.2.8.tar.gz

         cd keepalived-1.2.8

         #在執行下面命令前請先做檢查

         #如果沒有這個目錄:/usr/src/kernels/2.6.32-642.6.2.el6.x86_64可執行命令:yum install kernel-headers kernel-devel

         #如果沒有/usr/src/linux這個目錄,可以執行命令:ln -s /usr/src/kernels/2.6.32-642.6.2.el6.x86_64 /usr/src/linux

         #2.6.32-642.6.2.el6.x86_64為系統核心版本號,大家機器上的目錄可能都不同,執行命令時,以機器上真實的值為準。

./configure  --sysconf=/etc  --with-kernel-dir=/usr/src/linux

         make && make install

ln -s /usr/local/sbin/keepalived /sbin/keepalived

         #中間任何一步有報錯都是缺少依賴包造成,我們需要安裝:

yum install libnl* libpopt*

         yum install popt-devel popt-static

yum install libnfnetlink libnfnetlink-devel

然後編譯和安裝就會通過。

         2. 修改配置檔案

         keepalived的配置檔案位置:/etc/keepalived/keepalived.conf

         30.16.252.190 Master的配置如下:

        ============================================================================

vrrp_instance VI_1 {

    state MASTER

    interface eth0

    virtual_router_id 163

    priority 100

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        30.16.252.240

    }

}

virtual_server 30.16.252.240 8080 {

    delay_loop 2

    lb_algo rr

    lb_kind DR

    #persistence_timeout50

    protocol TCP

    real_server 30.16.252.188 8080 {

      weight 1

      TCP_CHECK {

        connect_timeout 3

        nb_get_retry 3

        delay_before_retry 3

      }

    }

    real_server 30.16.252.189 8080 {

      weight 1

      TCP_CHECK {

        connect_timeout 3

        nb_get_retry 3

        delay_before_retry 3

      }

    }

}

        =============================================================================

           30.16.252.191Backup的配置如下:

        =============================================================================

vrrp_instance VI_1 {

    state BACKUP

    interface eth0

    virtual_router_id 163

    priority 99

    advert_int 1

    authentication {

    auth_type PASS

    auth_pass 1111

    }

virtual_ipaddress {

30.16.252.240

    }

}

virtual_server 30.16.252.240 8080 {

    delay_loop 2

    lb_algo rr

    lb_kind DR

    #persistence_timeout50

    protocol TCP

    real_server 30.16.252.188 8080 {

    weight 1

    TCP_CHECK {

        connect_timeout 3

        nb_get_retry 3

        delay_before_retry 3

}

}

real_server 30.16.252.189 8080 {

    weight 1

    TCP_CHECK {

        connect_timeout 3

        nb_get_retry 3

        delay_before_retry 3

    }

    }

}

        =============================================================================

         3. 啟動keepalived

             service keepalived start

啟動日誌可檢視:/var/log/message

            ===========================================================================================================

Mar  2 10:31:44 SZC-L0051222Keepalived_healthcheckers[305578]: Netlink reflector reports IP 30.16.252.190added

Mar  2 10:31:44 SZC-L0051222Keepalived_healthcheckers[305578]: Netlink reflector reports IPfe80::455:4ff:fe00:43ae added

Mar  2 10:31:44 SZC-L0051222Keepalived_healthcheckers[305578]: Registering Kernel netlink reflector

Mar  2 10:31:44 SZC-L0051222Keepalived_healthcheckers[305578]: Registering Kernel netlink command channel

Mar  2 10:31:44 SZC-L0051222Keepalived_vrrp[305580]: Opening file '/etc/keepalived/keepalived.conf'.

Mar  2 10:31:44 SZC-L0051222Keepalived_vrrp[305580]: Configuration is using : 60678 Bytes

Mar  2 10:31:44 SZC-L0051222Keepalived_vrrp[305580]: Using LinkWatch kernel netlink reflector...

Mar  2 10:31:44 SZC-L0051222Keepalived_healthcheckers[305578]: Opening file'/etc/keepalived/keepalived.conf'.

Mar  2 10:31:44 SZC-L0051222Keepalived_healthcheckers[305578]: Configuration is using : 18337 Bytes

Mar  2 10:31:44 SZC-L0051222Keepalived_vrrp[305580]: VRRP sockpool: [ifindex(2), proto(112), unicast(0),fd(10,11)]

Mar  2 10:31:44 SZC-L0051222Keepalived_healthcheckers[305578]: Using LinkWatch kernel netlink reflector...

Mar 2 10:31:44 SZC-L0051222 Keepalived_healthcheckers[305578]: Activatinghealthchecker for service [30.16.252.188]:8080    #檢測要負載的real server的健康狀況

Mar  2 10:31:44 SZC-L0051222Keepalived_healthcheckers[305578]: Activating healthchecker for service[30.16.252.189]:8080

Mar  2 10:31:44 SZC-L0051222Keepalived_healthcheckers[305578]: Activating healthchecker for service[30.16.252.188]:8088

Mar  2 10:31:44 SZC-L0051222Keepalived_healthcheckers[305578]: Activating healthchecker for service[30.16.252.189]:8088

Mar 2 10:31:45 SZC-L0051222 Keepalived_vrrp[305580]: VRRP_Instance(VI_1)Transition to MASTER STATE      #keepalived direcotor server 之間通訊

Mar  2 10:31:46SZC-L0051222 Keepalived_vrrp[305580]: VRRP_Instance(VI_1) Entering MASTER STATE

Mar  2 10:31:46 SZC-L0051222Keepalived_vrrp[305580]: VRRP_Instance(VI_1) setting protocol VIPs.

Mar  2 10:31:46 SZC-L0051222Keepalived_vrrp[305580]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0for 30.16.252.240

Mar  2 10:31:46 SZC-L0051222Keepalived_healthcheckers[305578]: Netlink reflector reports IP 30.16.252.240added

Mar  2 10:31:51 SZC-L0051222Keepalived_vrrp[305580]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0for 30.16.252.240

 ==============================================================================================================================

四、負載驗證

因在Director server上不能訪問對外提供的VIP,所以又在同網段找了一臺機器進行驗證。

因為防火牆等原因,不能直接使用browser來進行驗證,所以就寫了程式,因為使用了rr(輪詢演算法),所以1000次訪問,兩臺server各訪問500次。

    注意:persistence_timeout配置可以進行會話保持,即同一臺機器在設定的時間內,請求會定向到同一臺real server.

驗證正常。