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地址,它修改來自專有網絡的流出包的地址外界看起來包是來自地址轉換器本身,當外界包送到轉換器時,它能判斷出應該將包送到內部網的哪個節點優點
LVS負載均衡NAT工作流程
(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 9000,php-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
添加真實服務器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
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
通過訪問一個IP地址可以訪問兩個頁面,這個測試說明可以通過lvs將並發訪問量分發到兩個real-server上從而實現負載均衡。
本文出自 “13162732” 博客,請務必保留此出處http://13172732.blog.51cto.com/13162732/1980104
lvs-nat負載均衡模式