<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          超詳細!一文帶你了解LVS四層負載均衡企業(yè)級實踐!

          共 13144字,需瀏覽 27分鐘

           ·

          2022-02-22 05:37


          隨著時代發(fā)展,LVS在中小企業(yè)作為單獨Web集群負載均衡用的已經(jīng)極少了,更多被更簡單的Nginx替代。


          在今天(2022年)的運維工作中,LVS更多的是放在Nginx7層負載前面做4層負載,目的是支持大并發(fā),另外,TCP負載依然有用武之地,例如MySQL集群負載、K8S集群負載,因此LVS是運維人員一個重要技術(shù)棧內(nèi)容。


          01


          LVS介紹



          LVS是Linux Virtual Server的簡寫,意即Linux虛擬服務器,是一個虛擬的服務器集群系統(tǒng),可以在Unix/Linux平臺下實現(xiàn)負載均衡集群功能。


          該項目是中國國內(nèi)最早出現(xiàn)的自由軟件項目之一。

          IPVS發(fā)展史

          LVS的具體實現(xiàn)是IPVS內(nèi)核模塊,因此,可簡單將LVS和IPVS作為一個東西稱呼。早在Linux2.2內(nèi)核時,IPVS就已經(jīng)以內(nèi)核補丁的形式出現(xiàn)了。


          從2.4.23版本開始,IPVS軟件就是合并到Linux內(nèi)核的常用版本的內(nèi)核補丁的集合。從2.4.24以后IPVS已經(jīng)成為Linux官方標準內(nèi)核的一部分。

          IPVS工作層次

          從上圖我們看出,LVS負載均衡調(diào)度技術(shù)是在Linux內(nèi)核中實現(xiàn)的,因此,被稱之為Linux虛擬服務器(Linux Virtual Server)。


          使用該軟件配置LVS時候,不能直接配置內(nèi)核中的ipvs,而需要使用ipvs的管理工具ipvsadm進行管理,當然還可通過Keepalived軟件直接管理ipvs,ipvs的基礎(chǔ)配置工具是ipvsadm。

          LVS技術(shù)點小結(jié)

          • 真正實現(xiàn)調(diào)度的工具是IPVS,工作在Linux內(nèi)核層面。

          • LVS自帶的IPVS命令行管理工具是ipvsadm。

          • Keepalived可更好實現(xiàn)管理IPVS(配置文件)及負載均衡器高可用。

          • Red hat工具Piranha WEB管理實現(xiàn)調(diào)度的工具IPVS。


          02


          LVS的4種工作模式原理



          LVS工具術(shù)語命名約定

          LVS四種負載工作模式名稱

          LVS負載均衡器實支持下面四種負載工作模式:

          • 網(wǎng)絡地址轉(zhuǎn)換模式,即NAT模式(Network Address Translation)

          • IP隧道模式,即TUN模式(IP Tunneling)

          • 直接路由模式,即DR模式(Direct Routing)

          • 完全網(wǎng)絡地址轉(zhuǎn)換模式,即FULLNAT模式(FULL Network Address Translation)

          NAT模式原理

          簡單說就是生活中收費站,大多數(shù)商業(yè)化IP負載均衡調(diào)度器產(chǎn)品都是使用NAT方法,如F5、Netscaler。


          NAT模式是通過網(wǎng)絡地址轉(zhuǎn)換,由LB重寫請求報文目標地址,根據(jù)預設調(diào)度算法,將請求分派給后端真實服務器;服務器響應并處理,報文返回時必須要通過調(diào)度器,經(jīng)過調(diào)度器時報文的源地址被重寫,再返回給客戶完成整個負載調(diào)度過程。


          NAT模式原理圖如下:


          在這里需要指出:根據(jù)缺省的TCP/IP協(xié)議棧處理,請求報文的目標地址為VIP,響應報文的源地址肯定也為VIP,所以響應報文不需要作任何修改。


          可以直接返回給客戶,客戶認為得到正常的服務,而不會知道究竟是哪一臺服務器處理的,所以LVS才叫虛擬服務器。

          TUN模式原理

          NAT模式原理圖如下:


          DR模式原理

          DR模式是通過改寫請求報文的目標MAC地址,將請求發(fā)給真實服務器的,而真實服務器將響應后的處理結(jié)果直接返回給客戶端用戶。


          同TUN技術(shù),DR技術(shù)可極大地提高集群系統(tǒng)伸縮性。但是這種DR模式?jīng)]有IP隧道的開銷,對集群中的真實服務器也沒有必須支持IP隧道協(xié)議的要求,但是要求調(diào)度器LB與真實服務器RS都有一塊網(wǎng)卡連在同一物理網(wǎng)段上,即必須在同一個局域網(wǎng)環(huán)境。


          NAT模式原理圖如下:


          FNAT模式原理

          FULLNAT模式是后期淘寶網(wǎng)開源的模式,LVS應用主要采用DR和NAT模式,但這2種模式要求RealServer和LVS在同一個vlan中,導致部署成本過高。

          TUNNEL模式雖然可以跨vlan,但RealServer上需要部署ipip隧道模塊等,網(wǎng)絡拓撲上需要連通外網(wǎng),較復雜,不易運維。

          為了解決上述問題,F(xiàn)ULLNAT誕生。

          該模式和NAT模式區(qū)別是:數(shù)據(jù)包進入時,除了做DNAT,還做SNAT(用戶ip->內(nèi)網(wǎng)ip),數(shù)據(jù)包出時,除了做SNAT,還做DNAT(內(nèi)網(wǎng)ip–>用戶ip)從而實現(xiàn)LVS-RealServer間可以跨vlan通訊,RealServer只需要連接到內(nèi)網(wǎng)。

          和NAT比,正常轉(zhuǎn)發(fā)性能下降<10%,但是LB可以多臺同時負載均衡工作;


          FNAT模式原理圖如下:



          03


          LVS不同模式優(yōu)缺點




          04


          LVS調(diào)度算法



          LVS的調(diào)度算法決定了如何在集群節(jié)點之間分布工作負荷。


          當Director調(diào)度器收到來自客戶端計算機訪問它的VIP上的集群服務的入站請求時,Director調(diào)度器必須決定哪個集群節(jié)點應該處理請求。


          Director調(diào)度器可用于做出該決定的調(diào)度方法分成兩個基本類別:


          • 固定調(diào)度算法:rr,wrr,dh,sh

          • 動態(tài)調(diào)度算法:wlc,lc,lblc,lblcr,SED,NQ


          常用算法為rr,wrr,wlc,10種調(diào)度算法見如下:


          05


          LVS負載均衡安裝



          yum?install?ipvsadm?-y
          rpm?-qa?ipvsadm???#ipvsadm-1.27-8.el7.x86_64
          modprobe?ip_vs????#把ipvs加入到內(nèi)核
          lsmod|grep?ip_vs??#檢查內(nèi)核是否有ip_vs
          uname?-r??????????#3.10.0-1160.31.1.el7.x86_64
          ln?-s?/usr/src/kernels/3.10.0-1160.31.1.el7.x86_64?/usr/src/linux??#yum?install?kernel-devel?-y
          ls?-l?/usr/src/
          #lrwxrwxrwx??1?root?root?44?8月???1?18:04?linux?->?/usr/src/kernels/3.10.0-1160.31.1.el7.x86_6
          特別注意:
          1)ln命令鏈接路徑要和uname -r輸出結(jié)果內(nèi)核版本對應。
          2)如果沒有/usr/src/kernels/xx路徑,可通過yum install kernel-devel -y安裝。


          06


          實現(xiàn)MySQL負載均衡



          1、配置LVS虛擬IP(VIP)


          ifconfig?eth1:18?172.16.1.18/24?up?????#==>簡便寫法
          #route add -host 172.16.1.18 dev eth1 ?#==添加主機路由,也可不加此行。

          ③配置后的檢查結(jié)果:
          ifconfig?eth1:0

          C:\Users\oldboy>ping?172.16.1.18
          正在?Ping?172.16.1.18?具有?32?字節(jié)的數(shù)據(jù):
          來自?172.16.1.18?的回復:?字節(jié)=32?時間<1ms?TTL=64
          #提示:到這里說明VIP地址已經(jīng)配好,并可以使用了。

          2、手工執(zhí)行配置添加LVS服務并增加兩臺RS ipvsadm


          ipvsadm?-C?????????????????????????#<==????-C????????clear?the?whole?table
          ipvsadm?--set?30?5?60??????????????#<==?--set?tcp?tcpfin?udp????????set?connection?timeout?values
          ipvsadm?-A?-t?172.16.1.18:3306?-s?wrr???#--add-service???-A???add?virtual?service?with?options
          #ipvsadm?-A?-t?172.16.1.18:3306?-s?wrr?-p?20
          ipvsadm?-a?-t?172.16.1.18:3306?-r?172.16.1.51:3306?-g?-w?1?#dr模式
          ipvsadm?-a?-t?172.16.1.18:3306?-r?172.16.1.7:3306?-g?-w?1

          #?ipvsadm?-a|e?-t|u|f?service-address?-r?server-address?[options]

          [root@lb4-01?~]#?ipvsadm?-Ln
          IP?Virtual?Server?version?1.2.1?(size=4096)
          Prot?LocalAddress:Port?Scheduler?Flags
          ??->?RemoteAddress:Port???????????Forward?Weight?ActiveConn?InActConn
          TCP??172.16.1.18:3306?wrr
          ??->?172.16.1.7:3306??????????????Route???1??????0??????????0?????????
          ??->?172.16.1.51:3306?????????????Route???1??????0??????????0?

          [root@lb4-01?~]#?ipvsadm?-Ln?--stats
          IP?Virtual?Server?version?1.2.1?(size=4096)
          Prot?LocalAddress:Port???????????????Conns???InPkts??OutPkts??InBytes?OutBytes
          ??->?RemoteAddress:Port
          TCP??172.16.1.18:3306????????????????????0????????0????????0????????0????????0
          ??->?172.16.1.7:3306?????????????????????0????????0????????0????????0????????0
          ??->?172.16.1.51:3306????????????????????0????????0????????0????????0????????0

          【刪除方法】


          #ipvsadm?-D?-t?172.16.1.18:3306?-s?wrr
          #ipvsadm?-D?-t?172.16.1.18:3306
          #ipvsadm?-d?-t?172.16.1.18:3306?-r?172.16.1.18:3306?<==正確
          #ipvsadm?-d?-t?172.16.1.18:3306?-r?172.16.1.18:3306?-g?-w?1?<==不好用


          【相關(guān)參數(shù)說明】


          [root@oldboy?~]#?ipvsadm?-help
          #?--clear???????????-C????????clear?the?whole?table
          #?--add-service?????-A????????add?virtual?service?with?options
          #?--tcp-service?????-t?service-address???service-address?is?host[:port]
          #?--scheduler???????-s?scheduler?????????one?of?rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,
          #?--add-server????-a???????????????????add?real?server?with?options
          #?--real-server???-r?server-address????server-addres?s?is?host?(and?port)
          #?--masquerading??-m???????????????????masquerading?(NAT)
          #?--gatewaying????-g???????????????????gatewaying?(direct?routing)?(default)
          #?--delete-server?-d?????????delete?real?server
          #?--persistent????-p?[timeout]?????????persistent?service(會話保持功能)
          #?--set?tcp?tcpfin?udp????????set?connection?timeout?values
          #?--weight???????-w?weight????????????capacity?of?real?server
          #?--ipip?????????-i???????????????????ipip?encapsulation?(tunneling)

          #提示:更多參數(shù)請ipvsadm -help自行查看
          #⑤命令執(zhí)行過程及檢查配置的執(zhí)行結(jié)果
          ipvsadm?-C?
          ipvsadm?--set?30?5?60??
          ipvsadm?-A?-t?172.16.1.18:3306?-s?wrr?-p?20
          ipvsadm?-a?-t?172.16.1.18:3306?-r?172.16.1.51:3306?-g?-w?1
          ipvsadm?-a?-t?172.16.1.18:3306?-r?172.16.1.7:3306?-g?-w?1???
          ipvsadm?-L?-n?--sort

          ipvsadm?-d?-t?172.16.1.18:3306?-r?172.16.1.51:80?#==>刪除測試
          ipvsadm?-L?-n?--sort

          ipvsadm?-a?-t?172.16.1.18:3306?-r?172.16.1.51:80?
          ipvsadm?-L?-n?--sort

          #此時,可以打開瀏覽器訪問http://172.16.1.18體驗結(jié)果,如果沒意外,是無法訪問的。

          3、手工在RS端綁定lo網(wǎng)卡及抑制ARP


          ⑥每臺real?server端執(zhí)行
          命令:
          ifconfig?lo:18?172.16.1.18/32?up
          #route?add?-host?172.16.1.18?dev?lo

          #工作中寫到配置文件見后文

          #centos7
          ip?addr?add?172.16.1.18/32?dev?lo?label?lo:50
          #route?add?-host?172.16.1.18?dev?lo

          每個集群節(jié)點上的環(huán)回接口(lo)設備上被綁定VIP地址(其廣播地址是其本身,子網(wǎng)掩碼是255.255.255.255,采取可變長掩碼方式把網(wǎng)段劃分成只含一個主機地址的目的是避免ip地址沖突)允許LVS-DR集群中的集群節(jié)點接受發(fā)向該VIP地址的數(shù)據(jù)包,這會有一個非常嚴重的問題發(fā)生,集群內(nèi)部的真實服務器將嘗試回復來自正在請求VIP客戶端的ARP廣播,這樣所有的真實服務器都將聲稱自己擁有該VIP地址,這時客戶端將有可能直接發(fā)送請求數(shù)據(jù)包到某臺真實服務器上,從而破壞了DR集群的負載均衡策略。因此,必須要抑制所有真實服務器響應目標地址為VIP的ARP廣播,而把客戶端ARP廣播響應交給負載均衡器。

          4、手工在RS端抑制ARP響應


          ⑦抑制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

          以RS1為例演示執(zhí)行過程如下:
          ifconfig?lo:18?172.16.1.18?netmask?255.255.255.255?up
          #route?add?-host?172.16.1.18?dev?lo
          cat?/proc/sys/net/ipv4/conf/lo/arp_ignore
          cat?/proc/sys/net/ipv4/conf/all/arp_ignore??
          cat?/proc/sys/net/ipv4/conf/all/arp_announce?
          cat?/proc/sys/net/ipv4/conf/lo/arp_announce????
          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


          #測試最終LVS對數(shù)據(jù)庫負載是否成功:
          #采用web02測試:
          #??phpmyadmin
          #??mysql?測試成功

          windows:navicat...需要vmware?映射

          實際教學使用mysql客戶端測試,在web02上
          yum?install?mariadb?-y
          mysql?-ublog?-poldboy123?-h172.16.1.18?#18是VIP,用戶密碼為前面課程提前設置。

          ####停掉了51,發(fā)現(xiàn)連不了
          lvs沒有健康檢查功能,51停掉了,仍然請求發(fā)給51,需要手工清理51
          [root@lb4-01?~]#?ipvsadm?-Ln
          IP?Virtual?Server?version?1.2.1?(size=4096)
          Prot?LocalAddress:Port?Scheduler?Flags
          ??->?RemoteAddress:Port???????????Forward?Weight?ActiveConn?InActConn
          TCP??172.16.1.18:3306?wrr?persistent?20
          ??->?172.16.1.7:3306??????????????Route???1??????0??????????0?????????
          ??->?172.16.1.51:3306?????????????Route???1??????0??????????4?????????
          [root@lb4-01?~]#?ipvsadm?-d?-t?172.16.1.18:3306?-r?172.16.1.51:3306
          [root@lb4-01?~]#?ipvsadm?-Ln
          IP?Virtual?Server?version?1.2.1?(size=4096)
          Prot?LocalAddress:Port?Scheduler?Flags
          ??->?RemoteAddress:Port???????????Forward?Weight?ActiveConn?InActConn
          TCP??172.16.1.18:3306?wrr?persistent?20
          ??->?172.16.1.7:3306??????????????Route???1??????0??????????0???
          重連成功,LVS的健康檢查要靠keepalved配合實現(xiàn),后文講

          5、抑制ARP腳本實現(xiàn)


          開發(fā)腳本配置LVS?RS真實服務器端
          #!/bin/bash
          #?Written?by?oldboy?([email protected]
          #?QQ:31333741
          #?description:?Config?realserver?lo?and?apply?noarp?
          VIP=(
          ????????172.16.1.18
          ?????)
          .?/etc/rc.d/init.d/functions
          case?"1"?in
          start)
          ????????for?((i=0;?i<`echo{#VIP[*]}`;?i++))
          ????????do
          ???????????interface="lo:`echo?{VIP[i]}|awk?-F?.?'{print?4}'`"
          ???????????/sbin/ifconfiginterface?{VIP[i]}?broadcast?{VIP[i]}?netmask?255.255.255.255?up
          ????????done
          ????????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
          ???????action?"Start?LVS?of?RearServer.by?old1boy"
          ????????;;
          stop)
          ????????for?((i=0;?i<`echo?{#VIP[*]}`;?i++))
          ????????do
          ????????????interface="lo:`echo{VIP[i]}|awk?-F?.?'{print4}'`"
          ????????????/sbin/ifconfig?interface{VIP[i]}?broadcast{VIP[i]}?netmask?255.255.255.255?down
          ????????done
          ????????echo?"close?LVS?Directorserver"
          ????????if?[{#VIP[*]}?-eq?1];then
          ??????????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
          ????????fi
          ???????action?"Close?LVS?of?RearServer.by?old2boy"
          ????????;;
          *)
          ????????echo?"Usage:?$0?{start|stop}"
          ????????exit?1
          esac

          #工作中可以將lo網(wǎng)卡綁定寫到配置文件:
          cp?/etc/sysconfig/network-scripts/ifcfg-eth0?/etc/sysconfig/network-scripts/ifcfg-lo:18
          [root@db01?network-scripts]#?cat?ifcfg-lo:18
          TYPE="Ethernet"
          PROXY_METHOD="none"
          BROWSER_ONLY="no"
          BOOTPROTO="none"
          DEFROUTE="yes"
          NAME="lo:18"
          DEVICE="lo:18"
          ONBOOT="yes"
          IPADDR="172.16.1.18"
          PREFIX="32

          6、arp抑制技術(shù)參數(shù)說明


          arp_ignore-?INTEGER
          定義對目標地址為本地IP的ARP詢問不同的應答模式
          0?-(默認值):?回應任何網(wǎng)絡接口上對任何本地IP地址的arp查詢請求。
          1 -只回答目標IP地址是來訪網(wǎng)絡接口本地地址的ARP查詢請求。
          2 -只回答目標IP地址是來訪網(wǎng)絡接口本地地址的ARP查詢請求,且來訪IP必須在該網(wǎng)絡接口的子網(wǎng)段內(nèi)。
          3 -不回應該網(wǎng)絡界面的arp請求,而只對設置的唯一和連接地址做出回應。
          4-7 -保留未使用。
          8 -不回應所有(本地地址)的arp查詢。
          arp_announce?-?INTEGER
          對網(wǎng)絡接口上,本地IP地址的發(fā)出的,ARP回應,作出相應級別的限制:??
          確定不同程度的限制,宣布對來自本地源IP地址發(fā)出Arp請求的接口
          0?-(默認)?在任意網(wǎng)絡接口(eth0,eth1,lo)上的任何本地地址
          1 -盡量避免不在該網(wǎng)絡接口子網(wǎng)段的本地地址做出arp回應. 當發(fā)起ARP請求的源IP地址是被設置應該經(jīng)由路由達到此網(wǎng)絡接口的時候很有用.此時會檢查來訪IP是否為所有接口上的子網(wǎng)段內(nèi)ip之一。如果該來訪IP不屬于各個網(wǎng)絡接口上的子網(wǎng)段內(nèi),那么將采用級別2的方式來進行處理.
          2 -對查詢目標使用最適當?shù)谋镜氐刂?,在此模式下將忽略這個IP數(shù)據(jù)包的源地址并嘗試選擇能與該地址通信的本地地址,首要是選擇所有的網(wǎng)絡接口的子網(wǎng)中外出訪問子網(wǎng)中包含該目標IP地址的本地地址。如果沒有合適的地址被發(fā)現(xiàn),將選擇當前的發(fā)送網(wǎng)絡接口或其他的有可能接受到該ARP回應的網(wǎng)絡接口來進行發(fā)送.限制了使用本地的vip地址作為優(yōu)先的網(wǎng)絡接口


          07


          實現(xiàn)MySQL高可用



          1、實現(xiàn)LVS+keepalived db高可用


          lb4-01配置:
          [root@lb4-01?keepalived]#?cat?keepalived.conf
          global_defs?{
          ???router_id?lb01
          }
          vrrp_instance?VI_2?{
          ????state?MASTER
          ????interface?eth1
          ????virtual_router_id?52
          ????priority?150
          ????advert_int?1
          ????authentication?{
          ????????auth_type?PASS
          ????????auth_pass?1111
          ????}
          ????virtual_ipaddress?{
          ??????172.16.1.18/24?dev?eth1?label?eth1:18
          ????}
          }

          #port?3306
          ##oldboy?service??virtual_server?
          virtual_server?172.16.1.18?3306?{
          ????delay_loop?6????????????
          ????lb_algo?wrr????????????????
          ????lb_kind?DR
          ????persistence_timeout?20?????
          ????protocol?TCP???????
          real_server?172.16.1.7?3306?{
          ????weight?1??????????????
          ????TCP_CHECK?{
          ????connect_timeout?5???????
          ????#nb_get_retry?3
          ????delay_before_retry?3
          ????connect_port?3306
          ????}
          }

          real_server?172.16.1.51?3306?{
          ????weight?1
          ????TCP_CHECK?{
          ????connect_timeout?5
          ???#?nb_get_retry?3
          ????delay_before_retry?3
          ????connect_port?3306
          ????}
          ??}
          }


          lb4-02配置:
          [root@lb4-02?keepalived]#?cat?keepalived.conf
          global_defs?{
          ???router_id?lb4-02
          }
          vrrp_instance?VI_2?{
          ????state?BACKUP
          ????interface?eth1
          ????virtual_router_id?52
          ????priority?50
          ????advert_int?1
          ????authentication?{
          ????????auth_type?PASS
          ????????auth_pass?1111
          ????}
          ????virtual_ipaddress?{
          ??????172.16.1.18/24?dev?eth1?label?eth1:18
          ????}
          }

          #port?3306
          ##oldboy?service??virtual_server?
          virtual_server?172.16.1.18?3306?{
          ????delay_loop?6????????????
          ????lb_algo?wrr????????????????
          ????lb_kind?DR
          ????persistence_timeout?20?????
          ????protocol?TCP??????
          real_server?172.16.1.7?3306?{
          ????weight?1??????????????
          ????TCP_CHECK?{
          ????connect_timeout?5???????
          ????#nb_get_retry?3
          ????delay_before_retry?3
          ????connect_port?3306
          ????}
          }

          real_server?172.16.1.51?3306?{
          ????weight?1
          ????TCP_CHECK?{
          ????connect_timeout?5
          ???#?nb_get_retry?3
          ????delay_before_retry?3
          ????connect_port?3306
          ????}
          ??}
          }


          重啟keep完成


          08


          Web4層負載及后端7層反代+節(jié)點



          | L4+L7+WEB大規(guī)模web負載均衡


          L4:
          10.0.0.15 172.16.1.15 LVS調(diào)度器(Director) 對外提供服務的VIP為10.0.0.17
          10.0.0.16 172.16.1.16 LVS調(diào)度器(Director) 對外提供服務的VIP為10.0.0.17


          L7:
          10.0.0.5 172.16.1.5 nginx lb01 測好了。
          10.0.0.6 172.16.1.6 nginx lb02

          10.0.0.7 172.16.1.7 RS1(真實服務器) web01
          10.0.0.8 172.16.1.8 RS2(真實服務器) web02


          1、測試節(jié)點可用性


          [root@lb4-02?keepalived]#?curl?-H"host:www.etiantian.org"?172.16.1.7
          web01
          [root@lb4-02?keepalived]#?curl?-H"host:www.etiantian.org"?172.16.1.8
          web02,老男孩Linux77最優(yōu)班級
          remote_addr:?172.16.1.16


          2、配置keepalived?lb4-01


          [root@lb4-01?keepalived]#?cat?keepalived.conf
          global_defs?{
          ???router_id?lb01
          }
          vrrp_instance?VI_1?{
          ????state?BACKUP
          ????interface?eth0
          ????virtual_router_id?53
          ????priority?50
          ????advert_int?1
          ????authentication?{
          ????????auth_type?PASS
          ????????auth_pass?1111
          ????}
          ????virtual_ipaddress?{
          ??????10.0.0.17/24?dev?eth0?label?eth0:17
          ????}
          }
          #web
          ##oldboy?service??virtual_server?
          virtual_server?10.0.0.17?80?{
          ????delay_loop?6????????????
          ????lb_algo?wrr????????????????
          ????lb_kind?DR
          ????persistence_timeout?20?????
          ????protocol?TCP

          real_server?10.0.0.5?80?{
          ????weight?1??????????????
          ????TCP_CHECK?{
          ????connect_timeout?5???????
          ????#nb_get_retry?3
          ????delay_before_retry?3
          ????connect_port?80
          ????}
          }

          real_server?10.0.0.6?80?{
          ????weight?1
          ????TCP_CHECK?{
          ????connect_timeout?5
          ???#?nb_get_retry?3
          ????delay_before_retry?3
          ????connect_port?80
          ????}
          }
          }

          ;===============================================
          vrrp_instance?VI_2?{
          ????state?MASTER
          ????interface?eth1
          ????virtual_router_id?52
          ????priority?150
          ????advert_int?1
          ????authentication?{
          ????????auth_type?PASS
          ????????auth_pass?1111
          ????}
          ????virtual_ipaddress?{
          ??????172.16.1.18/24?dev?eth1?label?eth1:18
          ????}
          }

          #port?3306
          ##oldboy?service??virtual_server?
          virtual_server?172.16.1.18?3306?{
          ????delay_loop?6????????????
          ????lb_algo?wrr????????????????
          ????lb_kind?DR
          ????persistence_timeout?20?????
          ????protocol?TCP?
          ????real_server?172.16.1.7?3306?{
          ????weight?1??????????????
          ????TCP_CHECK?{
          ????connect_timeout?5???????
          ????#nb_get_retry?3
          ????delay_before_retry?3
          ????connect_port?3306
          ????}
          }

          real_server?172.16.1.51?3306?{
          ????weight?1
          ????TCP_CHECK?{
          ????connect_timeout?5
          ???#?nb_get_retry?3
          ????delay_before_retry?3
          ????connect_port?3306
          ????}
          ??}
          }

          3、配置keepalived?lb4-02


          [root@lb4-02?keepalived]#?cat?keepalived.conf
          global_defs?{
          ???router_id?lb4-02
          }

          vrrp_instance?VI_1?{
          ????state?MASTER
          ????interface?eth0
          ????virtual_router_id?53
          ????priority?150
          ????advert_int?1
          ????authentication?{
          ????????auth_type?PASS
          ????????auth_pass?1111
          ????}
          ????virtual_ipaddress?{
          ??????10.0.0.17/24?dev?eth0?label?eth0:17
          ????}
          }
          #web
          ##oldboy?service??virtual_server?
          virtual_server?10.0.0.17?80?{
          ????delay_loop?6????????????
          ????lb_algo?wrr????????????????
          ????lb_kind?DR
          ????persistence_timeout?20?????
          ????protocol?TCP????????????????
          real_server?10.0.0.5?80?{
          ????weight?1??????????????
          ????TCP_CHECK?{
          ????connect_timeout?5???????
          ????#nb_get_retry?3
          ????delay_before_retry?3
          ????connect_port?80
          ????}
          }

          real_server?10.0.0.6?80?{
          ????weight?1
          ????TCP_CHECK?{
          ????connect_timeout?5
          ???#?nb_get_retry?3
          ????delay_before_retry?3
          ????connect_port?80
          ????}
          }
          }
          vrrp_instance?VI_2?{
          ????state?BACKUP
          ????interface?eth1
          ????virtual_router_id?52
          ????priority?50
          ????advert_int?1
          ????authentication?{
          ????????auth_type?PASS
          ????????auth_pass?1111
          ????}
          ????virtual_ipaddress?{
          ??????172.16.1.18/24?dev?eth1?label?eth1:18
          ????}
          }

          #port?3306
          ##oldboy?service??virtual_server?
          virtual_server?172.16.1.18?3306?{
          ????delay_loop?6????????????
          ????lb_algo?wrr????????????????
          ????lb_kind?DR
          ????persistence_timeout?20?????
          ????protocol?TCP
          ????real_server?172.16.1.7?3306?{
          ????weight?1??????????????
          ????TCP_CHECK?{
          ????connect_timeout?5???????
          ????#nb_get_retry?3
          ????delay_before_retry?3
          ????connect_port?3306
          ????}
          }

          real_server?172.16.1.51?3306?{
          ????weight?1
          ????TCP_CHECK?{
          ????connect_timeout?5
          ???#?nb_get_retry?3
          ????delay_before_retry?3
          ????connect_port?3306
          ????}
          }
          }


          4、web節(jié)點分別(web01,web02)配置VIP綁定,及抑制ARP(腳本實現(xiàn))


          [root@lb01?conf.d]#?mkdir?/server/scripts?-p
          [root@lb01?conf.d]#?cd?/server/scripts/
          [root@lb01?scripts]#?vim?ipvs.sh
          #!/bin/bash
          #?Written?by?oldboy?([email protected]
          #?QQ:31333741
          #?description:?Config?realserver?lo?and?apply?noarp?
          VIP=(
          ????????10.0.0.17
          ?????)
          .?/etc/rc.d/init.d/functions
          case?"1"?in
          start)
          ????????for?((i=0;?i<`echo{#VIP[*]}`;?i++))
          ????????do
          ???????????interface="lo:`echo?{VIP[i]}|awk?-F?.?'{print?4}'`"
          ???????????/sbin/ifconfiginterface?{VIP[i]}?broadcast?{VIP[i]}?netmask?255.255.255.255?up
          ????????done
          ????????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
          ???????????action?"Start?LVS?of?RearServer.by?old1boy"
          ????????;;
          stop)
          ????????for?((i=0;?i<`echo?{#VIP[*]}`;?i++))
          ????????do
          ????????????interface="lo:`echo{VIP[i]}|awk?-F?.?'{print4}'`"
          ????????????/sbin/ifconfig?interface{VIP[i]}?broadcast{VIP[i]}?netmask?255.255.255.255?down
          ????????done
          ????????echo?"close?LVS?Directorserver"
          ????????if?[{#VIP[*]}?-eq?1];then
          ??????????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
          ????????fi
          ???????????action?"Close?LVS?of?RearServer.by?old2boy"
          ????????;;
          *)
          ????????echo?"Usage:?$0?{start|stop}"
          ????????exit?1
          esac

          [root@lb01?scripts]#?sh?ipvs.sh?
          Usage:?ipvs.sh?{start|stop}
          [root@lb01?scripts]#?sh?ipvs.sh?start
          Start?LVS?of?RearServer.by?old1boy?????????????????????????[??確定??]
          ifconfig查看


          09


          LVS介紹獲取lvs+nginx+web前端用戶IP




          轉(zhuǎn)自公眾號:運維基地

          Linux學習指南

          有收獲,點個在看?

          瀏覽 52
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  中文字幕A片 | 99性爱| www.豆花福利视频 | 国产成人精品久久 | 亚洲无码69|