主從熱備+負載均衡(LVS + keepalived)

前言html

  淘寶架構師李智慧大牛的書籍《大型網站技術架構》以及旭龍兄的博客 ---》【大型網站技術實踐】初級篇:藉助LVS+Keepalived實現負載均衡linux

  從上參考而得來本文,本文旨在記錄本身的學習過程,同時給你們參考,不對的地方歡迎你們拍磚,拍磚的同時也但願甚至懇請你們能寫出緣由,讓你們都有所明白和收穫!nginx

  相關的概念我這裏就很少講了,能夠從如上的書籍和旭龍兄的博客中去了解,那麼下面直接開始咱們的實踐!web

相關文章:算法

LVS + keepalived + nginx + tomcat 實現主從熱備 + 負載均衡

負載均衡+session共享(memcached-session-manager實現)

 

環境準備shell

  本機 + virtualBox + 4臺centOs虛擬機,以下圖vim

  virtualBox安裝以及CentOS安裝這裏就再也不演示,你們自行搭建;本機在本次試驗中扮演的角色就是客戶端,起到一個發送請求的做用,兩臺CentOS作負載均衡服務器(一臺爲主機,一臺爲備機),另外兩臺做爲真實的Web服務器(安裝有tomcat)。centos

  本次實驗基於DR負載均衡模式(直接路由,旭龍兄的博客有講解),設置一個VIP(Virtual IP)爲192.168.1.200,用戶只須要訪問這個IP地址便可得到網頁服務。其中,負載均衡主機爲192.168.1.114(master),備機爲 192.168.1.112(brucelee)。Web服務器A爲192.168.1.111(youzhibing),Web服務器B爲192.168.1.115(youzhibing03),四臺機器命名除了master外都不太規範,但不影響實驗。四臺CentOS的防火牆都須要關閉。利用Xshell連接CentOS,以下圖瀏覽器

配置兩臺web服務器tomcat

  和本地部署web項目同樣,將myWeb部署到tomcat中,開啓tomcat,宿主機訪問(virtualBox安裝linux,並搭建tomcat請點這),以下圖

  將這兩臺web服務器都配置成lvs的real server,編輯realserver腳本文件,進入指定文件夾:cd /etc/init.d/,編輯腳本文件:vim realserver,以下圖

  /etc/init.d/realserver 內容以下

複製代碼
#vi /usr/local/sbin/realserver.sh
#!/bin/bash
# description: Config realserver lo and apply noarp
#Written by :NetSeek http://www.linuxtone.org

SNS_VIP=192.168.1.200
 
. /etc/rc.d/init.d/functions
 
case "$1" in
start)
       ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP
       /sbin/route add -host $SNS_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 $SNS_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
複製代碼

  保存腳本文件後更改該文件權限:chmod 755 realserver,開啓realserver服務:service realserver start;

  注意:配置real server是web服務器都須要配置的,有多少臺就配置多少臺!

配置主負載服務器

  1.安裝Keepalived相關包

yum install -y keepalived

  在CentOS下,經過yum install命令能夠很方便地安裝軟件包,可是前提是你的虛擬機要聯網,若沒有聯網則先從有網的地方下載壓縮包,而後拷貝或者上傳到linux系統,再進行安裝;

  2.編輯keepalived.conf配置文件

    ①進入keepalived.conf所在目錄:cd /etc/keepalived

    ②首先清除掉keepalived原有配置:> keepalived.conf

    ③從新編輯keepalived配置文件:vi keepalived.conf

    內容以下:

