Keepalived+lvs+httpd之負載均衡

最近在研究 負載均衡。目前研究的是keepalived+lvs模式php

一、軟件介紹html

        keepalived:顧名思義是保持存活,經常使用來搭建設備的高可用,防止業務核心設備出現單點故障。keepalived主要用做realserver的健康檢查以及負載均衡主機和backup主機之間的故障漂移。
linux

        單點故障:在公司整個業務流程中,某一點出現故障就會致使整個系統架構不可用,單點故障常發生在數據庫、核心業務系統等。對此咱們的解決辦法是對核心業務系統進行高可用負載均衡。
web

        LVS:Linux    Virtual    Server,linux虛擬服務器,是一個虛擬的服務器集羣系統。目前有三種負載均衡技術(VS/NAT、VS/TUN和VS/DR);十種調度算法(rrr|wrr|lc|wlc|lblcr|lblc|dh|sh|sed|nq)。
算法

二、實驗拓撲圖。shell

        本次實驗一共用到4臺服務器,其中兩臺服務器用來搭建keepalived+lvs,另兩臺是對外提供服務的web服務器。
數據庫

         本次實驗用到了5個ip地址。後端

                    Master:10.68.4.201                  Backup:10.68.4.58
bash

                    web1:10.68.4.198                    web2:10.68.4.248
服務器

                    virtualIP:10.68.4.199

三、拓撲圖介紹

      keepalived--master和keepalived--backup  二者之間經過vrrp協議利用組播進行通訊,master主機對外接受請求並將請求轉發至後方的realserver,backup主機只接受請求而不轉發請求。某時刻當backup主機沒有接受到master主機發送的信息時,因而發送vrrp通告信息並廣播arp信息,宣城本身是master,若是收到其餘主機發送的通告信息的優先級比本身的高,那麼本身將繼續轉爲backup,優先級別高的機器,此時就是新master主機,並接替原master主機的工做。

        每一個keepalived機器都對後方的realserver進行監控,只不過master負責將外部請求轉發至後方的realserver,backup則不做該處理。

四、keepalived安裝

            keepalived的安裝參照這篇博客http://my.oschina.net/zyc1016/blog/138574?p=2#comments

            keepalived的配置參照這篇博客http://bbs.nanjimao.com/thread-845-1-1.html

            安裝的過程當中,若是報錯

                    checking for IPVS syncd support... yes
                    checking for kernel macvlan support... no
                    checking whether SO_MARK is declared... no
                    configure: error: No SO_MARK declaration in headers

            那麼只須要在編譯時,添加--disable-fwmark參數便可。最後確保以下幾項爲yes狀態便可,加粗必定得是yes。

Use IPVS Framework : Yes IPVS sync daemon support : Yes IPVS use libnl : Yes Use VRRP Framework : Yes       

! Configuration File for keepalived

global_defs {
   notification_email {
   }
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {    #定義一個vrrp組,組名惟一  
    state MASTER        #定義改主機爲keepalived的master主機
    interface eth0      #監控eth0號端口  
    virtual_router_id 58   #虛擬路由id號爲58,id號惟一,這個id決定了多播的MAC地址
    priority 150         #設置本節點的優先級,master的優先級 要比backup的優先級別高,數值要大
    advert_int 1         #檢查間隔,默認爲1秒
    authentication {
        auth_type PASS    #認證方式,密碼認證
        auth_pass 1111    #認證的密碼,這個密碼必須和backup上的一致
    }
    virtual_ipaddress {    #設置虛擬的ip, 這個ip是之後對外提供服務的ip。
        10.68.4.199
    }
}

virtual_server 10.68.4.199 80 {    #虛擬主機設置,ip同上。
    delay_loop 2                  #服務器輪詢的時間間隔
    lb_algo rr                    #lvs的調度算法
    lb_kind DR                    #lvs的集羣模式
    nat_mask 255.255.255.0
    persistence_timeout 50        #會話超時50s
    protocol TCP                  #健康檢查是用tcp仍是udp

    real_server 10.68.4.248 80 {    #後端真實主機1
        weight 100                #每臺機器的權重,0表示不給該機器轉發請求,知道它恢復正常。
        TCP_CHECK {                #健康檢查項目,如下
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port  80
        }
    }

    real_server 10.68.4.198 80 {        #後端真實主機2
        weight 100                    #每臺機器的權重,0表示不給該機器轉發請求,知道它恢復正常。
        TCP_CHECK {                    #健康檢查項目,如下
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port  80
        }
    }
}

 backup主機的配置基本同上,只有如下地方須要修改。

state BACKUP        #定義改主機爲keepalived的backup主機,監控主master
priority 100         #設置本節點的優先級,數值要比master主機上的小

 測試keepalived的故障漂移,

    首先,在10.68.4.201和10.68.4.58上同時啓動keepalived,此時觀察master主機和backup主機              

能夠看出虛擬ip此時綁定在4.201--master上,而後中止4.201上的keepalived服務

經過查看4.58上的日誌,能夠看到4.58已經宣告本身是master了。而且虛擬ip也漂移到新的mater機器上。

以上的配置,keepalived的高可用功能已經實現。

五、realserver服務器配置

      本例中,我在4.198和4.248上,分別安裝了httpd,模擬兩臺web服務器。而後要在兩臺服務器上配置虛擬vip,這裏我寫了一個腳本。

#!/bin/bash
#description: config realserver lo  and  apply noarp

WEB_VIP=10.68.4.199  #虛擬vip,也就是虛擬ip
. /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
   echo "1" > /proc/sys/net/ipv4/conf/eth0/arp_ignore
   echo "2" > /proc/sys/net/ipv4/conf/eth0/arp_announce
   echo "1" > /proc/sys/net/ipv4/conf/default/arp_ignore
   echo "2" > /proc/sys/net/ipv4/conf/default/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 "0" > /proc/sys/net/ipv4/conf/eth0/arp_ignore
   echo "0" > /proc/sys/net/ipv4/conf/eth0/arp_announce
   echo "0" > /proc/sys/net/ipv4/conf/default/arp_ignore
   echo "0" > /proc/sys/net/ipv4/conf/default/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

將此腳本分別在4.198和4.248上執行下。此時,咱們在兩臺keepalived的主機上能夠查看到以下相同信息。

此時,咱們經過網頁訪問10.68.4.199,時,根據ipvsadm查詢到的realserver主機的順序,能夠看出此時優先訪問4.198.

而當咱們將4.198這臺機器的httpd的服務停掉,首先能夠看到兩臺keepalived主機都會將4.198這臺機器剔除,此時咱們再次查詢時ipvsadm,只能夠看到一臺web服務器,再次頁面訪問,這時就是在訪問4.248這臺機器了。

而當咱們修復好4.198機器後,keepalived又會自動將改服務器添加進來。

從上面的測試可知,lvs的負載均衡功能已經實現。

六、我碰到過的問題

      

        頁面乜有任何顯示,思來想去就是找不到問題出在哪?    後面從論壇上看到一位網友也出現一樣的問題,細問下才知致使這個問題出現是由於咱們keepalived.conf 文件   的書寫格式存在問題,後面我回去從新檢查了下,發現少寫了一個 「}」  keepalived啓動時不會檢測keepalived.conf 配置文件語法格式。 因此之後再配置書寫時,必定要格外注意啊。

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息