使用LVS實現負載均衡的原理及安裝配置例項詳解

迷倪小魏發表於2018-01-26


本文轉載自:http://www.cnblogs.com/liwei0526vip/p/6370103.html
  作者:liwei0526vip


 

負載均衡叢集是 load balance 叢集的簡寫,翻譯成中文就是負載均衡叢集。常用的負載均衡開源軟體有nginxlvshaproxy,商業的硬體負載均衡裝置F5Netscale。這裡主要是學習 LVS 並對其進行了詳細的總結記錄。

 

一、負載均衡LVS基本介紹

  LB叢集的架構和原理很簡單,就是當使用者的請求過來時,會直接分發到Director Server上,然後它把使用者的請求根據設定好的排程演算法,智慧均衡地分發到後端真正伺服器(real server)上。為了避免不同機器上使用者請求得到的資料不一樣,需要用到了共享儲存,這樣保證所有使用者請求的資料是一樣的。

   LVS是 Linux Virtual Server 的簡稱,也就是Linux虛擬伺服器。這是一個由章文嵩博士發起的一個開源專案,它的官方網站是 現在 LVS 已經是 Linux 核心標準的一部分。使用 LVS 可以達到的技術目標是:透過 LVS 達到的負載均衡技術和 Linux 作業系統實現一個高效能高可用的 Linux 伺服器叢集,它具有良好的可靠性、可擴充套件性和可操作性。從而以低廉的成本實現最優的效能。LVS 是一個實現負載均衡叢集的開源軟體專案,LVS架構從邏輯上可分為排程層、Server叢集層和共享儲存。

二、LVS的基本工作原理



過程說明:

1.當使用者向負載均衡排程器(Director Server)發起請求,排程器將請求發往至核心空間
2.PREROUTING
鏈首先會接收到使用者請求,判斷目標IP確定是本機IP,將資料包發往INPUT
3.IPVS
是工作在INPUT鏈上的,當使用者請求到達INPUT時,IPVS會將使用者請求和自己已定義好的叢集服務進行比對,如果使用者請求的就是定義的叢集服務,那麼此時IPVS會強行修改資料包裡的目標IP地址及埠,並將新的資料包發往POSTROUTING
4.POSTROUTING
連結收資料包後發現目標IP地址剛好是自己的後端伺服器,那麼此時透過選路,將資料包最終傳送給後端的伺服器

 

三、LVS的組成

LVS 由2部分程式組成,包括 ipvs ipvsadm

1. ipvs(ip virtual server):一段程式碼工作在核心空間,叫ipvs,是真正生效實現排程的程式碼。
2. ipvsadm
:另外一段是工作在使用者空間,叫ipvsadm,負責為ipvs核心框架編寫規則,定義誰是叢集服務,而誰是後端真實的伺服器(Real Server)

 

四、LVS相關術語

1. DS:Director Server。指的是前端負載均衡器節點。
2. RS
Real Server。後端真實的工作伺服器。
3. VIP
:向外部直接面向使用者請求,作為使用者請求的目標的IP地址。
4. DIP
Director Server IP,主要用於和內部主機通訊的IP地址。
5. RIP
Real Server IP,後端伺服器的IP地址。
6. CIP
Client IP,訪問客戶端的IP地址。

 

下邊是三種工作模式的原理和特點總結。

 

五、LVS/NAT原理和特點

1. 重點理解NAT方式的實現原理和資料包的改變。

過程說明:

(a). 當使用者請求到達Director Server,此時請求的資料包文會先到核心空間的PREROUTING鏈。 此時報文的源IPCIP,目標IPVIP 
(b). PREROUTING
檢查發現資料包的目標IP是本機,將資料包送至INPUT
(c). IPVS
比對資料包請求的服務是否為叢集服務,若是,修改資料包的目標IP地址為後端伺服器IP,然後將資料包發至POSTROUTING鏈。 此時報文的源IPCIP,目標IPRIP 
(d). POSTROUTING
鏈透過選路,將資料包傳送給Real Server
(e). Real Server
比對發現目標為自己的IP,開始構建響應報文發回給Director Server。 此時報文的源IPRIP,目標IPCIP 
(f). Director Server
在響應客戶端前,此時會將源IP地址修改為自己的VIP地址,然後響應給客戶端。 此時報文的源IPVIP,目標IPCIP

 

2. LVS-NAT模型的特性

1RS應該使用私有地址,RS的閘道器必須指向DIP

2DIPRIP必須在同一個網段內

3)請求和響應報文都需要經過Director Server,高負載場景中,Director Server易成為效能瓶頸

