負載均衡集羣LVS(及資料)

負載均衡集羣LVS介紹

一文讀懂負載均衡之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 集羣架構圖

( 1 ) Load Balancer層

負載均衡層位於整個集羣系統的最前端,由一臺或者多臺負載調度器( Director Server )組成, LVS模塊就安裝在Director Server的系統上。Director Server的主要功能相似路由器,完成LVS 負載轉發功能所設定的路由表,利用這些路由表信息把用戶的請求分發到Sever Array層的物理服務器( Real Server )上。爲了監測各個Real Server服務器的健康情況,在Director Server上還要安裝監控模塊Ldirectord。

而當監控到某個Real Server不可用時,該服務器會被從LVS 路由表中剔除,恢復時又會從新加入。

( 2 ) Server Array 層

服務器陣列或服務器池由一組實際運行應用服務的物理機器組成,Real Server能夠是Web服務器、Mail 服務器、FTP服務器、DNS服務器以及視頻服務器中的一個或者多個的組合。每一個Real Server之間經過高速的LAN或分佈在各地的WAN 相鏈接。

Director Server同時兼任Real Server的角色,在Real Server同時部署LVS模塊。

( 3) Shared Storage 層

存儲層是爲全部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 種:

  • DR
  • NAT
  • TUNNEL
  • Full-NAT
  •  

Lvs經常使用術語說明

術語

解釋

Load balancer或director

負載調度器

RS或Real Server

真實服務器,提供服務的服務器

VIP

虛擬IP地址,客戶端訪問集羣的地址

RIP

集羣所提供應用程序的地址(HTTP,FTP)

DIP

調度器的真實地址

 

lvs的工做模式


       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請求保持
靜默。

 

LVS NAT模式

• 這種模式藉助iptables的nat表來實現

• 用戶的請求到分發器後,經過預設的iptables規則,把請求的數據包轉發到後端的rs上去

rs須要設定網關爲分發器的內網ip

• 用戶請求的數據包和返回給用戶的數據包所有通過分發器,因此分發器成爲瓶頸

在nat模式中,只須要分發器有公網ip便可,因此比較節省公網ip資源。

 

LVS主要組成部分

  負載調度器(load balancer/ Director),它是整個集羣對外面的前端機,負責將客戶的請求發送到一組服務器上執行,而客戶認爲服務是來自一個IP地址(咱們可稱之爲虛擬IP地址)上的。 
  服務器池(server pool/ Realserver),是一組真正執行客戶請求的服務器,執行的服務通常有WEB、MAIL、FTP和DNS等。 
  共享存儲(shared storage),它爲服務器池提供一個共享的存儲區,這樣很容易使得服務器池擁有相同的內容,提供相同的服務。

 

LVS集羣採用三層結構,其體系結構如圖所示: 

 

LVS NAT模式

• 這種模式藉助iptables的nat表來實現

• 用戶的請求到分發器後,經過預設的iptables規則,把請求的數據包轉發到後端的rs上去

• rs須要設定網關爲分發器的內網ip

• 用戶請求的數據包和返回給用戶的數據包所有通過分發器,因此分發器成爲瓶頸

• 在nat模式中,只須要分發器有公網ip便可,因此比較節省公網ip資源。

 VS/NAT是一種最簡單的方式,全部的RealServer只須要將本身的網關指向Director便可。客戶端能夠是任意操做系統,但此方式下,一個Director可以帶動的RealServer比較有限。在VS/NAT的方式下,Director也能夠兼爲一臺RealServer。VS/NAT的體系結構如圖所示。 

                                

LVS IP Tunnel模式(VS/TUN)    [IP隧道]

• 這種模式,須要有一個公共的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地址。

LVS DR模式 (VS/DR) [直接路由]

• 這種模式,也須要有一個公共的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就是分發器

LVS調度算法

• 輪詢 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負載均衡技術的優缺點概括如下表:

 

NAT模式搭建 – 準備工做

• 三臺機器

• 分發器,也叫調度器(簡寫爲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             #開啓服務

 

NAT模式搭建

• 在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地址說明,執行成功了

 

NAT模式效果測試

• 兩臺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

 

DR模式搭建 – 準備工做

• 三臺機器

• 分發器,也叫調度器(簡寫爲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

DR模式搭建

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+LVS DR

• 編輯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

LVS的Full-NAT模式https://mp.weixin.qq.com/s/aFpvsFR6TPVRs2i8uBUM_A

使用 LVS 實現負載均衡原理及安裝配置詳解:https://mp.weixin.qq.com/s/x3Kw09Ok2UWfLZRcqZ30yw

應用負載均衡之LVS(一):基本概念和三種模式:https://mp.weixin.qq.com/s/9MFmb0XFxiOcUk4wZtRmtQ

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

LVM掛載失敗mount: you must specify the filesystem type:

http://www.javashuo.com/article/p-gaezlsix-hs.html

負載均衡SLB高可用的四個層次:  https://mp.weixin.qq.com/s/vmBRAFDxRv9LROCrgePvnA

 

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 負載均衡之工做原理說明(TUN模式) : https://blog.csdn.net/liupeifeng3514/article/details/79038588

LVS | LVS 負載均衡之工做原理說明(DR模式) : https://blog.csdn.net/liupeifeng3514/article/details/79038577

 

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 10種調度算法簡介 : https://blog.csdn.net/liupeifeng3514/article/details/79038498

LVS | LVS 的三種工做方式(TUN原理)(三) : https://blog.csdn.net/liupeifeng3514/article/details/79038474

LVS | LVS 的三種工做方式(DR原理)(二) : https://blog.csdn.net/liupeifeng3514/article/details/79038451

LVS | LVS 的三種工做方式(NAT原理)(一) : https://blog.csdn.net/liupeifeng3514/article/details/79038431

LVS | LVS 關於 arp_ingnone 和 arp_announce 的相關說明 : https://blog.csdn.net/liupeifeng3514/article/details/79048722

【轉】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

大型網站架構系列:負載均衡詳解(2) : 大型網站架構系列:負載均衡詳解(2)

大型網站架構系列:負載均衡詳解(3) : https://mp.weixin.qq.com/s/uaCykNu4diXpqOPCz4YZJg

大型網站架構系列:負載均衡詳解(4) : https://mp.weixin.qq.com/s/vWW5H3sTaSkAieN299a4bw

CentOS6.8下部署LVS+keepalived實現高性能高可用負載均衡      :     http://blog.51cto.com/zlyang/1672523

linux高級技巧:heartbeat+lvs           :      http://os.51cto.com/art/201408/447193.htm#topx

 

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

Linux系統LVM邏輯卷建立過程以及自動化腳本 : https://zhang.ge/5109.html

LVS(DR模式)+Keepalived(高可用) : https://blog.csdn.net/qq_42036824/article/details/86669940#comments

相關文章
相關標籤/搜索