LVS負載均衡集羣

第1章 LVS負載均衡集羣簡介

1.1 負載均衡介紹

1.1.1 負載均衡的妙用

負載均衡(Load Balance)集羣提供了一種廉價、有效、透明的方法,來擴展網絡設備和服務器的負載、帶寬、增長吞吐量、增強網絡數據處理能力、提升網絡的靈活性和可用性。html

Ø 單臺計算機沒法承受大規模的併發訪問或數據流量了,此時須要搭建負載均衡集羣把流量分攤到多臺節點設備上分別處理,即減小用戶等待響應的時間又提高了用戶體驗;前端

Ø 7*24小時的服務保證,任意一個或多個有限後端節點設備宕機,不能影響整個業務的運行。linux

1.1.2 爲何要用lvs

Nginx反向代理優勢web

工做在網絡模型的7層,能夠針對http應用作一些分流的策略,好比針對域名、目錄結構,Nginx單憑這點可利用的場合就遠多於LVS了。算法

最新版本的Nginx也支持4TCP負載,曾經這是LVSNginx好的地方。vim

Nginx對網絡穩定性的依賴很是小,理論上能ping通就就能進行負載功能,這個也是它的優點之一,相反LVS對網絡穩定性依賴比較大。windows

Nginx安裝和配置比較簡單,測試起來比較方便,它基本能把錯誤用日誌打印出來。LVS的配置、測試就要花比較長的時間了,LVS對網絡依賴比較大。後端

那爲何要用lvs呢?瀏覽器

ü 簡單一句話,當併發超過了Nginx上限,就可使用LVS了。緩存

ü 1000-2000W PV或併發請求1萬如下均可以考慮用Nginx

ü 大型門戶網站,電商網站須要用到LVS

1.2 LVS介紹

        LVSLinux Virtual Server的簡寫,意即Linux虛擬服務器,是一個虛擬的服務器集羣系統,能夠在UNIX/LINUX平臺下實現負載均衡集羣功能。該項目在19985月由章文嵩博士組織成立,是中國國內最先出現的自由軟件項目之一

1.2.1 相關參考資料

LVS官網:http://www.linuxvirtualserver.org/index.html


相關中文資料:

LVS項目介紹           http://www.linuxvirtualserver.org/zh/lvs1.html

LVS集羣的體系結構     http://www.linuxvirtualserver.org/zh/lvs2.html

LVS集羣中的IP負載均衡技術  http://www.linuxvirtualserver.org/zh/lvs3.html

LVS集羣的負載調度      http://www.linuxvirtualserver.org/zh/lvs4.html

1.2.2 LVS內核模塊ip_vs介紹

早在2.2內核時, IPVS就已經之內核補丁的形式出現。

2.4.23版本開始,IPVS軟件就合併到Linux內核的經常使用版本的內核補丁的集合。

2.4.24之後IPVS已經成爲Linux官方標準內核的一部分。

image.png 

Ø LVS無需安裝

Ø 安裝的是管理工具,第一種叫ipvsadm,第二種叫keepalive

Ø ipvsadm是經過命令行管理,而keepalive讀取配置文件管理

Ø 後面咱們會用Shell腳本實現keepalive的功能

第2章 LVS集羣部署

2.1 LVS集羣搭建

2.1.1 集羣環境說明

 

主機名

IP地址

軟件

系統版本

lb03

10.0.0.15

lvs keepalived

CentOS Linux release 7.2.1511

lb04

10.0.0.16

lvs keepalived

CentOS Linux release 7.2.1511

web03

10.0.0.18

tomcat

CentOS Linux release 7.2.1511

web04

10.0.0.17

tomcat

CentOS Linux release 7.2.1511


主機說明

[root@lb03 ~]# cat /etc/redhat-release

CentOS Linux release 7.2.1511 (Core)

[root@lb03 ~]# uname -r

3.10.0-327.el7.x86_64

[root@lb03 ~]# getenforce

Disabled

[root@lb03 ~]# systemctl status firewalld.service

firewalld.service - firewalld - dynamic firewall daemon

   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)

   Active: inactive (dead)

web環境說明

image.png 

image.png 

 

2.1.2 安裝ipvsadm管理工具(只在負載服務器上操做)

 

# 查看系統的LVS模塊

lsmod|grep ip_vs

 

