LVS+keepalived實現DR模式負載均衡

系統環境:centos 6.4

注:本次實踐所有是在本機(windows 7系統)中安裝的vmware下啓動的三個虛擬機(centos 6.4)中進行的;

三個虛擬機的IP:
        192.168.118.136  (做爲主機,vip也設置在該機)
        192.168.118.135  (realserver服務器)
        192.168.118.134   (realserver服務器)

注:由於對網絡這塊東西不太瞭解,網上不少文章都說道vip,這個讓我鬱悶半天,不知道神馬東東,而後百度了半天,才明白,vip它既不是指的硬件或者軟件,其實它就是虛擬的網絡地址,也就是對外使用的ip地址,舉個例子來講,當給192.168.118.136這臺機器配置一個vip(如何配置,後面會講,假如設置爲:192.168.118.137),那外界訪問該臺機器的時候直接就能夠訪問這個虛擬IP地址192.168.118.137,這樣的好處是能夠實現主從切換(本身理解,有待肯定),由於當從機也會綁定到這個vip,這樣主機掛了,還能夠啓用備機,而這對於用戶是不可見的,由於他們訪問的地址仍是vip這個地址,但真正提供服務的機器其實已經切換了。由於電腦內存不夠,不能同時啓動四臺虛擬機,因此先實踐是否能夠實現分發功能,而後下次在去實踐主從切換。


第一步 安裝軟件
     192.168.118.136  安裝  lvs+keepalived
     192.168.118.135  安裝  apache的httpd
     192.168.118.134  安裝  apache的httpd
     注:兩臺服務器裝的是httpd,這個能夠換成resin或者tomcat等作爲服務器,我使用的是httpd;

lvs + keepalived安裝方法見以下網址:
注:安裝 完成以後不要繼續按  三、配置Keepalived 操做,由於我配置以後發現有問題,不能成功,多是還有其餘的問題我沒有注意,因此你也能夠先試試,不行在按個人來配置;(有可能個人也不能成功)

keepalived的配置:
若是你是按給出的網址安裝的,那麼使用  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 LVS_MASTER
}

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.200.18/24 dev eth2 label eth2:1
        192.168.118.137 dev eth0 label eth0:vip     #這裏就是配置vip,當你使用ifconfig命令查看的時候,就會看到兩個ip地址
  }
}

virtual_server 192.168.118.137 80 {
    delay_loop 6
    lb_algo rr                             #輪詢調度算法
    lb_kind DR
    nat_mask 255.255.255.0
#    persistence_timeout 50     #持久化超時時間
    pr otocol TCP

    real_server 192.168.118.135 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
   
   real_server 192.168.118.134 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
}

兩臺realserver分別安裝和配置httpd,命令以下:
yum -y install httpd
cd /var/www/html/
vim  index.html  #這個頁面就是待會就要訪問的內容,建議在兩臺機器上輸入不一樣的內容,這樣等下成功後就能夠很明顯的   看到效果

安裝完httpd後,在兩臺服務器上執行以下腳本:
  • #!/bin/bash
    # Written by NetSeek
    # description: Config realserver lo and apply noarp
    WEB_VIP=192.168.118.137       #此處改成你設定的vip地址

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

    case "$1" in
    start)
    ifconfig lo:0 $WEB_VIP netmask 255.255.255.255 broadcast $WEB_VIP
    /sbin/route add -host $WEB_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 $WEB_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"
    ;;
    status)
    # Status of LVS-DR real server.
    islothere=`/sbin/ifconfig lo:0 | grep $WEB_VIP`
    isrothere=`netstat -rn | grep "lo:0" | grep $web_VIP`
    if [ ! "$islothere" -o ! "isrothere" ];then
    # Either the route or the lo:0 device
    # not found.
    echo "LVS-DR real server Stopped."
    else
    echo "LVS-DR Running."
    fi
    ;;
    *)
    # Invalid entry.
    echo "$0: Usage: $0 {start|status|stop}"
    exit 1
    ;;
    esac
    exit 0
注:這個腳本就是將vip和服務器綁定;

第二步:啓動
1.而後使用以下命令啓動兩臺服務器的httpd服務:
/etc/init.d/httpd start
注:此時使用以下命令就能夠看到剛纔的index.html的內容了  curl   http://192.168.118.134:80  (輸入本身服務器ip)

2.在主機上啓動keepalived
service keepalived start

第三步:查看結果
1,在主機上使用以下命令查看
  ipvsadm
 
可看到134這臺服務器已經識別到了,135的我已經關了,因此沒有檢測到有效;

注:若是按以上步驟操做了,沒有檢測到服務器,先看是否能夠互相ping通,而後在telnet訪問端口是否正常,若是能ping通但telnet不通,就有多是防火牆的問題,使用這個命令關閉防火牆:service iptables stop  (重啓後防火牆會再次開啓);

2,而後能夠在任何一臺虛擬機中輸入以下命令:
 curl  http://192.168.118.137:80  (vip的地址)

多訪問幾回,就能夠看到訪問內容是在135與134兩臺機器中進行切換的;

至此,實踐就結束了,但願你也能夠成功!
相關文章
相關標籤/搜索