一,簡介
LVS(Linux Virtual Server),可用來實現LINUX下的簡單負載均衡。
LVS工做在TCP/IP協議的四層,其轉發是依賴於四層協議的特徵進行轉發的,由
於其轉發要依賴於協議的特徵進行轉發,所以須要在內核的TCP/IP協議棧進行過濾篩
選,而這樣的過濾轉發規則可由管理員對內核進行定義。
LVS在內核空間中工做的是「ipvs」,而在用戶空間中工做的,用來定義集羣服
務規則的是「ipvsadm」。
三種負載均衡轉發的機制
1:NAT(Network Address Translation)網絡地址翻譯技術。
當用戶請求到達調度器時,調度器將改寫請求的地址爲真實Server地址。在服
務器端處理後,須要再次通過負載調度器將報文的源地址和源端口改爲虛擬IP地址和
相應端口,而後把數據發送給用戶,完成整個負載調度過程。
2:TUN(IP Tunneling)IP隧道技術
調度器採用IP隧道技術將用戶請求轉發到某個Real Server,而這個Real
Server將直接響應用戶的請求,再也不通過調度器。算法
3:DR(Direct Routing)直接路由技術
DR經過改寫請求報文的MAC地址,將請求發送到真實Server,而真實Server將響應直
接返回給客戶,比TUN少了IP隧道開銷。這種方式是三種負載調度機制中性能最高最好的,
可是要求調度器與真實服務器在同一物理網段上
n 負載調度的算法
1:rr(Round Robin )輪循,這種算法平等地對待每一臺真實服務器,而無論服務器上實際
的負載情況和鏈接狀態
2:wrr(Weighted Round Robin )加權輪循,根據真實服務器的不一樣處理能力來調度請求
3:lc(Least Connections )最少鏈接,動態地將請求調度到已創建的連接數最少的服務器
4:wlc(Weighted Least Connections )加權最少鏈接,每一個服務節點能夠用相應的權值表
示其處理能力,較高權值的服務器將承受較大比例的活動鏈接負載
5:dh(Destination hashing )目標地址Hash,根據請求的目標IP,做爲散列鍵從靜態分配
的散列表找出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,否
則返回空
6:SH(Source hashing)源地址hash,根據請求的源IP,做爲散列鍵從靜態分配的散列表找
出對應的服務器,若該服務器是可用的且未超載,將請求發送到該服務器,不然返回空服務器
7:SED(Shortest Expected Delay)最短時間望的延遲,基於wlc算法,計算每一個真實服務器的
請求延遲,把請求轉發給最短延遲的服務器
8:NQ(Never Queue)最少排隊,某臺真實服務器沒有鏈接時,就直接轉發過去
9:LBLC(Locality-Based Least-Connection)基於局部的最少鏈接,根據請求的目標IP,找
出該地址最近使用的服務器,若該服務器是可用的且沒有超載,將請求發送到該服務器;
若服務器不存在,或者該服務器超載且有服務器處於一半的工做負載,則用「最少連接」
的原則選出一個可用的服務器,將請求發送到該服務器
10:LBLCR(Locality-Based Least-Connection with replication Scheduling)帶複製的基
於局部最少鏈接,它與LBLC算法的不一樣之處是它要維護從一個目標IP到一組服務器的映
射,而LBLC是維護從一個目標IP到一臺服務器的映射。根據請求的目標IP,找出該目標IP
對應的服務器組,按「最小鏈接」原則從服務器組中選出一臺服務器,若服務器沒有超
載,將請求發送到該服務器;若服務器超載,則按「最小鏈接」原則從這個集羣中另外選
出一臺服務器,將該服務器加入到服務器組中,將請求發送到該服務器網絡
二,簡介
LVS+Keepalived是一個常見的組合,使用LVS來實現負載均衡,使用Keepalived來實
現HA。
因爲Keepalived是基於LVS的,所以這兩部分功能,均可以經過Keepalived來實現,
配置也基本上在Keepalived上配置。
配置Keepalived.conf
(1)全局配置和VRRPD的配置跟之前是同樣的,只須要添加LVS的配置就能夠了。
(2)主服務器和備用服務器的配置是同樣的。
(3)LVS+DR模式中,只支持IP的轉發,不支持端口轉發,也就是說virtual_server和
real_server的配置節點中端口必須同樣
virtual_server 192.168.1.77 8080 {
delay_loop 6
lb_algo wrr
lb_kind DR
persistence_timeout 60
protocol TCP負載均衡
real_server 192.168.1.201 8080 {
weight 3
#TCP_CHECK {
# connect_timeout 10
# nb_get_retry 3
# delay_before_retry 3
# connect_port 80
#}
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
}
}
}oop
真實服務器上的配置
真實服務器上須要對VIP進行綁定,並進行路由設置等一系列操做,這裏整理爲一個
腳本供參考:lvs_real.sh:
#!/bin/sh
VIP=192.168.1.77
/etc/rc.d/init.d/functions
case "$1" in
start)
echo " start tunl port"
ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP up
echo "2">/proc/sys/net/ipv4/conf/all/arp_announce
echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2">/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1">/proc/sys/net/ipv4/conf/lo/arp_ignore
;;
stop)
echo " stop tunl port"
ifconfig lo:0 down性能
echo "0">/proc/sys/net/ipv4/conf/all/arp_announce
echo "0">/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0">/proc/sys/net/ipv4/conf/lo/arp_announce
echo "0">/proc/sys/net/ipv4/conf/lo/arp_ignore
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
n 說明
1:基本的使用方法:sh lvs_real.sh start,若是沒有權限的話,須要受權
2:VIP被綁定在環回接口lo:0上,其廣播地址是其自己,子網掩碼是
255.255.255.255。採用這種可變長掩碼方式能夠避免IP地址衝突
3:echo 「1」,echo 「2」 這段的做用是抑制ARP(地址廣播協議)廣播url