LVS是 Linux Virtual Server 的簡稱,也就是Linux虛擬服務器。
官網:http://www.linuxvirtualserver.org
LVS已經是Linux內核標準的一部分,通過LVS 達到的負載均衡技術和 Linux 操作系統實現一個高性能高可用的 Linux 服務器集羣,它具有良好的可靠性、可擴展性和可操作性
LVS是一個實現負載均衡集羣的開源軟件項目,LVS架構從邏輯上可分爲調度層、Server集羣層和共享存儲
LVS的基本工作原理:
LVS由2部分軟件組成: ipvs和ipvsadm
ipvs(ip virtual server):一段代碼工作在內核空間,叫ipvs,是真正生效實現調度的代碼
ipvsadm:另外一段是工作在用戶空間,叫ipvsadm,負責爲ipvs內核框架編寫規則,定義誰是集羣服務,而誰是後端真實的服務器(Real Server)
LVS相關術語(名詞)及解釋:
DS:Director Server。指的是前端負載均衡器節點
RS:Real Server。後端真實的工作服務器
VIP:向外部直接面向用戶請求,作爲用戶請求的目標的IP地址
DIP:Director Server IP,主要用於和內部主機通訊的IP地址
RIP:Real Server IP,後端服務器的IP地址
CIP:Client IP,訪問客戶端的IP地址
LVS/NAT原理和特點:
理解NAT方式的實現原理和數據包的改變:
(a). 當用戶請求到達Director Server,此時請求的數據報文會先到內核空間的PREROUTING鏈。 此時報文的源IP爲CIP,目標IP爲VIP
(b). PREROUTING檢查發現數據包的目標IP是本機,將數據包送至INPUT鏈
(c). IPVS比對數據包請求的服務是否爲集羣服務,若是,修改數據包的目標IP地址爲後端服務器IP,然後將數據包發至POSTROUTING鏈。 此時報文的源IP爲CIP,目標IP爲RIP
(d). POSTROUTING鏈通過選路,將數據包發送給Real Server
(e). Real Server比對發現目標爲自己的IP,開始構建響應報文發回給Director Server。 此時報文的源IP爲RIP,目標IP爲CIP
(f). Director Server在響應客戶端前,此時會將源IP地址修改爲自己的VIP地址,然後響應給客戶端。 此時報文的源IP爲VIP,目標IP爲CIP
LVS-NAT模型的特性:
RS應該使用私有地址,RS的網關必須指向DIP
DIP和RIP必須在同一個網段內
請求和響應報文都需要經過Director Server,高負載場景中,Director Server易成爲性能瓶頸
支持端口映射
RS可以使用任意操作系統
缺陷:對Director Server壓力會比較大,請求和響應都需經過director server
LVS/DR的原理和特點:
重將請求報文的目標MAC地址設定爲挑選出的RS的MAC地址
(a) 當用戶請求到達Director Server,此時請求的數據報文會先到內核空間的PREROUTING鏈。 此時報文的源IP爲CIP,目標IP爲VIP
(b) PREROUTING檢查發現數據包的目標IP是本機,將數據包送至INPUT鏈
(c) IPVS比對數據包請求的服務是否爲集羣服務,若是,將請求報文中的源MAC地址修改爲DIP的MAC地址,將目標MAC地址修改RIP的MAC地址,然後將數據包發至POSTROUTING鏈。 此時的源IP和目的IP均未修改,僅修改了源MAC地址爲DIP的MAC地址,目標MAC地址爲RIP的MAC地址
(d) 由於DS和RS在同一個網絡中,所以是通過二層來傳輸。POSTROUTING鏈檢查目標MAC地址爲RIP的MAC地址,那麼此時數據包將會發至Real Server。
(e) RS發現請求報文的MAC地址是自己的MAC地址,就接收此報文。處理完成之後,將響應報文通過lo接口傳送給eth0網卡然後向外發出。 此時的源IP地址爲VIP,目標IP爲CIP
(f) 響應報文最終送達至客戶端
LVS-DR模型的特性(企業目前最常用的):
特點1:保證前端路由將目標地址爲VIP報文統統發給Director Server,而不是RS
RS可以使用私有地址;也可以是公網地址,如果使用公網地址,此時可以通過互聯網對RIP進行直接訪問
RS跟Director Server必須在同一個物理網絡中
所有的請求報文經由Director Server,但響應報文必須不能經過Director Server
不支持地址轉換,也不支持端口映射
RS可以是大多數常見的操作系統
RS的網關絕不允許指向DIP(因爲我們不允許他經過director)
RS上的lo接口配置VIP的IP地址
缺陷:RS和DS必須在同一機房中
特點1的解決方案:
在前端路由器做靜態地址路由綁定,將對於VIP的地址僅路由到Director Server
存在問題:用戶未必有路由操作權限,因爲有可能是運營商提供的,所以此方法未必實用
arptables:在arp的層次上實現在ARP解析時做防火牆規則,過濾RS響應ARP請求。這是由iptables提供的
修改RS上內核參數(arp_ignore和arp_announce)將RS上的VIP配置在lo接口的別名上,並限制其不能響應對VIP地址解析請求。
LVS/Tun原理和特點:
在原有的IP報文外再次封裝多一層IP首部,內部IP首部(源地址爲CIP,目標IIP爲VIP),外層IP首部(源地址爲DIP,目標IP爲RIP)
(a) 當用戶請求到達Director Server,此時請求的數據報文會先到內核空間的PREROUTING鏈。 此時
報文的源IP爲CIP,目標IP爲VIP 。
(b) PREROUTING檢查發現數據包的目標IP是本機,將數據包送至INPUT鏈
(c) IPVS比對數據包請求的服務是否爲集羣服務,若是,在請求報文的首部再次封裝一層IP報文,封
裝源IP爲爲DIP,目標IP爲RIP。然後發至POSTROUTING鏈。 此時源IP爲DIP,目標IP爲RIP
(d) POSTROUTING鏈根據最新封裝的IP報文,將數據包發至RS(因爲在外層封裝多了一層IP首部,所
以可以理解爲此時通過隧道傳輸)。 此時源IP爲DIP,目標IP爲RIP
(e) RS接收到報文後發現是自己的IP地址,就將報文接收下來,拆除掉最外層的IP後,會發現裏面
還有一層IP首部,而且目標是自己的lo接口VIP,那麼此時RS開始處理此請求,處理完成之後,通過lo接口送給eth0網卡,然後向外傳遞。 此時的源IP地址爲VIP,目標IP爲CIP
(f) 響應報文最終送達至客戶端
LVS/Tun模型特點:
RIP、VIP、DIP全是公網地址
RS的網關不會也不可能指向DIP
所有的請求報文經由Director Server,但響應報文必須不能經過Director Server
不支持端口映射
RS的系統必須支持隧道
其實企業中最常用的是 DR 實現方式,而 NAT 配置上比較簡單和方便,後邊實踐中會總結 DR 和 NAT 具體使用配置過程。
LVS的八種調度算法:
1、輪叫調度rr :
這種算法是最簡單的,就是按依次循環的方式將請求調度到不同的服務器上,該算法最大的特點就是簡單。輪詢算法假設所有的服務器處理請求的能力都是一樣的,調度器會將所有的請求平均分配給每個真實服務器,不管後端 RS 配置和處理能力,非常均衡地分發下去
2、加權輪叫wrr :
這種算法比 rr 的算法多了一個權重的概念,可以給 RS 設置權重,權重越高,那麼分發的請求數越多,權重的取值範圍 0 – 100。主要是對rr算法的一種優化和補充, LVS 會考慮每臺服務器的性能,並給每臺服務器添加要給權值,如果服務器A的權值爲1,服務器B的權值爲2,則調度到服務器B的請求會是服務器A的2倍。權值越高的服務器,處理的請求越多
3、最少鏈接lc :
這個算法會根據後端 RS 的連接數來決定把請求分發給誰,比如 RS1 連接數比 RS2 連接數少,那麼請求就優先發給 RS1
4、加權最少鏈接wlc :
這個算法比lc多了一個權重的概念
5、基於局部性的最少連接調度算法lblc :
這個算法是請求數據包的目標 IP 地址的一種調度算法,該算法先根據請求的目標 IP 地址尋找最近的該目標 IP 地址所有使用的服務器,如果這臺服務器依然可用,並且有能力處理該請求,調度器會盡量選擇相同的服務器,否則會繼續選擇其它可行的服務器
6、複雜的基於局部性最少的連接算法lblrc :
記錄的不是要給目標IP與一臺服務器之間的連接記錄,它會維護一個目標IP與一組服務器之間的映射關係,防止單點服務器負載過高
7、目標地址散列調度算法dh :
該算法是根據目標 IP 地址通過散列函數將目標 IP 與服務器建立映射關係,出現服務器不可用或負載過高的情況下,發往該目標 IP 的請求會固定發給該服務器
8、源地址散列調度算法sh :
與目標地址散列調度算法類似,但它是根據源地址散列算法進行靜態分配固定的服務器資源
LVS無需安裝,安裝的是管理工具,第一種叫ipvsadm,第二種叫keepalived
LVS/NAT模式實踐:地址轉換
director 內網192.168.56.101 外網172.16.3.78
real server1 內網192.168.56.102
real server2 內網192.168.56.103
在director上安裝ipvsadm:yum install ipvsadm -y
編寫vim /usr/local/sbin/lvs_nat.sh 腳本,內容如下:
#!/bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward director服務器開啓路由轉發功能
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects 關閉icmp的重定向,下面4行
echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/enp0s3/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/enp0s8/send_redirects
iptables -t nat -F director設置nat防火牆,下面3行
iptables -t nat -X
iptables -t nat -A POSTROUTING -s 192.168.56.0/24 -j MASQUERADE
IPVSADM='/sbin/ipvsadm' director設置ipvsadm,下面3行
$IPVSADM -A -t 192.168.56.101:80 -s wrr 定義一個集羣服務
$IPVSADM -a -t 192.168.56.101:80 -r 192.168.56.102:80 -m -w 2 -w後的數字是權重
#添加real server 並指派調度算法爲NAT
$IPVSADM -a -t 192.168.56.101:80 -r 192.168.56.103:80 -m -w 1 -w後的數字是權重
#添加real server 並指派調度算法爲NAT
也可以不寫腳本,一條一條的命令實現!
保存,在Director上執行腳本就可以完成lvs/nat的配置
/bin/bash /usr/local/sbin/lvs_nat.sh
查看ipvsadm設置的規則: ipvsadm -ln
這裏real server端以httpd服務來做測試,也可以使用ngixn做測試!
爲real server1和real server2分別添加主頁/var/www/html/index.html,內容分別爲two和three;
到此完成LVS/NAT集羣配置!
測試訪問http頁面:
清空LVS規則: ipvsadm -C
永久保存LVS規則以及刪除LVS規則後再恢復的命令:
保存: 方法一:service ipvsadm save 針對centos6系列系統
方法二:ipvsadm -S > /etc/sysconfig/ipvsadm.s1 保存LVS規則到此文件中
恢復: ipvsadm -R < /etc/sysconfig/ipvsadm.s1
LVS/NAT模式服務控制部署一鍵完整腳本(只在Director服務器上執行):
腳本名:lvs-nat-director.sh
#!/bin/bash
#
# chkconfig: - 88 12
# description: LVS script for VS/NAT
# . /etc/rc.d/init.d/functions # VIP=192.168.0.200
DIP=172.16.100.1
RIP1=172.16.100.10
RIP2=172.16.100.11#
case "$1" in
start)
# /sbin/ifconfig eth1:0 $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 eth1:0 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
LVS-NAT一鍵安裝腳本(包括Director服務器端和real server端):
腳本名 lvs-nat-install
#!/bin/bash
# 一鍵安裝lvs-nat腳本,需要注意的是主機名稱和ip的變化稍作修改就可以了
HOSTNAME=`hostname`
Director='LVS'
VIP="192.168.0.200"
RIP1="172.16.100.10"
RIP2="172.16.100.11"
RealServer1="web1"
RealServer2="web2"
Httpd_config="/etc/httpd/conf/httpd.conf"
#Director Server Install configure ipvsadm
if [ "$HOSTNAME" = "$Director" ];then
ipvsadm -C
yum -y remove ipvsadm
yum -y install ipvsadm
/sbin/ipvsadm -A -t $VIP:80 -s rr
/sbin/ipvsadm -a -t $VIP:80 -r $RIP1 -m
/sbin/ipvsadm -a -t $VIP:80 -r $RIP2 -m
echo 1 > /proc/sys/net/ipv4/ip_forward
echo "Install $Director sucess "
fi
#RealServer Install httpd
if [ "$HOSTNAME" = "$RealServer1" ];then #第一臺realserver安裝httpd服務
yum -y remove httpd
rm -rf /var/www/html/index.html
yum -y install httpd
echo "web1 Allentuns.com" > /var/www/html/index.html
sed -i '/#ServerName www.example.com:80/a\ServerName localhost:80' $Httpd_config
service httpd start #centos7系統使用systemctl啓動httpd服務
echo "Install $RealServer1 success "
fi
if [ "$HOSTNAME" = "$RealServer2" ];then #第二臺realserver安裝httpd服務
yum -y remove httpd
rm -rf /var/www/html/index.html
yum -y install httpd
echo "web2 Allentuns.com" > /var/www/html/index.html
sed -i '/#ServerName www.example.com:80/a\ServerName localhost:80' $Httpd_config
service httpd start #centos7系統使用systemctl啓動httpd服務
echo "Install $RealServer2"
echo "Install $RealServer1 success "
fi
總結:NAT模型的缺陷是,進出的每個數據包都要經過Director server,當集羣負載均衡過大的時候Director server將會成爲整個集羣系統的瓶頸
DR模型很好的解決了這個問題:DR模型在只有請求的時候纔會經過Director server,迴應的數據包由Real server直接響應用戶不需要經過Director server,最常用的也就是DR模型
LVS/DR模式實踐:直接路由,企業最常用LVS模式
director 內網192.168.56.101 vip 192.168.56.100 配置在enp0s8上
real server 內網192.168.56.102 vip 192.168.56.100 配置lo:0上
real server 內網192.168.56.103 vip 192.168.56.100 配置lo:0上
兩臺real server上都安裝httpd或nginx服務
在Director上安裝ipvsadm : yum install ipvsadm -y
在Director上做如下配置:
ifconfig enp0s8:0 192.168.56.100 broadcast 192.168.56.100 netmask 255.255.255.0 up
route add -host 192.168.56.100 dev enp0s8:0 >> /etc/rc.local 加入開機啓動
echo " echo "1" > /proc/sys/net/ipv4/ip_forward " >> /etc/rc.local 加入開機啓動
iptables -F 清空防火牆規則
iptables -Z
ipvsadm -C 清空ipvsadm規則
ipvsadm -A -t 192.168.56.100:80 -s wlc
ipvsadm -a -t 192.168.56.100:80 -r 192.168.56.102 -g -w 1
ipvsadm -a -t 192.168.56.100:80 -r 192.168.56.103 -g -w 2
touch /var/lock/subsys/ipvsadm &> /dev/null
問題解決:配置ipvsadm 時若出現“Memory allocation problem”提示,則多清除下防火牆iptables -L和多執行sync
在所有real server上做如下配置:限制arp_ignore和arp_announce
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
將上述4條命令,添加到/etc/rc.local文件裏使其開機自動生效
ifconfig lo:0 192.168.56.100 broadcast 192.168.56.100 netmask 255.255.255.255 up
echo "route add -host 192.168.56.100 dev lo:0" >> /etc/rc.local
只能在lo接口上做配置,其他的網口都不行
要是網卡配置永久生效,需要寫入ifcfg-lo:0文件
具體實現腳本如下:
Director端腳本: Director.sh
#!/bin/bash
# LVS script for VS/DR
# . /etc/rc.d/init.d/functions # VIP=192.168.56.100
RIP1=192.168.56.102
RIP2=192.168.56.103
PORT=80
#case "$1" in
start)
/sbin/ifconfig enp0s8:0 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev enp0s8:0
# 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.56.100 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 enp0s8:0 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
Realr Server端腳本: Realserver.sh
#!/bin/bash
# Script to start LVS DR real server.
# description: LVS DR real server
# . /etc/rc.d/init.d/functions
VIP=192.168.56.100
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
;; *)
echo "$0: Usage: $0 {start|status|stop}"
exit 1
;; esac
同樣執行測試: curl http://192.168.56.100/index.html
注意:在 DR 模式下,2臺 rs 節點的 gateway 不需要設置成 dir 節點的 IP
LVS/TUN模式實踐: 隧道
缺點:需要所有的服務器支持"IP Tunneling"(IP Encapsulation)協議
LVS的健康狀態檢查腳本:
在LVS模型中,director不負責檢查RS的健康狀況,這就使得當有的RS出故障了,director還會將服務請求派發至此服務器,避免這種情況的發生
腳本名:check-lvs-health.sh
#!/bin/bash
# VIP=172.16.100.100
CPORT=80
FAIL_BACK=127.0.0.1
RS=("172.16.100.10" "172.16.100.11")
declare -a RSSTATUS
RW=("2" "1")
RPORT=80
TYPE=g
CHKLOOP=3
LOG=/var/log/ipvsmonitor.log
addrs() {
ipvsadm -a -t $VIP:$CPORT -r $1:$RPORT -$TYPE -w $2
[ $? -eq 0 ] && return 0 || return 1
}
delrs() {
ipvsadm -d -t $VIP:$CPORT -r $1:$RPORT
[ $? -eq 0 ] && return 0 || return 1
}
checkrs() { local I=1 while [ $I -le $CHKLOOP ]; do if curl --connect-timeout 1 http://$1 &> /dev/null; then return 0 fi let I++ done return 1
}
initstatus() { local I local COUNT=0;for I in ${RS[*]}; do if ipvsadm -L -n | grep "$I:$RPORT" && > /dev/null ; then
RSSTATUS[$COUNT]=1else
RSSTATUS[$COUNT]=0
A++
Dir[0]=$A fi let COUNT++
done
}
initstatus while :; do let COUNT=0 for I in ${RS[*]}; do if checkrs $I; then if [ ${RSSTATUS[$COUNT]} -eq 0 ]; then
addrs $I ${RW[$COUNT]}
[ $? -eq 0 ] && RSSTATUS[$COUNT]=1 && echo "`date +'%F %H:%M:%S'`, $I is back." >> $LOG
fi else if [ ${RSSTATUS[$COUNT]} -eq 1 ]; then
delrs $I
[ $? -eq 0 ] && RSSTATUS[$COUNT]=0 && echo "`date +'%F %H:%M:%S'`, $I is gone." >> $LOG
fi fi
let COUNT++ done sleep 5 done
查看ipvsadm相關: 支持的負載均衡方式
grep -i "ip_vs" /boot/config-3.10.0-693.el7.x86_64
LVS三種負載均衡方法優缺點比較:
_ |
VS/NAT |
VS/TUN |
VS/DR |
Server |
any |
Tunneling |
Non-arp device |
server network |
private |
LAN/WAN |
LAN |
server number |
low (10~20) |
High (100) |
High (100) |
server gateway |
load balancer |
own router |
Own router |
NAT模式的請求分發服務器會成爲這個模式的瓶頸所在,因爲所有請求與響應走要經過他轉發。
IP隧道模式與DR模式的區別在於,DR模式與IP隧道模式相比,DR模式沒有IP封裝的開銷,但由於採用物理層(修改MAC地址)技術,所有服務器都必須在同一個物理網段中
LVS中ifconfig命令配置的網卡只是臨時生效,要永久生效,必須寫成網卡文件,拷貝原網卡文件即可,保持MAC地址與原網卡文件一致
cp ifcfg-enp0s3 ifcfg-enp0s3:0
NAT模式就是把分發器(也就是Director)上的正常網卡配置一個子網卡,子網卡的IP就是要用到的VIP,然後將real server上的換回網卡配置一個子網卡lo:0,IP也是VIP
訪問real server上的網站時,用VIP訪問即可
健康檢查方法二: 使用keepalived結合
LVS可以實現負載均衡,但是不能夠進行健康檢查,比如一個rs出現故障,LVS 仍然會把請求轉發給故障的rs服務器,這樣就會導致請求的無效性。keepalive 軟件可以進行健康檢查,而且能同時實現 LVS 的高可用性,解決 LVS 單點故障的問題,其實 keepalive 就是爲 LVS 而生的。
具體實現方法就是: 多加一臺Director,兩臺Director使用keepalived實現負載均衡和高可用,解決
Director的單點故障
keepalived的主從節點只有兩點不同:
state MASTER 和 state BACKUP
priority 權重數值不同,主比備大
keepalived的配置文件內容如下:
global_defs {
notification_email {
}
notification_email_from [email protected]
smtp_server localhost
smtp_connect_timeout 30
router_id master #keepalived 服務器名稱,主寫master,備寫backup,或用服務器名字命名
}
vrrp_instance VI_1 {
state MASTER #若是備用keepalived,則填BACKUP
interface enp0s8
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.56.200 #虛IP,即VIP
}
}
virtual_server 192.168.56.200 80 { #虛IP即VIP,80是web服務的端口
delay_loop 6
lb_algo wrr
lb_kind DR
persistence_timeout 50
protocol TCP
#有幾個real server 下面就加幾次下面的段
real_server 192.168.56.102 80 { #IP是real server的IP即RIP,web服務可訪問的
weight 1
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.56.103 80 { #IP是real server的IP即RIP,web服務可訪問的
weight 1
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
參考博文:http://www.cnblogs.com/liwei0526vip/p/6370103.html
http://www.cnblogs.com/lixigang/p/5371815.html
http://blog.51cto.com/467754239/1549699
本文相關服務和專有名詞定義
Director:負責調度集羣的主機;也簡稱調度器、分發器
VIP:Virtual IP 向外提供服務的IP;通常此IP綁定域名
DIP:與內部主機RIP通信的IP,在Director主機上
RIP:Real Server IP;內部真正提供服務的主機
CIP:客戶端IP