lvs-nat負載均衡模式

文章的開始,我們要先弄懂一下幾個問題

1. 爲什麼要使用lvs?

    隨着互聯網的發展使多媒體網絡服務器面對的訪問量快速增加,服務器需要具備提供大量併發訪問的能力,因此對於大負載的服務器來講,CPU,I/O處理能力很快會成爲瓶頸。由於單臺服務器的性能總是有限的,簡單地提高硬件性能並不能真正解決這個問題。爲此,必須採用多服務器和負載均衡技術才能滿足大量併發訪問的需求。linux虛擬服務器使用負載均衡技術將多臺服務器組成一個虛擬服務器。它爲適應快速增長的網絡訪問量提供了一個負載能力易於擴展,而價格低廉的解決方案。

2.什麼是lvs?

     LVS是Linux Virtual Server的簡寫,意即Linux虛擬服務器,是一個虛擬的服務器集羣系統。本項目   在1998年5月由章文嵩博士成立,是中國國內最早出現的自由軟件項目之一。

 3.lvs工作原理

VS: Virtual Server ,負責調度

RS: Real Server ,負責真正提供服務

VS 根請求報文的目標IP 和目標協議及端口將其調度轉發至某RS ,根據調度算法來挑選RS

4.lvs集羣的類型

lvs-nat :修改請求報文的目標IP, 多目標IP DNAT

lvs-dr :操縱封裝新的MAC 地址

lvs-tun :在原請求IP 報文之外新加一個IP 首部

lvs-fullnat :修改請求報文的源和目標IP


今天就先講一下lvs-nat模式

工作原理

Virtual Server via NAT(VS-NAT):用地址翻譯實現虛擬服務器地址轉換器有能被外界訪問到的合法IP地址,它修改來自專有網絡的流出包的地址外界看起來包是來自地址轉換器本身,當外界包送到轉換器時,它能判斷出應該將包送到內部網的哪個節點優點是節省IP 地址,能對內部進行僞裝;缺點是效率低,因爲返回給請求方的流量經過轉換器

9efbd1b0f3f962c45a8cc36708308802.png


LVS負載均衡NAT工作流程
c56edd89855bfd0c69b12d25b0ea0bb0.png


  (1). 當用戶請求到達Director Server,此時請求的數據報文會先到內核空間的PREROUTING鏈。 此時報文的源IP爲CIP,目標IP爲VIP
 (2). PREROUTING檢查發現數據包的目標IP是本機,將數據包送至INPUT鏈
 (3). IPVS比對數據包請求的服務是否爲集羣服務,若是,修改數據包的目標IP地址爲後端服務器IP,然後將數據包發至POSTROUTING鏈。 此時報文的源IP爲CIP,目標IP爲RIP
 (4). POSTROUTING鏈通過選路,將數據包發送給Real Server
 (5). Real Server比對發現目標爲自己的IP,開始構建響應報文發回給Director Server。 此時報文的源IP爲RIP,目標IP爲CIP
 (6). Director Server在響應客戶端前,此時會將源IP地址修改爲自己的VIP地址,然後響應給客戶端。 此時報文的源IP爲VIP,目標IP爲CIP


lvs用到的軟件爲ipvsadm

程序包:ipvsadm

Unit File: ipvsadm.service

主程序:/usr/sbin/ipvsadm

規則保存工具/usr/sbin/ipvsadm-save

規則重載工具:/usr/sbin/ipvsadm-restore

配置文件/etc/sysconfig/ipvsadm-config


ipvsadm 命令

集羣服務的RS 管理:增、刪、改

格式:

ipvsadm -A|E -t|u|f service-address [-sscheduler] [-p [timeout]][-M netmask][--pepersistence_engine] [-bsched-flags]

ipvsadm -A ——add-service 在內核的虛擬服務器表中添加一條新的虛擬服務器記錄。

ipvsadm -E ——edit-service 編輯內核虛擬服務器表中的一條虛擬服務器記錄

ipvsadm -D -t|u|f service-address 刪除

ipvsadm C 清空

ipvsadm R 重載

ipvsadm -S [-n] 保存

 增、改:ipvsadm-A|E -t|u|f service-address [-s scheduler] [-p [timeout]]

 刪除:ipvsadm -D -t|u|f service-address

 service-address

-t|u|f

-t: TCP 協議的端口,VIP:TCP_PORT

-u: UDP 協議的端口,VIP:UDP_PORT

-f firewall MARK ,標記,一個數字

 [-s scheduler] :指定集羣的調度算法,默認爲wlc


 增、改:ipvsadm -a|e-t|u|f service-address -rserver-address [-g|i|m] [-w weight]

 刪:ipvsadm -d -t|u|fservice-address -r server-address

 server-address 

rip[:port] 如省略port ,不作端口映射

 選項:

lvs 類型:

-g: gateway, dr 類型,默認

-i: ipip, tun 類型

-m: masquerade, nat 類型

-w weight :權重

 清空定義的所有內容:ipvsadm –C

 清空計數器:ipvsadm -Z[-t|u|f serv ice-address]

 查看:ipvsadm -L|l[options]

--numeric, -n :以數字形式輸出地址和端口號

--exact :擴展信息,精確值

--connection -c :當前IPVS 連接輸出

--stats :統計信息

--rate :輸出速率信息

 ipvs 規則: /proc/net/ip_vs

 ipvs 連接:/proc/net/ip_vs_conn

保存及重載規則

保存:建議保存至/etc/sysconfig/ipvsadm

ipvsadm-save > /PATH/TO/IPVSADM_FILE

ipvsadm -S > /PATH/TO/IPVSADM_FILE

systemctl stop ipvsadm.service

 重載:

ipvsadm-restore </PATH/FROM/IPVSADM_FILE

ipvsadm -R < /PATH/FROM/IPVSADM_FILE

systemctl restart ipvsadm.service

設計要點:

(1) RIP DIP 在同一IP 網絡, RIP 的網關要指向DIP

(2) 支持端口映射

(3) Director 要打開核心轉發功能

實驗


實驗之前要先檢查lnmp是否已經成功,若出現錯誤頁面,查看端口80 3306 9000php-fpm mariadb nginx是否開啓

準備工作:三臺虛擬機一臺lvs-server 兩臺lnmp(僅主機模式):lnmp01,lnmp02,關掉selinux和防火牆。

1.lvs-server:yum install ipvsadm

添加一條新的虛擬服務器記錄 ipvsadm -A -t 172.17.136.172:80 -s wrr

8234c9b146a85c7fbba270e8b18c1c98.png

添加真實服務器lnmp01 lnmp02記錄:

ipvsadm -a -t 172.17.136.172:80 -r 192.168.136.174:80 -m -w 1

ipvsadm -a -t 172.17.136.172:80 -r 192.168.136.174:80 -m -w 1

a02518470318cc03e34acdb9712508db.png

vim /etc/sysctl.conf

net.ipv4.ip_forward=1

lnmp01

添加指向DIP的網關:route add default gw 192.168.136.172

lnmp02

添加指向DIP的網關: route add default gw 192.168.136.172

Lnmp01

測試:寫兩個網頁

Cd /data/web/

Vim index.html

Hello world

Lnmp02

Vim index.html

Good morning

4d1a022d054a16e29bd7d70cd1e75f6e.png

通過訪問一個IP地址可以訪問兩個頁面,這個測試說明可以通過lvs將併發訪問量分發到兩個real-server上從而實現負載均衡。


















發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章