8-lvs-負載均衡

注意: linux集羣的時間須要一致html

併發量在千萬以上, 通常纔會使用此種方式, 基於第四層進行ip欺騙, 使得nginx只接受上行流量, 下行流量經過具體執行的服務器直接返回前端

由章文嵩博士(淘寶) 1998年成立的項目linux

3種模式: 

NAT    上下行走前段服務器
TUN    前端服務器經過ip隧道的方式到real server, 經過ip隧道能夠國際訪問, 超大型網絡使用
DR     前端服務器經過內部網絡到realserver, realserver處理後直接返回

Virtual Server via Network Address Translation(VS/NAT)nginx

    1. 經過網絡地址轉換,調度器重寫請求報文的目標地址,根據預設的調度算法,將請求分派給後端的真實服務器;真實服務器的響應報文經過調度器時,報文的源地址被重寫,再返回給客戶,完成整個負載調度過程。web

    2. 集羣節點跟director必須在同一個IP網絡中;算法

      RIP一般是私有地址,僅用於各集羣節點間的通訊;後端

      director位於client和real server之間,並負責處理進出的全部通訊;tomcat

      realserver必須將網關指向DIP;bash

      支持端口映射;服務器

Virtual Server via IP Tunneling(VS/TUN)

    1. 採用NAT技術時,因爲請求和響應報文都必須通過調度器地址重寫,當客戶請求愈來愈多時,調度器的處理能力將成爲瓶頸。爲了解決這個問題,調度器把請求報 文經過IP隧道轉發至真實服務器,而真實服務器將響應直接返回給客戶,因此調度器只處理請求報文。因爲通常網絡服務應答比請求報文大許多,採用 VS/TUN技術後,集羣系統的最大吞吐量能夠提升10倍。

    2. 集羣節點能夠跨越Internet;

      RIP必須是公網地址;

      director僅負責處理入站請求,響應報文則由realserver直接發往客戶端;

      realserver網關不能指向director;

      只有支持隧道功能的OS才能用於realserver;

      不支持端口映射;

Virtual Server via Direct Routing(VS/DR)

    1. VS/DR經過改寫請求報文的MAC地址,將請求發送到真實服務器,而真實服務器將響應直接返回給客戶。同VS/TUN技術同樣,VS/DR技術可極大地 提升集羣系統的伸縮性。這種方法沒有IP隧道的開銷,對集羣中的真實服務器也沒有必須支持IP隧道協議的要求,可是要求調度器與真實服務器都有一塊網卡連 在同一物理網段上。

 DR模式的詳解: 

 

 8種不一樣的負載均衡算法

    1. 輪叫(Round Robin)
      調度器經過"輪叫"調度算法將外部請求按順序輪流分配到集羣中的真實服務器上,它均等地對待每一臺服務器,而無論服務器上實際的鏈接數和系統負載。

    2. 加權輪叫(Weighted Round Robin)
      調度器經過"加權輪叫"調度算法根據真實服務器的不一樣處理能力來調度訪問請求。這樣能夠保證處理能力強的服務器處理更多的訪問流量。調度器能夠自動問詢真實服務器的負載狀況,並動態地調整其權值。

    3. 最少連接(Least Connections)
      調度器經過"最少鏈接"調度算法動態地將網絡請求調度到已創建的連接數最少的服務器上。若是集羣系統的真實服務器具備相近的系統性能,採用"最小鏈接"調度算法能夠較好地均衡負載。

    4. 加權最少連接(Weighted Least Connections)
      在集羣系統中的服務器性能差別較大的狀況下,調度器採用"加權最少連接"調度算法優化負載均衡性能,具備較高權值的服務器將承受較大比例的活動鏈接負載。調度器能夠自動問詢真實服務器的負載狀況,並動態地調整其權值。

    5. 基於局部性的最少連接(Locality-Based Least Connections)
      "基於局部性的最少連接" 調度算法是針對目標IP地址的負載均衡,目前主要用於Cache集羣系統。該算法根據請求的目標IP地址找出該目標IP地址最近使用的服務器,若該服務器 是可用的且沒有超載,將請求發送到該服務器;若服務器不存在,或者該服務器超載且有服務器處於一半的工做負載,則用"最少連接"的原則選出一個可用的服務 器,將請求發送到該服務器。

    6. 帶複製的基於局部性最少連接(Locality-Based Least Connections with Replication)
      "帶複製的基於局部性最少連接"調度算法也是針對目標IP地址的負載均衡,目前主要用於Cache集羣系統。它與LBLC算法的不一樣之處是它要維護從一個 目標IP地址到一組服務器的映射,而LBLC算法維護從一個目標IP地址到一臺服務器的映射。該算法根據請求的目標IP地址找出該目標IP地址對應的服務 器組,按"最小鏈接"原則從服務器組中選出一臺服務器,若服務器沒有超載,將請求發送到該服務器,若服務器超載;則按"最小鏈接"原則從這個集羣中選出一 臺服務器,將該服務器加入到服務器組中,將請求發送到該服務器。同時,當該服務器組有一段時間沒有被修改,將最忙的服務器從服務器組中刪除,以下降複製的 程度。

    7. 目標地址散列(Destination Hashing)
      "目標地址散列"調度算法根據請求的目標IP地址,做爲散列鍵(Hash Key)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,不然返回空。

    8. 源地址散列(Source Hashing)
      "源地址散列"調度算法根據請求的源IP地址,做爲散列鍵(Hash Key)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,不然返回空。

 

 

