lvs:linux virtual server,linux虛擬服務器。是linux平台下的負載均衡軟件。
優點:a、開源,免費b、在網上能找到相關技術資源c、具有軟件負載均衡的優點。
技術簡介:
lvs集群采用IP負載均衡技術和基於內容請求分發技術。調度器具有很好的吞吐率,將請求均衡的轉移到不同的服務器上執行,調度器自動屏蔽服務器的故障,從而將一組服務器構成一個高性能的高可用的虛擬服務器。整個服務器集群的結構對客戶是透明的,無需修改客戶端和服務器端的程序。
集群的三層架構:
A、負載調度器,是整個集群對外面的前端機,負責將客戶的請求發送到一組服務器上執行,而客戶認為服務是來自一個IP地址
B、服務器池,是一組真正執行客戶請求的服務器,執行的服務有web、mail、ftp和dhs等
C、共享存儲,為服務器提供一個共享的存儲區,很容易使得服務器池擁有相同的內容,提供相同的服務。
調度器:
調度器是服務器集群系統的唯一入口點,可以采用IP負載均衡技術、基於內容請求分發技術或者兩者的結合。
調度器采用ip負載均衡技術,基於內容請求分發技術或者兩者的結合。在IP負載均衡技術中,需要服務器池擁有相同的內容提供相同的服務。當客戶請求到達時,調度器根據服務器負載情況和設定的調度算法從服務器池中選擇一個服務器,將帶請求轉發到選出的服務器,並記錄這個調度;當這個請求的其他報文到達,也會被轉發到前面選出的服務器。
在基於內容請求分發技術中,服務器可以提供不同的服務,當客戶請求到達時,調度器可以根據請求的內容選擇服務器執行請求。
調度算法:
輪叫調度:以輪叫的方式依次將請求調度不同的服務器,算法簡潔,無需記錄當前所有鏈接的狀態,是無狀態的調度
加權輪叫調度:用相應的權值表示服務器的處理性能,默認權值為1.按權值的高低和輪叫方式分配請求到各服務器
最小連接調度:把新的鏈接請求分配到當前連接數最小的服務器,是一種動態的調度算法,通過服務器當前活躍的連接數來估算服務器的負載情況。
加權最小連接調度:各個服務器相應的權值表示其處理性能。盡可能使服務器已經建立的連接數和其權值成比例
基於局部性的最小鏈接:在服務器的負載平衡情況下,將相同目標IP地址的請求調度到同一台服務器,提高各服務器的訪問局部性和主存cache命中率。
帶復制的基於局部性的最少鏈接:與基於局部性的最小鏈接不同的是,這個需要維護從一個目標IP到一組服務器的映射。
目標地址散列調度:靜態映射算法,通過一個散列函數將一個目標IP地址映射到一台服務器
源地址散列調度:與目標地址散列調度相反,根據請求的源IP地址作為散列值,從靜態分配的散列表找出相應的服務器。
負載均衡技術 vs/nat:通過網絡地址轉換技術,將一組服務器構成一個高可用的,高性能的虛擬服務器。 vs/tun:通過ip隧道實現虛擬服務器 vs/dr:通過直接路由實現虛擬服務器虛擬ip:director用於向客戶端計算機提供服務的ip地址真實ip:在集群節點上使用ip地址,提供真實服務的機器 director的ip:director用於連接到D/rip網絡的ip地址客戶端ip:分配給客戶端計算機的ip地址,用作發送給集群的請求的源地址
1、lvs(nat模式配置)
(1)准備好網絡環境
真實服務器(應用服務,ip地址,網關)
調度服務器(ip地址,數據轉發設置)
防火牆服務器(ip地址,數據轉發設置,NAT配置)
(2)調度服務器配置
# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
# sysctl -p
# yum install ipvsadm
# ipvsadm -A -t 172.16.10.111:80 -s rr
# ipvsadm -a -t 172.16.10.111:80 -r 10.0.0.11:80 -m
# ipvsadm -a -t 172.16.10.111:80 -r 10.0.0.12:80 -m
# ipvsadm -a -t 172.16.10.111:80 -r 10.0.0.13:80 -m
# service ipvsadm save
(3)防火牆的配置
# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
# sysctl -p
# iptables -t nat -A PREROUTING -i eth1 -s 10.10.10.0/24 -p tcp --dport 80 -j DNAT --to-destination=172.16.10.111:80
2、lvs(dr模式配置)
(1)客戶端(Client)配置
eth0(cip):10.10.10.10
gw:10.10.10.110
(2)防火牆配置(Fireware)配置
ip配置
eth0:172.16.10.111 (防火牆和調度服務器通信地址)
eth1:10.10.10.11 (客戶端網關)
eth2:10.0.0.163 (防火牆和真實機的通信地址)
# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
# sysctl -p
# iptables -t nat -A PREROUTING -i eth1 -s 10.10.10.0/24 -p tcp --dport 80 -j DNAT --to-destination=172.16.10.111:80
(3)調度服務器(ldirector)配置
ip配置
eth0:10.0.0.164 (和真實服務器通信地址)
eth1:172.16.10.100 (虛擬ip(vip))
gw:172.16.10.111
注意:解決Error, some other host already uses address 10.0.0.164.問題
# vim /etc/sysconfig/network-scripts/ifup-eth 注釋掉一下四行
# if ! /sbin/arping -q -c 2 -w 3 -D -I ${REALDEVICE} ${ipaddr[$idx]} ; then
# net_log $"Error, some other host already uses address ${ipaddr[$idx]}."
# exit 1
# fi
配置數據包轉發
# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
# sysctl -p
配置調度
# ipvsadm -A -t 172.16.10.100:80 -s rr
# ipvsadm -a -t 172.16.10.100:80 -r 10.0.0.11:80 -g
# ipvsadm -a -t 172.16.10.100:80 -r 10.0.0.12:80 -g
# ipvsadm -a -t 172.16.10.100:80 -r 10.0.0.13:80 -g
# ipvsadm -L -n 查看ipvsadm配置
# ipvsadm -L -n --stats 查看ipvsadm狀態
添加網關
# route add default gw 172.16.10.111
(4)真實服務器(real server)配置
ip配置
1)ip:10.0.0.11/16
gw:10.0.0.139
vip:172.16.10.100
# ifconfig lo:0 172.16.10.100/32 broadcast 172.16.10.100
禁用接收廣播回應配置
#vim /etc/sysctl.conf
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
# sysctl -p
或者
# yum install arptables_jf
# arptables -A IN -d 172.16.10.100 -j DROP
添加路由
# route add -host 172.16.10.100 dev lo:0