4)支援埠對映

5RS可以使用任意作業系統

缺陷:對Director Server壓力會比較大,請求和響應都需經過director server

 

六、LVS/DR原理和特點

1. 重將請求報文的目標MAC地址設定為挑選出的RSMAC地址

過程說明:

(a)當使用者請求到達Director Server,此時請求的資料包文會先到核心空間的PREROUTING鏈。 此時報文的源IPCIP,目標IPVIP
(b)PREROUTING
檢查發現資料包的目標IP是本機,將資料包送至INPUT
(c)IPVS
比對資料包請求的服務是否為叢集服務,若是,將請求報文中的源MAC地址修改為DIPMAC地址,將目標MAC地址修改RIPMAC地址,然後將資料包發至POSTROUTING鏈。 此時的源IP和目的IP均未修改,僅修改了源MAC地址為DIPMAC地址,目標MAC地址為RIPMAC地址 
(d)
由於DSRS在同一個網路中,所以是透過二層來傳輸。POSTROUTING鏈檢查目標MAC地址為RIPMAC地址,那麼此時資料包將會發至Real Server
(e)RS
發現請求報文的MAC地址是自己的MAC地址,就接收此報文。處理完成之後,將響應報文透過lo介面傳送給eth0網路卡然後向外發出。 此時的源IP地址為VIP,目標IPCIP 
(f)
響應報文最終送達至客戶端

 

2. LVS-DR模型的特性

特點1:保證前端路由將目標地址為VIP報文統統發給Director Server,而不是RS

2RS可以使用私有地址;也可以是公網地址,如果使用公網地址,此時可以透過網際網路對RIP進行直接訪問

3RSDirector Server必須在同一個物理網路中

4)所有的請求報文經由Director Server,但響應報文必須不能進過Director Server

5)不支援地址轉換,也不支援埠對映

6RS可以是大多數常見的作業系統

7RS的閘道器絕不允許指向DIP(因為我們不允許他經過director)

8RS上的lo介面配置VIPIP地址

缺陷:RSDS必須在同一機房中

 

3. 特點1的解決方案:

在前端路由器做靜態地址路由繫結,將對於VIP的地址僅路由到Director Server

存在問題:使用者未必有路由操作許可權,因為有可能是運營商提供的,所以這個方法未必實用

arptables:在arp的層次上實現在ARP解析時做防火牆規則,過濾RS響應ARP請求。這是由iptables提供的

修改RS上核心引數(arp_ignorearp_announce)將RS上的VIP配置在lo介面的別名上,並限制其不能響應對VIP地址解析請求。

 

七、LVS/Tun原理和特點

在原有的IP報文外再次封裝多一層IP首部,內部IP首部(源地址為CIP,目標IPVIP),外層IP首部(源地址為DIP,目標IPRIP)

過程說明:

(a)當使用者請求到達Director Server,此時請求的資料包文會先到核心空間的PREROUTING鏈。 此時報文的源IPCIP,目標IPVIP
(b)PREROUTING
檢查發現資料包的目標IP是本機,將資料包送至INPUT
(c)IPVS
比對資料包請求的服務是否為叢集服務,若是,在請求報文的首部再次封裝一層IP報文,封裝源IP為為DIP,目標IPRIP。然後發至POSTROUTING鏈。 此時源IPDIP,目標IPRIP 
(d)POSTROUTING
鏈根據最新封裝的IP報文,將資料包發至RS(因為在外層封裝多了一層IP首部,所以可以理解為此時透過隧道傳輸)。 此時源IPDIP,目標IPRIP
(e)RS
接收到報文後發現是自己的IP地址,就將報文接收下來,拆除掉最外層的IP後,會發現裡面還有一層IP首部,而且目標是自己的lo介面VIP,那麼此時RS開始處理此請求,處理完成之後,透過lo介面送給eth0網路卡,然後向外傳遞。 此時的源IP地址為VIP,目標IPCIP
(f)
響應報文最終送達至客戶端

 

1LVS-Tun模型特性

1RIPVIPDIP全是公網地址

2RS的閘道器不會也不可能指向DIP

3)所有的請求報文經由Director Server,但響應報文必須不能進過Director Server

4)不支援埠對映

5RS的系統必須支援隧道

 

其實企業中最常用的是 DR 實現方式,而 NAT 配置上比較簡單和方便,後邊實踐中會總結 DR NAT 具體使用配置過程。

 

八、LVS的八種排程演算法

