注意: linux集羣的時間須要一致html
併發量在千萬以上, 通常纔會使用此種方式, 基於第四層進行ip欺騙, 使得nginx只接受上行流量, 下行流量經過具體執行的服務器直接返回前端
由章文嵩博士(淘寶) 1998年成立的項目linux
NAT 上下行走前段服務器
TUN 前端服務器經過ip隧道的方式到real server, 經過ip隧道能夠國際訪問, 超大型網絡使用
DR 前端服務器經過內部網絡到realserver, realserver處理後直接返回
Virtual Server via Network Address Translation(VS/NAT)nginx
經過網絡地址轉換,調度器重寫請求報文的目標地址,根據預設的調度算法,將請求分派給後端的真實服務器;真實服務器的響應報文經過調度器時,報文的源地址被重寫,再返回給客戶,完成整個負載調度過程。web
集羣節點跟director必須在同一個IP網絡中;算法
RIP一般是私有地址,僅用於各集羣節點間的通訊;後端
director位於client和real server之間,並負責處理進出的全部通訊;tomcat
realserver必須將網關指向DIP;bash
支持端口映射;服務器
Virtual Server via IP Tunneling(VS/TUN)
採用NAT技術時,因爲請求和響應報文都必須通過調度器地址重寫,當客戶請求愈來愈多時,調度器的處理能力將成爲瓶頸。爲了解決這個問題,調度器把請求報 文經過IP隧道轉發至真實服務器,而真實服務器將響應直接返回給客戶,因此調度器只處理請求報文。因爲通常網絡服務應答比請求報文大許多,採用 VS/TUN技術後,集羣系統的最大吞吐量能夠提升10倍。
集羣節點能夠跨越Internet;
RIP必須是公網地址;
director僅負責處理入站請求,響應報文則由realserver直接發往客戶端;
realserver網關不能指向director;
只有支持隧道功能的OS才能用於realserver;
不支持端口映射;Virtual Server via Direct Routing(VS/DR)
VS/DR經過改寫請求報文的MAC地址,將請求發送到真實服務器,而真實服務器將響應直接返回給客戶。同VS/TUN技術同樣,VS/DR技術可極大地 提升集羣系統的伸縮性。這種方法沒有IP隧道的開銷,對集羣中的真實服務器也沒有必須支持IP隧道協議的要求,可是要求調度器與真實服務器都有一塊網卡連 在同一物理網段上。
8種不一樣的負載均衡算法
輪叫(Round Robin)
調度器經過"輪叫"調度算法將外部請求按順序輪流分配到集羣中的真實服務器上,它均等地對待每一臺服務器,而無論服務器上實際的鏈接數和系統負載。
加權輪叫(Weighted Round Robin)
調度器經過"加權輪叫"調度算法根據真實服務器的不一樣處理能力來調度訪問請求。這樣能夠保證處理能力強的服務器處理更多的訪問流量。調度器能夠自動問詢真實服務器的負載狀況,並動態地調整其權值。
最少連接(Least Connections)
調度器經過"最少鏈接"調度算法動態地將網絡請求調度到已創建的連接數最少的服務器上。若是集羣系統的真實服務器具備相近的系統性能,採用"最小鏈接"調度算法能夠較好地均衡負載。
加權最少連接(Weighted Least Connections)
在集羣系統中的服務器性能差別較大的狀況下,調度器採用"加權最少連接"調度算法優化負載均衡性能,具備較高權值的服務器將承受較大比例的活動鏈接負載。調度器能夠自動問詢真實服務器的負載狀況,並動態地調整其權值。
基於局部性的最少連接(Locality-Based Least Connections)
"基於局部性的最少連接" 調度算法是針對目標IP地址的負載均衡,目前主要用於Cache集羣系統。該算法根據請求的目標IP地址找出該目標IP地址最近使用的服務器,若該服務器 是可用的且沒有超載,將請求發送到該服務器;若服務器不存在,或者該服務器超載且有服務器處於一半的工做負載,則用"最少連接"的原則選出一個可用的服務 器,將請求發送到該服務器。
帶複製的基於局部性最少連接(Locality-Based Least Connections with Replication)
"帶複製的基於局部性最少連接"調度算法也是針對目標IP地址的負載均衡,目前主要用於Cache集羣系統。它與LBLC算法的不一樣之處是它要維護從一個 目標IP地址到一組服務器的映射,而LBLC算法維護從一個目標IP地址到一臺服務器的映射。該算法根據請求的目標IP地址找出該目標IP地址對應的服務 器組,按"最小鏈接"原則從服務器組中選出一臺服務器,若服務器沒有超載,將請求發送到該服務器,若服務器超載;則按"最小鏈接"原則從這個集羣中選出一 臺服務器,將該服務器加入到服務器組中,將請求發送到該服務器。同時,當該服務器組有一段時間沒有被修改,將最忙的服務器從服務器組中刪除,以下降複製的 程度。
目標地址散列(Destination Hashing)
"目標地址散列"調度算法根據請求的目標IP地址,做爲散列鍵(Hash Key)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,不然返回空。
源地址散列(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做爲服務的一個節點, 只須要將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