自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

服務(wù)器集群技術(shù)如日中天 借助LVS+Keepalived實現(xiàn)負(fù)載均衡

開發(fā) 前端
在實際應(yīng)用中,在Web服務(wù)器集群之前總會有一臺負(fù)載均衡服務(wù)器,負(fù)載均衡設(shè)備的任務(wù)就是作為Web服務(wù)器流量的入口,挑選最合適的一臺Web服務(wù)器,將客戶端的請求轉(zhuǎn)發(fā)給它處理,實現(xiàn)客戶端到真實服務(wù)端的透明轉(zhuǎn)發(fā)。最近幾年很火的「云計算」以及分布式架構(gòu),本質(zhì)上也是將后端服務(wù)器作為計算資源、存儲資源,由某臺管理服務(wù)器封裝成一個服務(wù)對外提供,客戶端不需要關(guān)心真正提供服務(wù)的是哪臺機器,在它看來,就好像它面對的是一臺擁有近乎無限能力的服務(wù)器,而本質(zhì)上,真正提供服務(wù)的,是后端的集群。

一、負(fù)載均衡:必不可少的基礎(chǔ)手段

1.1 找更多的牛來拉車吧

當(dāng)前大多數(shù)的互聯(lián)網(wǎng)系統(tǒng)都使用了服務(wù)器集群技術(shù),集群即將相同服務(wù)部署在多臺服務(wù)器上構(gòu)成一個集群整體對外提供服務(wù),這些集群可以是Web應(yīng)用服務(wù)器集群,也可以是數(shù)據(jù)庫服務(wù)器集群,還可以是分布式緩存服務(wù)器集群等等。

[[127732]]

古人有云:當(dāng)一頭牛拉不動車的時候,不要去尋找一頭更強壯的牛,而是用兩頭牛來拉車。

load balance

在實際應(yīng)用中,在Web服務(wù)器集群之前總會有一臺負(fù)載均衡服務(wù)器,負(fù)載均衡設(shè)備的任務(wù)就是作為Web服務(wù)器流量的入口,挑選最合適的一臺Web服務(wù)器,將客戶端的請求轉(zhuǎn)發(fā)給它處理,實現(xiàn)客戶端到真實服務(wù)端的透明轉(zhuǎn)發(fā)。最近幾年很火的「云計算」以及分布式架構(gòu),本質(zhì)上也是將后端服務(wù)器作為計算資源、存儲資源,由某臺管理服務(wù)器封裝成一個服務(wù)對外提供,客戶端不需要關(guān)心真正提供服務(wù)的是哪臺機器,在它看來,就好像它面對的是一臺擁有近乎無限能力的服務(wù)器,而本質(zhì)上,真正提供服務(wù)的,是后端的集群。

1.2 負(fù)載均衡的類型

負(fù)載均衡可以采用硬件設(shè)備(例如常常聽見的F5),也可以采用軟件負(fù)載。

商用硬件負(fù)載設(shè)備成本通常較高(一臺幾十萬上百萬很正常),所以在條件允許的情況下我們會采用軟件負(fù)載;

軟件負(fù)載解決的兩個核心問題是:選誰、轉(zhuǎn)發(fā),其中***的是LVS(Linux Virtual Server)。

傳送門->關(guān)于負(fù)載均衡的實現(xiàn)方式類型等介紹請瀏覽我的另一篇博文:《大型網(wǎng)站技術(shù)架構(gòu)》讀書筆記之六:永無止境之網(wǎng)站的伸縮性架構(gòu)

二、初識LVS:Linux Virtual Server

2.1 LVS是神馬東西

LVS是Linux Virtual Server的簡稱,也就是Linux虛擬服務(wù)器, 是一個由章文嵩博士發(fā)起的自由軟件項目,它的官方站點是www.linuxvirtualserver.org?,F(xiàn)在LVS已經(jīng)是 Linux標(biāo)準(zhǔn)內(nèi)核的一部分,在Linux2.4內(nèi)核以前,使用LVS時必須要重新編譯內(nèi)核以支持LVS功能模塊,但是從Linux2.4內(nèi)核以后,已經(jīng)完全內(nèi)置了LVS的各個功能模塊,無需給內(nèi)核打任何補丁,可以直接使用LVS提供的各種功能。

2.2 LVS有神馬作用

