qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          搭建LVS負載均衡測試環境

           實現負載均衡有很多種方式
            土豪直接F5,性能最好,價格最貴
            沒錢也可以使用Apache,Nginx 工作在網絡的第四層,雖然性能一般,但是很靈活,比如可以將80端口映射到真實服務器的8080端口.
            還有一種選擇LVS ,它工作在網絡的第三層,性能較好,非常穩定.
            但是它不能實現端口的重新映射.因為在網絡的第三層,并不清楚端口的信息。
            下面的實驗搭建了一個LVS負載均衡測試環境,采用DR的方式。
            客戶端訪問LVS前置機
            這個請求如下
            源MAC(client mac) 目標MAC(DR mac) 源IP(client IP) 目標IP(DR IP,VIP)
            LVS前置機會將報文改寫之后轉發真實的服務器
            改寫如下
            源MAC(client mac) 目標MAX(真實服務器MAC) 源IP(client IP) 目標IP(DR IP,VIP)
            因為真實的服務器將VIP綁定到了環回地址,所以會處理這個請求,并返回響應的報文.
            網絡層的源目對掉
            源MAC(真實服務器MAC) 目標MAC(client mac) 源IP(DR IP,VIP) 目標IP(client IP)
            所以LVS DR的本質就是網絡層的欺騙。
            實驗采用VirtualBox虛擬機,并且配置內部網絡,關閉SELinux和防火墻
            首先,在LVS DR前置機上安裝ipvsadm命令
            yum install ipvsadm -y
            然后配置兩臺真實服務器(RealServer)的Http服務
            yum install httpd -y
            service httpd start
            chkconfig httpd on
            并分別改寫/var/www/html/index.html的內容為"real server 1"和"real server 2"
            然后在兩臺真實服務器上執行如下的腳本
          vim lvs_real.sh
          #!/bin/bash
          # description: Config realserver lo and apply noarp
          SNS_VIP=192.168.16.199
          source /etc/rc.d/init.d/functions
          case "$1" in
          start)
          ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP
          /sbin/route add -host $SNS_VIP dev lo:0
          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
          sysctl -p >/dev/null 2>&1
          echo "RealServer Start OK"
          ;;
          stop)
          ifconfig lo:0 down
          route del $SNS_VIP >/dev/null 2>&1
          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 "RealServer Stoped"
          ;;
          *)
          echo "Usage: $0 {start|stop}"
          exit 1
          esac
          exit 0
           最后,在DR前置機上執行如下腳本
          vim lvs_dr.sh
          #!/bin/bash
          VIP1=192.168.16.199
          RIP1=192.168.16.3
          RIP2=192.168.16.4
          case "$1" in
          start)
          echo " start LVS of DirectorServer"
          /sbin/ifconfig eth1:0 $VIP1 broadcast $VIP1 netmask 255.255.255.255 broadcast $VIP1 up
          /sbin/route add -host $VIP1 dev eth1:0
          echo "1" >/proc/sys/net/ipv4/ip_forward
          /sbin/ipvsadm -C
          /sbin/ipvsadm -A -t $VIP1:80 -s rr
          /sbin/ipvsadm -a -t $VIP1:80 -r $RIP1:80 -g -w 1
          /sbin/ipvsadm -a -t $VIP1:80 -r $RIP2:80 -g -w 1
          /sbin/ipvsadm
          ;;
          stop)
          echo "close LVS Directorserver"
          echo "0" >/proc/sys/net/ipv4/ip_forward
          /sbin/ipvsadm -C
          /sbin/ifconfig eth1:0 down
          ;;
          *)
          echo "Usage: $0 {start|stop}"
          exit 1
          esac
            通過client訪問LVS前置服務器,可以看到已經實現了負載均衡的效果。
            關于LVS的調度算法,轉載自張逸群的博客
            http://www.zhangyiqun.net/56.html
            1. 大鍋飯調度(Round-Robin Scheduling RR)
            rr – 純輪詢方式,比較垃圾。把每項請求按順序在真正服務器中分派。
            2. 帶權重的大鍋飯調度(Weighted Round-Robin Scheduling WRR)
            wrr -帶權重輪詢方式。把每項請求按順序在真正服務器中循環分派,但是給能力較大的服務器分派較多的作業。
            3. 誰不干活就給誰分配(Least-Connection LC)
            lc – 根據最小連接數分派
            4. 帶權重的誰不干活就給誰分配(Weighted Least-Connections WLC 默認)
            wlc – 帶權重的。機器配置好的權重高。
            5. 基于地區的最少連接調度(Locality-Based Least-Connection
            Scheduling LBLC)
            lblc – 緩存服務器集群。基于本地的最小連接。把請求傳遞到負載小的服務器上。
            6. 帶有復制調度的基于地區的最少連接調度(Locality-Based Least-Connection Scheduling with Replication Scheduling LBLCR)
            lblcr – 帶復制調度的緩存服務器集群。某頁面緩存在服務器A上,被訪問次數極高,而其他緩存服務器負載較低,監視是否訪問同一頁面,如果是訪問同一頁面則把請求分到其他服務器。
            7. 目標散列調度(Destination Hash Scheduling DH)
            realserver中綁定兩個ip。ld判斷來者的ISP商,將其轉到相應的IP。
            8. 源散列調度(Source Hash Scheduling SH)
            源地址散列。基于client地址的來源區分。(用的很少)
            9. 最短的期望的延遲(Shortest Expected Delay Scheduling SED)
            基于wlc算法。這個必須舉例來說了
            ABC三臺機器分別權重123 ,連接數也分別是123。那么如果使用WLC算法的話一個新請求進入時它可能會分給ABC中的任意一個。使用sed算法后會進行這樣一個運算
            A:(1+1)/1
            B:(1+2)/2
            C:(1+3)/3
            根據運算結果,把連接交給C 。
            10.最少隊列調度(Never Queue Scheduling NQ)
            無需隊列。如果有臺realserver的連接數=0就直接分配過去,不需要在進行sed運算。
            遇到的問題..
            這個實驗看著簡單,做了足足半個月,但是還有一些不明白的問題,可能和網絡知識的匱乏有關系。
            在DR前置機上不能通過VIP訪問真實的服務器
            在DR前置機上執行命令,報錯如下
            查看ipvsadm,連接狀態是SYN_RECV
            一開始我使用了三臺虛擬機,卡在這個地方很長時間。
            后來偶然發現,用第四臺虛擬機就可以正常訪問了..

          posted on 2014-09-12 10:05 順其自然EVO 閱讀(422) 評論(0)  編輯  收藏 所屬分類: 測試學習專欄

          <2014年9月>
          31123456
          78910111213
          14151617181920
          21222324252627
          2829301234
          567891011

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 连江县| 桃园市| 清河县| 会东县| 都江堰市| 龙南县| 锡林浩特市| 长垣县| 左贡县| 湖口县| 酒泉市| 普兰店市| 富蕴县| 财经| 西贡区| 栾城县| 阜南县| 韶山市| 罗江县| 施甸县| 武宣县| 舞钢市| 东宁县| 庄浪县| 晋江市| 大名县| 厦门市| 镇巴县| 澄江县| 商丘市| 大厂| 龙井市| 鹤庆县| 双辽市| 宁化县| 本溪| 扶余县| 富阳市| 宜昌市| 双流县| 若尔盖县|