# 默認沒有加載模塊,須要安裝管理工具纔會激活

yum -y install ipvsadm

 

# 查看當前LVS狀態,順便激活LVS內核模塊

ipvsadm

 

# 激活後查看系統的LVS模塊

[root@lb03 ~]# ipvsadm

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

[root@lb03 ~]# lsmod|grep ip_vs

ip_vs                 140944  0

nf_conntrack          105745  1 ip_vs

libcrc32c              12644  2 xfs,ip_vs

2.1.3 配置LVS負載均衡服務(在lb03操做)

步驟1:在eth0網卡綁定VIP地址(ip

步驟2:清除當前全部LVS規則(-C

步驟3:設置tcptcpfinudp連接超時時間(--set

步驟4:添加虛擬服務(-A),調度算法見man ipvsadm

步驟5:將虛擬服務關聯到真實服務上(-a

步驟6:查看配置結果(-ln

 

操做命令

ip addr add 10.0.0.13/24 dev eth0

ipvsadm -C                    

ipvsadm --set 30 5 60         

ipvsadm -A -t 10.0.0.13:80 -s wrr -p 20   

ipvsadm -a -t 10.0.0.13:80 -r 10.0.0.17:80 -g -w 1

ipvsadm -a -t 10.0.0.13:80 -r 10.0.0.18:80 -g -w 1

ipvsadm -ln

 

參數說明:

-A  添加虛擬服務

-t  添加tcp IP地址

-s  指定輪詢算法 rr 輪詢 wrr 加權輪詢

-p  指定超時時間

-a  關聯真實服務器

-r  接真實服務器地址

-g  使用直接路由模式,這也是默認值  LVS4種工做狀態

-w  權重

-l  查看結果

-n  不反向解析ip爲域名

ipvsadm參數說明:(更多參照 man ipvsadm)

 

檢查結果:

[root@lb03 ~]# ipvsadm -ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  10.0.0.13:80 wrr persistent 20

  -> 10.0.0.17:80                 Route   1      0          0         

  -> 10.0.0.18:80                 Route   1      0          0    

 

參數

(短格式)

參數

(長格式)

參數說明

-A

--add-service

在內核的虛擬服務器表中添加一條新的虛擬服務器記錄。也就是增長一臺新的虛擬服務器。

-E

--edit-service

編輯內核虛擬服務器表中的一條虛擬服務器記錄。

-D

--delete-service

刪除內核虛擬服務器表中的一條虛擬服務器記錄。

-C

--clear

清除內核虛擬服務器表中的全部記錄。

-R

--restore

恢復虛擬服務器規則

-S

--save

保存虛擬服務器規則,輸出爲-R 選項可讀的格式

-a

--add-server

在內核虛擬服務器表的一條記錄裏添加一條新的真實服務器記錄。也就是在一個虛擬服務器中增長一臺新的真實服務器

-e

--edit-server

編輯一條虛擬服務器記錄中的某條真實服務器記錄

-d

--delete-server

刪除一條虛擬服務器記錄中的某條真實服務器記錄

-L|-l

--list

顯示內核虛擬服務器表

-Z

--zero

虛擬服務表計數器清零(清空當前的鏈接數量等)

-

--set tcp tcpfin udp

設置鏈接超時值

-

--start-daemon

啓動同步守護進程。他後面能夠是master或backup,用來講明LVS Router 是master或是backup。在這個功能上也能夠採用keepalived 的VRRP 功能。

-

--stop-daemon

中止同步守護進程

-h

--help

顯示幫助信息

-t

--tcp-service service-address [vip:port] or [real-server-ip:port]

說明虛擬服務器提供的是tcp 的服務

-u

--udp-service service-address [vip:port] or [real-server-ip:port]

說明虛擬服務器提供的是udp 的服務

-f

--fwmark-servicefwmark

說明是通過iptables 標記過的服務類型。

-s

--scheduler scheduler

使用的調度算法,有這樣幾個選項

rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq

默認的調度算法是: wlc

-p

--persistent [timeout]

持久穩固的服務。這個選項的意思是來自同一個客戶的屢次請求,將被同一臺真實的服務器處理。timeout 的默認值爲300秒。

-M

--netmask netmask

persistent granularity mask

-r

--real-server server-address

真實的服務器[Real-Server:port]

-g

--gatewaying

指定LVS 的工做模式爲直接路由模式(也是LVS 默認的模式)

-i

--ipip

指定LVS 的工做模式爲隧道模式

-m

--masquerading

指定LVS 的工做模式爲NAT 模式

-w

--weight weight

真實服務器的權值

-

--mcast-interface

interface 指定組播的同步接口

-c

--connection

顯示LVS 目前的鏈接 如:ipvsadm -L -c

-

--timeout   

顯示tcp tcpfin udp 的timeout 值 如:ipvsadm -L --timeout

-

--daemon    

顯示同步守護進程狀態

-

--stats     

顯示統計信息

-

--rate      

顯示速率信息

-

--sort      

對虛擬服務器和真實服務器排序輸出

-

--numeric -n

輸出IP 地址和端口的數字形式

 

2.1.4 web服務器配置(在web03/web04同時操做下面步驟)

步驟1:在lo網卡綁定VIP地址(ip

步驟2:修改內核參數抑制ARP響應

 

操做命令

ip addr add 10.0.0.13/32 dev lo

 

cat >>/etc/sysctl.conf<<EOF

net.ipv4.conf.all.arp_ignore = 1

net.ipv4.conf.all.arp_announce = 2

net.ipv4.conf.lo.arp_ignore = 1

net.ipv4.conf.lo.arp_announce = 2

EOF

sysctl -p

 

至此LVS集羣配置完畢——進行驗證

 

image.png 

image.png 

 

疑問解答:

問題1:瀏覽器訪問沒有發現輪詢效果

   答:LVS的輪詢不像Nginx明顯,可使用多個客戶端訪問(WindowsLinux


問題2:使用抓包工具,發現進行通訊的是WindowsIPlb0380端口,可是lb03明明沒有80端口?

    答:windows抓包查看,能夠發現數據包的源MAC地址是web03web04,說明真正響應客戶端請求的是web03web04

          Linuxtcpdump -nn port 80;  tcpdump -nn -e port 80

 

arp解析查看:

[root@lb04 ~]# arp -n

Address                  HWtype  HWaddress           Flags Mask            Iface

10.0.0.1                 ether   00:50:56:c0:00:08   C                     eth0

10.0.0.17                ether   00:50:56:26:50:8a   C                     eth0

10.0.0.18                ether   00:50:56:23:12:f3   C                     eth0

10.0.0.254               ether   00:50:56:e4:7f:10   C                     eth0

 

[f:\~]$ arp -a

接口: 10.0.0.1 --- 0x13

  Internet 地址         物理地址              類型

  10.0.0.13             00-50-56-32-cc-5b     動態        

  10.0.0.15             00-50-56-2b-cd-ba     動態        

  10.0.0.16             00-50-56-32-cc-5b     動態        

  10.0.0.17             00-50-56-26-50-8a     動態        

  10.0.0.18             00-50-56-23-12-f3     動態    

image.png 

2.2 負載均衡(LVS)相關名詞

image.png 

 

術語說明:

DSDirector Server。指的是前端負載均衡器節點。

RSReal Server。後端真實的工做服務器。

VIP:向外部直接面向用戶請求,做爲用戶請求的目標的IP地址。

DIPDirector Server IP,主要用於和內部主機通信的IP地址。

RIPReal Server IP,後端服務器的IP地址。

CIPClient IP,訪問客戶端的IP地址。

 

2.3 LVS集羣的工做模式--DR直接路由模式

        DR模式是經過改寫請求報文的目標MAC地址,將請求發給真實服務器的,而真實服務器將響應後的處理結果直接返回給客戶端用戶。

DR技術可極大地提升集羣系統的伸縮性。但要求調度器LB與真實服務器RS都有一塊物理網卡連在同一物理網段上,即必須在同一局域網環境。

image.png 

DR直接路由模式說明:

Ø 經過在調度器LB上修改數據包的目的MAC地址實現轉發。注意,源IP地址仍然是CIP,目的IP地址仍然是VIP


Ø 請求的報文通過調度器,而RS響應處理後的報文無需通過調度器LB,所以,併發訪問量大時使用效率很高,比Nginx代理模式強於此處。


Ø DR模式是經過MAC地址的改寫機制實現轉發的,所以,全部RS節點和調度器LB只能在同一個局域網中。須要注意RS節點的VIP的綁定(lo:vip/32)ARP抑制問題。


Ø 強調下:RS節點的默認網關不須要是調度器LBDIP,而應該直接是IDC機房分配的上級路由器的IP(這是RS帶有外網IP地址的狀況),理論上講,只要RS能夠出網便可,不須要必須配置外網IP,但走本身的網關,那網關就成爲瓶頸了。


Ø 因爲DR模式的調度器僅進行了目的MAC地址的改寫,所以,調度器LB沒法改變請求報文的目的端口。LVS DR模式的辦公室在二層數據鏈路層(MAC),NAT模式則工做在三層網絡層(IP)和四層傳輸層(端口)。


Ø 當前,調度器LB支持幾乎全部UNIXLinux系統,但不支持windows系統。真實服務器RS節點能夠是windows系統。


Ø 總之,DR模式效率很高,可是配置也較麻煩。所以,訪問量不是特別大的公司能夠用haproxy/Nginx取代之。這符合運維的原則:簡單、易用、高效。日1000-2000W PV或併發請求1萬如下均可以考慮用haproxy/Nginx(LVSNAT模式)


Ø 直接對外的訪問業務,例如web服務作RS節點,RS最好用公網IP地址。若是不直接對外的業務,例如:MySQL,存儲系統RS節點,最好只用內部IP地址。

 

DR的實現原理和數據包的改變

image.png 

DR原理:

1. 當用戶請求到達Director Server,此時請求的數據報文會先到內核空間的PREROUTING鏈。 此時報文的源IP爲CIP,目標IP爲VIP

2. PREROUTING檢查發現數據包的目標IP是本機,將數據包送至INPUT鏈

3. IPVS比對數據包請求的服務是否爲集羣服務,如果,將請求報文中的源MAC地址修改成DIP的MAC地址,將目標MAC地址修改RIP的MAC地址,而後將數據包發至POSTROUTING鏈。 此時的源IP和目的IP均未修改,僅修改了源MAC地址爲DIP的MAC地址,目標MAC地址爲RIP的MAC地址

4. 因爲DS和RS在同一個網絡中,因此是經過二層來傳輸。POSTROUTING鏈檢查目標MAC地址爲RIP的MAC地址,那麼此時數據包將會發至Real Server。

5. RS發現請求報文的MAC地址是本身的MAC地址,就接收此報文。處理完成以後,將響應報文經過lo接口傳送給eth0網卡而後向外發出。 此時的源IP地址爲VIP,目標IP爲CIP

6. 響應報文最終送達至客戶端

2.4 web端的操做有什麼含義?

2.4.1 RealServer爲何要在lo接口上配置VIP

答:既然要讓RS可以處理目標地址爲vipIP包,首先必需要讓RS能接收到這個包。

   lo上配置vip可以完成接收包並將結果返回client

2.4.2 eth0網卡上配置VIP能夠嗎?

答:不能夠,將VIP設置在eth0網卡上,會影響RSarp請求,形成總體LVS集羣arp緩存表紊亂,以致於整個負載均衡集羣都不能正常工做。

2.4.3 爲何要抑制ARP響應?

先回顧ARP知識及瞭解arp_announcearp_ignore做用。


arp協議說明


ARP協議,全稱"Address Resolution Protocol",中文名是地址解析協議,使用ARP協議可實現經過IP地址得到對應主機的物理地址(MAC地址)

ARP協議要求通訊的主機雙方必須在同一個物理網段(即局域網環境)!

爲了提升IP轉換MAC的效率,系統會將解析結果保存下來,這個結果叫作ARP緩存。

Windows查看ARP緩存命令 arp -a

Linux查看ARP緩存命令 arp -nCentOS7須要安裝net-tools

Linux解析IP對應的MAC地址 arping -c 1 -I eth0 10.0.0.17

 

ARP緩存表是把雙刃劍

(1) 主機有了arp緩存表,能夠加快ARP的解析速度,減小局域網內廣播風暴。由於arp是發廣播解析的,頻繁的解析也是消耗帶寬的,尤爲是機器多的時候。

(2) 正是有了arp緩存表,給惡意***帶來了***服務器主機的風險,這個就是arp欺騙***。

(3) 切換路由器,負載均衡器等設備時,可能會致使短時網絡中斷。緣由是全部的客戶端ARP緩存表沒有更新

服務器切換ARP問題

當集羣中一臺提供服務的lb01機器宕機後,而後VIP會轉移到備機lb02上,可是客戶端的ARP緩存表的地址解析仍是宕機的lb01MAC地址。從而致使,即便在lb02上添加VIP,也會發生客戶端沒法訪問的狀況。

解決辦法是:當lb01宕機,VIP地址遷移到lb02時,須要經過arping命令通知全部網絡內機器更新本地的ARP緩存表,從而使得客戶機訪問時從新廣播獲取MAC地址。

這個是本身開發服務器高可用腳本及全部高可用軟件必須考慮到的問題。

 

ARP廣播進行新的地址解析

arping -I eth0 -c 1 -U VIP

arping -I eth0 -c 1 -U 10.0.0.13

 

測試命令

ip addr del 10.0.0.13/24 dev eth0

ip addr add 10.0.0.13/24 dev eth0

ip addr show eth0

arping -I eth0 -c 1 -U 10.0.0.13


arp_announcearp_ignore詳解

配置的內核參數

net.ipv4.conf.all.arp_ignore = 1

net.ipv4.conf.all.arp_announce = 2

net.ipv4.conf.lo.arp_ignore = 1

net.ipv4.conf.lo.arp_announce = 2

lvsDR模式下須要關閉arp功能

 

arp_announce

對網絡接口上,本地IP地址的發出的,ARP迴應,做出相應級別的限制:

肯定不一樣程度的限制,宣佈對來自本地源IP地址發出Arp請求的接口

數值

含義

0(默認)

在任意網絡接口(eth0,eth1,lo)上的任何本地地址

1

儘可能避免不在該網絡接口子網段的本地地址作出arp迴應. 當發起ARP請求的源IP地址 是被設置應該經由路由達到此網絡接口的時候頗有用.此時會檢查來訪IP是否爲全部接口 上的子網段內ip之一.若是改來訪IP不屬於各個網絡接口上的子網段內,那麼將採用級別2的方式來進行處理.

2

對查詢目標使用最適當的本地地址.在此模式下將忽略這個IP數據包的源地址並嘗試 選擇與能與該地址通訊的本地地址.首要是選擇全部的網絡接口的子網中外出訪問子網中 包含該目標IP地址的本地地址. 若是沒有合適的地址被發現,將選擇當前的發送網絡接口或其餘的有可能接受到該ARP迴應的網絡接口來進行發送.

 

arp_ignore

對目標地定義對目標地址爲本地IPARP詢問不一樣的應答模式0

數值

含義

0(默認值)

迴應任何網絡接口上對任何本地IP地址的arp查詢請求

1

只回答目標IP地址是來訪網絡接口本地地址的ARP查詢請求

2

只回答目標IP地址是來訪網絡接口本地地址的ARP查詢請求,且來訪IP必須在該網絡接口的子網段內

3

不迴應該網絡界面的arp請求,而只對設置的惟一和鏈接地址作出迴應

4-7

保留未使用

8

不迴應全部(本地地址)的arp查詢

抑制RSarp前的廣播狀況

image.png 


抑制RSarp後廣播狀況

image.png 

第3章 LVS集羣的工做模式

3.1 LVS集羣的工做模式總結

Ø DRDirect Routing)直接路由模式

Ø NATNetwork Address Translation

Ø TUNTunneling)隧道模式

Ø FULLNATFull Network Address Translation

3.1.1 LVS集羣的工做模式--NAT

image.png 

        經過網絡地址轉換,調度器LB重寫請求報文的目標地址,根據預設的調度算法,將請求分派給後端的真實服務器,真實服務器的響應報文處理以後,返回時必需要經過調度器,通過調度器時報文的源地址被重寫,再返回給客戶,完成整個負載調度過程。

收費站模式---來去都要通過LB負載均衡器。

NAT方式的實現原理和數據包的改變

image.png 

NAT方式的實現原理和數據包的改變描述

1.當用戶請求到達Director Server,此時請求的數據報文會先到內核空間的PREROUTING鏈。 此時報文的源IPCIP,目標IPVIP

2.PREROUTING檢查發現數據包的目標IP是本機,將數據包送至INPUT

3. IPVS比對數據包請求的服務是否爲集羣服務,如果,修改數據包的目標IP地址爲後端服務器IP,而後將數據包發至POSTROUTING鏈。 此時報文的源IPCIP,目標IPRIP

4.POSTROUTING鏈經過選路,將數據包發送給Real Server

5. Real Server比對發現目標爲本身的IP,開始構建響應報文發回給Director Server。 此時報文的源IPRIP,目標IPCIP

6. Director Server在響應客戶端前,此時會將源IP地址修改成本身的VIP地址,而後響應給客戶端。 此時報文的源IPVIP,目標IPCIP

 

LVS-NAT模型的特性

RS應該使用私有地址,RS的網關必須指向DIP

DIPRIP必須在同一個網段內

請求和響應報文都須要通過Director Server,高負載場景中,Director Server易成爲性能瓶頸

支持端口映射

RS可使用任意操做系統

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

3.1.2 LVS集羣的工做模式--隧道模式TUN

image.png 

 

        採用NAT技術時,因爲請求和響應的報文都必須通過調度器地址重寫,當客戶請求愈來愈多時,調度器的處理能力將成爲瓶頸,爲了解決這個問題,調度器把請求的報文經過IP隧道(至關於ipip或ipsec )轉發至真實服務器,而真實服務器將響應處理後直接返回給客戶端用戶,這樣調度器就只處理請求的入站報文。因爲通常網絡服務應答數據比請求報文大不少,採用 VS/TUN技術後,集羣系統的最大吞吐量能夠提升10倍。

 

        VS/TUN工做流程,它的鏈接調度和管理與VS/NAT中的同樣,只是它的報文轉發方法不一樣。調度器根據各個服務器的負載狀況,鏈接數多少,動態地選擇一臺服務器,將原請求的報文封裝在另外一個IP報文中,再將封裝後的IP報文轉發給選出的真實服務器;真實服務器收到報文後,先將收到的報文解封得到原來目標地址爲VIP地址的報文, 服務器發現VIP地址被配置在本地的IP隧道設備上(此處要人爲配置),因此就處理這個請求,而後根據路由表將響應報文直接返回給客戶。


TUN原理和數據包的改變

image.png 

TUN原理和數據包的改變描述

1.當用戶請求到達Director Server,此時請求的數據報文會先到內核空間的PREROUTING鏈。 此時報文的源IP爲CIP,目標IP爲VIP 。

2.PREROUTING檢查發現數據包的目標IP是本機,將數據包送至INPUT鏈

3.IPVS比對數據包請求的服務是否爲集羣服務,如果,在請求報文的首部再次封裝一層IP報文,封裝源IP爲爲DIP,目標IP爲RIP。而後發至POSTROUTING鏈。 此時源IP爲DIP,目標IP爲RIP

4.POSTROUTING鏈根據最新封裝的IP報文,將數據包發至RS(由於在外層封裝多了一層IP首部,因此能夠理解爲此時經過隧道傳輸)。 此時源IP爲DIP,目標IP爲RIP

5. RS接收到報文後發現是本身的IP地址,就將報文接收下來,拆除掉最外層的IP後,會發現裏面還有一層IP首部,並且目標是本身的lo接口VIP,那麼此時RS開始處理此請求,處理完成以後,經過lo接口送給eth0網卡,而後向外傳遞。 此時的源IP地址爲VIP,目標IP爲CIP

6.響應報文最終送達至客戶端

LVS-Tun模型特性

RIPVIPDIP全是公網地址

RS的網關不會也不可能指向DIP

全部的請求報文經由Director Server,但響應報文必須不能進過Director Server

不支持端口映射

RS的系統必須支持隧道

3.1.3 LVS集羣的工做模式--FULLNAT

image.png 

        LVS的DR和NAT模式要求RS和LVS在同一個vlan中,致使部署成本太高;TUNNEL模式雖然能夠跨vlan,但RealServer上須要部署ipip隧道模塊等,網絡拓撲上須要連通外網,較複雜,不易運維。

爲了解決上述問題,開發出FULLNAT,該模式和NAT模式的區別是:數據包進入時,除了作DNAT,還作SNAT(用戶ip->內網ip),從而實現LVS-RealServer間能夠跨vlan通信,RealServer只須要鏈接到內網。

類比地鐵站多個閘機。

第4章 LVS+Keepalived方案實現

4.1 安裝部署LVS+Keepalived

4.1.1 keepalived功能

1. 添加VIP

2. 添加LVS配置

3. 高可用(VIP漂移)

4. web服務器健康檢查

4.1.2 在負載器安裝Keepalived軟件

安裝keepalived

yum -y install keepalived

 

檢查軟件是否安裝

[root@lb03 ~]# rpm -qa keepalived

keepalived-1.3.5-1.el7.x86_64

4.1.3 修改配置文件

lb03keepalied配置文件

vim /etc/keepalived/keepalived.conf

global_defs {

   router_id LVS_03

}

 

vrrp_instance VI_1 {

    state MASTER

    interface eth0

    virtual_router_id 51

    priority 150

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

     10.0.0.13/24

    }

}

 

virtual_server 10.0.0.13 80 {

    delay_loop 6          

    lb_algo wrr                

    lb_kind DR                

    nat_mask 255.255.255.0

    persistence_timeout 50     

    protocol TCP                

 

    real_server 10.0.0.17 80 {

        weight 1              

        TCP_CHECK {

        connect_timeout 8       

        nb_get_retry 3

        delay_before_retry 3

        connect_port 80

        }

    }

 

    real_server 10.0.0.18 80 {

        weight 1              

        TCP_CHECK {

        connect_timeout 8       

        nb_get_retry 3

        delay_before_retry 3

        connect_port 80

        }

    }

}

 

lb04Keepalied配置文件

global_defs {

   router_id LVS_02

}

 

vrrp_instance VI_1 {

    state BACKUP

    interface eth0

    virtual_router_id 51

    priority 100

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

     10.0.0.13/24

    }

}

virtual_server 10.0.0.13 80 {

    delay_loop 6          

    lb_algo wrr                

    lb_kind DR                

    nat_mask 255.255.255.0

    persistence_timeout 50     

    protocol TCP                

 

    real_server 10.0.0.17 80 {

        weight 1              

        TCP_CHECK {

        connect_timeout 8       

        nb_get_retry 3

        delay_before_retry 3

        connect_port 80

        }

    }

 

    real_server 10.0.0.18 80 {

        weight 1              

        TCP_CHECK {

        connect_timeout 8       

        nb_get_retry 3

        delay_before_retry 3

        connect_port 80

        }

    }

}

 

4.1.4 啓動keepalived服務

[root@lb03 ~]# systemctl start keepalived.service

 

檢查lvs狀態

[root@lb03 ~]# ipvsadm -ln                        

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

TCP  10.0.0.13:80 wrr persistent 50

  -> 10.0.0.17:80                 Route   1      0          0         

  -> 10.0.0.18:80                 Route   1      0          0  

 

檢查虛擬ip

[root@lb03 ~]# ip a s eth0

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000

    link/ether 00:0c:29:de:7c:97 brd ff:ff:ff:ff:ff:ff

    inet 10.0.0.15/24 brd 10.0.0.255 scope global eth0

       valid_lft forever preferred_lft forever

    inet 10.0.0.13/24 scope global secondary eth0

       valid_lft forever preferred_lft forever

    inet6 fe80::20c:29ff:fede:7c97/64 scope link

       valid_lft forever preferred_lft forever

4.1.5 web服務器上進行配置

(在web03/web04同時操做下面步驟)

步驟1:在lo網卡綁定VIP地址(ip

步驟2:修改內核參數抑制ARP響應

 

ip addr add 10.0.0.13/32 dev lo

 

cat >>/etc/sysctl.conf<<EOF

net.ipv4.conf.all.arp_ignore = 1

net.ipv4.conf.all.arp_announce = 2

net.ipv4.conf.lo.arp_ignore = 1

net.ipv4.conf.lo.arp_announce = 2

EOF

sysctl -p

 

注意:web服務器上的配置爲臨時生效,能夠將其寫入rc.local文件,注意文件的執行權限

在瀏覽器測試

4.2 常見LVS負載均衡高可用解決方案

開發相似keepalived的腳本,早期的辦法,如今不推薦使用。

heartbeat+lvs+ldirectord腳本配置方案,複雜不易控制,不推薦使用

RedHat工具piranha,一個web界面配置LVS

LVS-DR+keepalived方案,老師推薦最優方案,簡單、易用、高效。

4.3 lvs排錯思路

image.png

相關文章
相關標籤/搜索