<acronym id="indot"><dfn id="indot"></dfn></acronym>
<span id="indot"></span>

<bdo id="indot"><meter id="indot"></meter></bdo>
<label id="indot"><samp id="indot"></samp></label>
<label id="indot"><xmp id="indot">
  • <span id="indot"><table id="indot"></table></span>
    <center id="indot"><optgroup id="indot"></optgroup></center>
  • <bdo id="indot"><meter id="indot"></meter></bdo>
      當(dāng)前位置:首頁(yè) > 服務(wù)器 > 正文內(nèi)容

      LVS與Nginx結(jié)合的負(fù)載均衡方案

      hxing6412年前 (2023-11-03)服務(wù)器6634

      1       學(xué)習(xí)目標(biāo)

      掌握什么是負(fù)載均衡及負(fù)載均衡的作用和意義。

      了解lvs負(fù)載均衡的三種模式。

      了解lvs-DR負(fù)載均衡部署方法。

      掌握nginx實(shí)現(xiàn)負(fù)載均衡的方法。

      掌握l(shuí)vs+nginx負(fù)載均衡拓?fù)浣Y(jié)構(gòu)。

       

      2       負(fù)載均衡方案

      2.1    什么是負(fù)載均衡

               一臺(tái)普通服務(wù)器的處理能力是有限的,假如能達(dá)到每秒幾萬(wàn)個(gè)到幾十萬(wàn)個(gè)請(qǐng)求,但卻無(wú)法在一秒鐘內(nèi)處理上百萬(wàn)個(gè)甚至更多的請(qǐng)求。但若能將多臺(tái)這樣的服務(wù)器組成一個(gè)系統(tǒng),并通過(guò)軟件技術(shù)將所有請(qǐng)求平均分配給所有服務(wù)器,那么這個(gè)系統(tǒng)就完全擁有每秒鐘處理幾百萬(wàn)個(gè)甚至更多請(qǐng)求的能力。這就是負(fù)載均衡最初的基本設(shè)計(jì)思想。

               負(fù)載均衡是由多臺(tái)服務(wù)器以對(duì)稱的方式組成一個(gè)服務(wù)器集合,每臺(tái)服務(wù)器都具有等價(jià)的地位,都可以單獨(dú)對(duì)外提供服務(wù)而無(wú)須其他服務(wù)器的輔助。通過(guò)某種負(fù)載分擔(dān)技術(shù),將外部發(fā)送來(lái)的請(qǐng)求按照某種策略分配到服務(wù)器集合的某一臺(tái)服務(wù)器上,而接收到請(qǐng)求的服務(wù)器獨(dú)立地回應(yīng)客戶的請(qǐng)求。負(fù)載均衡解決了大量并發(fā)訪問(wèn)服務(wù)問(wèn)題,其目的就是用最少的投資獲得接近于大型主機(jī)的性能。 

       1020536-20180704121611316-511194243.png

       

       

       

      2.2    相關(guān)技術(shù)

      2.2.1  基于DNS的負(fù)載均衡

               DNS(Domain Name System,域名系統(tǒng)),因特網(wǎng)上作為域名和IP地址相互映射的一個(gè)分布式數(shù)據(jù)庫(kù),能夠使用戶更方便的訪問(wèn)互聯(lián)網(wǎng),而不用去記住能夠被機(jī)器直接讀取的IP數(shù)串。通過(guò)主機(jī)名,最終得到該主機(jī)名對(duì)應(yīng)的IP地址的過(guò)程叫做域名解析(或主機(jī)名解析)。DNS協(xié)議運(yùn)行在UDP協(xié)議之上,使用端口號(hào)53。

               DNS負(fù)載均衡技術(shù)是最早的負(fù)載均衡解決方案,它是通過(guò)DNS服務(wù)中的隨機(jī)名字解析來(lái)實(shí)現(xiàn)的,在DNS服務(wù)器中,可以為多個(gè)不同的地址配置同一個(gè)名字,而最終查詢這個(gè)名字的客戶機(jī)將在解析這個(gè)名字時(shí)得到其中的一個(gè)地址。因此,對(duì)于同一個(gè)名字,不同的客戶機(jī)會(huì)得到不同的地址,它們也就訪問(wèn)不同地址上的Web服務(wù)器,從而達(dá)到負(fù)載均衡的目的。

      如下圖:

       1020536-20180704121633884-1136830955.png

       

       

       

       

      優(yōu)點(diǎn):實(shí)現(xiàn)簡(jiǎn)單、實(shí)施容易、成本低、適用于大多數(shù)TCP/IP應(yīng)用;

      缺點(diǎn):

      1、 負(fù)載分配不均勻,DNS服務(wù)器將Http請(qǐng)求平均地分配到后臺(tái)的Web服務(wù)器上,而不考慮每個(gè)Web服務(wù)器當(dāng)前的負(fù)載情況;如果后臺(tái)的Web服務(wù)器的配置和處理能力不同,最慢的Web服務(wù)器將成為系統(tǒng)的瓶頸,處理能力強(qiáng)的服務(wù)器不能充分發(fā)揮作用;

      2、可靠性低,如果后臺(tái)的某臺(tái)Web服務(wù)器出現(xiàn)故障,DNS服務(wù)器仍然會(huì)把DNS請(qǐng)求分配到這臺(tái)故障服務(wù)器上,導(dǎo)致不能響應(yīng)客戶端。

      3、變更生效時(shí)間長(zhǎng),如果更改NDS有可能造成相當(dāng)一部分客戶不能享受Web服務(wù),并且由于DNS緩存的原因,所造成的后果要持續(xù)相當(dāng)長(zhǎng)一段時(shí)間(一般DNS的刷新周期約為24小時(shí))。

       

       

      2.2.2  基于四層交換技術(shù)的負(fù)載均衡

               基于四層交換技術(shù)的負(fù)載均衡是通過(guò)報(bào)文中的目標(biāo)地址和端口,再加上負(fù)載均衡設(shè)備設(shè)置的服務(wù)器選擇方式,決定最終選擇的內(nèi)部服務(wù)器與請(qǐng)求客戶端建立TCP連接,然后發(fā)送Client請(qǐng)求的數(shù)據(jù)。

      如下圖:

              1020536-20180704121655803-2035673535.png

       

               client發(fā)送請(qǐng)求至4層負(fù)載均衡器,4層負(fù)載均衡器根據(jù)負(fù)載策略把client發(fā)送的報(bào)文目標(biāo)地址(原來(lái)是負(fù)載均衡設(shè)備的IP地址)修改為后端服務(wù)器(可以是web服務(wù)器、郵件服務(wù)等)IP地址,這樣client就可以直接跟后端服務(wù)器建立TCP連接并發(fā)送數(shù)據(jù)。

       

      具有代表意義的產(chǎn)品:LVS(開(kāi)源軟件),F(xiàn)5(硬件)

       

      優(yōu)點(diǎn):性能高、支持各種網(wǎng)絡(luò)協(xié)議

       

      缺點(diǎn):對(duì)網(wǎng)絡(luò)依賴較大,負(fù)載智能化方面沒(méi)有7層負(fù)載好(比如不支持對(duì)url個(gè)性化負(fù)載),F(xiàn)5硬件性能很高但成本也高需要人民幣幾十萬(wàn),對(duì)于小公司就望而卻步了。

       

       

       

      2.2.3  基于七層交換技術(shù)的負(fù)載均衡

               基于七層交換技術(shù)的負(fù)載均衡也稱內(nèi)容交換,也就是主要通過(guò)報(bào)文中的真正有意義的應(yīng)用層內(nèi)容,再加上負(fù)載均衡設(shè)備設(shè)置的服務(wù)器選擇方式,決定最終選擇的服務(wù)器。

      如下圖:

       1020536-20180704121714922-1390221287.png

       

               七層負(fù)載均衡服務(wù)器起了一個(gè)代理服務(wù)器的作用,client要訪問(wèn)webserver要先與七層負(fù)載設(shè)備進(jìn)行三次握手后建立TCP連接,把要訪問(wèn)的報(bào)文信息發(fā)送給七層負(fù)載均衡;然后七層負(fù)載均衡再根據(jù)設(shè)置的均衡規(guī)則選擇特定的webserver,然后通過(guò)三次握手與此臺(tái)webserver建立TCP連接,然后webserver把需要的數(shù)據(jù)發(fā)送給七層負(fù)載均衡設(shè)備,負(fù)載均衡設(shè)備再把數(shù)據(jù)發(fā)送給client。

       

      具有代表意義的產(chǎn)品:nginx(軟件)、apache(軟件)

       

      優(yōu)點(diǎn):對(duì)網(wǎng)絡(luò)依賴少,負(fù)載智能方案多(比如可根據(jù)不同的url進(jìn)行負(fù)載)

       

      缺點(diǎn):網(wǎng)絡(luò)協(xié)議有限,nginx和apache支持http負(fù)載,性能沒(méi)有4層負(fù)載高

       

      2.3    確定使用四層+七層負(fù)載結(jié)合方案

      四層負(fù)載使用lvs軟件或F5硬件實(shí)現(xiàn)。

      七層負(fù)載使用nginx實(shí)現(xiàn)。

       

      如下圖是lvs+nginx的拓?fù)浣Y(jié)構(gòu):

       1020536-20180704121836906-165220622.png

       

      2.4    nginx集群背景

      在keepalived+nginx的主備容災(zāi)高可用的架構(gòu)中,nginx是作為外部訪問(wèn)系統(tǒng)的唯一入口,理論上一臺(tái)nginx的最大并發(fā)量可以高達(dá)50000,但是當(dāng)并發(fā)量更大的時(shí)候,keepalived+nginx的高可用機(jī)制是沒(méi)辦法滿足需求的,因?yàn)閗eepalived+nginx的架構(gòu)中確確實(shí)實(shí)是一臺(tái)nginx在工作,只有當(dāng)master宕機(jī)或異常時(shí)候,備份機(jī)才會(huì)上位。那么如何解決更大的高并發(fā)問(wèn)題呢,也許會(huì)問(wèn)能不能搭建nginx集群,直接對(duì)外提供訪問(wèn)?

      很顯然這是欠妥當(dāng)?shù)模驗(yàn)楫?dāng)nginx作為外部的唯一訪問(wèn)入口,沒(méi)辦法直接以集群的形式對(duì)外提供服務(wù),沒(méi)有那么多的公網(wǎng)ip資源可用,既太浪費(fèi)也不友好。但是在內(nèi)網(wǎng)環(huán)境下,是可以用nginx集群(nginx橫向擴(kuò)展服務(wù)集合)的,當(dāng)然總得有一個(gè)對(duì)外入口,所以需要在nginx集群之上,在加一層負(fù)載均衡器,作為系統(tǒng)的唯一入口。

      3       lvs實(shí)現(xiàn)四層負(fù)載DR模式(了解)

      3.1    什么是lvs

               LVS是Linux Virtual Server的簡(jiǎn)寫,意即Linux虛擬服務(wù)器,是一個(gè)虛擬的服務(wù)器集群系統(tǒng)。本項(xiàng)目在1998年5月由章文嵩博士成立,是中國(guó)國(guó)內(nèi)最早出現(xiàn)的自由軟件項(xiàng)目之一。

      3.2    lvs實(shí)現(xiàn)負(fù)載的三種方式

               運(yùn)行 lPVS軟件的服務(wù)器,在整個(gè)負(fù)載均衡集群中承擔(dān)一調(diào)度角色 軟件的服務(wù)器,(即 向真實(shí)服務(wù)器分配從客戶端過(guò)來(lái)的請(qǐng)求。LVS中的調(diào)度方法有三種 :NAT(Network Address Translation網(wǎng)絡(luò)地址轉(zhuǎn)換)、TUN(tunnel 隧道)、DR(direct route 直接路由)

      3.2.1  LVS-DR 模式

       1020536-20180704121911135-320957540.png

               請(qǐng)求由LVS接受,由真實(shí)提供服務(wù)的服務(wù)器(RealServer, RS)直接返回給用戶,返回的時(shí)候不經(jīng)過(guò)LVS。

              DR模式下需要LVS服務(wù)器和RS綁定同一個(gè)VIP, 一個(gè)請(qǐng)求過(guò)來(lái)時(shí),LVS只需要將網(wǎng)絡(luò)幀的MAC地址修改為某一臺(tái)RS的MAC,該包就會(huì)被轉(zhuǎn)發(fā)到相應(yīng)的RS處理,注意此時(shí)的源IP和目標(biāo)IP都沒(méi)變,RS收到LVS轉(zhuǎn)發(fā)來(lái)的包,發(fā)現(xiàn)MAC是自己的,發(fā)現(xiàn)IP也是自己的,于是這個(gè)包被合法地接受,而當(dāng)RS返回響應(yīng)時(shí),只要直接向源IP(即用戶的IP)返回即可,不再經(jīng)過(guò)LVS。

               DR模式下,lvs接收請(qǐng)求輸入,將請(qǐng)求轉(zhuǎn)發(fā)給RS,由RS輸出響應(yīng)給用戶,性能非常高。

      它的不足之處是要求負(fù)載均衡器與RS在一個(gè)物理段上。

      3.2.2  LVS-NAT模式

       1020536-20180704121927761-160280847.png

               NAT(Network Address Translation)是一種外網(wǎng)和內(nèi)網(wǎng)地址映射的技術(shù)。NAT模式下,LVS需要作為RS的網(wǎng)關(guān),當(dāng)網(wǎng)絡(luò)包到達(dá)LVS時(shí),LVS做目標(biāo)地址轉(zhuǎn)換(DNAT),將目標(biāo)IP改為RS的IP。RS接收到包以后,處理完,返回響應(yīng)時(shí),源IP是RS IP,目標(biāo)IP是客戶端的IP,這時(shí)RS的包通過(guò)網(wǎng)關(guān)(LVS)中轉(zhuǎn),LVS會(huì)做源地址轉(zhuǎn)換(SNAT),將包的源地址改為VIP,對(duì)于客戶端只知道是LVS直接返回給它的。

               NAT模式請(qǐng)求和響應(yīng)都需要經(jīng)過(guò)lvs,性能沒(méi)有DR模式好。

      3.2.3  LVS-TUN模式

      1020536-20180704122017928-369958775.png

       

               TUN模式是通過(guò)ip隧道技術(shù)減輕lvs調(diào)度服務(wù)器的壓力,許多Internet服務(wù)(例如WEB服務(wù)器)的請(qǐng)求包很短小,而應(yīng)答包通常很大,負(fù)載均衡器只負(fù)責(zé)將請(qǐng)求包分發(fā)給物理服務(wù)器,而物理服務(wù)器將應(yīng)答包直接發(fā)給用戶。所以,負(fù)載均衡器能處理很巨大的請(qǐng)求量。相比NAT性能要高的多,比DR模式的優(yōu)點(diǎn)是不限制負(fù)載均衡器與RS在一個(gè)物理段上。但是它的不足需要所有的服務(wù)器(lvs、RS)支持"IP Tunneling"(IP Encapsulation)協(xié)議。

      3.3    lvs-DR環(huán)境

      vip:192.168.101.100

      lvs-director:192.168.101.8

       

      nginx1:192.168.101.3

      nginx2:192.168.101.4

      3.4    lvs調(diào)度服務(wù)器Director安裝

      3.4.1  安裝lvs

      在192.168.101.8上安裝lvs

      centos6.5自帶lvs,檢查linux內(nèi)核是否集成lvs模塊:

      modprobe -l | grep ipvs

       1020536-20180704122052635-1309299398.png 

      3.4.2  安裝lvs的管理工具ipvsadm

      • 安裝依賴

      yum install -y gcc gcc-c++ makepcre pcre-devel kernel-devel openssl-devel libnl-devel popt*

      •   安裝ipvsadm

      將ipvsadm-1.26.tar.gz拷貝至/usr/local/下

      cd /usr/localtar -zxvf ipvsadm-1.26.tar.gz
      
      cd ipvsadm-1.26makemake install

      校驗(yàn)是否安裝成功:

       1020536-20180704122149734-749946256.png

      3.5    真實(shí)服務(wù)器Real Server安裝

      在192.168.101.3和192.168.101.4上安裝nginx。

      3.5.1  nginx配置文件

      創(chuàng)建nginx-lvs.conf,http內(nèi)容如下:

      http {
      
          include       mime.types;
      
          default_type  application/octet-stream;
      
          sendfile        on;
      
       
      
          server {        listen       80;
      
              server_name  localhost;
      
              location / {
      
                  root   html;            index  index.html index.htm;
      
              }
      
          }

      3.6    Director Server配置

      3.6.1  在eth0上綁定虛擬ip

      ifconfig eth0:0 192.168.101.100 broadcast 192.168.101.100 netmask 255.255.255.255 up

      此處在eth0設(shè)備上綁定了一個(gè)虛擬設(shè)備eth0:0,同時(shí)設(shè)置了一個(gè)虛擬IP是192.168.101.100,然后指定廣播地址也為192.168.101.100,需要特別注意的是,虛擬ip地址的廣播地址是它本身,子網(wǎng)掩碼是255.255.255.255。

       1020536-20180704122339091-1653669796.png

      3.6.2  添加路由規(guī)則

      route add -host 192.168.101.100 dev eth0:0

       

      3.6.3  啟用系統(tǒng)的包轉(zhuǎn)發(fā)功能

      echo "1" >/proc/sys/net/ipv4/ip_forward

      參數(shù)值為1時(shí)啟用ip轉(zhuǎn)發(fā),為0時(shí)禁止ip轉(zhuǎn)發(fā)。

       

      3.6.4  清除原有轉(zhuǎn)發(fā)規(guī)則

      ipvsadm --clear

      3.6.5  添加虛擬IP規(guī)則

      ipvsadm -A -t 192.168.101.100:80 -s rr

       

      -s rr表示采用輪詢策略。

      :80表示負(fù)載轉(zhuǎn)發(fā)的端口是80

      3.6.6  在虛擬IP中添加服務(wù)規(guī)則

      ipvsadm -a -t 192.168.101.100:80 -r 192.168.101.3:80 -g
      
      ipvsadm -a -t 192.168.101.100:80 -r 192.168.101.4:80 -g

      在新加虛擬IP記錄中添加兩條新的Real Server記錄,-g表示指定LVS 的工作模式為直接路由模式。

      lvs進(jìn)行負(fù)載轉(zhuǎn)發(fā)需要保證lvs負(fù)載的端口要和nginx服務(wù)的端口的一致,這里都為80。

      3.6.7  重啟lvs

      ipvsadm

       1020536-20180704122615967-1163424496.png

      3.7    Real Server配置

               在lvs的DR和TUn模式下,用戶的訪問(wèn)請(qǐng)求到達(dá)真實(shí)服務(wù)器后,是直接返回給用戶的,而不再經(jīng)過(guò)前端的Director Server,因此,就需要在每個(gè)Real server節(jié)點(diǎn)上增加虛擬的VIP地址,這樣數(shù)據(jù)才能直接返回給用戶。

      3.7.1  在回環(huán)設(shè)備上綁定了一個(gè)虛擬IP地址

      ifconfig lo:0 192.168.101.100 broadcast 192.168.101.100 netmask 255.255.255.255 up/sbin/route add -host 192.168.101.100 dev lo:0

       

       1020536-20180704122733275-2139838300.png

       

      3.7.2  關(guān)閉arp解析

      arp_announce :定義不同級(jí)別:當(dāng)ARP請(qǐng)求通過(guò)某個(gè)端口進(jìn)來(lái)是否利用這個(gè)接口來(lái)回應(yīng)。

               0 -利用本地的任何地址,不管配置在哪個(gè)接口上去響應(yīng)ARP請(qǐng)求;

               1 - 避免使用另外一個(gè)接口上的mac地址去響應(yīng)ARP請(qǐng)求;

               2 - 盡可能使用能夠匹配到ARP請(qǐng)求的最佳地址。

       

      arp_ignore:當(dāng)ARP請(qǐng)求發(fā)過(guò)來(lái)后發(fā)現(xiàn)自己正是請(qǐng)求的地址是否響應(yīng);

                  0 - 利用本地的任何地址,不管配置在哪個(gè)接口上去響應(yīng)ARP請(qǐng)求;

                  1 - 哪個(gè)接口上接受ARP請(qǐng)求,就從哪個(gè)端口上回應(yīng)。

      echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignoreecho "2" >/proc/sys/net/ipv4/conf/lo/arp_announce 
      
      echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignoreecho "2" >/proc/sys/net/ipv4/conf/all/arp_announce 
      
      sysctl -p #使用修改生效

       sysctl -p #使用修改生效

       1020536-20180704123008306-1567537129.png

      3.8    測(cè)試

      3.8.1  預(yù)期目標(biāo)

      由于lvs設(shè)置為rr輪詢策略,當(dāng)訪問(wèn)虛IP http://192.168.101.100,每次刷新請(qǐng)求通過(guò)lvs負(fù)載到不同的服務(wù)器。

      3.8.2  注意事項(xiàng)

      1、測(cè)試時(shí)需要在nginx的http中設(shè)置keepalive_timeout  0; 取消使用http持久連接模式,保證每次客戶端發(fā)起請(qǐng)求都需要向服務(wù)端建立連接,這樣做是為了每次刷新頁(yè)面都要經(jīng)過(guò)lvs負(fù)載轉(zhuǎn)發(fā)。

      2、lvs進(jìn)行負(fù)載轉(zhuǎn)發(fā)需要保證lvs負(fù)載的端口要和nginx服務(wù)的端口的一致,這里都為80。

       

      keepalive_timeout說(shuō)明:

      在nginx中keepalive_timeout的默認(rèn)值是75秒,默認(rèn)使用http持久連接模式,可使客戶端到服務(wù)器端的連接持續(xù)有效,當(dāng)出現(xiàn)對(duì)服務(wù)器的后繼請(qǐng)求時(shí),可避免建立或重新建立連接。生產(chǎn)環(huán)境建議keepalive_timeout不要設(shè)置為0。

      3.8.3  測(cè)試過(guò)程

      修改192.168.101.3和192.168.101.4下html目錄中index.html的內(nèi)容使之個(gè)性化。

      第一次請(qǐng)求:http://192.168.101.100

       1020536-20180704123114341-112159776.png

      刷新,相當(dāng)于第二次請(qǐng)求:

       1020536-20180704123136649-619695590.png

      依次交替測(cè)試,發(fā)現(xiàn)每次請(qǐng)求被負(fù)載到不同的nginx上。

       

      任意停止掉一個(gè)nginx,請(qǐng)求http://192.168.101.100繼續(xù)可以瀏覽,由于lvs采用輪詢策略如果其中一個(gè)nginx請(qǐng)求不可到達(dá)則去請(qǐng)求另外的nginx。

      3.9    腳本封裝

      為了方便配置啟動(dòng)lvs將上邊Director Server和Real Server的配置過(guò)程封裝在shell腳本中。

      3.9.1  Director Server配置

      在/etc/init.d下創(chuàng)建lvsdr,內(nèi)容如下:

      #!/bin/sh# 定義虛擬ip
      VIP=192.168.101.100 #虛擬 ip根據(jù)需求修改
      # 定義realserver,并已空格分開(kāi),根據(jù)需求修改
      RIPS="192.168.101.3 192.168.101.4"# 定義提供服務(wù)的端口
      SERVICE=80# 調(diào)用init.d腳本的標(biāo)準(zhǔn)庫(kù)
      . /etc/rc.d/init.d/functionscase $1 in
              start)        echo "Start LVS of DR Mode"
              # 開(kāi)啟ip轉(zhuǎn)發(fā)        echo "1" > /proc/sys/net/ipv4/ip_forward
              # 綁定虛擬ip        ifconfig eth0:0 $VIP broadcast $VIP netmask 255.255.255.255 up
              route add -host $VIP dev eth0:0
              # 清除lvs規(guī)則
              ipvsadm -C
              # 添加一條虛擬服務(wù)器記錄
          # -p指定一定的時(shí)間內(nèi)將相同的客戶端分配到同一臺(tái)后端服務(wù)器
          # 用于解決session的問(wèn)題,測(cè)試時(shí)或有別的解決方案時(shí)建議去掉
              ipvsadm -A -t $VIP:$SERVICE -s rr
      
              # 添加真實(shí)服務(wù)器記錄        for RIP in $RIPS    do
              echo $RIP:$SERVICE;
                      ipvsadm -a -t $VIP:$SERVICE -r $RIP:$SERVICE -g        done
              # 設(shè)置tcp tcpfin  udp的超時(shí)連接值
              ipvsadm --set 30 120 300
              ipvsadm
              ;;
      
              stop)        echo "Stop LVS DR"
              ifconfig eth0:0 down
              ipvsadm -C
              ;;        *)        echo "Usage:$0 {start | stop}"
              exit 1esac

       

      修改腳本權(quán)限:chmod +x /etc/init.d/lvsdr

       

      啟動(dòng)Director server:service lvsdr start

      停止Director server:service lvsdr stop

      3.9.2  Real Server配置

      在/etc/init.d下創(chuàng)建lvsdr,內(nèi)容如下:

      #!/bin/shVIP=192.168.101.100 #虛擬ip,根據(jù)需求修改
      . /etc/rc.d/init.d/functionscase $1 in
              start)        echo "lo:0 port starting"
              # 為了相應(yīng)lvs調(diào)度器轉(zhuǎn)發(fā)過(guò)來(lái)的包,需在本地lo接口上綁定vip        ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
              # 限制arp請(qǐng)求        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
              ;;
              stop)        echo "lo:0 port closing"
              ifconfig lo:0 down        echo "0" > /proc/sys/net/ipv4/conf/lo/arp_ignore    echo "0" > /proc/sys/net/ipv4/conf/lo/arp_announce    echo "0" > /proc/sys/net/ipv4/conf/all/arp_ignore    echo "0" > /proc/sys/net/ipv4/conf/all/arp_announce
              ;;        *)        echo "Usage: $0 {start | stop}"
              exit 1esac

       

       

      修改腳本權(quán)限:chmod +x /etc/init.d/lvsdr

       

      啟動(dòng)real server:service lvsdr start

      停止real server:service lvsdr stop

      4       nginx實(shí)現(xiàn)七層負(fù)載

      參考nginx教案。

       

      5       lvs四層+nginx七層負(fù)載均衡

      5.1    需求

               lvs采用DR模式基本上沒(méi)有性能瓶頸,用戶請(qǐng)求輸入至lvs經(jīng)過(guò)負(fù)載轉(zhuǎn)發(fā)到后臺(tái)服務(wù)上,通過(guò)后臺(tái)服務(wù)輸出響應(yīng)給用戶。nginx的負(fù)載性能遠(yuǎn)沒(méi)有l(wèi)vs好,lvs四層+nginx七層負(fù)載的好處是最前端是lvs接收請(qǐng)求進(jìn)行負(fù)載轉(zhuǎn)發(fā),由多個(gè)nginx共同完成七層負(fù)載,這樣nginx的負(fù)載性能就可以線性擴(kuò)展。

       

      5.2    準(zhǔn)備環(huán)境

      vip:192.168.101.100

      lvs-director:192.168.101.8

       

      nginx1:192.168.101.3                              安裝nginx

      nginx2:192.168.101.4                              安裝nginx

       

      tomcat1:192.168.101.5                           安裝tomcat

      tomcat2:192.168.101.6                           安裝tomcat

       

      5.3    配置

      5.3.1  Director Server配置

      vip:192.168.101.100

      lvs-director:192.168.101.8

       

      參考lvs四層負(fù)載DR模式進(jìn)行配置

       

      5.3.2  Real Server配置

       

      nginx1:192.168.101.3                              安裝nginx

      nginx2:192.168.101.4                              安裝nginx

       

      參考lvs四層負(fù)載DR模式進(jìn)行配置,需要修改nginx的配置文件使每個(gè)nginx對(duì)兩個(gè)tomcat進(jìn)行負(fù)載,如下:

       

      http {
          include       mime.types;
          default_type  application/octet-stream;
          sendfile        on;
      
         upstream tomcat_server_pool{
              server 192.168.101.5:8080 weight=10;
              server 192.168.101.6:8080 weight=10;
              }
      
          server {        listen 80;
              server_name localhost;
              location / {
                       proxy_pass http://tomcat_server_pool;                 index index.jsp index.html index.htm;
              }
          }
            
          }

      5.4    測(cè)試

      請(qǐng)求http://192.168.101.100,lvs負(fù)載到不同的nginx上,如果停止任意一臺(tái)nginx或停止任意一臺(tái)tomcat不影響訪問(wèn)。

       

      6       lvs高可用(了解)

      6.1    什么是高可用

               lvs作為負(fù)載均衡器,所有請(qǐng)求都先到達(dá)lvs,可見(jiàn)lvs處于非常重要的位置,如果lvs服務(wù)器宕機(jī)后端web服務(wù)將無(wú)法提供服務(wù),影響嚴(yán)重。

               為了屏蔽負(fù)載均衡服務(wù)器的宕機(jī),需要建立一個(gè)備份機(jī)。主服務(wù)器和備份機(jī)上都運(yùn)行高可用(High Availability)監(jiān)控程序,通過(guò)傳送諸如“I am alive”這樣的信息來(lái)監(jiān)控對(duì)方的運(yùn)行狀況。當(dāng)備份機(jī)不能在一定的時(shí)間內(nèi)收到這樣的信息時(shí),它就接管主服務(wù)器的服務(wù)IP并繼續(xù)提供負(fù)載均衡服務(wù);當(dāng)備份管理器又從主管理器收到“I am alive”這樣的信息時(shí),它就釋放服務(wù)IP地址,這樣的主服務(wù)器就開(kāi)始再次提供負(fù)載均衡服務(wù)。

      6.2    keepalived+lvs實(shí)現(xiàn)主備

      6.2.1  什么是keepalived

               keepalived是集群管理中保證集群高可用的一個(gè)服務(wù)軟件,用來(lái)防止單點(diǎn)故障。

              Keepalived的作用是檢測(cè)web服務(wù)器的狀態(tài),如果有一臺(tái)web服務(wù)器死機(jī),或工作出現(xiàn)故障,Keepalived將檢測(cè)到,并將有故障的web服務(wù)器從系統(tǒng)中剔除,當(dāng)web服務(wù)器工作正常后Keepalived自動(dòng)將web服務(wù)器加入到服務(wù)器群中,這些工作全部自動(dòng)完成,不需要人工干涉,需要人工做的只是修復(fù)故障的web服務(wù)器。

       

      6.2.2  keepalived工作原理

               keepalived是以VRRP協(xié)議為實(shí)現(xiàn)基礎(chǔ)的,VRRP全稱Virtual Router Redundancy Protocol,即虛擬路由冗余協(xié)議。

               虛擬路由冗余協(xié)議,可以認(rèn)為是實(shí)現(xiàn)路由器高可用的協(xié)議,即將N臺(tái)提供相同功能的路由器組成一個(gè)路由器組,這個(gè)組里面有一個(gè)master和多個(gè)backup,master上面有一個(gè)對(duì)外提供服務(wù)的vip(該路由器所在局域網(wǎng)內(nèi)其他機(jī)器的默認(rèn)路由為該vip),master會(huì)發(fā)組播,當(dāng)backup收不到VRRP包時(shí)就認(rèn)為master宕掉了,這時(shí)就需要根據(jù)VRRP的優(yōu)先級(jí)來(lái)選舉一個(gè)backup當(dāng)master。這樣的話就可以保證路由器的高可用了。

               keepalived主要有三個(gè)模塊,分別是core、check和VRRP。core模塊為keepalived的核心,負(fù)責(zé)主進(jìn)程的啟動(dòng)、維護(hù)以及全局配置文件的加載和解析。check負(fù)責(zé)健康檢查,包括常見(jiàn)的各種檢查方式。VRRP模塊是來(lái)實(shí)現(xiàn)VRRP協(xié)議的。

       

      詳細(xì)參考:Keepalived權(quán)威指南中文.pdf

       

      6.2.3  keepalived+lvs實(shí)現(xiàn)主備過(guò)程

       

      6.2.3.1 初始狀態(tài)

       1020536-20180704123601352-1270864931.png

      6.2.3.2 主機(jī)宕機(jī)

       1020536-20180704123634053-257677509.png

      6.2.3.3 主機(jī)恢復(fù)

       1020536-20180704123714883-77830766.png 

      6.2.4  準(zhǔn)備環(huán)境

       

      vip:192.168.101.100

      lvs-director:192.168.101.8   主lvs

      lvs-director:192.168.101.9   備lvs

       

      nginx1:192.168.101.3                              安裝nginx

      nginx2:192.168.101.4                              安裝nginx

       

      tomcat1:192.168.101.5                           安裝tomcat

      tomcat2:192.168.101.6                           安裝tomcat

       

      6.2.5  安裝keepalived

      分別在主備lvs上安裝keepalived,參考“安裝手冊(cè)”進(jìn)行安裝:

       

      6.2.6  配置keepalived

      6.2.6.1 主lvs

      修改主lvs下/etc/keepalived/keepalived.conf文件

      ! Configuration File for keepalived
      
      global_defs {
         notification_email {    #xxxx@itcast.com                                   # 發(fā)生故障時(shí)發(fā)送的郵箱   }   #notification_email_from xxxx@itcast.com             # 使用哪個(gè)郵箱發(fā)送
         #smtp_server xxx.com                                  # 發(fā)件服務(wù)器
         smtp_connect_timeout 30
         router_id LVS_DEVEL
      }
      
      vrrp_instance VI_1 {
          state MASTER             # 標(biāo)示為主lvs
          interface eth0           # HA檢測(cè)端口
          virtual_router_id 51     # 主備的virtual_router_id 必須相同
          priority 100             # 優(yōu)先級(jí),備lvs要比主lvs稍小
          advert_int 1             # VRRP Multicast 廣播周期秒數(shù)
          authentication {         # 定義認(rèn)證
              auth_type PASS       # 認(rèn)證方式為口令認(rèn)證
              auth_pass 1111       # 定義口令    }
          virtual_ipaddress {      # 定義vip
              192.168.101.100        # 多個(gè)vip可換行添加    }
      }
      
      virtual_server 192.168.101.100 80 {
          delay_loop 6       # 每隔6秒查看realserver狀態(tài)
          lb_algo wlc        # 調(diào)度算法為加權(quán)最小連接數(shù)
          lb_kind DR         # lvs工作模式為DR(直接路由)模式
          nat_mask 255.255.255.0
          persistence_timeout 50  # 同一IP 的連接50秒內(nèi)被分配到同一臺(tái)realserver(測(cè)試時(shí)建議改為0)
          protocol TCP            # 用TCP監(jiān)測(cè)realserver的狀態(tài)
          real_server 192.168.101.3 80 {       # 定義realserver
              weight 3                       # 定義權(quán)重
              TCP_CHECK {  # 注意TCP_CHECK和{之間的空格,如果沒(méi)有的話只會(huì)添加第一個(gè)realserver
                  connect_timeout 3          # 三秒無(wú)響應(yīng)超時(shí)
                  nb_get_retry 3
                  delay_before_retry 3
                  connect_port 80
              }
          }
          real_server 192.168.101.4 80 {
              weight 3
              TCP_CHECK {
                  connect_timeout 3
                  nb_get_retry 3
                  delay_before_retry 3
                  connect_port 80
              }
          }
      }

      6.2.6.2 備lvs

      修改備lvs下/etc/keepalived/keepalived.conf文件

      配置備lvs時(shí)需要注意:需要修改state為BACKUP , priority比MASTER低,virtual_router_id和master的值一致

      ! Configuration File for keepalived
      
      global_defs {
         notification_email {    #xxxx@itcast.com                                   # 發(fā)生故障時(shí)發(fā)送的郵箱   }   #notification_email_from xxxx@itcast.com             # 使用哪個(gè)郵箱發(fā)送
         #smtp_server xxx.com                                  # 發(fā)件服務(wù)器
         smtp_connect_timeout 30
         router_id LVS_DEVEL
      }
      
      vrrp_instance VI_1 {
          state BACKUP             # 標(biāo)示為備lvs
          interface eth0           # HA檢測(cè)端口
          virtual_router_id 51     # 主備的virtual_router_id 必須相同
          priority 99              # 優(yōu)先級(jí),備lvs要比主lvs稍小
          advert_int 1             # VRRP Multicast 廣播周期秒數(shù)
          authentication {         # 定義認(rèn)證
              auth_type PASS       # 認(rèn)證方式為口令認(rèn)證
              auth_pass 1111       # 定義口令    }
          virtual_ipaddress {      # 定義vip
              192.168.101.100        # 多個(gè)vip可換行添加    }
      }
      
      virtual_server 192.168.101.100 80 {
          delay_loop 6       # 每隔6秒查看realserver狀態(tài)
          lb_algo wlc        # 調(diào)度算法為加權(quán)最小連接數(shù)
          lb_kind DR         # lvs工作模式為DR(直接路由)模式
          nat_mask 255.255.255.0
          persistence_timeout 50  # 同一IP 的連接50秒內(nèi)被分配到同一臺(tái)realserver(測(cè)試時(shí)建議改為0)
          protocol TCP            # 用TCP監(jiān)測(cè)realserver的狀態(tài)
          real_server 192.168.101.3 80 {       # 定義realserver
              weight 3                       # 定義權(quán)重
              TCP_CHECK {  # 注意TCP_CHECK和{之間的空格,如果沒(méi)有的話只會(huì)添加第一個(gè)realserver
                  connect_timeout 3          # 三秒無(wú)響應(yīng)超時(shí)
                  nb_get_retry 3
                  delay_before_retry 3
                  connect_port 80
              }
          }
          real_server 192.168.101.4 80 {
              weight 3
              TCP_CHECK {
                  connect_timeout 3
                  nb_get_retry 3
                  delay_before_retry 3
                  connect_port 80
              }
          }
      }

      6.2.7  測(cè)試

      6.2.7.1 啟動(dòng)

       

      • director Server啟動(dòng):

      注意:使用keepalived就不用手動(dòng)配置啟動(dòng)lvs,在主、備lvs上啟動(dòng)keepalived即可。

       

      主備lvs(192.168.101.8、192.168.101.9)都啟動(dòng)keepalived。

      service keepalived start
      • real server啟動(dòng):

      192.168.101.3、192.168.101.4啟動(dòng)nginx和lvs的realserver配置

      cd /usr/local/nginx/sbin./nginx -c /usr/local/nginx/conf/nginx-lvs.conf

       

       

      啟動(dòng)lvs的realserver配置:

      service lvsdr start

       

      注意:real server的lvs配置需要使用lvsdr腳本。

       

      • tomcat 啟動(dòng)

       

      6.2.7.2 初始狀態(tài)

      查看主lvs的eth0設(shè)置:

      vip綁定在主lvs的eth0上。

       1020536-20180704124219488-148078802.png

      查詢lvs狀態(tài):

       1020536-20180704124236555-1202069823.png

      查看備lvs的eth0設(shè)置:

      vip沒(méi)有綁定在備lvs的eth0上。

       1020536-20180704124253276-95332008.png

      訪問(wèn)http://192.168.101.100,可以正常負(fù)載。

      6.2.7.3 主機(jī)宕機(jī)

      將主lvs的keepalived停止或?qū)⒅鱨vs關(guān)機(jī)(相當(dāng)于模擬宕機(jī)),查看主lvs的eth0:

      eth0沒(méi)有綁定vip

       1020536-20180704124318920-36808332.png 

      查看備lvs的eth0:

      vip已經(jīng)漂移到備lvs。

       1020536-20180704124342948-1996911901.png

      訪問(wèn)http://192.168.101.100,可以正常負(fù)載。

      6.2.7.4 主機(jī)恢復(fù)

      將主lvs的keepalived啟動(dòng)。

      查看主lvs的eth0:

       

      查看備lvs的eth0:

      vip漂移到主lvs。

       1020536-20180704124405586-227814467.png

      查看備lvs的eth0:

      eth0沒(méi)有綁定vip

       1020536-20180704124420747-169904931.png

      訪問(wèn)http://192.168.101.100,可以正常負(fù)載。

       

      6.3    keepalived+lvs實(shí)現(xiàn)雙主

               上邊主備方案是當(dāng)前只有一臺(tái)lvs工作,這造成資源浪費(fèi),可以采用雙主結(jié)構(gòu),讓兩臺(tái)lvs當(dāng)前都進(jìn)行工作,采用dns輪詢方式,當(dāng)用戶訪問(wèn)域名通過(guò)dns輪詢每臺(tái)lvs,雙主結(jié)構(gòu)需要兩個(gè)vip,這兩個(gè)vip要綁定域名。

       

               同樣,在每臺(tái)lvs上安裝keepalived軟件,當(dāng)keepalived檢測(cè)到其中一個(gè)lvs宕機(jī)則將宕機(jī)的vip漂移到活動(dòng)lvs上,當(dāng)lvs恢復(fù)則vip又重新漂移回來(lái)。

       

      6.3.1.1 初始狀態(tài)

               每臺(tái)lvs綁定一個(gè)vip,共兩個(gè)vip,DNS設(shè)置域名對(duì)應(yīng)這兩個(gè)vip,通過(guò)DNS輪詢每次解析到不同的vip上即解析到不同的lvs上。

       1020536-20180704124726547-1587892228.png

      6.3.1.2 其中一個(gè)主機(jī)宕機(jī)

               其中一個(gè)主機(jī)宕機(jī),每臺(tái)lvs上安裝的keepalived程序會(huì)檢測(cè)到對(duì)方宕機(jī),將宕機(jī)一方的vip漂移至活動(dòng)的lvs服務(wù)器上,這樣DNS輪詢?nèi)康揭慌_(tái)lvs繼續(xù)對(duì)外提供服務(wù)。

       1020536-20180704124647804-1667096885.png

      6.3.1.3 主機(jī)恢復(fù)

      當(dāng)主機(jī)恢復(fù)又回到初始狀態(tài),每個(gè)vip綁定在不同的lvs上。

       1020536-20180704124801020-312515257.png

      6.4    lvs擴(kuò)展的思考

               前端使用1到2臺(tái)lvs作為負(fù)載基本可以滿足中小型網(wǎng)站的并發(fā)要求,當(dāng)lvs的負(fù)載成為瓶頸此時(shí)就需要對(duì)lvs進(jìn)行優(yōu)化、擴(kuò)展。

      • 方案1:LVS-ospf集群

               OSPF(Open Shortest Path First開(kāi)放式最短路徑優(yōu)先)是一個(gè)內(nèi)部網(wǎng)關(guān)協(xié)議(Interior Gateway Protocol,簡(jiǎn)稱IGP),用于在單一自治系統(tǒng)(autonomous system,AS)內(nèi)決策路由。

      LVS(DR)通過(guò)ospfd,做lvs集群,實(shí)現(xiàn)一個(gè)VIP,多臺(tái)LVS同時(shí)工作提供服務(wù),這種方案需要依賴三層交換機(jī)設(shè)備實(shí)現(xiàn)。

       1020536-20180704124844740-1082302948.png 

       

               用戶請(qǐng)求(VIP:42.xx.xx.100)到達(dá)三層交換機(jī)之后,通過(guò)對(duì)原地址、端口和目的地址、端口的hash,將鏈接分配到集群中的某一臺(tái)LVS上,LVS通過(guò)內(nèi)網(wǎng)(10.101.10.x)向后端轉(zhuǎn)發(fā)請(qǐng)求,后端再將數(shù)據(jù)返回給用戶。

      LVS-ospf集群模式的最大優(yōu)勢(shì)就在于:

       

      1.LVS調(diào)度機(jī)自由伸縮,橫向線性擴(kuò)展(最大8臺(tái),受限于三層設(shè)備允許的等價(jià)路由數(shù)目maximum load-balancing);

      2.LVS機(jī)器同時(shí)工作,不存在備機(jī),提高利用率;

      3.做到了真正的高可用,某臺(tái)LVS機(jī)器宕機(jī)后,不會(huì)影響服務(wù)

       

      • 方案2:DNS輪詢

       

      上面講的是一組雙主結(jié)構(gòu),可以采用多組雙主結(jié)構(gòu)達(dá)到橫向擴(kuò)展lvs的目的,此方案需要每臺(tái)lvs都綁定一個(gè)vip(公網(wǎng)ip),DNS設(shè)置域名輪詢多個(gè)vip,如下圖:

       1020536-20180704124934349-1305154377.png

       

      • 方案3:使用硬件負(fù)載均衡設(shè)置 

       

               如果資金允許可以購(gòu)買硬件設(shè)置來(lái)完成負(fù)載均衡,性能不錯(cuò)的有F5、Array等都可以滿足超高并發(fā)的要求。


      掃描二維碼推送至手機(jī)訪問(wèn)。

      版權(quán)聲明:本文由星星博客發(fā)布,如需轉(zhuǎn)載請(qǐng)注明出處。

      本文鏈接:http://www.7811333.com/?id=431

      “LVS與Nginx結(jié)合的負(fù)載均衡方案” 的相關(guān)文章

      Linux系統(tǒng)中的用戶權(quán)限管理深度解析

      Linux是一種強(qiáng)大的開(kāi)源操作系統(tǒng),它的穩(wěn)定性和靈活性使其在服務(wù)器和嵌入式系統(tǒng)中得到了廣泛應(yīng)用。在Linux系統(tǒng)中,用戶權(quán)限管理是一個(gè)重要的功能,它可以保證系統(tǒng)的安全性和穩(wěn)定性。本文將詳細(xì)介紹Linux中的用戶權(quán)限相關(guān)命令。 在Linux系統(tǒng)中,每一...

      發(fā)表評(píng)論

      訪客

      ◎歡迎參與討論,請(qǐng)?jiān)谶@里發(fā)表您的看法和觀點(diǎn)。
      主站蜘蛛池模板: 色综合久久天天综线观看| 天天久久综合网站| 国产综合在线观看视频| 麻豆久久婷婷五月综合国产| 国产综合精品在线| 久久久久久久综合日本亚洲 | 中文字幕亚洲综合小综合在线| 欧洲97色综合成人网| 亚洲国产免费综合| 亚洲欧洲日韩综合| 青青热久久久久综合精品| 久久婷婷午色综合夜啪| 久久婷婷五月综合色国产香蕉| 色综合99久久久无码国产精品 | 精品久久久久久综合日本| 伊人yinren6综合网色狠狠| 亚洲综合久久夜AV | 色噜噜狠狠色综合中文字幕| 亚洲综合视频在线| 国产色综合天天综合网| 亚洲精品第一国产综合精品99| 亚洲精品第一国产综合野| 国产综合成人亚洲区| 国产综合无码一区二区色蜜蜜 | 亚洲综合最新无码专区| 狠狠色狠狠色综合系列| 一本一道久久精品综合| 亚洲亚洲人成综合网络| 亚洲人成伊人成综合网久久久| 天天综合久久一二三区| 色爱区综合激情五月综合色| 三级韩国一区久久二区综合 | 色综合网天天综合色中文男男| 久久综合88熟人妻| 亚洲国产综合人成综合网站00| 一本色道久久综合狠狠躁| 插插插色欲综合网| 亚洲国产精品综合久久久| 狠狠色狠狠色综合系列| 亚洲精品第一国产综合精品99| 亚洲色图综合在线|