lvs簡介及實現負載均衡

 

一、什麼是lvs?
LVS是一個開源的軟件,由畢業於國防科技大學的章文嵩博士於1998年5月創立,可以實現LINUX平臺下的簡單負載均衡。LVS是Linux Virtual Server的縮寫,意思是Linux虛擬服務器。
如圖:

二、技術簡介
LVS集羣採用IP負載均衡技術和基於內容請求分發技術。調度器具有很好的吞吐率,將請求均衡地轉移到不同的服務器上執行,且調度器自動屏蔽掉服務器的故障,從而將一組服務器構成一個高性能的、高可用的虛擬服務器。整個服務器集羣的結構對客戶是透明的,而且無需修改客戶端和服務器端的程序。爲此,在設計時需要考慮系統的透明性、可伸縮性、高可用性和易管理性。一般來說,LVS集羣採用三層結構,其主要組成部分爲:
1) 負載調度器(load balancer),它是整個集羣對外面的前端機,負責將客戶的請求發送到一組服務器上執行,而客戶認爲服務是來自一個IP地址(我們可稱之爲虛擬IP地址)上的。
2) 服務器池(server pool),是一組真正執行客戶請求的服務器,執行的服務有WEB、MAIL、FTP和DNS等。
3) 共享存儲(shared storage),它爲服務器池提供一個共享的存儲區,這樣很容易使得服務器池擁有相同的內容,提供相同的服務。
 LVS集羣種類通常是通過LVS Director中繼到集羣節點的請求的方法來形容的,目前有三種可用的方法:
1) 網絡地址轉換(LVS-NAT)
Virtual Server via Network Address TranslationVS/NAT)
通過網絡地址轉換,調度器重寫請求報文的目標地址,根據預設的調度算法,將請求分派給後端的真實服務器;真實服務器的響應報文通過調度器時,報文的源地址被重寫,再返回給客戶,完成整個負載調度過程。
如圖:

2) 直接路由(LVS-DR)
Virtual Server via Direct RoutingVS/DR)
VS/DR通過改寫請求報文的MAC地址,將請求發送到真實服務器,而真實服務器將響應直接返回給客戶。同VS/TUN技術一樣,VS/DR技術可極大地提高集羣系統的伸縮性。這種方法沒有IP隧道的開銷,對集羣中的真實服務器也沒有必須支持IP隧道協議的要求,但是要求調度器與真實服務器都有一塊網卡連在同一物理網段上。
如圖:

3) IP隧道(LVS-TUN)
Virtual Server via IP TunnelingVS/TUN)
採用NAT技術時,由於請求和響應報文都必須經過調度器地址重寫,當客戶請求越來越多時,調度器的處理能力將成爲瓶頸。爲了解決這個問題,調度器把請求報文通過IP隧道轉發至真實服務器,而真實服務器將響應直接返回給客戶,所以調度器只處理請求報文。由於一般網絡服務應答比請求報文大許多,採用 VS/TUN技術後,集羣系統的最大吞吐量可以提高10倍。
如圖:

LVS調度方法
1) 固定(或非動態)調度方法
循環法(RR)
權重循環(WRR)
目標散列法
源散列法
2) 動態調度方法
最少連接(LC)
權重最少連接(WLC)
最短預期延遲(SED)
永不排隊(NQ)
基於本地最少連接(LBLC)
基於本地最少連接重複調度(LBLCR)
三、案例 實現lvs負載均衡
案例一 使用lvs_nat模式
1)調度方法爲rr
實驗拓撲圖:

1. Load balancer配置
網絡配置:

首先查看內核是否支持ipvs
[root@localhost ~]# uname -r
2.6.18-164.el5
[root@localhost ~]# grep -i ip_vs /boot/config-2.6.18-164.el5
打開路由轉發功能,如下:
[root@localhost ~]# vim /etc/sysctl.conf
7 net.ipv4.ip_forward = 1
[root@localhost ~]# sysctl –p
##立即生效
[root@localhost ~]# yum install ipvsadm –y
安裝成功!
[root@localhost ~]# ipvsadm -A -t 192.168.101.15:80 -s rr
[root@localhost ~]# ipvsadm -a -t 192.168.101.15:80 -r 192.168.2.100 -m
[root@localhost ~]# ipvsadm -a -t 192.168.101.15:80 -r 192.168.2.101 -m
[root@localhost ~]# service ipvsadm save
Saving IPVS table to /etc/sysconfig/ipvsadm:               [ OK ]
[root@localhost ~]# service ipvsadm start
Clearing the current IPVS table:                           [ OK ]
Applying IPVS configuration:                               [ OK ]
[root@localhost ~]# ipvsadm -ln                                    
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
 -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP 192.168.101.15:80 rr
 -> 192.168.2.100:80              Masq   1      0          0        
 -> 192.168.2.101:80              Masq 1      0          0        
2Realserver1配置
網絡配置:

安裝httpd服務
[root@localhost ~]# cd /mnt/cdrom/Server/
[root@localhost Server]# rpm -ivh httpd-2.2.3-31.el5.i386.rpm
新建一個網頁
[root@localhost Server]# cd /var/www/html/
[root@localhost html]# echo "web1" >index.html
啓動服務
[root@localhost ~]# service httpd start
3.Realserver2配置
網絡配置:

安裝httpd服務
[root@localhost ~]# cd /mnt/cdrom/Server/
[root@localhost Server]# rpm -ivh httpd-2.2.3-31.el5.i386.rpm
新建一個網頁
[root@localhost Server]# cd /var/www/html/
[root@localhost html]# echo "web2" >index.html
啓動服務
[root@localhost ~]# service httpd start
測試:

2)調度方法wrr
Load balancer配置
設置web1的權重爲web2的2倍
[root@localhost ~]# vim /etc/sysconfig/ipvsadm
[root@localhost ~]# ipvsadm -E -t 192.168.101.15:80 -s wrr
[root@localhost ~]# ipvsadm -e -t 192.168.101.15:80 -r 192.168.2.100 -m -w 10
[root@localhost ~]# ipvsadm -e -t 192.168.101.15:80 -r 192.168.2.101 -m -w 5
[root@localhost ~]# service ipvsadm save
Saving IPVS table to /etc/sysconfig/ipvsadm:               [ OK ]
[root@localhost ~]# service ipvsadm restart
Clearing the current IPVS table:                           [ OK ]
Applying IPVS configuration:                               [ OK ]
測試:
user用戶訪問3次
 
案例二 使用lvs_dr模式
實驗拓撲圖:

Realserver1的配置
[root@localhost ~]# echo "net.ipv4.conf.eth0.arp_announce = 2" >>/etc/sysctl.conf
[root@localhost ~]# echo "net.ipv4.conf.all.arp_announce = 2" >>/etc/sysctl.conf
[root@localhost ~]# echo "net.ipv4.conf.eth0.arp_ignore = 1" >>/etc/sysctl.conf
[root@localhost ~]# echo "net.ipv4.conf.all.arp_ignore = 1" >>/etc/sysctl.conf
[root@localhost ~]# sysctl –p
配置網絡信息:

添加路由
[root@localhost ~]# route add -host 192.168.2.11 dev lo:0
安裝httpd服務
[root@localhost ~]# cd /mnt/cdrom/Server/
[root@localhost Server]# rpm -ivh httpd-2.2.3-31.el5.i386.rpm
新建一個網頁
[root@localhost Server]# cd /var/www/html/
[root@localhost html]# echo "web1" >index.html
啓動服務
[root@localhost ~]# service httpd start
Realserver2配置
realserver1的配置copy過來
[root@localhost ~]# scp 192.168.2.100:/etc/sysctl.conf /etc/
配置網絡信息:

添加路由信息
[root@localhost ~]# route add -host 192.168.2.11 dev lo:0
安裝httpd服務
[root@localhost ~]# cd /mnt/cdrom/Server/
[root@localhost Server]# rpm -ivh httpd-2.2.3-31.el5.i386.rpm
新建一個網頁
[root@localhost Server]# cd /var/www/html/
[root@localhost html]# echo "web1" >index.html
啓動服務
[root@localhost ~]# service httpd start
LinuxDirector配置
配置網絡信息:

安裝ipvsadm服務
[root@localhost ~]# cd /mnt/cdrom/
[root@localhost cdrom]# cd Cluster/                                
[root@localhost Cluster]# rpm -ivh ipvsadm-1.24-10.i386.rpm
啓動服務
[root@localhost Cluster]# service ipvsadm save
Saving IPVS table to /etc/sysconfig/ipvsadm:               [ OK ]
[root@localhost Cluster]# service ipvsadm start
Clearing the current IPVS table:                           [ OK ]
Applying IPVS configuration:                               [ OK ]
[root@localhost Cluster]# chkconfig ipvsadm on
[root@localhost Cluster]# ipvsadm -A -t 192.168.2.11:80 -s rr
[root@localhost Cluster]# ipvsadm -a -t 192.168.2.11:80 -r 192.168.2.100 -g  
[root@localhost Cluster]# ipvsadm -a -t 192.168.2.11:80 -r 192.168.2.101 -g
[root@localhost Cluster]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
 -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP 192.168.2.11:80 rr
 -> 192.168.2.101:80             Route   1      0          0        
 -> 192.168.2.100:80             Route   1      0          0        
測試:

持久連接
[root@localhost ~]# ipvsadm -A -t 192.168.2.11:0 -s rr -p 60
[root@localhost ~]# ipvsadm -a -t 192.168.2.11:0 -r 192.168.2.100 -g
[root@localhost ~]# ipvsadm -a -t 192.168.2.11:0 -r 192.168.2.101 -g
[root@localhost ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
 -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP 192.168.2.11:0 rr persistent 60
 -> 192.168.2.101:0              Route   1      0          0        
 -> 192.168.2.100:0              Route   1      0          0        
[root@localhost ~]#
測試
60s內訪問都是web2

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章