LVS主要用于服務(wù)器集群的負(fù)載均衡。它工作在網(wǎng)絡(luò)層,可以實現(xiàn)高性能,高可用的服務(wù)器集群技術(shù)。它廉價,可把許多低性能的服務(wù)器組合在一起形成一個超級服務(wù)器。它易用,配置非常簡單,且有多種負(fù)載均衡的方法。它穩(wěn)定可靠,即使在集群的服務(wù)器中某臺服務(wù)器無法正常工作,也不影響整體效果。另外可擴展性也非常好。

LVS自從1998年開始,發(fā)展到現(xiàn)在已經(jīng)是一個比較成熟的技術(shù)項目了。可以利用LVS技術(shù)實現(xiàn)高可伸縮的、高可用的網(wǎng)絡(luò)服務(wù),例如WWW服務(wù)、Cache服務(wù)、DNS服務(wù)、FTP服務(wù)、MAIL服務(wù)、視頻/音頻點播服務(wù)等等,有許多比較著名網(wǎng)站和組織都在使用LVS架設(shè)的集群系統(tǒng),例如:Linux的門戶網(wǎng)站(www.linux.com)、向RealPlayer提供音頻視頻服務(wù)而聞名的Real公司(www.real.com)、全球***的開源網(wǎng)站(sourceforge.net)等。

2.3 LVS的體系結(jié)構(gòu)

使用LVS架設(shè)的服務(wù)器集群系統(tǒng)有三個部分組成:

(1)最前端的負(fù)載均衡層,用Load Balancer表示;

(2)中間的服務(wù)器集群層,用Server Array表示;

(3)***端的數(shù)據(jù)共享存儲層,用Shared Storage表示;

在用戶看來,所有的內(nèi)部應(yīng)用都是透明的,用戶只是在使用一個虛擬服務(wù)器提供的高性能服務(wù)。

傳送門->關(guān)于體系結(jié)構(gòu)的詳細介紹,請瀏覽南飛螞蟻的blog:http://ixdba.blog.51cto.com/2895551/552947

2.4 LVS負(fù)載均衡機制

(1)LVS是四層負(fù)載均衡,也就是說建立在OSI模型的第四層——傳輸層之上,傳輸層上有我們熟悉的TCP/UDP,LVS支持TCP/UDP的負(fù)載均衡。因為LVS是四層負(fù)載均衡,因此它相對于其它高層負(fù)載均衡的解決辦法,比如DNS域名輪流解析、應(yīng)用層負(fù)載的調(diào)度、客戶端的調(diào)度等,它的效率是非常高的。

(2)LVS的轉(zhuǎn)發(fā)主要通過修改IP地址(NAT模式,分為源地址修改SNAT和目標(biāo)地址修改DNAT)、修改目標(biāo)MAC(DR模式)來實現(xiàn)。

①NAT模式:網(wǎng)絡(luò)地址轉(zhuǎn)換

NAT

NAT(Network Address Translation)是一種外網(wǎng)和內(nèi)網(wǎng)地址映射的技術(shù)。NAT模式下,網(wǎng)絡(luò)數(shù)據(jù)報的進出都要經(jīng)過LVS的處理。LVS需要作為RS(真實服務(wù)器)的網(wǎng)關(guān)。當(dāng)包到達LVS時,LVS做目標(biāo)地址轉(zhuǎn)換(DNAT),將目標(biāo)IP改為RS的IP。RS接收到包以后,仿佛是客戶端直接發(fā)給它的一樣。RS處理完,返回響應(yīng)時,源IP是RS IP,目標(biāo)IP是客戶端的IP。這時RS的包通過網(wǎng)關(guān)(LVS)中轉(zhuǎn),LVS會做源地址轉(zhuǎn)換(SNAT),將包的源地址改為VIP,這樣,這個包對客戶端看起來就仿佛是LVS直接返回給它的??蛻舳藷o法感知到后端RS的存在。

②DR模式:直接路由

DR

DR模式下需要LVS和RS集群綁定同一個VIP(RS通過將VIP綁定在loopback實現(xiàn)),但與NAT的不同點在于:請求由LVS接受,由真實提供服務(wù)的服務(wù)器(RealServer, RS)直接返回給用戶,返回的時候不經(jīng)過LVS。詳細來看,一個請求過來時,LVS只需要將網(wǎng)絡(luò)幀的MAC地址修改為某一臺RS的MAC,該包就會被轉(zhuǎn)發(fā)到相應(yīng)的RS處理,注意此時的源IP和目標(biāo)IP都沒變,LVS只是做了一下移花接木。RS收到LVS轉(zhuǎn)發(fā)來的包時,鏈路層發(fā)現(xiàn)MAC是自己的,到上面的網(wǎng)絡(luò)層,發(fā)現(xiàn)IP也是自己的,于是這個包被合法地接受,RS感知不到前面有LVS的存在。而當(dāng)RS返回響應(yīng)時,只要直接向源IP(即用戶的IP)返回即可,不再經(jīng)過LVS。