1. 輪叫排程 rr
這種演算法是最簡單的,就是按依次迴圈的方式將請求排程到不同的伺服器上,該演算法最大的特點就是簡單。輪詢演算法假設所有的伺服器處理請求的能力都是一樣的,排程器會將所有的請求平均分配給每個真實伺服器,不管後端 RS 配置和處理能力,非常均衡地分發下去。

 

2. 加權輪叫 wrr
這種演算法比 rr 的演算法多了一個權重的概念,可以給 RS 設定權重,權重越高,那麼分發的請求數越多,權重的取值範圍 0 – 100。主要是對rr演算法的一種最佳化和補充, LVS 會考慮每臺伺服器的效能,並給每臺伺服器新增要給權值,如果伺服器A的權值為1,伺服器B的權值為2,則排程到伺服器B的請求會是伺服器A2倍。權值越高的伺服器,處理的請求越多。

 

3. 最少連結 lc
這個演算法會根據後端 RS 的連線數來決定把請求分發給誰,比如 RS1 連線數比 RS2 連線數少,那麼請求就優先發給 RS1 

 

4. 加權最少連結 wlc
這個演算法比 lc 多了一個權重的概念。

 

5. 基於區域性性的最少連線排程演算法 lblc
這個演算法是請求資料包的目標 IP 地址的一種排程演算法,該演算法先根據請求的目標 IP 地址尋找最近的該目標 IP 地址所有使用的伺服器,如果這臺伺服器依然可用,並且有能力處理該請求,排程器會盡量選擇相同的伺服器,否則會繼續選擇其它可行的伺服器

 

6. 複雜的基於區域性性最少的連線演算法 lblcr
記錄的不是要給目標 IP 與一臺伺服器之間的連線記錄,它會維護一個目標 IP 到一組伺服器之間的對映關係,防止單點伺服器負載過高。

 

7. 目標地址雜湊排程演算法 dh
該演算法是根據目標 IP 地址透過雜湊函式將目標 IP 與伺服器建立對映關係,出現伺服器不可用或負載過高的情況下,發往該目標 IP 的請求會固定發給該伺服器。

 

8. 源地址雜湊排程演算法 sh
與目標地址雜湊排程演算法類似,但它是根據源地址雜湊演算法進行靜態分配固定的伺服器資源。

 

九、實踐LVSNAT模式

1、實驗環境

三臺伺服器,一臺作為 director,兩臺作為 real serverdirector 有一個外網網路卡(172.16.254.200) 和一個內網ip(192.168.0.8),兩個 real server 上只有內網 ip (192.168.0.18)  (192.168.0.28),並且需要把兩個 real server 的內網閘道器設定為 director 的內網 ip(192.168.0.8)

 

2、安裝和配置

兩個 real server 上都安裝 nginx 服務
# yum install -y nginx

Director
上安裝 ipvsadm
# yum install -y ipvsadm

 

Director 上編輯 nat 實現指令碼

# vim /usr/local/sbin/lvs_nat.sh
# 編輯寫入如下內容:
#! /bin/bash
# director
伺服器上開啟路由轉發功能:
echo 1 > /proc/sys/net/ipv4/ip_forward
#
關閉 icmp 的重定向
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/eth1/send_redirects
# director
設定 nat 防火牆
iptables -t nat -F
iptables -t nat -X
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE
# director
設定 ipvsadm
IPVSADM='/sbin/ipvsadm'
$IPVSADM -C
$IPVSADM -A -t 172.16.254.200:80 -s wrr
$IPVSADM -a -t 172.16.254.200:80 -r 192.168.0.18:80 -m -w 1
$IPVSADM -a -t 172.16.254.200:80 -r 192.168.0.28:80 -m -w 1

 

儲存後,在 Director 上直接執行這個指令碼就可以完成 lvs/nat 的配置

/bin/bash /usr/local/sbin/lvs_nat.sh

檢視ipvsadm設定的規則

ipvsadm -ln

 

3、測試LVS的效果

透過瀏覽器測試2臺機器上的web內容  。為了區分開,我們可以把 nginx 的預設頁修改一下:

RS1 上執行
# echo "rs1rs1" >/usr/share/nginx/html/index.html

RS2 上執行
# echo "rs2rs2" >/usr/share/nginx/html/index.html
 


注意,切記一定要在兩臺 RS 上設定閘道器的 IP director 的內網 IP

 

十、實踐LVSDR模式

1、實驗環境

三臺機器:

Director節點:  (eth0 192.168.0.8  vip eth0:0 192.168.0.38)

Real server1: (eth0 192.168.0.18 vip lo:0 192.168.0.38)

Real server2: (eth0 192.168.0.28 vip lo:0 192.168.0.38)

 

2、安裝

兩個 real server 上都安裝 nginx 服務

# yum install -y nginx

Director 上安裝 ipvsadm
# yum install -y ipvsadm

 

3Director 上配置指令碼

 

# vim /usr/local/sbin/lvs_dr.sh
#! /bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward
ipv=/sbin/ipvsadm
vip=192.168.0.38
rs1=192.168.0.18
rs2=192.168.0.28
ifconfig eth0:0 down
ifconfig eth0:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip dev eth0:0
$ipv -C
$ipv -A -t $vip:80 -s wrr
$ipv -a -t $vip:80 -r $rs1:80 -g -w 3
$ipv -a -t $vip:80 -r $rs2:80 -g -w 1

 

執行指令碼:

# bash /usr/local/sbin/lvs_dr.sh

 

4、在2 rs 上配置指令碼:

 

# vim /usr/local/sbin/lvs_dr_rs.sh
#! /bin/bash
vip=192.168.0.38
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip 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

 

rs 上分別執行指令碼:

bash /usr/local/sbin/lvs_dr_rs.sh

 

5、實驗測試

測試方式同上,瀏覽器訪問 http://192.168.0.38


注意:在
DR 模式下,2 rs 節點的 gateway 不需要設定成 dir 節點的 IP


參考連結地址:

http://www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html

 

 

十一、LVS結合keepalive

LVS可以實現負載均衡,但是不能夠進行健康檢查,比如一個rs出現故障,LVS 仍然會把請求轉發給故障的rs伺服器,這樣就會導致請求的無效性。keepalive 軟體可以進行健康檢查,而且能同時實現 LVS 的高可用性,解決 LVS 單點故障的問題,其實 keepalive 就是為 LVS 而生的

 

1、實驗環境

4臺節點

Keepalived1 + lvs1(Director1):192.168.0.48

Keepalived2 + lvs2(Director2):192.168.0.58

Real server1:192.168.0.18

Real server2:192.168.0.28

IP: 192.168.0.38

 

2、安裝系統軟體

Lvs + keepalived的2個節點安裝

# yum install ipvsadm keepalived -y

Real server + nginx服務的2個節點安裝

# yum install epel-release –y
# yum install nginx -y

 

3、設定配置指令碼

 

Real server節點2臺配置指令碼:

# vim /usr/local/sbin/lvs_dr_rs.sh
#! /bin/bash
vip=192.168.0.38
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip 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

2節點rs 上分別執行指令碼:
bash /usr/local/sbin/lvs_dr_rs.sh

 

keepalived節點配置(2節點)

 

主節點( MASTER )配置檔案
vim /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.0.38
    }
}

virtual_server 192.168.0.38 80 {
    delay_loop 6
    lb_algo rr
    lb_kind DR
    persistence_timeout 0
    protocol TCP

    real_server 192.168.0.18 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }

    real_server 192.168.0.28 80 {
        weight 1
        TCP_CHECK {
            connect_timeout 10
            nb_get_retry 3
            delay_before_retry 3
            connect_port 80
        }
    }
}

 

從節點( BACKUP )配置檔案

複製主節點的配置檔案keepalived.conf,然後修改如下內容:

state MASTER -> state BACKUP
priority 100 -> priority 90

keepalived的2個節點執行如下命令,開啟轉發功能:

# echo 1 > /proc/sys/net/ipv4/ip_forward

 

4、啟動keepalive

先主後從分別啟動keepalive
service keepalived start

 

5、驗證結果

實驗1

手動關閉192.168.0.18節點的nginxservice nginx stop 在客戶端上去測試訪問 http://192.168.0.38 結果正常,不會出現訪問18節點,一直訪問的是28節點的內容。

 

實驗2

手動重新開啟 192.168.0.18 節點的nginx service nginx start 在客戶端上去測試訪問http://192.168.0.38 結果正常,按照 rr 排程演算法訪問18節點和28節點。

 

實驗3

測試 keepalived HA特性,首先在master上執行命令 ip addr ,可以看到38vipmaster節點上的;這時如果在master上執行 service keepalived stop 命令,這時vip已經不再master上,在slave節點上執行 ip addr 命令可以看到 vip 已經正確漂到slave節點,這時客戶端去訪問 http://192.168.0.38 訪問依然正常,驗證了 keepalivedHA特性。

 

 


 作者:SEian.G(苦練七十二變,笑對八十一難)


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31015730/viewspace-2150540/,如需轉載,請註明出處,否則將追究法律責任。

相關文章