主機配置: 

1, 配置虛擬ip

ifconfig eth0:1 192.168.208.126/24

使用命令修改 虛擬ip, 重啓電腦後就沒有了

從機配置: 

1, 設置靜態ip

192.168.208.104  #lvs-01
192.168.208.105  #lvs-02

2, 修改內核文件, 隱藏vip

echo 1 >/proc/sys/net/ipv4/conf/eth1/arp_ignore 
echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore 
echo 2 >/proc/sys/net/ipv4/conf/eth1/arp_announce 
echo 2 >/proc/sys/net/ipv4/conf/all/arp_announce 

 

3, 綁定lo網卡, 由於不須要對外通信, 因此綁定lo, 錯誤的netmask不對外通信

ifconfig lo:1 192.168.208.126 netmask 255.255.255.255 broadcast 192.168.208.126

4, 添加一個虛擬路由, 用於虛擬ip

route add -host 192.168.208.126 lo:1

經過 route 命令可查看

 

搭建集羣環境

1, 前端服務器安裝ipvsadm: 

yum -y install ipvsadm

2, realServer 安裝服務器端, 可以使用nginx, tomcat, 或者httpServer, 此處使用httpServer

yum -y install httpd

配置文件在 /etc/httpd/conf/httpd.conf

主頁文件在 /var/www/html/index.html

啓動: service httpd start

 

3, 添加前端服務器集羣環境

ipvsadm -A -t 192.168.208.126:80 -s wlc

參數解釋: 

命令格式: 
    -A -t|u|f service-address[-s scheduler]
參數解釋; 
    -A 添加, -E 修改, -D 刪除
    -t tcp協議的集羣, 帶端口, realserver的端口
    -u udp協議的集羣
    -f 防火牆標記

4, 將realServer 添加到集羣環境中

# 添加第一臺RealServer
ipvsadm -a -t 192.168.208.126:80 -r 192.168.208.104 -g -w 1
# 添加第二臺RealServer
ipvsadm -a -t 192.168.208.126:80 -r 192.168.208.105 -g -w 1

 5, 查看

ipvsadm -Ln

 

加入nginx

若是仍然將nginx做爲服務的一個節點, 只須要將lvs將多臺nginx服務器的ip加入到lvs集羣中, 而後由nginx繼續進行請求分發到多臺web服務器, 此時realserver爲nginx的ip, 響應經由web服務器返回nginx, 在從nginx返回客戶端

(不要忘記更改nginx所在機器的內核 VIP 可見性)

 

 

此時經過頁面訪問

www.wenbronk.com 既能夠看到輪詢的效果了

訪問的是配置的虛擬ip

 

附: 從機開啓腳本, 須要根據本身的配置進行更改

#!/bin/bash 
#description : start realserver 
VIP=125.38.38.64 
/etc/rc.d/init.d/functions 
case "$1" in 
start) 
echo " start LVS of REALServer" 
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
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up

;; 
stop) 
/sbin/ifconfig lo:0 down 
echo "close LVS Directorserver" 
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 "Usage: $0 {start|stop}" 
exit 1 
esac

 

系列來自尚學堂

http://www.linuxvirtualserver.org/zh/lvs1.html

http://www.javashuo.com/article/p-owhdiesx-bh.html

http://blog.51cto.com/shenmengdong/2090681

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