在淺談linux集羣博客中介紹了集羣的基本概念和LVS的基本概念,也說到LVS有三種模型,NAT,DR,TUN,三種,那麼它們具體是怎麼實現負載均衡的呢?此篇博客的目的就是詳解三種模型的工做方式以及每一種模型的配置.其實集羣的配置沒什麼難度,主要是理解原理,
********************************************************************************************************************************************* LVS-NAT模型
*********************************************************************************************************************************************html
NAT模型實現負載均衡的工做方式,
上篇博客中介紹過NAT模型其實就是經過網絡地址轉換來實現負載均衡的,它的工做方式幾乎跟DNAT如出一轍的,目前的DNAT只能轉發到一個目標地址,早期的DNAT是能夠將請求轉發到多個目標的,在LVS出現以後就將此功能從DNAT種去掉了,下面來講說NAT模型的工做方式或者說NAT模型是怎麼實現負載均衡的,根據上圖,
1.用戶請求VIP(也能夠說是CIP請求VIP)
2,Director Server 收到用戶的請求後,發現源地址爲CIP請求的目標地址爲VIP那麼Dorector Server會認爲用戶請求的是一個集羣服務,那麼Director Server 會根據此前設定好的調度算法將用戶請求負載給某臺Real Server ,假如說此時Director Server 根據調度算法的結果會將請求分攤到Real Server 1上去,那麼Director Server 會將用戶的請求報文中的目標地址,從原來的VIP改成Real Server 1的IP,而後再轉發給Real Server 1
3,此時Real Server 1收到一個源地址爲CIP目標地址爲本身的請求,那麼Real Server 1處理好請求後會將一個源地址爲本身目標地址爲CIP的數據包經過Director Server 發出去,
4.當Driector Server收到一個源地址爲Real Server 1 的IP 目標地址爲CIP的數據包,此時Driector Server 會將源地址修改成VIP,而後再將數據包發送給用戶,
*********************************************************************************************************************************************
NAT模型的工做方式基本已經說完了,下面來根據上圖來配置下LVS-NAT模型的集羣,在開始配置以前先說個LVS的概念,這個概念也是上篇博客中沒有提到的,就是LVS自己的組成,
其實LVS的自己跟iptables很類似,並且連命令的使用格式都很類似,其實LVS是根據iptables的框架開發的,那麼LVS的自己分紅了兩個部分,第一部分是工做在內核空間的一個IPVS的模塊,其實LVS的功能都是IPVS模塊實現的,,第二部分是工做在用戶空間的一個用來定義集羣服務的一個工具ipvsadm, 這個工具的主要做用是將管理員定義的集羣服務列表傳送給工做在內核空間中的IPVS模塊,下面來簡單的介紹下ipvsadm命令的用法前端
- 定義集羣服務類的
- #ipvsadm
- -A 添加一個集羣服務
- -D 刪除一個集羣服務
- -E 修改一個集羣服務
- -t VIP:端口 定義集羣服務的類型爲TCP的某個端口
- -u VIP:端口 定義集羣服務的類型爲UDP的某個端口
- -f 防火牆標記 定義集羣服務的類型爲防火牆標記
- -s 調度算法 指定集羣服務的調度算法
- *******************************************************
- 定義集羣節點類的
- #ipvsadm
- -a 添加一個節點到集羣服務
- -d 從集羣服務中刪除一個節點
- -e 修改集羣服務器中的節點
- -r 節點IP:端口 定義節點的IP及類型
- -m 定義爲NAT模型
- -g 定義爲DR模型
- -i 定義爲TUN模型
- -w 權重 定義服務器的權重
- *******************************************************
- 其餘
- #ipvsadm
- -L 查看
- -n
- -c
- --stats
- -C 清空全部規則
- -S 保存規則
- -R 恢復規則
OK 基本已經介紹的差很少了,下面來配置下NAT模型,這裏就以web服務爲例,
*********************************************************************************************************************************************
須要說明的是Real Server 1跟Real Server 2上面的web服務這裏就不作配置說明了,及共享存儲也不作配置說明,這裏就只作跟LVS集羣相關的配置,NAT模型也是三種模型中配置最簡單的一種,以下
一,準備工做
1, 依上圖配置好環境,IP地址等,
2, 配置Real Server 1及Real Server2的web服務,要保證從Director Server 上能訪問到web服務, 共享存儲本身看着辦,
二,安裝ipvsadm工具(只在Director Server 上安裝)
1, 在Director Server上安裝ipvsadmlinux
- 這裏使用yum安裝,固然也能夠編譯安裝,使用yum安裝的時候須要注意的是yum源是yum源是光盤中Cluster目錄中,固然只是RHEL5.x
- RHEL6.x的yum源目錄爲系統發行光盤中LoadBalancer目錄
- 配置好yum源後再安裝
- #yum -y install ipvsadm
三,配置集羣服務
1,在Director Server上定義集羣服務web
- #ipvsadm -A -t 10.0.0.1:80 -s rr
- #ipvsadm -a -t 10.0.0.1:80 -r 20.0.0.2 -m
- #ipvsadm -a -t 10.0.0.1:80 -r 20.0.0.3 -m
- #echo "1" > /proc/sys/net/ipv4/ip_forward
ok, 配置好了,幾條命令就構建一個NAT模型的lvs集羣了,lvs有個缺點就是沒有容錯的功能,怎麼說呢,好比說後端的Real Server羣組中有一臺掛掉了,那麼Directory Server並不知道Real Server 掛掉了,Director Server 會一如既往的將請求負載均衡到掛掉那天服務器上去, 這樣的話確定是不合理的,咱們能夠經過結合高可用集羣來實現容錯功能,那麼不會配置高能夠集羣怎麼辦呢!不要緊,見下面的腳本,面試
- #!/bin/bash
- # andy_f
- # 檢測Real Server的健康,若是某臺Real Server 掛掉沒法提供服務了,此時腳本就會將沒法
- # 提供服務的Real Server剔除集羣服務, 當沒法提供服務的Real Server恢復正常後,腳本
- # 會自動的將此Real Server 重新添加到集羣服務中,
- #
- # 有幾個Real Server RIP數組的值就寫幾個,對應的是Real Server的IP
- RIP=(20.0.0.2 20.0.0.3)
- # CS 是指Cluster Service 集羣服務
- CS=10.0.0.1:80
- test() {
- for i in echo ${RIP[*]};do
- elinks -dump http://$i/.test.html | grep ok &>/dev/null
- if [ $? -eq 0 ];then
- /sbin/ipvsadm -Ln | grep "\<$i\>" &>/dev/null
- if [ ! $? -eq 0 ];then
- /sbin/ipvsadm -a -t $CS -r $i -m
- fi
- else
- /sbin/ipvsadm -d -t $CS -r $i
- fi
- done
- }
- while [ 1 ];do
- test
- sleep 2
- done
腳本的使用說明,在執行以前首先要在網站的根目錄建立一個.test.htnl的文件,內容爲ok
OK! NAT 模型到此結束,下面來講說DR模型
*********************************************************************************************************************************************
LVS-DR模型
*********************************************************************************************************************************************算法
DR模型實現負載均衡的工做方式,
上面說了NAT模型的實現方式,那麼NAT模型有個缺陷,由於進出的每一個數據包都要通過Director Server,當集羣系統負載過大的時候Director Server將會成爲整個集羣系統的瓶頸,那麼DR模型就避免了這樣的狀況發生,DR模型在只有請求的時候纔會通過Director Server, 迴應的數據包由Real Server 直接響應用戶不須要通過Director Server,其實三種模型中最經常使用的也就是DR模型了,下面來講DR模型具體是怎麼實現負載均衡的,根據上圖,
1, 首先用戶用CIP請求VIP,
2, 根據上圖能夠看到,不論是Director Server仍是Real Server上都須要配置VIP,那麼當用戶請求到達咱們的集羣網絡的前端路由器的時候,請求數據包的源地址爲CIP目標地址爲VIP,此時路由器會發廣播問誰是VIP,那麼咱們集羣中全部的節點都配置有VIP,此時誰先響應路由器那麼路由器就會將用戶請求發給誰,這樣一來咱們的集羣系統是否是沒有意義了,那咱們能夠在網關路由器上配置靜態路由指定VIP就是Director Server,或者使用一種機制不讓Real Server 接收來自網絡中的ARP地址解析請求,這樣一來用戶的請求數據包都會通過Director Servre,
3,當Director Server收到用戶的請求後根據此前設定好的調度算法結果來肯定將請求負載到某臺Real Server上去,假如說此時根據調度算法的結果,會將請求負載到Real Server 1上面去,此時Director Server 會將數據幀中的目標MAC地址修改成Real Server1的MAC地址,而後再將數據幀發送出去,
4,當Real Server1 收到一個源地址爲CIP目標地址爲VIP的數據包時,Real Server1發現目標地址爲VIP,而VIP是本身,因而接受數據包並給予處理,當Real Server1處理完請求後,會將一個源地址爲VIP目標地址爲CIP的數據包發出去,此時的響應請求就不會再通過Director Server了,而是直接響應給用戶,
*********************************************************************************************************************************************
DR模型的實現負載均衡的方式基本已經介紹完了,下面來配置下DR模型的LVS集羣,根據上圖來實現
*********************************************************************************************************************************************
一,準備工做(不作詳細介紹)
1, 配置好WEB服務,及基本通訊,須要注意的是VIP先不配置,
二,配置集羣服務,
1, 在Real Server1 和Real Server2上作如下配置,vim
- #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
- 以上命令需填加到/etc/rc.local文件中讓其開機自動生效
- #vim /etc/sysconfig/network-scripts/ifcfg-lo:0 內容以下
- DEVICE=lo:0
- IPADDR=10.0.0.1
- NETMASK=255.255.255.255
- BROADCAST=10.0.0.1
- ONBOOT=yes
- NAME=loopback
- #ifdown lo:0
- #ifup lo:0
- #route add -host 10.0.0.1 dev lo:0
- #echo "route add -host 10.0.0.1 dev lo:0" >> /etc/rc.local
2,在Director Server上作如下配置
後端
- #vim /etc/sysconfig/network-scripts/ifcfg-eth0:0 內容以下
- DEVICE=eth0:0
- IPADDR=10.0.0.1
- NETMASK=255.255.255.255
- BROADCAST=10.0.0.1
- ONBOOT=yes
- #ifdown eth0:0
- #ifup eth0:0
- #route add -host 10.0.0.1 dev eth0:0
- #echo "route add -host 10.0.0.1 dev eth0:0" >> /etc/rc/local
- #echo "1" > /proc/sys/net/ipv4/ip_forward
- #echo "echo "1" > /proc/sys/net/ipv4/ip_forward" >> /etc/rc.local
- #ipvsadm -A -t 10.0.0.1:80 -s rr
- #ipvsadm -a -t 10.0.0.1:80 -r 20.0.0.2 -g
- #ipvsadm -a -t 10.0.0.1:80 -r 20.0.0.3 -g
OK 集羣服務已經配置好了,此篇博客也算結束了,能夠看到負載均衡集羣配置很簡單,幾條命令就搞定了,其實最重要的就是原理,每每面試的時候,面試官問的一些問題也就是原理性的問題,固然也不是說只要知道原理就好了,實戰經驗也是至關重要的,好了不扯了,寫的很差還望朋友們指點,謝謝
數組