Linux集群服务 LVS
linux虛擬服務器(LVS)項目在linux操作系統上提供了最常見的負載均衡軟件。
集群定義:
集群(cluster)技術是一種較新的技術,通過集群技術,可以在付出較低成本的情況下獲得在性能、可靠性、靈活性方面的相對較高的收益,其任務調度則是集群系統中
的核心技術。本文就集群系統的定義、發展趨勢、任務調度等問題進行了簡要論述。集群是一組相互獨立的、通過高速網絡互聯的計算機,它們構成了一個組,并以單一系統的模式加以管理。一個客戶與集群相互作用時,集群像是一個獨立的服務器。集群配置是用于提高可用性和可縮放性。
集群系統的主要優點:(高可擴展性、高可用性、高性能、高性價比)
?
目前運行在LINUX最主流的三種集群:
負載集群之一:LB(Load Balancing)
負載均衡集群運行時,一般通過一個或者多個前端負載均衡器(Director Server),將用戶發來的請求資源信息,通過一種調度算法發送至到后端的一組應用服務器(Real Server)上,從而達到整個系統的高性能和高可用性。這樣的計算機集群有時也被稱為服務器群(Server Farm)
一般高可用性集群和負載均衡集群會使用類似的技術,或同時具有高可用性與負載均衡的特點。
負載集群之二:HA(High-Availability)
一般是指當集群中有某個節點失效的情況下,其上的任務會自動轉移到其他正常的節點上。并且還可以將集群中的某節點進行離線維護再上線,該過程并不影響
整個集群的運行。
高可用集群:為了保證服務一直在線的高可用能力的集群
衡量標準:可用性=在線時間/(在線時間+故障處理時間)
負載集群之三:HP
高性能計算集群采用將計算任務分配到集群的不同計算節點從而提高計算能力,因而主要應用在科學計算領域。比較流行的HPC采用Linux操作系統和其它一些免費軟
件來完成并行運算。這一集群配置通常被稱為Beowulf集群。這類集群通常運行特定的程序以發揮HPC cluster的并行能力。這類程序一般應用特定的運行庫,?比如專為科學計算設計的MPI庫。
HPC集群特別適合于在計算中各計算節點之間發生大量數據通訊的計算作業,比如一個節點的中間結果或影響到其它節點計算結果的情況。
高性能處理集群:
利用的是分布式存儲:分布式文件系統,分布式文件系統把一個大任務切割為小任務、分別進行處理
?
LVS系統結構:
負載均衡器(Load Balancer)、服務器群組(Server Aarry)、共享存儲(Shared Storage)
負載均衡層:
整個集群服務最前端設備,它有一個或多個調度器(Director Server)組成,LVS軟件運行在調度服務器上。
調度服務器的功能:
?
將用戶的請求,根據調度算法進行IP分流,將數據包發送到后端應用服務器上(Real Server),如果調度服務器安裝了監控模塊Ldirectord,那么調度服務器會將出現故障的應用服務器標記為不可用,知道此應用服務器恢復正常。服務器群組層:
這是由一個或者多個應用程序服務器(Real Server)組成,并且每個應用服務器提供相同的服務,調度服務器會將用戶的請求定向到具體的應用服務器上,然后由后端的應用服務器響應客戶端。
共享存儲層:
功能只要是保證服務器群組中的應用服務器提供數據的一致性。
共享存儲的實現方式:
磁盤陣列、集群文件系統(OCFS2)
?
LVS是linux系統上的一種機制,類似于iptables,其相關屬性也是通過(ipvsadm)與iptables命令類似的方式定義的,
LVS是工作于linux系統內核空間,通過內核來提供工作,其工作空間在iptables的INPUT鏈上,當客戶端請求到達INPUT鏈上以后,通過LVS規則的驗證,如果是內��請求,發送至用戶空間,如果發現是集群,將此請求發送至POSTROUTING鏈,并交給后端應用程序服務器來響應用戶的請求。
?
注意:上面所提到LVS其實是工作在iptables的INPUT和postrouting鏈上的,所以在此系統上iptables和LVS不能同時存在。
?
LVS的組成:
ipvsadm:用于管理集群服務的命令行工具,工作于Linux系統中的用戶空間
ipvs:為lvs提供服務的內核模塊,工作于內核空間 (相對于是框架,通過ipvsadm添加規則,來實現ipvs功能)
注:在linux內核2.4.23之前的內核中模塊默認是不存在的,需要自己手動打補丁,然后把此模塊編譯進內核才可以使用此功能
LVS類型:
LVS-NAT模式、LVS-DR模式、LVS-TUN模式
NAT:(Network address translation)
原理:把用戶的請求發來的IP包的IP報頭目的地址,通過LVS服務器轉換至后端提供服務的Real Server的地址并將用戶的請求報文發送至應用服務器。而應用服務器打開報文并響應用戶請求發送并經過LVS服務器,LVS服務器將源地址修改為LVS服務器接口上的VIP地址。
NAT模式特點:
| 1 2 3 4 5 6 7 8 9 | 用戶發來的請求和響應,都必須經過LVS服務器。 集群節點跟Director必須在同一個IP網絡中; RIP通常是私有地址,僅用于各集群節點間的通信; Director位于Client和Real Server之間,并負責處理進出的所有通信; Realserver必須將網關指向DIP地址; 支持端口映射; Realserver可以使用任意OS; LVS服務器必須有兩塊網卡 較大規模應該場景中,Director易成為系統瓶頸; |
?
?
DR:(Direct routing)
DR模式工作在數據鏈路層,其原理,LVS服務器和應用服務器使用同一個IP地址對外服務,但只有LVS服務器對ARP請求進行響應,所有應用服務器對本身這個IP地址的ARP請求保持靜默。網關會把所有的ARP請求定向至LVS服務器,而LVS服務器收到用戶請求數據報文,根據調度算法進行IP分流,然后相應的MAC地址的修改,發送至后端對應的應用服務器。
注:由于LVS服務器對二層數據包進行修改,所以LVS服務器和應用服務器必須在同一個廣播域。
?
DR模式特點:
| 1 2 3 4 5 | 集群節點跟director必須在同一個物理網絡中; RIP可以使用公網地址,實現便捷的遠程管理和監控; Director僅負責處理入站請求,響應報文則由Real Server直接發往客戶端; Real Server不能將網關指向DIP; 不支持端口映射; |
?
?
注:在DR模式中,LVS服務器只負責接收用戶請求,根據調度算法及IP分流,直接路由轉發,其響應報文交給Real Server自行處理。
DR模式是三種模式當中性能最好的,唯一的缺陷是LVS服務器和后端的應用服務器必須在同一個廣播域中,因此不能實現集群的跨網端應用。
?
TUN (IP Tunnel模式)
TUN模式,LVS將TCP/IP請求進行重新封裝并轉發給目標應用服務器,有目標應用程序服務器對用戶請求做出相應。LVS Router和Real Server通過Tp Tunnel通過隧道技術
進行轉發,因此兩者可以存在不同的網絡當中。
注:由于應用服務器需要對LVS發送的報文進行還原,也就是說應用服務器也要支持Ip Tunnel協議。(Network options)
TUN模式特點:
| 1 2 3 4 5 6 | 集群節點可以跨越Internet; RIP必須是公網地址; Director僅負責處理入站請求,響應報文則由Real Server直接發往客戶端; Real Server網關不能指向director; 只有支持隧道功能的OS才能用于Real Server; 不支持端口映射; |
LVS負載均衡八種調度算法:
?
rr-->wrr-->lc-->wlc-->lblc-->lblcr-->dh-->sh
輪叫(Round Robin):
該算法將用戶請求有次序地分發到后端的應用服務器,均等看待所有Real Server,而并不計算具體服務器上的鏈接和負載。
加權輪叫(Weighted Round Robin):
該調度算法根據各個應用服務器的不同負載能力,給服務器設置不同的權值,處理能力強的應用服務器的權值設置大點,來響應更多的用戶請求。
最少連接(Least Connections):
該算法將用戶發送的請求分配到連接做少的應用服務器上。
加權最少連接(Weighted Least Connections):
該算法根據應用服務器的不同負載能力,設置不同大小不同的權值,權值較大并且連接請求數少的應用服務器則優先分配用戶請求信息。
基于局部性最少連接:(Locality-Based Least Connections):
該算法針對目標IP地址的負載均衡算法,主要用于緩存集群系統。此算法會根據用戶請求的目標IP地址找出與目標地址最近的應用服務器,如果服務器沒有超載,則請求被分發到該應用服務器,如果服務器不可用或者負載較大,則使用最少連接算法,選擇目標應用服務器
帶復制的基于局部性最少連接(Locality-Based Least Connections wiht Replication)
該算法也是針對目標IP地址的負載均衡算法,主要用于緩存集群系統。域LBLC區別在于,前者維護一個IP地址到一組服務器的映射。而后者則是維護一個IP地址到一臺應用服務器的映射。
目標地址散列(Destination Hashing)
該算法將用戶請求的目標地址作為散列鍵,并嘗試從靜態分配的散列表中找出對應的應用服務器。如果目標應用服務器沒有超載,那么將用戶的請求信息分發至該應用服務里,否則返回空。
源地址散列(Source Hashing)
該算法將請求的源地址作為散列鍵,并嘗試從靜態分配的散列表中找出對應的應用服務器。如果目標應用服務器可用并且沒有超載,那么將用戶請求的信息分發至此應用服務器,否則返回空。
?
LVS IP Address Name Conventions:(LVS Ip-address 命名規范)
| 1 2 3 4 5 | Director's IP (DIP) address :中間層,根據不同模式,來接收并響應用戶的請求。 Virtual IP (VIP) address:向外提供服務的地址。 Real IP (RIP) address :Real Server IP:后端提供應用服務的主機地址。 Director's IP (DIP) address :和內部的IP通信所使用的地址:設置在Director Server上 Client computer's IP (CIP) address:客戶端地址 |
ipvsadm命令詳細介紹:
?
pvsadm: 管理集群服務的命令行工具,而ipvs系統內核中的一個模塊
ipvsadm命令的基本使用:
?
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | -A:在內核的虛擬服務器列表中添加一條VIP記錄 -E:修改內核虛擬服務器列表中的一條VIP記錄 -D:刪除內核虛擬服務器列表中的一條VIP記錄 -C:清空內核虛擬服務器列表中的所有VIP記錄 -S:保存虛擬服務器規則 -R:恢復虛擬服務器策略規則 -a:在內核虛擬服務器列表中添加一個應用服務器的地址。 -e:修改一個虛擬服務器列表中的一條應用服務器地址記錄 -d:刪除一個虛擬服務器列表中的一條應用服務器地址記錄 -L/-l: 查看內核虛擬服務器列表 -Z:將內核中的虛擬服務器計數清為0 -t service-address:指定虛擬服務器使用TCP服務 -u service-address:指定虛擬服務器使用UDP服務 -s scheduler:指定調度算法: -p timeout:在應用服務器上的持續服務時間,單位為秒 -r service-address:指定應用服務器的地址 -g:指定LVS工作模式為直接路由(DR-defalut) -I:指定LVS工作模式為隧道模式(Ip Tunnel) -m:指定LVS工作模式為地址轉換模式(NAT) -w:設定應用服務器的權值 |
?
常用的負載均衡開源軟件有: nginx、lvs、keepalived
商業的硬件負載設備: F5、Netscale
1、 LB、LVS介紹
LB集群是load balance 集群的簡寫,翻譯成中文就是負載均衡集群;
LVS是一個實現負載均衡集群的開源軟件項目;
LVS架構從邏輯上可分為調度層(Director)、server集群層(Real server)和共享存儲層;
LVS可分為三種工作模式:?
NAT(調度器將請求的目標ip即vip地址改為Real server的ip, 返回的數據包也經過調度器,調度器再把源地址修改為vip)
TUN(調度器將請求來的數據包封裝加密通過ip隧道轉發到后端的real server上,而real server會直接把數據返回給客戶端,而不再經過調度器)
DR(調度器將請求來的數據包的目標mac地址改為real server的mac地址,返回的時候也不經過調度器,直接返回給客戶端)
spacer.gif
LVS的調度算法:輪叫調度(Round Robin)(簡稱rr) ,加權輪叫(Weighted Round Robin)(簡稱wrr),最少鏈接(least connection)(LC),加權最少鏈接(Weighted Least Connections)(WLC) 等等;
2、LVS/NAT 配置
準備工作:
需要準備三臺機器干凈的CentOS6.6系統,Director機器需要安裝兩塊網卡;
三臺服務器一臺作為director, 兩臺作為real server
Director 有一個外網ip:192.168.22.11 和一個內網ip:192.168.11.11
兩臺Real Server 只有內網ip為:192.168.11.100? 和 192.168.11.101,并且需要設置內網網關為director的內網ip:192.168.11.11
DEVICE=eth1?
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.11.100
GATEWAY=192.168.11.11更改完網關后需要重啟網卡,先down后up,在一條命令實現;如果ifdown之后,ssh會中斷;
# ifdown eth1 && ifup eth1
Director上安裝ipvsadm:#yum install -y? ipvsadm
兩臺real server安裝nginx,需要先安裝epel擴展源。
yum install -y epel-release
yum install -y nginx
安裝完成后啟動nginx:/etc/init.d/nginx start??
更改三臺服務器的hostname為 dr、rs1、rs2
Direcotr 上 vi /usr/local/sbin/lvs_nat.sh //增加如下內容:
#! /bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/eth1/send_redirects
iptables -t nat -F
iptables -t nat -X
iptables -t nat -A POSTROUTING -s 192.168.11.0/24? -j MASQUERADE
IPVSADM='/sbin/ipvsadm'
$IPVSADM -C
$IPVSADM -A -t 192.168.22.11:80 -s wlc
$IPVSADM -a -t 192.168.22.11:80 -r 192.168.11.100:80 -m -w 2
$IPVSADM -a -t 192.168.22.11:80 -r 192.168.11.101:80 -m -w 1直接運行這個腳本就可以完成lvs/nat的配置了:
/bin/bash /usr/local/sbin/lvs_nat.sh
dr查看nat的iptables
[root@dr ~]# iptables -t nat -nvL
Chain POSTROUTING (policy ACCEPT 1 packets, 124 bytes)
?pkts bytes target? ? prot opt in? ? out? ? source? ? ? ? ? ? ? destination? ? ? ??
? ? 0? ? 0 MASQUERADE? all? --? *? ? ? *? ? ? 192.168.11.0/24? ? ? 0.0.0.0/0? ? ? ??
ipvsadm -ln? 查看ipvsadm的規則
瀏覽器打開192.168.11.100、192.168.11.101顯示nginx的歡迎頁面
在rs1、rs2上面修改html文件,用來區分;
[root@rs1 ~]# cat /usr/share/nginx/html/index.html
?rs1rs1rs1
[root@rs2 ~]# cat /usr/share/nginx/html/index.html
?rs2rs2rs2通過瀏覽器測試兩臺機器上的內容
瀏覽器打開 192.168.22.11,會顯示rs1或rs2的html內容;來回切換說明試驗OK;
更改輪詢規則為wlc,權重為2,進行測試
用另一臺linux機器curl測試,出現2次1,1次2,來回切換說明OK;
[root@localhost ~]# curl 192.168.22.11
rs1rs1rs1
[root@localhost ~]# curl 192.168.22.11
rs1rs1rs1
[root@localhost ~]# curl 192.168.22.11
rs2rs2rs2在dr機器上ipvsadm -ln可以查看,權重比,保持的鏈接比大概一樣;
? -> RemoteAddress:Port? ? ? Forward Weight ActiveConn InActConn
TCP? 192.168.22.11:80 wlc
? -> 192.168.11.100:80? ? ? ? ? ? Masq? 2? ? ? 0? ? ? ? ? 26? ? ? ??
? -> 192.168.11.101:80? ? ? ? ? ? Masq? 1? ? ? 0? ? ? ? ? 13
3、LVS/DR 配置?
DR模式中,director只負責分發,只有進入的流量,吞吐量會非常大;real server直接給用戶提供數據,安全性會降低;
DR中的機器都需要配置公網ip,虛擬的ip每臺機器都需要配置,用戶請求的時候請求虛擬ip,返回的時候為輪詢rs提供;
三臺機器,每臺機器只需要配置1個ip,vip是用腳本執行后會出現的,不用手動設置;
director(eth1:192.168.11.11? ? vip eth1:0 192.168.11.110)
real server1(eth1:192.168.11.100? ? vip lo:0: 192.168.11.110)
real server1(eth1:192.168.11.101? ? vip lo:0: 192.168.11.110)
Director 上 vim /usr/local/sbin/lvs_dr.sh //增加下面的內容
#! /bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward
ipv=/sbin/ipvsadm
vip=192.168.11.110
rs1=192.168.11.100
rs2=192.168.11.101
ifconfig eth1:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip dev eth1:0
$ipv -C
$ipv -A -t $vip:80 -s rr
$ipv -a -t $vip:80 -r $rs1:80 -g -w 1
$ipv -a -t $vip:80 -r $rs2:80 -g -w 1
兩臺rs上:vim /usr/local/sbin/lvs_dr_rs.sh
#! /bin/bash
vip=192.168.11.110
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip 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
然后director上執行: bash /usr/local/sbin/lvs_dr.sh
兩臺rs上執行: bash /usr/local/sbin/lvs_dr_rs.sh
執行完成后ifconfig可以顯示虛擬ip地址;dr顯示eth1:0,rs1、rs2顯示lo:0;
eth1:0? ? Link encap:Ethernet? HWaddr 00:0C:29:70:4E:58??
? ? ? ? ? inet addr:192.168.11.110? Bcast:192.168.11.110? Mask:255.255.255.255
? ? ? ? ? UP BROADCAST RUNNING MULTICAST? MTU:1500? Metric:1
? ? ? ? ? Interrupt:18 Base address:0x2080?
? ? ? ? ??
lo:0? ? ? Link encap:Local Loopback??
? ? ? ? ? inet addr:192.168.11.110? Mask:255.255.255.255
? ? ? ? ? UP LOOPBACK RUNNING? MTU:65536? Metric:1ipvsadm -ln 列出規則
[root@dr ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
? -> RemoteAddress:Port? ? ? Forward Weight ActiveConn InActConn
TCP? 192.168.11.110:80 rr
? -> 192.168.11.100:80? ? ? Route? ? 1? ? ? ? ? 0? ? ? ? 3? ? ? ??
? -> 192.168.11.101:80? ? ? Route? ? 1? ? ? ? ? 0? ? ? ? 3單獨啟動一臺linux機器進行測試,瀏覽器測試有緩存不明顯;
curl 192.168.11.110? ? 進行測試,各出現1次說明rr輪詢規則OK;
[root@localhost ~]# curl 192.168.11.110
rs1rs1rs1
[root@localhost ~]# curl 192.168.11.110
rs2rs2rs2
[root@localhost ~]# curl 192.168.11.110
rs1rs1rs1
[root@localhost ~]# curl 192.168.11.110
rs2rs2rs2更改輪詢算法為wrr,權重為2;然后執行文件,報錯提示文件已存在;原因是/usr/local/sbin/lvs_dr.sh腳本文件里面已經up了eth1:0,所以需要在腳本里面增加:ifconfig eth1:0 down,之后就不會報錯;
$ipv -A -t $vip:80 -s wrr
$ipv -a -t $vip:80 -r $rs1:80 -g -w 2
$ipv -a -t $vip:80 -r $rs2:80 -g -w 1[root@dr ~]# bash /usr/local/sbin/lvs_dr.sh
SIOCADDRT: 文件已存在其中一臺rs如果掛了之后,還是會輪詢訪問,所以會出現一會能打開一會打不開;
模擬,rs2停止nginx:/etc/init.d/nginx stop
使用curl測試,請求還是會發送到rs2上面,但是已經提示不能連接到主機;
[root@localhost ~]# curl 192.168.11.110
rs1rs1rs1
[root@localhost ~]# curl 192.168.11.110
rs1rs1rs1
[root@localhost ~]# curl 192.168.11.110
curl: (7) couldn't connect to hostlvs本身不會剔除已經死掉的real server,所以需要結合keeplived;
LVS/DR + Keepalived搭建負載均衡集群?http://www.linuxidc.com/Linux/2015-06/118647.htm
LVS+Keepalived實現四層負載及高可用??http://www.linuxidc.com/Linux/2015-02/112695.htm
LVS+Keepalived高可用負載均衡集群架構實驗??http://www.linuxidc.com/Linux/2015-01/112560.htm
Heartbeat+LVS構建高可用負載均衡集群??http://www.linuxidc.com/Linux/2014-09/106964.htm
搭建LVS負載均衡測試環境??http://www.linuxidc.com/Linux/2014-09/106636.htm
一個針對LVS的壓力測試報告?http://www.linuxidc.com/Linux/2015-03/114422.htm
轉載于:https://www.cnblogs.com/klb561/p/9027108.html
總結
以上是生活随笔為你收集整理的Linux集群服务 LVS的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python基础===将Flask用于实
- 下一篇: linux基础命令篇一