一文讀懂負載均衡之LVS: https://blog.csdn.net/yinwenjie/article/details/46845997html
• LVS是由國人章文嵩開發前端
• 流行度不亞於apache的httpd,基於TCP/IP作的路由和轉發,穩定性和效率很高linux
• LVS最新版本基於Linux內核2.6,有好多年不更新了nginx
• LVS有三種常見工做的模式:git
1)VS/NAT模式(Network address translation)web
2)VS/TUN模式(tunneling)算法
3)DR模式(Direct routing)shell
官方三種負載均衡技術比較總結表:apache
• LVS架構中有一個核心角色叫作分發器(Load balance),它用來分發用戶的請求,還有諸多處理用戶請求的服務器(Real Server,簡稱rs)vim
• LVS是Linux Virtual Server的簡稱,即Linux虛擬服務器。目前,LVS項目已經被集成到Linux內核中。LVS具備良好的可靠性、可擴展性和可操做性,加上其實現最優的集羣服務性能所需的低廉成本, LVS的負載均衡功能常常被用於高性能、高可用的服務器羣集中。
• 基於LVS技術能夠實現不少高伸縮、高可用的網絡服務,例如Web服務、Cache服務、DNS服務FTP服務、MAIL服務、視頻/音頻點播服務等。
• LVS 是整個站點架構中的流量入口,根據網絡規模和業務需求,構建負載均衡集羣;完成網絡與業務服務器的銜接,提供高性能、高可用的負載調度能力,以及統一的網絡層防攻擊能力;SNAT 集中提供數據中心的公網訪問服務,經過集羣化部署,保證出網服務的高性能與高可用。
• 在基於LVS 項目架構的服務器集羣系統中,一般包含三個功能層次:最前端的負載均衡層( Load Balancer )、中間的物理服務器羣組層( Server Array )以及最底端的數據共享存儲層( Shared Storage )。
• LVS是一個開源的軟件,能夠實現LINUX平臺下的簡單負載均衡。LVS是Linux Virtual Server的縮寫,意思是Linux虛擬服務器。目前有三種IP負載均衡技術(VS/NAT、VS/TUN和VS/DR);八種調度算法(rr,wrr,lc,wlc,lblc,lblcr,dh,sh)。
• 主流開源軟件LVS、keepalived、haproxy、nginx等;
• 根據lvs在第四層的限定了它的特性。傳輸層的路由交換基於地址和端口,lvs的也能夠根據目標地址和目標端口實現請求轉發。lvs工做於iptables/netfiler的input鏈上,與iptables/netfiler的工做原理及其類似ipvsadm/ipvs。ipvsadm是lvs工具,ipvs工做與內核。
• LVS 的轉發主要經過修改 IP 地址(NAT 模式,分爲源地址修改 SNAT 和目標地址修改 DNAT)、修改目標 MAC(DR 模式)來實現。
• 其中LVS屬於4層(網絡OSI 7層模型),nginx屬於7層,haproxy既能夠認爲是4層,也能夠當作7層使用
• keepalived的負載均衡功能其實就是lvs;
• lvs這種4層的負載均衡是能夠分發除80外的其餘端口通訊的,好比MySQL的,而nginx僅僅支持http,https,mail,haproxy也支持MySQL這種;
• 相比較來講,LVS這種4層的更穩定,能承受更多的請求,而nginx這種7層的更加靈活,能實現更多的個性化需求。
• 負載均衡集羣是 load balance 集羣的簡寫,翻譯成中文就是負載均衡集羣。經常使用的負載均衡開源軟件有nginx、lvs、haproxy,商業的硬件負載均衡設備F五、Netscale。這裏主要是學習 LVS 並對其進行了詳細的總結記錄;
• LVS-FW方式實現LVS的affinity應用,LVS FWM 持久性鏈接應用環境理論及實現 • • LVS 10種調度方案RR、WRR、SH、DH、LC、WLC、SED、NQ、LBLC、LBLCR詳解及應用場景, LVS講解八種負載均衡調度算髮;
固定調度算法:rr,wrr,dh,sh
動態調度算法:wlc,lc,lblc,lblcr
• LVS(Linux Virtual Server)是一個高可用性虛擬的服務器集羣系統。本項目在1998年5月由章文嵩博士成立,是中國國內最先出現的自由軟件項目之一。LVS主要用於多服務器的負載均衡,做用於網絡層。LVS構建的服務器集羣系統中,前端的負載均衡層被稱爲Director Server;後端提供服務的服務器組層被稱爲Real Server。經過下圖能夠大體瞭解LVS的基礎架構。
LVS有三種工做模式,分別是DR(Direct Routing 直接路由)、TUN(Tunneling IP隧道)、NAT(Network Address Translation 網絡地址轉換)。其中TUN模式可以支持更多的Real Server,但須要全部服務器支持IP隧道協議;DR也能夠支持至關的Real Server,但須要保證Director Server虛擬網卡與物理網卡在同一網段;NAT擴展性有限,沒法支持更多的Real Server,由於全部的請求包和應答包都須要Director Server進行解析再生,影響效率。
LVS 集羣架構圖
負載均衡層位於整個集羣系統的最前端,由一臺或者多臺負載調度器( Director Server )組成, LVS模塊就安裝在Director Server的系統上。Director Server的主要功能相似路由器,完成LVS 負載轉發功能所設定的路由表,利用這些路由表信息把用戶的請求分發到Sever Array層的物理服務器( Real Server )上。爲了監測各個Real Server服務器的健康情況,在Director Server上還要安裝監控模塊Ldirectord。
而當監控到某個Real Server不可用時,該服務器會被從LVS 路由表中剔除,恢復時又會從新加入。
服務器陣列或服務器池由一組實際運行應用服務的物理機器組成,Real Server能夠是Web服務器、Mail 服務器、FTP服務器、DNS服務器以及視頻服務器中的一個或者多個的組合。每一個Real Server之間經過高速的LAN或分佈在各地的WAN 相鏈接。
Director Server同時兼任Real Server的角色,在Real Server同時部署LVS模塊。
負載均衡技術有不少實現方案,如基於DNS 域名輪流解析方案、基於客戶端調度訪問方案、基於應用層系統負載的調度方案,以及基於IP地址的調度方案。在上述列舉的負載調度算法中,執行效率最高的是IP負載均衡技術,LVS 的IP 負載均衡技術是經過IPVS模塊來實現的, IPVS是LVS 集羣系統的核心軟件,其主要安裝在集羣的Director Server上,並在Director Server上虛擬出一個服務IP地址,用戶對服務的訪問只能經過該虛擬IP地址實現。這個虛擬IP一般稱爲LVS的VIP( Virtual IP ),用戶的訪問請求首先通過VIP到達負載調度器,而後由負載調度器從Real Server列表中按照必定的負載均衡算法選取一個服務節點響應用戶的請求。
IPVS 實現數據路由轉發的機制有三種,分別是NAT 、TUN 和DR技術。
LVS的優勢:
一、抗負載能力強、工做在第4層僅做分發之用,沒有流量的產生,這個特色也決定了它在負載均衡軟件裏的性能最強的;無流量,同時保證了均衡器IO的性能不會受到大流量的影響;
二、工做穩定,自身有完整的雙機熱備方案,如LVS+Keepalived和LVS+Heartbeat;
三、應用範圍比較廣,能夠對全部應用作負載均衡;
四、配置性比較低,這是一個缺點也是一個優勢,由於沒有可太多配置的東西,因此並不須要太多接觸,大大減小了人爲出錯的概率;
LVS的缺點:
一、軟件自己不支持正則處理,不能作動靜分離,這就凸顯了Nginx/HAProxy+Keepalived的優點。
二、若是網站應用比較龐大,LVS/DR+Keepalived就比較複雜了,特別是後面有Windows Server應用的機器,實施及配置還有維護過程就比較麻煩,相對而言,Nginx/HAProxy+Keepalived就簡單多了。
LVS的類型:
lvs-nat:network address translation,NAT地址轉換
lvs-dr:direct routing ,直接路由
lvs-tun:tunneling,基於隧道的dr
LVS的術語:
director/real server
IP:
VIP:Virtual IP 虛擬ip
DIP: Director IP 多負載調度器ip
RIP: Real Server IP 真實服務器ip
CIP:Client IP 客戶端ip
ipvs: ip virtual server
十種調度算法:
• 靜態調度算法(4種):
(1).rr : round robin :輪叫,輪詢
(2) .wrr: weight round robin :加權輪詢(以權重之間的比例實如今各主機之間進行調度)
(3) .sh : source hashing : 源地址hash實現會話綁定sessionaffinity
(4) .dh : destination hashing : 目標地址hash
• 動態調度算法(6種):
(1).lc :leash-connection 最少鏈接
(2).wlc :加權最少鏈接
(3).sed :最少指望延遲
(4).nq :never queue 永不排隊
(5).LBLC :基於局部性的最少鏈接
(6).LBLCR :基於局部性的帶複製功能的最少鏈接
• Keepalived 是運行在lvs 之上,它的主要功能是實現真實機的故障隔離及負載均衡器間的失敗切換,提升系統的可用性。
注:LVS默認調度算法是 wlc 。
• LVS 八種調度算法
一、 輪叫調度
二、 加權輪叫
三、最少鏈接
四、加權最少鏈接
五、基於局部性的最少鏈接
六、帶複製的基於局部性的最少鏈接
七、目標地址散列
八、源地址散列
LVS 的工做模式主要有 4 種:
術語 |
解釋 |
Load balancer或director |
負載調度器 |
RS或Real Server |
真實服務器,提供服務的服務器 |
VIP |
虛擬IP地址,客戶端訪問集羣的地址 |
RIP |
集羣所提供應用程序的地址(HTTP,FTP) |
DIP |
調度器的真實地址 |
NAT模式(VS-NAT):把客戶端發來的數據包的IP頭的目的地址,在負載均衡器上換成其中一臺RS的IP地址,併發至此RS來處理,RS處理完
成後把數據交給通過負載均衡器,負載均衡器再把數據包的原IP地址改成本身的IP,將目的地址改成客戶端IP地址便可。
IP隧道模式TUN模式(VS-TUN):把客戶端發來的數據包,封裝一個新的IP頭標記(僅目的IP)發給RS,RS收到後,先把數據包的頭解開,還原
數據包,處理後,直接返回給客戶端,不須要再通過負載均衡器。
直接路由模式(VS-DR):負載均衡器和RS都使用同一個IP對外服務。只有DR對ARP請求進行響應,全部RS對自己這個IP的ARP請求保持
靜默。
• 這種模式藉助iptables的nat表來實現
• 用戶的請求到分發器後,經過預設的iptables規則,把請求的數據包轉發到後端的rs上去
• rs須要設定網關爲分發器的內網ip
• 用戶請求的數據包和返回給用戶的數據包所有通過分發器,因此分發器成爲瓶頸
• 在nat模式中,只須要分發器有公網ip便可,因此比較節省公網ip資源。
負載調度器(load balancer/ Director),它是整個集羣對外面的前端機,負責將客戶的請求發送到一組服務器上執行,而客戶認爲服務是來自一個IP地址(咱們可稱之爲虛擬IP地址)上的。
服務器池(server pool/ Realserver),是一組真正執行客戶請求的服務器,執行的服務通常有WEB、MAIL、FTP和DNS等。
共享存儲(shared storage),它爲服務器池提供一個共享的存儲區,這樣很容易使得服務器池擁有相同的內容,提供相同的服務。
LVS集羣採用三層結構,其體系結構如圖所示:
• 這種模式藉助iptables的nat表來實現
• 用戶的請求到分發器後,經過預設的iptables規則,把請求的數據包轉發到後端的rs上去
• rs須要設定網關爲分發器的內網ip
• 用戶請求的數據包和返回給用戶的數據包所有通過分發器,因此分發器成爲瓶頸
• 在nat模式中,只須要分發器有公網ip便可,因此比較節省公網ip資源。
• VS/NAT是一種最簡單的方式,全部的RealServer只須要將本身的網關指向Director便可。客戶端能夠是任意操做系統,但此方式下,一個Director可以帶動的RealServer比較有限。在VS/NAT的方式下,Director也能夠兼爲一臺RealServer。VS/NAT的體系結構如圖所示。
• 這種模式,須要有一個公共的IP配置在分發器和全部rs上,咱們把它叫作vip
• 客戶端請求的目標IP爲vip,分發器接收到請求數據包後,會對數據包作一個加工,會把目標IP改成rs的IP,這樣數據包就到了rs上
• rs接收數據包後,會還原原始數據包,這樣目標IP爲vip,由於全部rs上配置了這個vip,因此它會認爲是它本身
• IP隧道(IP tunneling)是將一個IP報文封裝在另外一個IP報文的技術,這可使得目標爲一個IP地址的數據報文能被封裝和轉發到另外一個IP地址。
• IP隧道技術亦稱爲IP封裝技術(IP encapsulation)。IP隧道主要用於移動主機和虛擬私有網絡(Virtual Private Network),在其中隧道都是靜態創建的,隧道一端有一個IP地址,另外一端也有惟一的IP地址。
• 這種模式,也須要有一個公共的IP配置在分發器和全部rs上,也就是vip
• 和IP Tunnel不一樣的是,它會把數據包的MAC地址修改成rs的MAC地址
• rs接收數據包後,會還原原始數據包,這樣目標IP爲vip,由於全部rs上配置了這個vip,因此它會認爲是它本身
• VS/DR方式是經過改寫請求報文中的MAC地址部分來實現的。Director和RealServer必需在物理上有一個網卡經過不間斷的局域網相連。
• Director的VIP地址對外可見,而RealServer的VIP對外是不可見的。RealServer的地址便可以是內部地址,也能夠是真實地址。
• VS/DR的工做流程如圖所示:它的鏈接調度和管理與VS/NAT和VS/TUN中的同樣,它的報文轉發方法又有不一樣,將報文直接路由給目標服務器。
• 在VS/DR中,調度器根據各個服務器的負載狀況,動態地選擇一臺服務器,不修改也不封裝IP報文,而是將數據幀的MAC地址改成選出服務器的MAC地址,再將修改後的數據幀在與服務器組的局域網上發送。由於數據幀的MAC地址是選出的服務器,因此服務器確定能夠收到這個數據幀,從中能夠得到該IP報文。
VS/DR的方式是目前大型網站使用最普遍的一種負載均衡手段。
注意:linuxDirctor就是分發器
• 輪詢 Round-Robin rr
• 加權輪詢 Weight Round-Robin wrr
• 最小鏈接 Least-Connection lc
• 加權最小鏈接 Weight Least-Connection wlc
• 基於局部性的最小鏈接 Locality-Based Least Connections lblc
• 帶複製的基於局部性最小鏈接 Locality-Based Least Connections with Replication lblcr
• 目標地址散列調度 Destination Hashing dh
• 源地址散列調度 Source Hashing sh
VS/NAT 的優勢是服務器能夠運行任何支持TCP/IP的操做系統,它只須要一個IP地址配置在調度器上,服務器組能夠用私有的IP地址。缺點是它的伸縮能力有限,當服務器結點數目升到20時,調度器自己有可能成爲系統的新瓶頸,由於在VS/NAT中請求和響應報文都須要經過負載調度器
基於 VS/NAT的的集羣系統能夠適合許多服務器的性能要求。若是負載調度器成爲系統新的瓶頸,能夠有三種方法解決這個問題:混合方法、VS/TUN和 VS/DR。在DNS混合集羣系統中,有若干個VS/NAT負調度器,每一個負載調度器帶本身的服務器集羣,同時這些負載調度器又經過RR-DNS組成簡單的域名。
但VS/TUN和VS/DR是提升系統吞吐量的更好方法。
在VS/TUN 的集羣系統中,負載調度器只將請求調度到不一樣的後端服務器,後端服務器將應答的數據直接返回給用戶。這樣,負載調度器就能夠處理大量的請求,它甚至能夠調度百臺以上的服務器(同等規模的服務器),而它不會成爲系統的瓶頸。即便負載調度器只有100Mbps的全雙工網卡,整個系統的最大吞吐量可超過 1Gbps。因此,VS/TUN能夠極大地增長負載調度器調度的服務器數量。
VS/TUN技術對服務器有要求,即全部的服務器必須支持「IP Tunneling」或者「IP Encapsulation」協議。目前,VS/TUN的後端服務器主要運行Linux操做系統。VS/TUN調度器能夠調度上百臺服務器,而它自己不會成爲系統的瓶頸。
跟VS/TUN方法同樣,VS/DR調度器只處理客戶到服務器端的鏈接,響應數據能夠直接從獨立的網絡路由返回給客戶。這能夠極大地提升LVS集羣系統的伸縮性。
跟VS/TUN方法同樣,VS/DR調度器只處理客戶到服務器端的鏈接,響應數據能夠直接從獨立的網絡路由返回給客戶。這能夠極大地提升LVS集羣系統的伸縮性。
三種LVS負載均衡技術的優缺點概括如下表:
• 三臺機器
• 分發器,也叫調度器(簡寫爲dir)
• 內網:133.130,外網:142.147(vmware僅主機模式)(01機器)
• rs1
• 內網:133.132,設置網關爲133.130
• rs2
• 內網:133.133,設置網關爲133.130
• 三臺機器上都執行執行
• systemctl stop firewalld; systemc disable firewalld
• systemctl start iptables-services; iptables -F; service iptables save
注意:須要三臺虛擬機01,02,03,有一臺是前兩臺其中之一一臺的克隆機03,克隆機03要修改IP地址,也能夠再安裝一臺,以避免IP地址重複,方便遠程鏈接。
關閉三臺虛擬機01,02,03上面的防火牆。在xhell5上面操做
[root@localhosts ]# systemctl stop firwalld [root@localhosts ]# systemctl disable firwalld [root@localhosts ]#iptables -nvL #查看防火牆有沒有關閉,顯示out說明關閉了 在02機器上面安裝防火牆包,便於使用iptables命令。 [root@localhosts 02 ]# yum install -y iptables-service [root@localhosts 02 ]#systemctl start iptables-service [root@localhosts 02 ]#rpm -ql iptables-service #查看有沒有安裝iptables-service服務 [root@localhosts 02 ]# systemctl enable iptables-service [root@localhosts 02 ]# iptables -F [root@localhosts 02 ]# service iptables save 在全部機器上面操做 [root@localhosts ]# getenofrce Enforcng [root@localhosts ]# setenforce 0 永久關閉 [root@localhosts ]# vim /etc/selinux/config SELINUX=disabled #把第一個selinux修改
修改IP地址克隆機03,在虛擬機上面操做
[root@localhosts 03]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 修改IP地址 ...... ...... IPADDR=192.168.133.133 #把132修改爲133便可 .... .... [root@localhosts 03] systemctl restart network #啓動網卡 而後在xshell5上面,遠程鏈接 在xshel5上面修改主機名 [root@localhosts 02]hostnamectl set-hostname localhosts 03 [root@localhosts 02]bash
在01上面操做
[root@localhosts 01]# vim /etc/sysconfig/network-scripts/ifcfg-ens37 修改IP地址 ...... ...... IPADDR=192.168.133.132 .... [root@localhosts 01]# ifup ens37 而後再Windows上ping一下,192.168.142.147 ,能ping通說明能通訊
在02上面操做
[root@localhosts 01]# vim /etc/sysconfig/network-scripts/ifcfg-ens37 修改IP地址 ...... ..... ...... IPADDR=192.168.142.147 .... .... .... [root@localhosts 01]# ifup ens37 而後再Windows上ping一下,192.168.142.147 ,能ping通說明能通訊
若是yum在03上面,安裝不了,執行下面的操做
[root@localhosts 03]# cd /etc/yum.repos.d/ [root@localhosts yum.repos.d]# ls [root@localhosts yum.repos.d]# mv epel-repo epel-repo.1 [root@localhosts yum.repos.d]# yum list | grep iptables-service [root@localhosts yum.repos.d]# yum install -y iptables-service [root@localhosts yum.repos.d]# systemctl start iptables-service #開啓服務
• 在dir(01)上安裝ipvsadm
• yum install -y ipvsdam
• 在dir上編寫腳本,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
# 注意區分網卡名字,阿銘的兩個網卡分別爲ens33和ens37
echo 0 > /proc/sys/net/ipv4/conf/ens33/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/ens37/send_redirects
# director 設置nat防火牆
iptables -t nat -F
iptables -t nat -X
iptables -t nat -A POSTROUTING -s 192.168.133.0/24 -j MASQUERADE
# director設置ipvsadm
IPVSADM='/usr/sbin/ipvsadm'
$IPVSADM -C
$IPVSADM -A -t 192.168.147.144:80 -s wlc -p 3
$IPVSADM -a -t 192.168.147.144:80 -r 192.168.133.132:80 -m -w 1
$IPVSADM -a -t 192.168.147.144:80 -r 192.168.133.133:80 -m -w 1
實例:
在dir(01)上安裝ipvsadm
[root@localhosts 01]# yum install -y ipvsdam [root@localhosts 01]# 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 # 注意區分網卡名字,阿銘的兩個網卡分別爲ens33和ens37 echo 0 > /proc/sys/net/ipv4/conf/ens33/send_redirects echo 0 > /proc/sys/net/ipv4/conf/ens37/send_redirects # director 設置nat防火牆 iptables -t nat -F iptables -t nat -X iptables -t nat -A POSTROUTING -s 192.168.133.0/24 -j MASQUERADE # director設置ipvsadm IPVSADM='/usr/sbin/ipvsadm' $IPVSADM -C $IPVSADM -A -t 192.168.147.144:80 -s wlc $IPVSADM -a -t 192.168.147.144:80 -r 192.168.133.132:80 -m -w 1 $IPVSADM -a -t 192.168.147.144:80 -r 192.168.133.133:80 -m -w 1 root@localhosts 01]# sh /usr/local/sbin/lvs_nat.sh 查看規則 root@localhosts 01]# ipvsadm -ln #查看ipvsadm規則,出現IP地址說明,執行成功了
• 兩臺rs上都安裝nginx
• 設置兩臺rs的主頁,作一個區分,也就是說直接curl兩臺rs的ip時,獲得不一樣的結果
• 瀏覽器裏訪問192.168.142.147,多訪問幾回看結果差別
實例:
查看你=nginx服務有沒有開啓。80端口是否被佔用 [root@localhosts 02]# ps aux | grep nginx [root@localhosts 02]# netstat -lnpt [root@localhosts 02]# systemctl start nginx #啓動nginx服務 [root@localhosts 02]# !ps [root@localhosts 02]# curl localhost back backup. [root@localhosts 02]# vi /uar/share/nginx/html/index.html aming02 [root@localhosts 02]# curl localhost aming02 [root@localhosts 02]# [root@localhosts 02]# [root@localhosts 02]# 03機器上面操做 [root@localhosts 03]#s ystemctl start nginx #啓動nginx服務 [root@localhosts 03]# vi /uar/share/nginx/html/index.html aming03 [root@localhosts 03]#curl localhost aming03 測試 root@localhosts 01]# curl 192.168.142.147 aming02 root@localhosts 01]# curl 192.168.142.147 aming03
在瀏覽器裏面輸入:192.168.142.147
• 三臺機器
• 分發器,也叫調度器(簡寫爲dir)
• 133.130
• rs1
• 133.132
• rs2
• 133.133
• vip
• 133.200
實例:
修改會GATEWAY
[root@localhosts 02]# vi /etc/sysconfig/networks-scripts/ifcfg-ens33 修改會原來的IP地址 GATEWAY=192.168.133.2 [root@localhosts 02]# systemctl restart network [root@localhosts 03]# vi /etc/sysconfig/networks-scripts/ifcfg-ens33 修改會原來的IP地址 GATEWAY=192.168.133.2 [root@localhosts 03]# systemctl restart network
1、
• dir上編寫腳本 vim /usr/local/sbin/lvs_dr.sh //內容以下
#! /bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward
ipv=/usr/sbin/ipvsadm
vip=192.168.133.200
rs1=192.168.133.132
rs2=192.168.133.133
#注意這裏的網卡名字
ifconfig ens33:2 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip dev ens33:2
$ipv -C
$ipv -A -t $vip:80 -s wrr
$ipv -a -t $vip:80 -r $rs1:80 -g -w 1
$ipv -a -t $vip:80 -r $rs2:80 -g -w 1
2、
• 兩臺rs上也編寫腳本 vim /usr/local/sbin/lvs_rs.sh//內容以下
#/bin/bash
vip=192.168.133.200
#把vip綁定在lo上,是爲了實現rs直接把結果返回給客戶端
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip lo:0
#如下操做爲更改arp內核參數,目的是爲了讓rs順利發送mac地址給客戶端
#參考文檔www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html
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
• 分別在dir上和兩個rs上執行這些腳本
• 測試
實例:
[root@localhosts 01]# vim /usr/local/sbin/lvs_dr.sh #! /bin/bash echo 1 > /proc/sys/net/ipv4/ip_forward ipv=/usr/sbin/ipvsadm vip=192.168.133.200 rs1=192.168.133.132 rs2=192.168.133.133 #注意這裏的網卡名字 ifdown ens33 ifup ens33 ifconfig ens33:2 $vip broadcast $vip netmask 255.255.255.255 up route add -host $vip dev ens33:2 $ipv -C $ipv -A -t $vip:80 -s rr $ipv -a -t $vip:80 -r $rs1:80 -g -w 1 $ipv -a -t $vip:80 -r $rs2:80 -g -w 1 [root@localhosts 01]# sh /usr/local/sbin/lvs_dr.sh 在兩臺rs上面操做 [root@localhosts 02]# vim /usr/local/sbin/lvs_rs.sh #/bin/bash vip=192.168.133.200 #把vip綁定在lo上,是爲了實現rs直接把結果返回給客戶端 ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up route add -host $vip lo:0 #如下操做爲更改arp內核參數,目的是爲了讓rs順利發送mac地址給客戶端 #參考文檔www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html 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 [root@localhosts 02]# vim /usr/local/sbin/lvs_rs.sh #/bin/bash vip=192.168.133.200 #把vip綁定在lo上,是爲了實現rs直接把結果返回給客戶端 ifdown lo ifup lo ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up route add -host $vip lo:0 #如下操做爲更改arp內核參數,目的是爲了讓rs順利發送mac地址給客戶端 #參考文檔www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html 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 [root@localhosts 02]# sh /usr/local/sbin/lvs_rs.sh [root@localhosts 03]# vim /usr/local/sbin/lvs_dr.sh #/bin/bash vip=192.168.133.200 #把vip綁定在lo上,是爲了實現rs直接把結果返回給客戶端 ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up route add -host $vip lo:0 #如下操做爲更改arp內核參數,目的是爲了讓rs順利發送mac地址給客戶端 #參考文檔www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html 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 [root@localhosts 03]# sh /usr/local/sbin/lvs_dr.sh 在全部的機器上面操做,查看是否有192.168.133.200,IP地址 [root@localhosts ]# route -n [root@localhosts ]# ip add [root@localhosts ]# iptables -t nat -F [root@localhosts ]# curl http://192.168.133.200/ [root@localhosts ]# [root@localhosts 01]# ipvsadm -ln
測試
在瀏覽器裏面輸入:192.168.133.200
• 編輯keepalived配置文件 vim /etc/keepalived/keepalived.conf//內容請到https://coding.net/u/aminglinux/p/aminglinux-book/git/blob/master/D21Z/lvs_keepalived.conf 獲取
• 須要更改裏面的ip信息
• 執行ipvsadm -C 把以前的ipvsadm規則清空掉
• systemctl restart network 能夠把以前的vip清空掉
• 兩臺rs上,依然要執行/usr/local/sbin/lvs_rs.sh腳本
• keepalived有一個比較好的功能,能夠在一臺rs宕機時,再也不把請求轉發過去
• 測試
實例:
[root@localhosts 03]# systemctl stop nginx #關閉nginx 而後在瀏覽器刷新頁面,發現頁面刷新不了 [root@localhosts 03]# ps aux | grep nginx [root@localhosts 01]# ipvsadm -ln [root@localhosts 01]# vi /etc/keepalived/keepalived.conf #把裏面的東西清空以後複製,下面的內容 vrrp_instance VI_1 { #備用服務器上爲 BACKUP state MASTER #綁定vip的網卡爲ens33,你的網卡和阿銘的可能不同,這裏須要你改一下 interface ens33 virtual_router_id 51 #備用服務器上爲90 priority 100 advert_int 1 authentication { auth_type PASS auth_pass aminglinux } virtual_ipaddress { 192.168.133.200 } } virtual_server 192.168.133.200 80 { #(每隔10秒查詢realserver狀態) delay_loop 10 #(lvs 算法) lb_algo wlc #(DR模式) lb_kind DR #(同一IP的鏈接60秒內被分配到同一臺realserver) persistence_timeout 60 #(用TCP協議檢查realserver狀態) protocol TCP real_server 192.168.133.132 80 { #(權重) weight 100 TCP_CHECK { #(10秒無響應超時) connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 192.168.133.133 80 { weight 100 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } } [root@localhosts 01]# systemctl start keepalived #開啓 keepalived [root@localhosts 01]# ps aux | grep keep [root@localhosts 01]# ip add [root@localhosts 01]# ipvsadm -ln [root@localhosts 01]# ip add [root@localhosts 01]# systemctl stop keepalived #關閉 keepalived [root@localhosts 03]# systemctl start nginx [root@localhosts 01]# ipvsadm -ln [root@localhosts 01]# systemctl start keepalived #開啓 keepalived [root@localhosts 01]# ipvsadm -ln
常見問題:
dir配置好了,ping外網也能成功,ping新網卡ens37也能ping通,另兩臺執行curl也能顯示出aming02和aming03,可是在瀏覽器上實驗卻不成功。這是什麼緣由形成的?
答:1 網絡架構搞清楚: dir一個內網,一個外網, rs只有一個內網, rs須要配置網關爲dir的內網ip。
2 仔細檢查腳本內容,是否和個人一致。注意,並非連IP都照搬,須要和你的網絡匹配。
3 你的windows電腦是否能夠ping通這個「外網」地址?
二、生產環境下 部署 lvs dr模式的話,是將分發器 dr 和 rs分開來。
仍是將 dr和rs(nginx)安裝在一塊兒嗎 ,要是還要用keepalived ,用2臺機器如何作呢?
dir1 : 安裝nginx + keepalived
dir2: 安裝nginx + keepalived
感受這樣實現不了負載均衡啊,只是高可用,
由於 要是dir1的nginx 或keepalived 宕了,vip 轉移到dir2上,提供nginx服務。
答:生產環境中須要把dir和rs分開的。
keepalived+nginx 就是爲了給nginx作高可用。 沒有考慮rs。
三、爲何中止Nginx應用,keepalived就認爲RS宕機呢?我作實驗沒有開nginx,編輯好dir配置文件,也有2臺虛擬機ip
答:nginx是核心服務,它停掉了,keepalived確定覺得你這服務至關於沒有。
由於keepalived 的配置文件監控的是80端口(real_server 192.168.188.129 80 ),停掉nginx,80端口不通,keepalived認爲這臺服務器down掉了。
四、實際生產環境 keepalived+lvs 下域名應該怎麼配置, 是綁定vip嗎 ? vip應該是公網ip嗎
答:域名應該綁定到vip上。 vip能夠是內網啊。
有的公司,服務器所有跑在內網裏,在內網環境下作一個lvs,提供一個內網的vip出來。 外網要想訪問,經過端口映射或者用帶外網的代理服務器(如,nginx)代理。
五、LVS/DR如何處理請求報文的,會修改IP包內容嗎?
5.1 vs/dr自己不會關心IP層以上的信息,即便是端口號也是tcp/ip協議棧去判斷是否正確,vs/dr自己主要作這麼幾個事:
1)接收client的請求,根據你設定的負載均衡算法選取一臺realserver的ip;
2)以選取的這個ip對應的mac地址做爲目標mac,而後從新將IP包封裝成幀轉發給這臺RS;
3)在hash table中記錄鏈接信息。
vs/dr作的事情不多,也很簡單,因此它的效率很高,不比硬件負載均衡設備差多少。
數據包、數據幀的大體流向是這樣的:client --> VS --> RS --> client
1.2 前面已做了回答,vs/dr不會修改IP包的內容.
6. RealServer爲何要在lo接口上配置VIP?在出口網卡上配置VIP能夠嗎?
6.1 既然要讓RS可以處理目標地址爲vip的IP包,首先必需要讓RS能接收到這個包。
在lo上配置vip可以完成接收包並將結果返回client。
6.2 答案是不能夠將VIP設置在出口網卡上,不然會響應客戶端的arp request,形成client/gateway arp table紊亂,以致於整個load balance都不能正常工做。
7. RealServer爲何要抑制arp幀?
這個問題在上一問題中已經做了說明,這裏結合實施命令進一步闡述。咱們在具體實施部署的時候都會做以下調整:
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我相信不少人都不會弄懂它們的做用是什麼,只知道必定得有。我這裏也不打算拿出來詳細討論,只是做幾點說明,就當是補充吧。
7.1
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce這兩條是能夠不用的,由於arp對邏輯接口沒有意義。
7.2 若是你的RS的外部網絡接口是eth0,那麼
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce其實真正要執行的是:
echo "1" >/proc/sys/net/ipv4/conf/eth0/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/eth0/arp_announce因此我我的建議把上面兩條也加到你的腳本里去,由於萬一系統裏上面兩條默認的值不是0,那有多是會出問題滴。
8. LVS/DR load balancer(director)與RS爲何要在同一網段中?
從第一個問題中你們應該明白vs/dr是如何將請求轉發給RS的了吧?它是在數據鏈路層來實現的,因此director必須和RS在同一網段裏面。
9. 爲何director上lo接口除了VIP另外還要在eth0配一個ip(即DIP)?
9.1 若是是用了keepalived等工具作HA或者Load Balance,則在健康檢查時須要用到DIP。
9.2 沒有健康檢查機制的HA或者Load Balance則沒有存在的實際意義。
10. LVS/DR ip_forward須要開啓嗎?
不須要。由於director跟realserver是同一個網段,無需開啓轉發。
11. director的vip的netmask必定要是255.255.255.255嗎?
lvs/dr裏,director的vip的netmask 不必設置爲255.255.255.255,也不須要再去
route add -host $VIP dev eth0:0director的vip原本就是要像正常的ip地址同樣對外通告的,不要搞得這麼特殊.
擴展
lvs 三種模式詳解 http://www.it165.net/admin/html/201401/2248.html
lvs幾種算法 http://www.aminglinux.com/bbs/thread-7407-1-1.html
關於arp_ignore和 arp_announce http://www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html
lvs原理相關的 http://blog.csdn.net/pi9nc/article/details/23380589
haproxy+keepalived http://blog.csdn.net/xrt95050/article/details/40926255
nginx、lvs、haproxy比較 http://www.csdn.net/article/2014-07-24/2820837
keepalived中自定義腳本 vrrp_script http://my.oschina.net/hncscwc/blog/158746
lvs dr模式只使用一個公網ip的實現方法 http://storysky.blog.51cto.com/628458/338726
參考連接:
連接:
理解LVS工做原理 : http://blog.51cto.com/11010461/2118570
LVS 原理(調度算法、四種模式的實現、四層負載均衡和七層 的區別) : https://blog.csdn.net/ioy84737634/article/details/44916241
lvs四種負載均衡類型,十種調度算法 : http://blog.51cto.com/11838039/1831426
CentOS7.4——構建LVS負載均衡羣集—地址轉換模式(LVS-NAT):https://www.iyunv.com/thread-448518-1-1.html
CentOS7.4—構建LVS+Keepalived高可用羣集: https://www.iyunv.com/thread-448517-1-1.html
lvs+keepalived+nginx實現高性能負載均衡集羣: http://www.cnblogs.com/liuyisai/p/5990645.html
LVS | LVS-NAT 模式安裝 : https://blog.csdn.net/liupeifeng3514/article/details/79038714
LVS | LVS-DR 模式安裝 : https://blog.csdn.net/liupeifeng3514/article/details/79038603
LVS-NAT模型/LVS-DR模型實踐 : http://blog.51cto.com/pirateli/1654733
LVS | LVS 負載均衡之工做原理說明(NAT模式) : https://blog.csdn.net/liupeifeng3514/article/details/79038553
LVS | LVS 安裝使用詳解(ipvsadm命令) : https://blog.csdn.net/liupeifeng3514/article/details/79038519
腳本實現VS/DR類型的快速部署 : http://blog.51cto.com/zhaochj/1650202
LVS的VS/NAT及VS/DR類型實現 : http://blog.51cto.com/zhaochj/1650198
lvs安裝及基本語法介紹 : http://blog.51cto.com/zhaochj/1650098
集羣及LVS基礎知識整理 :http://blog.51cto.com/zhaochj/1643712
企業實戰(2)-實現基於LVS負載均衡集羣的電商網站架構 : http://blog.51cto.com/mozart/1981399
LVS在大流量下基於OSPF的負載均衡實施方案 薦 : http://blog.51cto.com/rfyiamcool/1217667
LVS詳解及基於LVS實現web服務器負載均衡 : http://blog.51cto.com/scholar/1656073
LVS | LVS 的三種工做方式(DR原理)(二) : https://blog.csdn.net/liupeifeng3514/article/details/79038451
【轉】ksoftirqd進程耗盡單核100%si處理軟中斷致使性能瓶頸 : https://www.jianshu.com/p/f0ed38a79041
大型網站架構系列:電商網站架構案例(1) : https://mp.weixin.qq.com/s/W8n3tkH6cAT4OyXbxqzw2g
大型網站架構系列:電商網站架構案例(2) : https://mp.weixin.qq.com/s/j5c75ePAIwPmRI9VlCzfhA
大型網站架構系列:負載均衡詳解(3) : https://mp.weixin.qq.com/s/uaCykNu4diXpqOPCz4YZJg
大型網站架構系列:負載均衡詳解(4) : https://mp.weixin.qq.com/s/vWW5H3sTaSkAieN299a4bw
RHCE系列之LVM----理論篇 : http://blog.51cto.com/nolinux/1350941
RHCE系列之LVM----操做篇 薦 : http://blog.51cto.com/nolinux/1350942
基於LVS負載均衡集羣的小米電商網站架構-運維實戰手記(二) : https://mp.weixin.qq.com/s/0ZbD-LCYTz7gOAAz7Nw0EA
靠譜運維
Linux負載均衡軟件LVS之一(概念篇) : https://www.ixdba.net/archives/2012/06/166.htm
Linux負載均衡軟件LVS之二(安裝篇) : https://www.ixdba.net/archives/2012/06/168.htm
Linux負載均衡軟件LVS之三(配置篇) : https://www.ixdba.net/archives/2012/06/170.htm
Linux負載均衡軟件LVS之四(測試篇) : https://www.ixdba.net/archives/2012/06/172.htm
LVS : https://www.cnblogs.com/saneri/category/773541.html
LVS(DR模式)+Keepalived(高可用) : https://blog.csdn.net/qq_42036824/article/details/86669940#comments