lvs的原理及应用
一、什么是lvs?
LVS是一個開源的軟件,由畢業(yè)于國防科技大學的章文嵩博士于1998年5月創(chuàng)立,可以實現(xiàn)LINUX平臺下的簡單負載均衡。LVS是Linux Virtual Server的縮寫,意思是Linux虛擬服務器。
如圖:
二、技術簡介
LVS集群采用IP負載均衡技術和基于內(nèi)容請求分發(fā)技術。調(diào)度器具有很好的吞吐率,將請求均衡地轉(zhuǎn)移到不同的服務器上執(zhí)行,且調(diào)度器自動屏蔽掉服務器的故障,從而將一組服務器構(gòu)成一個高性能的、高可用的虛擬服務器。整個服務器集群的結(jié)構(gòu)對客戶是透明的,而且無需修改客戶端和服務器端的程序。為此,在設計時需要考慮系統(tǒng)的透明性、可伸縮性、高可用性和易管理性。一般來說,LVS集群采用三層結(jié)構(gòu),其主要組成部分為:
1) 負載調(diào)度器(load balancer),它是整個集群對外面的前端機,負責將客戶的請求發(fā)送到一組服務器上執(zhí)行,而客戶認為服務是來自一個IP地址(我們可稱之為虛擬IP地址)上的。
2) 服務器池(server pool),是一組真正執(zhí)行客戶請求的服務器,執(zhí)行的服務有WEB、MAIL、FTP和DNS等。
3) 共享存儲(shared storage),它為服務器池提供一個共享的存儲區(qū),這樣很容易使得服務器池擁有相同的內(nèi)容,提供相同的服務。
LVS集群種類通常是通過LVS Director中繼到集群節(jié)點的請求的方法來形容的,目前有三種可用的方法:
1) 網(wǎng)絡地址轉(zhuǎn)換(LVS-NAT)
Virtual Server via Network Address Translation(VS/NAT)
通過網(wǎng)絡地址轉(zhuǎn)換,調(diào)度器重寫請求報文的目標地址,根據(jù)預設的調(diào)度算法,將請求分派給后端的真實服務器;真實服務器的響應報文通過調(diào)度器時,報文的源地址被重寫,再返回給客戶,完成整個負載調(diào)度過程。
如圖:
2) 直接路由(LVS-DR)
Virtual Server via Direct Routing(VS/DR)
VS/DR通過改寫請求報文的MAC地址,將請求發(fā)送到真實服務器,而真實服務器將響應直接返回給客戶。同VS/TUN技術一樣,VS/DR技術可極大地提高集群系統(tǒng)的伸縮性。這種方法沒有IP隧道的開銷,對集群中的真實服務器也沒有必須支持IP隧道協(xié)議的要求,但是要求調(diào)度器與真實服務器都有一塊網(wǎng)卡連在同一物理網(wǎng)段上。
如圖:
3) IP隧道(LVS-TUN)
Virtual Server via IP Tunneling(VS/TUN)
采用NAT技術時,由于請求和響應報文都必須經(jīng)過調(diào)度器地址重寫,當客戶請求越來越多時,調(diào)度器的處理能力將成為瓶頸。為了解決這個問題,調(diào)度器把請求報文通過IP隧道轉(zhuǎn)發(fā)至真實服務器,而真實服務器將響應直接返回給客戶,所以調(diào)度器只處理請求報文。由于一般網(wǎng)絡服務應答比請求報文大許多,采用 VS/TUN技術后,集群系統(tǒng)的最大吞吐量可以提高10倍。
如圖:
LVS調(diào)度方法
1) 固定(或非動態(tài))調(diào)度方法
循環(huán)法(RR)
權(quán)重循環(huán)(WRR)
目標散列法
源散列法
2) 動態(tài)調(diào)度方法
最少連接(LC)
權(quán)重最少連接(WLC)
最短預期延遲(SED)
永不排隊(NQ)
基于本地最少連接(LBLC)
基于本地最少連接重復調(diào)度(LBLCR)
三、案例 實現(xiàn)lvs負載均衡
案例一 使用lvs_nat模式
1)調(diào)度方法為rr
實驗拓撲圖:
1. Load balancer配置
網(wǎng)絡配置
首先查看內(nèi)核是否支持ipvs
[root@localhost ~]# uname -r
2.6.18-164.el5
[root@localhost ~]# grep -i ip_vs /boot/config-2.6.18-164.el5
打開路由轉(zhuǎn)發(fā)功能,如下:
[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
2.Realserver1配置
網(wǎng)絡配置
安裝httpd服務
[root@localhost ~]# cd /mnt/cdrom/Server/
[root@localhost Server]# rpm -ivh httpd-2.2.3-31.el5.i386.rpm
新建一個網(wǎng)頁
[root@localhost Server]# cd /var/www/html/
[root@localhost html]# echo "web1" >index.html
啟動服務
[root@localhost ~]# service httpd start
3.Realserver2配置
網(wǎng)絡配置
安裝httpd服務
[root@localhost ~]# cd /mnt/cdrom/Server/
[root@localhost Server]# rpm -ivh httpd-2.2.3-31.el5.i386.rpm
新建一個網(wǎng)頁
[root@localhost Server]# cd /var/www/html/
[root@localhost html]# echo "web2" >index.html
啟動服務
[root@localhost ~]# service httpd start
測試
2)調(diào)度方法wrr
Load balancer配置
設置web1的權(quán)重為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
配置網(wǎng)絡信息
添加路由
[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
新建一個網(wǎng)頁
[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/
配置網(wǎng)絡信息
添加路由信息
[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
新建一個網(wǎng)頁
[root@localhost Server]# cd /var/www/html/
[root@localhost html]# echo "web1" >index.html
啟動服務
[root@localhost ~]# service httpd start
LinuxDirector配置
配置網(wǎng)絡信息
安裝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內(nèi)訪問都是web2
轉(zhuǎn)載于:https://blog.51cto.com/xysun/1021417
總結(jié)
- 上一篇: EXCEL 处理
- 下一篇: The Excel Connection