(3)DR負(fù)載均衡模式數(shù)據(jù)分發(fā)過程中不修改IP地址,只修改mac地址,由于實際處理請求的真實物理IP地址和數(shù)據(jù)請求目的IP地址一致,所以不需要通過負(fù)載均衡服務(wù)器進行地址轉(zhuǎn)換,可將響應(yīng)數(shù)據(jù)包直接返回給用戶瀏覽器,避免負(fù)載均衡服務(wù)器網(wǎng)卡帶寬成為瓶頸。因此,DR模式具有較好的性能,也是目前大型網(wǎng)站使用最廣泛的一種負(fù)載均衡手段。

#p#

三、構(gòu)建實戰(zhàn):LVS+Keepalived實現(xiàn)負(fù)載均衡

3.1 實驗結(jié)構(gòu)總覽

(1)本次基于VMware Workstation搭建一個四臺Linux(CentOS 6.4)系統(tǒng)所構(gòu)成的一個服務(wù)器集群,其中兩臺負(fù)載均衡服務(wù)器(一臺為主機,另一臺為備機),另外兩臺作為真實的Web服務(wù)器(向外部提供http服務(wù),這里僅僅使用了CentOS默認(rèn)自帶的http服務(wù),沒有安裝其他的類似Tomcat、Jexus服務(wù))。

(2)本次實驗基于DR負(fù)載均衡模式,設(shè)置了一個VIP(Virtual IP)為192.168.80.200,用戶只需要訪問這個IP地址即可獲得網(wǎng)頁服務(wù)。其中,負(fù)載均衡主機為192.168.80.100,備機為192.168.80.101。Web服務(wù)器A為192.168.80.102,Web服務(wù)器B為192.168.80.103。

3.2 基礎(chǔ)準(zhǔn)備工作

以下工作針對所有服務(wù)器,也就是說要在四臺服務(wù)器中都要進行配置:

(1)綁定靜態(tài)IP地址

命令模式下可以執(zhí)行setup命令進入設(shè)置界面配置靜態(tài)IP地址;x-window界面下可以右擊網(wǎng)絡(luò)圖標(biāo)配置;配置完成后執(zhí)行service network restart重新啟動網(wǎng)絡(luò)服務(wù);

驗證:執(zhí)行命令ifconfig

(2)設(shè)定主機名

①修改當(dāng)前會話中的主機名,執(zhí)行命令hostname xxxx (這里xxxx為你想要改為的名字)

②修改配置文件中的主機名,執(zhí)行命令vi /etc/sysconfig/network (√一般需要進行此步湊才能***更改主機名)

驗證:重啟系統(tǒng)reboot

(3)IP地址與主機名的綁定

執(zhí)行命令vi /etc/hosts,增加一行內(nèi)容,如下(下面的從節(jié)點以你自己的為主,本實驗搭建了兩個從節(jié)點):

192.168.80.100 lvs-master

192.168.80.101 lvs-slave

#下面是本次試驗的兩個真實服務(wù)器節(jié)點

192.168.80.102 lvs-webserver1

192.168.80.103 lvs-webserver2

保存后退出

驗證:ping lvs-master

(4)關(guān)閉防火墻

①執(zhí)行關(guān)閉防火墻命令:service iptables stop

      驗證:service iptables stauts

②執(zhí)行關(guān)閉防火墻自動運行命令:chkconfig iptables off

驗證:chkconfig --list | grep iptables

3.3 配置兩臺Web服務(wù)器

以下操作需要在角色為Web服務(wù)器的兩臺中進行,不需要在負(fù)載均衡服務(wù)器中進行操作:

(1)開啟http服務(wù)

命令:service httpd start

補充:chkconfig httpd on -->將httpd設(shè)為自啟動服務(wù)

(2)在宿主機訪問Web網(wǎng)頁,并通過FTP工具上傳自定義網(wǎng)頁:這里上傳一個靜態(tài)網(wǎng)頁,并通過更改其中的html來區(qū)別兩臺Web服務(wù)器,以下圖所示為例,其中一臺顯示from 192.168.80.102,而另一臺顯示from 192.168.80.103;

(3)編輯realserver腳本文件

①進入指定文件夾:cd /etc/init.d/

②編輯腳本文件:vim realserver

SNS_VIP=192.168.80.200
/etc/rc.d/init.d/functions
case "$1" in
start)
       ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP
       /sbin/route add -host $SNS_VIP dev lo:0
       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
       sysctl -p >/dev/null 2>&1
       echo "RealServer Start OK"
       ;;
stop)
       ifconfig lo:0 down
       route del $SNS_VIP >/dev/null 2>&1
       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 "RealServer Stoped"
       ;;
*)
       echo "Usage: $0 {start|stop}"
       exit 1
esac
exit 0
 
這里我們設(shè)置虛擬IP為:192.168.80.200

③保存腳本文件后更改該文件權(quán)限:chmod 755 realserver

④開啟realserver服務(wù):service realserver start

3.4 配置主負(fù)載服務(wù)器

(1)安裝Keepalived相關(guān)包

yum install -y keepalived

在CentOS下,通過yum install命令可以很方便地安裝軟件包,但是前提是你的虛擬機要聯(lián)網(wǎng);

(2)編輯keepalived.conf配置文件

①進入keepalived.conf所在目錄:cd /etc/keepalived

②首先清除掉keepalived原有配置:> keepalived.conf

③重新編輯keepalived配置文件:vi keepalived.conf

global_defs {  
   notification_email {  
         edisonchou@hotmail.com  
   }  
   notification_email_from sns-lvs@gmail.com  
   smtp_server 192.168.80.1  
   smtp_connection_timeout 30
   router_id LVS_DEVEL  # 設(shè)置lvs的id,在一個網(wǎng)絡(luò)內(nèi)應(yīng)該是唯一的
}  
vrrp_instance VI_1 {  
    state MASTER   #指定Keepalived的角色,MASTER為主,BACKUP為備          
    interface eth1  #指定Keepalived的角色,MASTER為主,BACKUP為備
    virtual_router_id 51  #虛擬路由編號,主備要一致
    priority 100  #定義優(yōu)先級,數(shù)字越大,優(yōu)先級越高,主DR必須大于備用DR    
    advert_int 1  #檢查間隔,默認(rèn)為1s
    authentication {  
        auth_type PASS  
        auth_pass 1111  
    }  
    virtual_ipaddress {  
        192.168.80.200  #定義虛擬IP(VIP)為192.168.2.33,可多設(shè),每行一個
    }  
}  
# 定義對外提供服務(wù)的LVS的VIP以及port
virtual_server 192.168.80.200 80 {  
    delay_loop 6 # 設(shè)置健康檢查時間,單位是秒                    
    lb_algo wrr # 設(shè)置負(fù)載調(diào)度的算法為wlc                   
    lb_kind DR # 設(shè)置LVS實現(xiàn)負(fù)載的機制,有NAT、TUN、DR三個模式   
    nat_mask 255.255.255.0                
    persistence_timeout 0          
    protocol TCP                  
    real_server 192.168.80.102 80 {  # 指定real server1的IP地址
        weight 3   # 配置節(jié)點權(quán)值,數(shù)字越大權(quán)重越高              
        TCP_CHECK {  
        connect_timeout 10         
        nb_get_retry 3  
        delay_before_retry 3  
        connect_port 80  
        }  
    }  
    real_server 192.168.80.103 80 {  # 指定real server2的IP地址
        weight 3  # 配置節(jié)點權(quán)值,數(shù)字越大權(quán)重越高  
        TCP_CHECK {  
        connect_timeout 10  
        nb_get_retry 3  
        delay_before_retry 3  
        connect_port 80  
        }  
     }  
} 

(3)開啟keepalived服務(wù)

service keepalived start

#p#

3.5 配置從負(fù)載服務(wù)器

從負(fù)載服務(wù)器與主負(fù)載服務(wù)器大致相同,只是在keepalived的配置文件中需要改以下兩處:

(1)將state由MASTER改為BACKUP

(2)將priority由100改為99

vrrp_instance VI_1 {  
    state BACKUP # 這里改為BACKUP
    interface eth1  
    virtual_router_id 51  
    priority 99 # 這里改為99,master優(yōu)先級是100
    advert_int 1  
    authentication {  
        auth_type PASS  
        auth_pass 1111  
    }  
    virtual_ipaddress {  
        192.168.80.200  
    }  
}  

3.6 驗證性測試

(1)指定請求的均衡轉(zhuǎn)發(fā):因為兩個Web服務(wù)器的權(quán)重都一樣,所以會依次轉(zhuǎn)發(fā)給兩個Web服務(wù)器;

