日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于LVS对LAMP做负载均衡集群

發布時間:2023/12/19 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于LVS对LAMP做负载均衡集群 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、簡介

? ?LVS是Linux Virtual Server的簡稱,也就是Linux虛擬服務器, 是一個由章文嵩博士發起的自由軟件項目,它的官方站點是www.linuxvirtualserver.org。現在LVS已經是 Linux標準內核的一部分,在Linux2.4內核以前,使用LVS時必須要重新編譯內核以支持LVS功能模塊,但是從Linux2.4內核以后,已經完全內置了LVS的各個功能模塊,無需給內核打任何補丁,可以直接使用LVS提供的各種功能。

? ?使用LVS技術要達到的目標是:通過LVS提供的負載均衡技術和Linux操作系統實現一個高性能、高可用的服務器群集,它具有良好可靠性、可擴展性和可操作性。從而以低廉的成本實現最優的服務性能。

? ?LVS自從1998年開始,發展到現在已經是一個比較成熟的技術項目了。可以利用LVS技術實現高可伸縮的、高可用的網絡服務,例如WWW服務、Cache服務、DNS服務、FTP服務、MAIL服務、視頻/音頻點播服務等等,有許多比較著名網站和組織都在使用LVS架設的集群系統,例如:Linux的門戶網站(www.linux.com)、向RealPlayer提供音頻視頻服務而聞名的Real公司(www.real.com)、全球最大的開源網站(sourceforge.net)等。

二、拓撲圖

? ?說明:1.客戶端只知道我們的LVS的VIP的地址

? ? ? ? ?2.由于服務器有限,此處我們的apache和php做在一臺機器上

三。調度算法

? ?Director在接收到來自于Client的請求時,會基于"schedule"從RealServer中選擇一個響應給Client。ipvs支持以下調度算法:

? ?1、輪詢(round robin, rr),加權輪詢(Weighted round robin, wrr)——新的連接請求被輪流分配至各RealServer;算法的優點是其簡潔性,它無需記錄當前所有連接的狀態,所以它是一種無狀態調度。輪叫調度算法假設所有服務器處理性能均相同,不管服務器的當前連接數和響應速度。該算法相對簡單,不適用于服務器組中處理性能不一的情況,而且當請求服務時間變化比較大時,輪叫調度算法容易導致服務器間的負載不平衡。

? ?2、最少連接(least connected, lc), 加權最少連接(weighted least connection, wlc)——新的連接請求將被分配至當前連接數最少的RealServer;最小連接調度是一種動態調度算法,它通過服務器當前所活躍的連接數來估計服務器的負載情況。調度器需要記錄各個服務器已建立連接的數目,當一個請求被調度到某臺服務器,其連接數加1;當連接中止或超時,其連接數減一。

? ?3、基于局部性的最少鏈接調度(Locality-Based Least Connections Scheduling,lblc)——針對請求報文的目標IP地址的負載均衡調度,目前主要用于Cache集群系統,因為在Cache集群中客戶請求報文的目標IP地址是變化的。這里假設任何后端服務器都可以處理任一請求,算法的設計目標是在服務器的負載基本平衡情況下,將相同目標IP地址的請求調度到同一臺服務器,來提高各臺服務器的訪問局部性和主存Cache命中率,從而整個集群系統的處理能力。LBLC調度算法先根據請求的目標IP地址找出該目標IP地址最近使用的服務器,若該服務器是可用的且沒有超載,將請求發送到該服務器;若服務器不存在,或者該服務器超載且有服務器處于其一半的工作負載,則用“最少鏈接”的原則選出一個可用的服務器,將請求發送到該服務器。

? ?4、帶復制的基于局部性最少鏈接調度(Locality-Based Least Connections with Replication Scheduling,lblcr)——也是針對目標IP地址的負載均衡,目前主要用于Cache集群系統。它與LBLC算法的不同之處是它要維護從一個目標IP地址到一組服務器的映射,而 LBLC算法維護從一個目標IP地址到一臺服務器的映射。對于一個“熱門”站點的服務請求,一臺Cache 服務器可能會忙不過來處理這些請求。這時,LBLC調度算法會從所有的Cache服務器中按“最小連接”原則選出一臺Cache服務器,映射該“熱門”站點到這臺Cache服務器,很快這臺Cache服務器也會超載,就會重復上述過程選出新的Cache服務器。這樣,可能會導致該“熱門”站點的映像會出現在所有的Cache服務器上,降低了Cache服務器的使用效率。LBLCR調度算法將“熱門”站點映射到一組Cache服務器(服務器集合),當該“熱門”站點的請求負載增加時,會增加集合里的Cache服務器,來處理不斷增長的負載;當該“熱門”站點的請求負載降低時,會減少集合里的Cache服務器數目。這樣,該“熱門”站點的映像不太可能出現在所有的Cache服務器上,從而提供Cache集群系統的使用效率。LBLCR算法先根據請求的目標IP地址找出該目標IP地址對應的服務器組;按“最小連接”原則從該服務器組中選出一臺服務器,若服務器沒有超載,將請求發送到該服務器;若服務器超載;則按“最小連接”原則從整個集群中選出一臺服務器,將該服務器加入到服務器組中,將請求發送到該服務器。同時,當該服務器組有一段時間沒有被修改,將最忙的服務器從服務器組中刪除,以降低復制的程度。

? ?5、目標地址散列調度(Destination Hashing,dh)算法也是針對目標IP地址的負載均衡,但它是一種靜態映射算法,通過一個散列(Hash)函數將一個目標IP地址映射到一臺服務器。目標地址散列調度算法先根據請求的目標IP地址,作為散列鍵(Hash Key)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,否則返回空。

? ?6、源地址散列調度(Source Hashing,sh)算法正好與目標地址散列調度算法相反,它根據請求的源IP地址,作為散列鍵(Hash Key)從靜態分配的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,否則返回空。它采用的散列函數與目標地址散列調度算法的相同。除了將請求的目標IP地址換成請求的源IP地址外,它的算法流程與目標地址散列調度算法的基本相似。在實際應用中,源地址散列調度和目標地址散列調度可以結合使用在防火墻集群中,它們可以保證整個系統的唯一出入口。

四、實現步驟

? ?1.網絡規劃

用途ip地址版本號系統版本號
集群服務器192.168.1.202ipvsadm1.26
centos6.5
apache+php1
192.168.1.201

apache2.4.9

php5.4.26

centos6.5
apache+php2
192.168.1.100

apache2.4.9

php5.4.26

centos6.5
數據庫192.168.1.200MariaDB10.0.10centos6.5
對外提供服務的ip地址192.168.1.230

? ?2.本處的apache、php、MariaDB都為編譯安裝

? ? ?關于編譯安裝的操作,請移步本人的相關博客http://wangfeng7399.blog.51cto.com/3518031/1381688,本處就不再做累贅

? ? ? ?特別說明,如果是編譯安裝的話應該在httpd的配置文件中添加KeepAlive Off用來關閉httpd的會話保持

? ?3.集群配置方法

? ? ?①、前段LVS集群服務器的配置 ? ? ?

1 2 3 4 在eth0:0上設置對外提供的地址 [root@localhost ~]# ifconfig eth0:0?192.168.1.230/24?netmask?255.255.255.255?broadcast?192.168.1.230?up 設置路由 [root@localhost ~]# route add -host?192.168.1.230?dev eth0:0

? ? ?②、后臺兩個Real Server服務器的配置

1 2 3 4 5 6 7 8 設置網卡只對有eth0網卡上的ip地址做通告 [root@httpweb ~]# echo?1?> /proc/sys/net/ipv4/conf/all/arp_ignore [root@httpweb ~]# echo?1?> /proc/sys/net/ipv4/conf/eth0/arp_ignore [root@httpweb ~]# echo?2?> /proc/sys/net/ipv4/conf/eth0/arp_announce [root@httpweb ~]# echo?2?> /proc/sys/net/ipv4/conf/all/arp_announce 在lo上設置集群服務的ip地址 [root@httpweb ~]# ifconfig lo:0?192.168.1.230?netmask?255.255.255.255?broadcast?192.168.1.230?up [root@httpweb ~]# route add -host?192.l68.1.230?dev lo:0

? ? ?③、兩臺服務的配置均為一樣

? ? ?④、設置集群服務

1 2 3 [root@localhost ~]# ipvsadm -A -t?192.168.1.230:80?-s rr [root@localhost ~]# ipvsadm -a -t?192.168.1.230:80?-r?192.168.1.100?-g [root@localhost ~]# ipvsadm -a -t?192.168.1.230:80?-r?192.168.1.201?-g

? ? ?⑤、測試

1 2 3 4 5 6 7 [root@localhost ~]# ipvsadm -L -n IP Virtual Server version?1.2.1?(size=4096) Prot LocalAddress:Port Scheduler Flags ??-> RemoteAddress:Port?????????? Forward Weight ActiveConn InActConn TCP??192.168.1.230:80?rr ??->?192.168.1.100:80?????????????Route???1??????0??????????0?? ??->?192.168.1.201:80?????????????Route???1??????0??????????0

? ? ?我們會看到我們為兩個服務器單獨書寫的網頁

提供Director服務腳本

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 Director腳本: #!/bin/bash # # LVS script?for?VS/DR # . /etc/rc.d/init.d/functions # VIP=192.168.0.210 RIP1=192.168.0.221 RIP2=192.168.0.222 PORT=80 # case?"$1"?in start)??????? ??/sbin/ifconfig eth0:1?$VIP broadcast $VIP netmask?255.255.255.255?up ??/sbin/route add -host $VIP dev eth0:1 # Since?this?is?the Director we must be able to forward packets ??echo?1?> /proc/sys/net/ipv4/ip_forward # Clear all iptables rules. ??/sbin/iptables -F # Reset iptables counters. ??/sbin/iptables -Z # Clear all ipvsadm rules/services. ??/sbin/ipvsadm -C # Add an IP virtual service?for?VIP?192.168.0.219?port?80 # In?this?recipe, we will?use?the round-robin scheduling method. # In production, however, you should?use?a weighted,?dynamic?scheduling method. ??/sbin/ipvsadm -A -t $VIP:80?-s wlc # Now direct packets?for?this?VIP to # the real server IP (RIP) inside the cluster ??/sbin/ipvsadm -a -t $VIP:80?-r $RIP1 -g -w?1 ??/sbin/ipvsadm -a -t $VIP:80?-r $RIP2 -g -w?2 ??/bin/touch /var/lock/subsys/ipvsadm &> /dev/null ;; stop) # Stop forwarding packets ??echo?0?> /proc/sys/net/ipv4/ip_forward # Reset ipvsadm ??/sbin/ipvsadm -C # Bring down the VIP?interface ??/sbin/ifconfig eth0:1?down ??/sbin/route del $VIP ?????????????????????????????????????????????????????????????????????????? ??/bin/rm -f /var/lock/subsys/ipvsadm ?????????????????????????????????????????????????????????????????????????? ??echo?"ipvs is stopped..." ;; status) ??if?[ ! -e /var/lock/subsys/ipvsadm ]; then ????echo?"ipvsadm is stopped ..." ??else ????echo?"ipvs is running ..." ????ipvsadm -L -n ??fi ;; *) ??echo?"Usage: $0 {start|stop|status}" ;; esac

? ?提供Real Server啟動腳本

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 #!/bin/bash # # Script to start LVS DR real server. # description: LVS DR real server # .? /etc/rc.d/init.d/functions VIP=192.168.0.219 host=`/bin/hostname` case?"$1"?in start) ???????# Start LVS-DR real server on?this?machine. ????????/sbin/ifconfig lo down ????????/sbin/ifconfig lo up ????????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 ????????/sbin/ifconfig lo:0?$VIP broadcast $VIP netmask?255.255.255.255?up ????????/sbin/route add -host $VIP dev lo:0 ;; stop) ????????# Stop LVS-DR real server loopback device(s). ????????/sbin/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 ;; status) ????????# Status of LVS-DR real server. ????????islothere=`/sbin/ifconfig lo:0?| grep $VIP` ????????isrothere=`netstat -rn | grep?"lo:0"?| grep $VIP` ????????if?[ !?"$islothere"?-o !?"isrothere"?];then ????????????# Either the route or the lo:0?device ????????????# not found. ????????????echo?"LVS-DR real server Stopped." ????????else ????????????echo?"LVS-DR real server Running." ????????fi ;; *) ????????????# Invalid entry. ????????????echo?"$0: Usage: $0 {start|status|stop}" ????????????exit?1 ;; esac

? ?提供LVS-NET的腳本

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 #!/bin/bash # # chkconfig: -?88?12 # description: LVS script?for?VS/NAT # . /etc/rc.d/init.d/functions # VIP=192.168.0.219 DIP=192.168.10.10 RIP1=192.168.10.11 RIP2=192.168.10.12 # case?"$1"?in start)??????? ??/sbin/ifconfig eth0:1?$VIP netmask?255.255.255.0?up # Since?this?is?the Director we must be able to forward packets ??echo?1?> /proc/sys/net/ipv4/ip_forward # Clear all iptables rules. ??/sbin/iptables -F # Reset iptables counters. ??/sbin/iptables -Z # Clear all ipvsadm rules/services. ??/sbin/ipvsadm -C # Add an IP virtual service?for?VIP?192.168.0.219?port?80 # In?this?recipe, we will?use?the round-robin scheduling method. # In production, however, you should?use?a weighted,?dynamic?scheduling method. ??/sbin/ipvsadm -A -t $VIP:80?-s rr # Now direct packets?for?this?VIP to # the real server IP (RIP) inside the cluster ??/sbin/ipvsadm -a -t $VIP:80?-r $RIP1 -m ??/sbin/ipvsadm -a -t $VIP:80?-r $RIP2 -m ????????????????????????????????????????????????????? ??/bin/touch /var/lock/subsys/ipvsadm.lock ;; stop) # Stop forwarding packets ??echo?0?> /proc/sys/net/ipv4/ip_forward # Reset ipvsadm ??/sbin/ipvsadm -C # Bring down the VIP?interface ??ifconfig eth0:1?down ????????????????????????????????????????????????????? ??rm -rf /var/lock/subsys/ipvsadm.lock ;; status) ??[ -e /var/lock/subsys/ipvsadm.lock ] && echo?"ipvs is running..."?|| echo?"ipvsadm is stopped..." ;; *) ??echo?"Usage: $0 {start|stop}" ;; esac

本文轉自wangfeng7399 51CTO博客,原文鏈接:http://blog.51cto.com/wangfeng7399/1396717,如需轉載請自行聯系原作者

總結

以上是生活随笔為你收集整理的基于LVS对LAMP做负载均衡集群的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。