LVS(Linux Virtual Server)是一个开源的负载均衡器解决方案,可用于在Linux环境中实现高可用性和可伸缩性的网络服务。LVS旨在将入站流量分发到多个后端服务器,以确保负载分布均匀,提高服务的性能和可用性。
以下是关于LVS的主要特点和概念:
-
负载均衡: LVS通过将流量分发到多个服务器来均衡负载。这有助于避免单一服务器成为性能瓶颈,并提高了服务的可用性。
-
四种工作模式: LVS支持四种工作模式,包括NAT模式、IP隧道模式、直接路由模式和定址模式,以适应不同的网络架构和需求。
-
调度算法: LVS使用调度算法来确定将请求分发到哪个后端服务器。常见的调度算法包括Round Robin、Least Connections、Weighted Round Robin等。
-
监控和故障检测: LVS可以配置用于监控后端服务器的状态,并在服务器故障或不可用时自动将流量重新路由到其他可用服务器。
-
透明性: 对客户端而言,LVS是透明的,客户端无需知道负载均衡器的存在,它看起来就像是一个单一的服务器。
-
高可用性: 通过使用多个LVS负载均衡器和后端服务器,可以实现高可用性架构,即使一个负载均衡器或服务器发生故障,仍然可以提供服务。
-
支持多种协议: LVS支持负载均衡各种协议,包括HTTP、HTTPS、TCP、UDP等。
-
开源和自由: LVS是一个开源项目,可以免费使用和定制,适用于各种规模的网络环境。
LVS通常与其他开源技术和工具(如Keepalived、HAProxy等)一起使用,以构建完整的高可用性和负载均衡解决方案。它在大型网络环境中广泛应用,特别是在需要分发流量到多个Web服务器、应用服务器或数据库服务器的情况下。
#!/bin/bash
#=============================================================================
VIP=10.10.10.100 #集群虚拟IP
CPORT=80 #定义集群端口
FAIL_BACK=127.0.0.1 #本机回环地址
RS=("10.10.10.12" "10.10.10.13") #编写集群地址
declare -a RSSTATUS #变量RSSTATUS定义为数组态
RW=("2" "1")
RPORT=80 #定义集群端口
TYPE=g #制定LVS工作模式:g=DR m=NAT
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]=1
else
RSSTATUS[$COUNT]=0
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
2779

被折叠的 条评论
为什么被折叠?