(2)Web服務(wù)器發(fā)生故障時:

①A發(fā)生故障后,只從B獲取服務(wù);

這里模擬192.168.80.102發(fā)生故障,暫停其http服務(wù):service httpd stop

再來看看這時從外部訪問VIP時,便會只從192.168.80.103獲取網(wǎng)頁:

②A故障修復(fù)后,又從A獲取服務(wù);

這里模擬192.168.80.102修復(fù)完成,重啟其http服務(wù):service httpd start

再來看看這時從外部訪問VIP,又可以從192.168.80.102獲取網(wǎng)頁:

(3)主負(fù)載均衡服務(wù)器發(fā)生故障時,備機立即充當(dāng)主機角色提供請求轉(zhuǎn)發(fā)服務(wù):

這里模擬192.168.80.100發(fā)生故障,暫停其keepalived服務(wù):service keepalived stop

再來看看這時從外部訪問VIP,還是可以正常獲取網(wǎng)頁:

學(xué)習(xí)小結(jié)

LVS是目前廣為采用的軟件負(fù)載均衡解決方案,在一些大型企業(yè)級系統(tǒng)及互聯(lián)網(wǎng)系統(tǒng)中應(yīng)用。本次,簡單地了解了一下LVS,并在Linux下搭建了一個小小的測試環(huán)境,借助Keepalived實現(xiàn)了一個最小化的負(fù)載均衡測試環(huán)境。LVS是一個可以工作在網(wǎng)絡(luò)第四層的負(fù)載均衡軟件,因此它相對于Nginx一類工作在第七層的負(fù)載均衡軟件有著無可比擬的性能優(yōu)勢,而且它還是我國的章文嵩博士(現(xiàn)在阿里的副總裁,淘寶的技術(shù)專家)作為創(chuàng)始人發(fā)起的,現(xiàn)已經(jīng)成為Linux內(nèi)核的組成部分。

當(dāng)然,目前流行的LVS解決方案中,在Web服務(wù)器端也有采用了Nginx+Tomcat這樣的搭配類型,靜態(tài)文件和動態(tài)文件分開進行處理,也不失為一種有效的嘗試。在以后的日子里,我還會嘗試下在Linux下借助Jexus跑ASP.NET MVC項目,試試.NET項目在Linux下的運行效果,希望到時也可以做一些分享。好了,今天就到此停筆。

參考資料

(1)王晨純,《Web基礎(chǔ)架構(gòu):負(fù)載均衡和LVS》:http://www.importnew.com/11229.html

(2)win_xp,《LVS簡介及使用》:http://www.cnblogs.com/codebean/archive/2011/07/25/2116043.html

(3)jiwang1980,《LVS+Keepalived》:http://7567567.blog.51cto.com/706378/578289

(4)南飛螞蟻的BLOG,《Linux負(fù)載均衡軟件LVS之概念篇》:http://ixdba.blog.51cto.com/2895551/552947

(***King王國,《四層和七層負(fù)載均衡的區(qū)別》:http://kb.cnblogs.com/page/188170/

 

責(zé)任編輯:林師授 來源: 周旭龍的博客
相關(guān)推薦

2015-03-18 14:56:58

負(fù)載均衡服務(wù)器集群

2013-09-09 11:14:06

AndroidiOS

2023-11-09 07:58:50

2012-02-15 00:01:34

2014-09-28 10:28:59

Docker云計算

2010-06-21 14:37:18

2010-09-15 14:50:57

集群負(fù)載均衡Tomcat

2012-05-07 10:20:12

LVS集群

2012-02-13 23:46:22

keepalived高可用

2009-01-10 18:53:01

服務(wù)器ServerDNS

2014-05-30 13:35:21

MySQL Clust架構(gòu)

2009-04-20 14:00:57

2018-10-14 08:39:52

NginxTomcat服務(wù)器

2009-07-22 10:25:37

2010-04-20 17:12:57

服務(wù)器負(fù)載均衡

2012-04-02 15:43:45

nginxtomcat

2010-11-19 12:53:53

梭子魚負(fù)載均衡

2011-11-22 21:26:59

pfSense配置Web服務(wù)器負(fù)載均衡

2010-04-20 15:02:27

服務(wù)器負(fù)載均衡

2011-08-25 09:46:02

SQL Server數(shù)負(fù)載均衡集群
點贊
收藏

51CTO技術(shù)棧公眾號