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