防偽碼:出淤泥而不染,濯清漣而不妖
第五章 LVS負載均衡群集
前言:在各種互聯(lián)網(wǎng)應用中,隨著站點對硬件性能、相應速度、服務穩(wěn)定性、數(shù)據(jù)可靠性等要求越來越高,單臺服務器將難以承擔所有的訪問,除了使用價格昂貴的大型機、專用負載分流設(shè)備以外,企業(yè)還有另外一種選擇來解決難題,那就是構(gòu)建集群服務器——通過整合多臺相對廉價的普通服務器,以同一個地址對外提供相同的服務。本章我們將學習企業(yè)中常用的群集技術(shù)——LVS。
一、 群集技術(shù)概述
1、 群集的類型
1) 負載均衡群集:主要的功能將來自客戶機的訪問請求分流給多臺服務器,從而緩單臺服務器的負載壓力,例如京東淘寶的購物節(jié)的時候,當天的并發(fā)量是分常大的,單臺服務器是無法承載的。
2) 高可用群集:高可用群集和hsrp原理基本一樣,服務器有主從之分,實現(xiàn)故障切換,當一臺服務器發(fā)生故障的時候,另一臺服務器馬上提供工作。
3) 高性能運算群集:這種群集主要用在“云計算”中,就是將多臺服務器的硬件整合到一起,實現(xiàn)高性能運算能力
2、 負載均衡的分層結(jié)構(gòu)
第一層:負載調(diào)度器,是群集系統(tǒng)的唯一入口,對外使用所有服務器共有的虛擬ip地址,通常會配置主從兩臺調(diào)度器實現(xiàn)熱備份,確保高可用性。
第二層:服務器池,也就是提供各種服務的服務器,例如web服務器,ftp服務器,數(shù)據(jù)庫服務器等,處理調(diào)度器發(fā)來的請求。
第三層:共享存儲,主要存儲服務器池中應用程序的數(shù)據(jù),一般會采用nas或者san設(shè)備,我們今天就使用NFS搭建一臺nas服務器,工作中也可以購買硬件nas和san。
3、 負載均衡的工作模式
1) 地址轉(zhuǎn)換,簡稱nat模式,負載均衡調(diào)度器作為網(wǎng)關(guān),服務器和負載調(diào)度器在同一個私有網(wǎng)絡(luò),安全性較好。
2) Ip隧道,簡稱tun模式,負載調(diào)度器僅作為客戶機的訪問入口,各節(jié)點通過各自的internet連接直接回應客戶機,不在經(jīng)過負載調(diào)度器,服務器的節(jié)點分散在互聯(lián)網(wǎng)的不同位置,具有獨立的共有ip地址,通過專用的ip隧道與負載調(diào)度器相互通信。
3) 直接路由,簡稱DR模式,與TUN模式類似,但各節(jié)點不是分散在各地,而是與調(diào)度器位于同一個物理網(wǎng)絡(luò),負載調(diào)度器與各節(jié)點服務器通過本地網(wǎng)絡(luò)連接,不需要建立專用的ip隧道。
以上三種模式中,nat方式只需要一個公網(wǎng)地址,從而成為最容易的一種負載均衡模式,安全性也比較好,許多硬件負載均衡設(shè)備就是采用這種方式,性比較而言,DR模式和TUN模式的負載能力更強大,使用范圍更廣,但節(jié)點的安全性要稍差一些。
二、 LVS虛擬服務器
Lvs是linux內(nèi)核的一部分,由我國的章文嵩博士在1998年創(chuàng)建,也是極少數(shù)由中國人開發(fā)的優(yōu)秀軟件之一,我們可以直接手動加載ip_vs模塊,并查看當前系統(tǒng)中ip_vs模塊的版本信息,命令如下:
1、 lvs的負載調(diào)度算法
1) 輪詢(rr):將受到的訪問請求按順序輪流分配給群集中的各節(jié)點,不管服務器的連接數(shù)和系統(tǒng)負載。
2) 加權(quán)輪詢(wrr):也是輪流分配,但是可以調(diào)整權(quán)重,讓處理性能強的服務器承擔更多的訪問流量。
3) 最少連接(lc):根據(jù)連接數(shù)分配,分配給連接數(shù)少的節(jié)點。
4) 加權(quán)最少連接(wlc):權(quán)重高的節(jié)點將承擔更大比例的負載
2、 使用ipvsadm管理工具
Ipvsadm是在負載調(diào)度器上使用的lvs群集管理工具,通過調(diào)用ip_vs模塊來添加、刪除服務器節(jié)點。需要手動安裝。
其它的命令接下來用一個綜合實驗給大家說明,這樣思路比較清晰。
3、 NFS共享存儲服務
NFS與我們之前講過的openfiler、nas、san設(shè)備相似,都是屬于存儲設(shè)備,其實NFS就是一種nas存儲。
我們在學習虛擬化的時候就使用過openfiler搭建過存儲,其實在exsi上也可以使用NFS作為存儲。
接下來用一個綜合實驗詳細介紹安裝和使用。
三、 綜合案例:搭建LVS群集(NAT模式)
實驗目標:搭建lvs群集,lvs負載調(diào)度器有兩塊網(wǎng)卡,是所有內(nèi)部web服務器的網(wǎng)關(guān)服務器,需要為負載調(diào)度器配置SNAT,以便內(nèi)部的服務器可以訪問internet,所有的節(jié)點服務器、共享存儲位于私有網(wǎng)絡(luò),網(wǎng)關(guān)指向負載調(diào)度器的192.168.7.254
實驗步驟:
1、 搭建NFS服務器
1) 安裝nfs-utils(用來發(fā)布共享和訪問)和rpcbind(用于RPC支持)
2) 設(shè)置共享目錄
將文件夾/opt/wwwroot共享給內(nèi)部的web服務器節(jié)點使用,命令如下:
打開/etc/exports文件,在里面設(shè)置共享
rw:讀寫,sync:允許同步寫入,no_root_squash:客戶機以root身份訪問時賦予本地root權(quán)限。
3) 啟動NFS服務程序
4) 查看本機發(fā)布的NFS共享目錄
5) 在web節(jié)點A上訪問NFS共享資源
若要正常訪問NFS共享資源,客戶機中也需要安裝rpcbind軟件包,并啟動服務器,如果想使用showmount查詢共享,也需要安裝nfs-utils軟件包,總之和服務器一樣都裝上吧。
然后在NFS上面關(guān)閉防火墻
在web節(jié)點A上連接
可以看到/opt/wwwroot就說明連接成功了。
6)在兩臺節(jié)點服務器上安裝nginx,并開啟nginx服務
7)在NFS服務器的/opt/wwwroot里面制作網(wǎng)頁index.html,然后到web節(jié)點A的/usr/local/nginx/html中查看,如果有index.html就說明掛載成功。
8)設(shè)置自動掛載
Vi /etc/fstab(末行添加,如下所示)
注:文件系統(tǒng)類型為nfs、掛載參數(shù)_netdev(設(shè)備需要網(wǎng)絡(luò))
然后重啟電腦,查看是否自動掛載
注意:在web節(jié)點B上做和web節(jié)點A相同的操作,這里就不截圖說明了。
2、 配置負載調(diào)度器
1) 在調(diào)度器上安裝ipvsadm軟件包(通過調(diào)用ip_vs模塊來添加,刪除服務器節(jié)點,以及查看群集的運行狀態(tài))
2) 配置SNAT轉(zhuǎn)發(fā)規(guī)則
首先開啟路由轉(zhuǎn)發(fā)
做一條SNAT策略
3) 配置負載分配策略,主要目的是把web節(jié)點添加到調(diào)度器里面
詳解:
[root@yangwen ~]# service ipvsadm stop
創(chuàng)建虛擬服務器:
[root@yangwen ~]# ipvsadm -A -t 172.16.16.172:80 -s rr //-A表示添加虛擬服務器,-t表示用來指定VIP地址及TCP端口
-s表示負載調(diào)度算法類型,rr表示輪詢
添加服務器節(jié)點:
[root@yangwen ~]# ipvsadm -a -t 172.16.16.172:80 -r 192.168.7.21:80 -m -w 1 //-a表示添加真實服務器,-t同上,-r表示用來指定RIP地址及
TCP端口號,-m表示使用NAT群集模式(-g表示DR模式,-表示
TUN模式),-w表示設(shè)置權(quán)重(權(quán)重為0時表示暫停節(jié)點)
[root@yangwen ~]# ipvsadm -a -t 172.16.16.172:80 -r 192.168.7.22:80 -m -w 1
保存:
[root@yangwen ~]# service ipvsadm save
3、 測試LVS群集
查看負載調(diào)度器
注意:為了方便測試效果,web節(jié)點B的就不掛載NFS了,保持默認的nginx主頁,然后在客戶端上測試,訪問兩次,網(wǎng)頁都不一樣,實現(xiàn)了負載均衡群集。注意測試的時候把兩臺web節(jié)點的網(wǎng)關(guān)指向調(diào)度器,防火墻開啟80端口或者關(guān)閉,然后把調(diào)度器的防火墻開啟FORWARD和INPUT允許80端口。
在客戶端上訪問
客戶端IP地址如下所示:
四、 綜合案例:路由模式的負載均衡群集
LVS調(diào)度器只作為Web訪問入口
Web訪問出口由各節(jié)點服務器分別承擔
實驗步驟:
服務器節(jié)點采用雙網(wǎng)卡,一塊用于應答客戶端請求,一塊連接共享存儲。
在實驗中使簡化為下面的環(huán)境:
注意web節(jié)點A有兩塊網(wǎng)卡,一塊192.168.7.21,另一塊172.16.16.177,web節(jié)點B有兩塊網(wǎng)卡,一塊192.168.7.22,另一塊172.16.16.178,
調(diào)度器一塊網(wǎng)卡172.16.16.173,NFS一塊網(wǎng)卡192.168.7.250,注意網(wǎng)卡的對應。
1、 配置調(diào)度器
1) 配置虛擬ip地址(vip)
執(zhí)行:ifup eth0:0并重啟服務
2) 調(diào)整/proc響應參數(shù)
因為lvs負載調(diào)度器和各節(jié)點需要共用vip地址,應該關(guān)閉linux內(nèi)核重定向參數(shù)響應,打開vi /etc/sysctl.conf,增加三行(防止ARP解析沖突)。
執(zhí)行Sysctl -p
3) 配置負載分配策略
2、 配置節(jié)點服務器
使用DR模式時,節(jié)點服務器也需要配置VIP地址,因為客戶端請求的是群集IP地址,目標MAC地址是LVS的,節(jié)點服務器回應時應該以群集IP回應,否則客戶端不能成功接收。還需要調(diào)整內(nèi)核的ARP響應參數(shù)阻止更新VIP的MAC地址,因為客戶端在發(fā)送ARP請求的時候IP地址是群集地址,這是所有的節(jié)點都配置了VIP,這時客戶端的ARP緩存內(nèi)就會出現(xiàn)多條重復的IP地址對應的MAC地址確不相同,這回導致客戶端無法正確找到調(diào)度器。
1) 在節(jié)點B上配置虛擬ip地址
Vi /etc/sysconfig/network-scripts/ifcfg-lo:0
添加vip本地訪問路由
[root@yangwen ~]# vim /etc/rc.d/
/sbin/route add -host 172.16.16.172 dev lo:0 //永久生效
或者
[root@yangwen ~]# route add -host 172.16.16.172 dev lo:0 //臨時生效
2) 調(diào)整/proc響應參數(shù)
vim /etc/sysctl.conf,添加6行
執(zhí)行:sysctl -p
然后再另一臺節(jié)點A上做相同的操作,這里就不再截屏了,大家參考上面,如果不想去打一遍,可以使用scp命令拷貝節(jié)點B上面的文件。
3、 在客戶端上測試,每次打開瀏覽器訪問的頁面在兩臺web服務器之間切換就對了。在實際工作中兩個web節(jié)點上的網(wǎng)頁要保持一致,這樣就能始終訪問一個相同的網(wǎng)站,從而能實現(xiàn)負載均衡。
客戶端IP地址如下所示:
查看當前的負載分配情況:
謝謝觀看,真心的希望能幫到您!
本文出自 “一盞燭光” 博客,謝絕轉(zhuǎn)載!
更多建議: