高性能业务架构解决方案(LVS+Keepalived)
高性能業務架構解決方案(LVS+Keepalived)
一、?概況2
????1.1?應用場景2
????1.2 LVS/Nginx/HAProxy特點3
二、?相關理論4
????2.1 Keepalived工作原理4
????2.2 LVS工作原理4
三、?架構拓撲5
四、?資源規劃5
五、?實施部署5
????5.1初始化配置6
????5.2 LVS配置6
????5.3 Keepalived部署7
????????5.3.1 Keepalived的安裝8
????????5.3.2?配置keepalived8
????5.4?后端WEB服務器10
????5.5?共享存儲11
????5.6?測試11
????????5.6.1?負載均衡測試12
????????5.6.2?高可用測試13
六、?注意事項15
????6.1 LVS安裝注意事項15
????6.2?將相關開機自啟服務16
????6.3?腳本16
?
高性能業務架構解決方案(LVS+Keepalived)
一、概況
1.1?應用場景
Nginx/LVS/HAProxy的基于Linux的開源免費的負載均衡軟件。對于大型的,需要進行高并發的網站或者對網絡不太嚴格的場景,可以使用Nginx;對于大型的Web服務器的時候可以使用Haproxy;對性能有嚴格要求的時候可以使用LVS,就單純從負載均衡的角度來說,LVS也許會成為主流,更適合現在大型的互聯網公司。本文采用LVS+keepalived方案來解決業務架構高可用。
1.2 LVS/Nginx/HAProxy特點
| 名稱 | 特點 |
| LVS | 1)?抗負載能力強、是工作在網絡4層之上僅作分發之用,沒有流量的產生,這個特點也決定了它在負載均衡軟件里的性能最強的; 2)?配置性比較低,這是一個缺點也是一個優點,因為沒有可太多配置的東西,所以并不需要太多接觸,大大減少了人為出錯的幾率; 3)?工作穩定,自身有完整的雙機熱備方案,如LVS+Keepalived和LVS+Heartbeat,不過我們在項目實施中用得最多的還是LVS/DR+Keepalived; 4)?無流量,保證了均衡器IO的性能不會收到大流量的影響; 5)?應用范圍比較廣,可以對所有應用做負載均衡; 6)?軟件本身不支持正則處理,不能做動靜分離,這個就比較遺憾了;其實現在許多網站在這方面都有較強的需求,這個是Nginx/HAProxy+Keepalived的優勢所在。 7)?如果是網站應用比較龐大的話,實施LVS/DR+Keepalived起來就比較復雜了,特別后面有Windows Server應用的機器的話,如果實施及配置還有維護過程就比較復雜了。 |
| Nginx | 1)?工作在網絡的7層之上,可以針對http應用做一些分流的策略,比如針對域名、目錄結構,它的正則規則比HAProxy更為強大和靈活,這也是許多朋友喜歡它的原因之一; 2)?Nginx對網絡的依賴非常小,理論上能ping通就就能進行負載功能,這個也是它的優勢所在; 3)?Nginx安裝和配置比較簡單,測試起來比較方便; 4)?也可以承擔高的負載壓力且穩定,一般能支撐超過幾萬次的并發量; 5)?Nginx可以通過端口檢測到服務器內部的故障,比如根據服務器處理網頁返回的狀態碼、超時等等,并且會把返回錯誤的請求重新提交到另一個節點,不過其中缺點就是不支持url來檢測; 6)?Nginx僅能支持http和Email,這樣就在適用范圍上面小很多,這個它的弱勢; 7)?Nginx不僅僅是一款優秀的負載均衡器/反向代理軟件,它同時也是功能強大的Web應用服務器。LNMP現在也是非常流行的web架構,大有和以前最流行的LAMP架構分庭抗爭之勢,在高流量的環境中也有很好的效果。 8)?Nginx現在作為Web反向加速緩存越來越成熟了,很多朋友都已在生產環境下投入生產了,而且反映效果不錯,速度比傳統的Squid服務器更快,有興趣的朋友可以考慮用其作為反向代理加速器。 |
| HAProxy | 1)?HAProxy是支持虛擬主機的,以前有朋友說這個不支持虛擬主機,我這里特此更正一下。 2)?能夠補充Nginx的一些缺點比如Session的保持,Cookie的引導等工作 3)?支持url檢測后端的服務器出問題的檢測會有很好的幫助。 4)?它跟LVS一樣,本身僅僅就只是一款負載均衡軟件;單純從效率上來講HAProxy更會比Nginx有更出色的負載均衡速度,在并發處理上也是優于Nginx的。 5)?HAProxy可以對Mysql讀進行負載均衡,對后端的MySQL節點進行檢測和負載均衡,不過在后端的MySQL slaves數量超過10臺時性能不如LVS,所以我向大家推薦LVS+Keepalived。 6)?HAProxy的算法現在也越來越多了,算法特別靈活 |
二、相關理論
2.1 Keepalived工作原理
keepalived:顧名思義是保持存活,常用來搭建設備的高可用,防止業務核心設備出現單點故障。keepalived基于VRRP協議來實現高可用,主要用作realserver的健康檢查以及負載均衡主機和backup主機之間的故障漂移。如果將TCP/IP劃分為5層,則Keepalived就是一個類似于3~5層交換機制的軟件,具有3~5層交換功能,其主要作用是檢測web服務器的狀態,如果某臺web服務器故障,Keepalived將檢測到并將其從系統中剔除,當該web服務器工作正常后Keepalived自動將其加入到服務器群中,這些工作全部自動完成,而不需要人工干預,只需要人工修復故障的web服務器即可。
三層機理是發送ICMP數據包即PING給某臺服務器,如果不通,則認為其故障,并從服務器群中剔除;四層機理是檢測TCP端口號狀態來判斷某臺服務器是否故障,如果檢測端口存在異常,則從服務器群中剔除;五層機理是根據用戶的設定檢查某個服務器應用程序是否正常運行,如果不正常,則從服務器群中剔除。
2.2 LVS工作原理
LVS工作在網絡層。通過控制IP來實現負載均衡。IPVS是其具體的實現模塊。IPVS的主要作用:安裝在Director Server上面,在Director Server虛擬一個對外訪問的IP(VIP)。用戶訪問VIP,到達Director Server,Director Server根據一定的規則選擇一個Real Server,處理完成后然后返回給客戶端數據。這些步驟產生了一些具體的問題,比如如何選擇具體的Real Server,Real Server如果返回給客戶端數據等等。IPVS為此有三種機制:
n?VS/NAT(Virtual Server via Network Address Translation),即網絡地址翻轉技術實現虛擬服務器。當請求來到時,Diretor server上處理的程序將數據報文中的目標地址(即虛擬IP地址)改成具體的某臺Real Server,端口也改成Real Server的端口,然后把報文發給Real Server。Real Server處理完數據后,需要返回給Diretor Server,然后Diretor server將數據包中的源地址和源端口改成VIP的地址和端口,最后把數據發送出去。由此可以看出,用戶的請求和返回都要經過Diretor Server,如果數據過多,Diretor Server肯定會不堪重負。
n?VS/TUN(Virtual Server via IP Tunneling),即IP隧道技術實現虛擬服務器。它跟VS/NAT基本一樣,但是Real server是直接返回數據給客戶端,不需要經過Diretor server,這大大降低了Diretor server的壓力。
n?VS/DR(Virtual Server via Direct Routing),即用直接路由技術實現虛擬服務器。跟前面兩種方式,它的報文轉發方法有所不同,VS/DR通過改寫請求報文的MAC地址,將請求發送到Real Server,而Real Server將響應直接返回給客戶,免去了VS/TUN中的IP隧道開銷。這種方式是三種負載調度機制中性能最高最好的,但是必須要求Director Server與Real Server都有一塊網卡連在同一物理網段上。
三、架構拓撲
?
四、資源規劃
| 主機名稱 | 內網IP | 操作系統 |
| LVS-Master | 10.10.10.2 | Centos 6.5 64位 |
| LVS-Backup | 10.10.10.3 | Centos 6.5 64位 |
| WEB01 | 10.10.10.11 | Centos 6.5 64位 |
| WEB02 | 10.10.10.12 | Centos 6.5 64位 |
| WEB03 | 10.10.10.13 | Centos 6.5 64位 |
| NFS-server | 10.10.10.20 | Centos 6.5 64位 |
| VIP | 10.10.10.100 | \ |
五、實施部署
5.1?初始化配置
l?getenforce 0關閉SeLinux
l?修改主機名
l?防火墻開放22/80端口
l?測試網絡連通性
l?更新YUM源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo?http://mirrors.aliyun.com/repo/Centos-6.repo
yum makecache ??????????#生成緩存
?
5.2?LVS配置
在master與backup上面同時配置
安裝可采用yum直接安裝,或下載tar包編譯安裝。
yum install ipvsadm
/etc/init.d/ipvsadm save
/etc/init.d/ipvsadm start
查看ipvsadm狀態
/etc/init.d/ipvsadm -ln
#?開啟icmp包重定向
echo "1" > /proc/sys/net/ipv4/conf/all/send_redirects
echo "1" > /proc/sys/net/ipv4/conf/default/send_redirects
echo "1" > /proc/sys/net/ipv4/conf/eth0/send_redirects
#添加路由
route add -host 10.10.10.100 dev eth1
#清除LVS規則
ipvsadm -C
#?添加一條虛擬服務器記錄
# -p指定一定的時間內將相同的客戶端分配到同一臺后端服務器解決session問題
ipvsadm -A -t 10.10.10.100:80 -s wlc -p
#?添加真實服務器記錄
ipvsadm -a -t 10.10.10.100:80 -r 10.10.10.11:80 -g -w 1
ipvsadm -a -t 10.10.10.100:80 -r 10.10.10.12:80 -g -w 1
ipvsadm -a -t 10.10.10.100:80 -r 10.10.10.13:80 -g -w 1
#設置tcp tcpfin udp超市連接值
ipvsadm --set 30 120 300
Ipvsadm
配置完成后,查看ipvsadm狀態與主機路由
5.3 Keepalived部署
5.3.1 Keepalived的安裝
在master與backup上面均需要配置
安裝開發組環境工具
yum groupinstall "Development tools" -y
安裝相應軟件包
yum install openssl-devel popt-devel -y
ln -s /usr/src/kernels/2.6.32-642.1.1.el6.x86_64?/usr/src/linux ??#此處要根據實際操作系統最高版本的kernel?為準
如果/usr/src/kernels/下面沒文件使用yum?安裝?kernel-devel
#下載keepalive
wget?http://www.keepalived.org/software/keepalived-1.2.24.tar.gz
tar?zxvf?keepalived-1.2.24.tar.gz
cd?keepalived-1.2.24
./configure?--with-kernel-dir=/usr/src/kernels/2.6.32-642.1.1.el6.x86_64
?
(注意這個步驟要看到以下字樣才是正常的)
Use IPVS Framework : Yes
IPVS sync daemon support : Yes
?
make?&&?make?install
cp?/usr/local/etc/rc.d/init.d/keepalived?/etc/rc.d/init.d/
cp?/usr/local/etc/sysconfig/keepalived?/etc/sysconfig/
mkdir?/etc/keepalived
cp?/usr/local/etc/keepalived/keepalived.conf?/etc/keepalived/
cp?/usr/local/sbin/keepalived?/usr/sbin/
chkconfig?--add?keepalived
chkconfig?--level?2345?keepalived?on
/etc/init.d/keepalived start
至此keepalive就已經安裝完畢。
?
注意:主要backup服務器之上修改兩點即可
1、state MASTER ?backup服務器需要更改為BACKUP
2、priority 100小于master的優先級
?
5.3.2?配置keepalived
編輯keepalived.conf
! Configuration File for keepalived
?
global_defs {
???notification_email {
xuel@51idc.com
???}
???notification_email_from Alexandre.Cassen@firewall.loc
???smtp_server 127.0.0.1
???smtp_connect_timeout 30
???router_id LVS_DEVEL
}
?
vrrp_instance VI_1 {
????state MASTER?#backup主機配置為BACKUP
????interface eth0????#實例綁定的網卡
????virtual_router_id 51????# VRID?標記(?0...255?)
????priority 100#backup主機配置優先級小于100,如配置90
????advert_int 1#檢查間隔,默認?1s
????authentication {
????????auth_type PASS
????????auth_pass 1111
????}
????virtual_ipaddress {
????????10.10.10.100#VIP地址,如果有多個?VIP?,繼續換行填寫
????}
}
?
virtual_server 10.10.10.100 80 { ????#設置?VIP及監聽后端服務端口
????delay_loop 6
????lb_algo wrr#LVS調度算法?rr|wrr|lc|wlc|sh|dh|lblc
????lb_kind DR#LVS實現負載均衡的機制?NAT|DR|TUN
????nat_mask 255.255.255.0
????persistence_timeout 50#?會話保持時間
????protocol TCP
?
????real_server 10.10.10.11 80 {
weight 3
??????????TCP_CHECK {#tcp健康檢查
?????????????connect_timeout 10#連接超時時間
?????????????nb_get_retry 3#重連次數
?????????????delay_before_retry 3#重連間隔時間
?????????????connect_port 80#健康檢查端口
??????????}
??????}
?????real_server 10.10.10.12 80 {
?????weight 3
??????????TCP_CHECK {
?????????????connect_timeout 10
?????????????nb_get_retry 3
?????????????delay_before_retry 3
?????????????connect_port 80
??????????}
??????}
?????real_server 10.10.10.13 80 {
?????weight 3
??????????TCP_CHECK {
?????????????connect_timeout 10
?????????????nb_get_retry 3
?????????????delay_before_retry 3
?????????????connect_port 80
??????????}
??????}
}
5.4?后端WEB服務器
安裝httpd,并寫測試頁
yum install httpd
chkconfig httpd on
?
WEB01與WEB02同時配置
echo "1">/proc/sys/net/ipv4/conf/default/arp_ignore
echo "2">/proc/sys/net/ipv4/conf/default/arp_announce
echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2">/proc/sys/net/ipv4/conf/all/arp_announce
?
arp_ignore:定義對目標地址為本地IP的ARP詢問不同的應答模式0?
0?-?(默認值):?回應任何網絡接口上對任何本地IP地址的arp查詢請求?
1?-?只回答目標IP地址是來訪網絡接口本地地址的ARP查詢請求?
2?-只回答目標IP地址是來訪網絡接口本地地址的ARP查詢請求,且來訪IP必須在該網絡接口的子網段內?
3?-?不回應該網絡界面的arp請求,而只對設置的唯一和連接地址做出回應?
4-7?-?保留未使用?
8?-不回應所有(本地地址)的arp查詢
?
arp_announce:對網絡接口上,本地IP地址的發出的,ARP回應,作出相應級別的限制:?確定不同程度的限制,宣布對來自本地源IP地址發出Arp請求的接口?
0?-?(默認)?在任意網絡接口(eth0,eth1,lo)上的任何本地地址?
1?-盡量避免不在該網絡接口子網段的本地地址做出arp回應.?當發起ARP請求的源IP地址是被設置應該經由路由達到此網絡接口的時候很有用.此時會檢查來訪IP是否為所有接口上的子網段內ip之一.如果改來訪IP不屬于各個網絡接口上的子網段內,那么將采用級別2的方式來進行處理.?
2?-?對查詢目標使用最適當的本地地址.在此模式下將忽略這個IP數據包的源地址并嘗試選擇與能與該地址通信的本地地址.首要是選擇所有的網絡接口的子網中外出訪問子網中包含該目標IP地址的本地地址.?如果沒有合適的地址被發現,將選擇當前的發送網絡接口或其他的有可能接受到該ARP回應的網絡接口來進行發送.
關于對arp_announce?理解的一點補充
?
sysctl -p
添加VIP地址與路由
ifconfig lo:0 10.10.10.100?broadcast 10.10.10.100 netmask 255.255.255.255 up
route add -host 10.10.10.100 dev lo:0
?
5.5?共享存儲
yum -y install nfs-utils rpcbind
service nfs start
chkconfig nfs on
vim /etc/exprots
echo?“This is NFS-share test page!”>/NFSshare
后端WEB掛載共享存儲
mount 10.10.10.20:/NFSshare /var/www/html/
測試訪問VIP
5.6?測試
為測試方便,在后端WEB服務器上,寫入對用文件
?
5.6.1?負載均衡測試
停止WEB02 httpd
?
再停止WEB03 httpd
?
5.6.2?高可用測試
?
停止LVS-Master?的keepalived服務
?
此時VIP已經漂移到LVS-Backup上面
?
后端web已經正常對外提供服務。
啟動Master之上的Keepalived,VIP成功漂移會MASTER之上
恢復郵件
六、注意事項
6.1 LVS安裝注意事項
ln -s /usr/src/kernels/2.6.32-642.1.1.el6.x86_64?/usr/src/linux ??#此處要根據實際操作系統最高版本的kernel?為準
./configure?--with-kernel-dir=/usr/src/kernels/2.6.32-642.1.1.el6.x86_64
(注意這個步驟要看到以下字樣才是正常的)
Use IPVS Framework : Yes
IPVS sync daemon support : Yes
6.2?將相關開機自啟服務
開機自啟服務
開機自啟腳本
開機NFS自動掛載
6.3?腳本
為方便配置,目前已經寫了兩個腳本,方便運行安裝。
在Master與Backup之上配置
LVS-MB-ipvsadm.sh
#!/bin/bash
VIP=10.10.10.100
RIPS1=10.10.10.11
RIPS2=10.10.10.12
RIPS3=10.10.10.13
SERVICE=80
. /etc/rc.d/init.d/functions
case "$1" in
start)
echo "Start LVS of DR Mode"
echo "1" > /proc/sys/net/ipv4/conf/all/send_redirects
echo "1" > /proc/sys/net/ipv4/conf/default/send_redirects
echo "1" > /proc/sys/net/ipv4/conf/eth0/send_redirects
route add -host $VIP dev eth0
ipvsadm -C
ipvsadm -A -t $VIP:$SERVICE -s wlc -p
ipvsadm -a -t $VIP:$SERVICE -r $RIPS1:$SERVICE -g -w 1
ipvsadm -a -t $VIP:$SERVICE -r $RIPS2:$SERVICE -g -w 1
ipvsadm -a -t $VIP:$SERVICE -r $RIPS3:$SERVICE -g -w 1
ipvsadm --set 30 120 300
ipvsadm
;;
stop)
echo "Stop LVS DR"
ifconfig eth1 down
ipvsadm -C
;;
*)
echo "Usage:$0 {start ? stop}"
exit 1
esac
?
在后端WEB01、WEB02之上配置
LVS-RS-WEB.sh
#!/bin/bash
VIP=172.16.16.100
. /etc/init.d/functions
case "$1" in
start)
echo "Start LVS of RS"
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev lo:0
echo "1">/proc/sys/net/ipv4/conf/default/arp_ignore
echo "2">/proc/sys/net/ipv4/conf/default/arp_announce
echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2">/proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p
;;
stop)
/sbin/ifconfig lo:0 down
echo "Close LVS of RS"
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
sysctl -p
;;
*)
echo "Usage:$0{start|stop}"
exit 1
esac
本文轉自 KaliArch 51CTO博客,原文鏈接:http://blog.51cto.com/kaliarch/1897042,如需轉載請自行聯系原作者
總結
以上是生活随笔為你收集整理的高性能业务架构解决方案(LVS+Keepalived)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 监控利器--Cacti
- 下一篇: 一文掌握关于Java数据结构所有知识点(