複製代碼
global_defs {
    notification_email {
        997914490@qq.com
    }
    notification_email_from sns-lvs@gmail.com
    smtp_server 192.168.1.114
    smtp_connection_timeout 30
    router_id LVS_MASTER         # 設置lvs的id,在一個網絡應該是惟一的
}
vrrp_instance VI_1 {
    state MASTER            # 指定keepalived的角色,MASTER爲主,BACKUP爲備
    interface eth0            # 當前進行vrrp通信的網絡接口卡(當前centos的網卡)
    virtual_router_id 66        # 虛擬路由編號,主從要一直
    priority 100            # 優先級,數值越大,獲取處理請求的優先級越高
    advert_int 1            # 檢查間隔,默認爲1s(vrrp組播週期秒數)
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.200        # 定義虛擬ip(VIP),可多設,每行一個
    }
}
# 定義對外提供的LVS的VIP以及port
virtual_server 192.168.1.200 8080 {
    delay_loop 6             # 設置健康檢查時間,單位爲秒
    lb_algo wrr            # 設置負載調度的算法爲wrr
    lb_kind DR            # 設置lvs實現負載的機制,有NAT、TUN、DR三個模式
    nat_mask 255.255.255.0
    persistence_timeout 0        # 同一IP 0秒內的請求都發到同個real server
    protocol TCP
    real_server 192.168.1.111 8080 { # 指定real server1的ip地址
        weight 3        # 配置節點權值,數值越大權重越高
        TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 192.168.1.115 8080 {
        weight 3
        TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}    
複製代碼

配置從負載服務器

  和主負載服務器同樣,先安裝keepalived,而後編輯keepalived.conf,內容以下,與主負載服務器有些許差異

複製代碼
global_defs {
    notification_email {
        997914490@qq.com
    }
    notification_email_from sns-lvs@gmail.com
    smtp_server 192.168.1.112
    smtp_connection_timeout 30
    router_id LVS_BACKUP         # 設置lvs的id,在一個網絡應該是惟一的
}
vrrp_instance VI_1 {
    state BACKUP            # 指定keepalived的角色,MASTER爲主,BACKUP爲備
    interface eth0            # 當前進行vrrp通信的網絡接口卡(當前進行vrrp通信的網絡接口卡)
    virtual_router_id 66        # 虛擬路由編號,主從要一致
    priority 99            # 優先級,數值越大,獲取處理請求的優先級越高
    advert_int 1            # 檢查間隔,默認爲1s(vrrp組播週期秒數)
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.200        # 定義虛擬ip(VIP),可多設,每行一個
    }
}
# 定義對外提供的LVS的VIP以及port
virtual_server 192.168.1.200 8080 {
    delay_loop 6             # 設置健康檢查時間,單位爲秒
    lb_algo wrr            # 設置負載調度的算法爲wrr
    lb_kind DR            # 設置lvs實現負載的機制,有NAT、TUN、DR三個模式
    nat_mask 255.255.255.0
    persistence_timeout 0        # 同一IP 0秒內的請求都發到同個real server
    protocol TCP
    real_server 192.168.1.111 8080 { # 指定real server1的ip地址
        weight 3        # 配置節點權值,數值越大權重越高
        TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 192.168.1.115 8080 {
        weight 3
        TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}    
複製代碼

  啓動keepalive服務,主從都要啓動!

service keepalived start

效果展現

  1.負載均衡演示

    這裏出現了問題,發現同一個瀏覽器一段時間內刷新,獲得的結果是同一個,也就是說同一個ip某一段時間內的請求交給了同一臺real server處理,用centos上的瀏覽器測試也是一段時間內的請求獲得的是同一個結果,可是與宿主機卻有所不一樣,好比宿主機獲得的是相同的192.168.1.115,而centos上獲得的倒是192.168.1.111,,可明明我配置了persistence_timeout 0,找了很多資料,仍是沒能解決!但願知道的朋友能夠不吝賜教,在評論區進行留言,謝謝了!

  a.web服務器出現故障

    192.168.1.115發生故障,關閉115也就是youzhibing03的tomcat服務

      

那麼宿主機與虛擬機上的結果都只有一個,都獲得以下結果

  

b.web服務器修復,從新啓動115的tomcat服務

      宿主機獲得以下結果

      可虛擬機上顯示的卻仍是192.168.111的結果

  2.主從熱備演示

    a.關閉主負載服務器的keepalived服務

      刷新頁面,依然能獲得以下結果

      那麼也就說明從負載服務器(brucelee)接管了,咱們來看下日誌

      發現從負載服務器確實接管了主負載服務器的任務

    b.當以前的主負載服務器(master)修復後,日誌文件以下

      主負載服務器恢復後,從負載服務器讓出位置,回到最初的主從狀態了!

總結

  總的來講,最終的效果仍是符合標題的,雖然在負載均衡那一塊有些許疑問,好像沒有達到負載均衡的目的,可是也確實只是好像,由於整體而言仍是有負載均衡效果的,好比宿主機的獲得的是115的結果,而虛擬機上的獲得的是111的結果;

  目前流行的LVS解決方案中,在Web服務器端也有采用了Nginx+Tomcat這樣的搭配類型,靜態文件和動態文件分開進行處理,也不失爲一種有效的嘗試。在之後的日子裏,我會陸續進行實踐,並分享給你們!

相關文章
相關標籤/搜索