linux下负载均衡集群 LVS之NAT和DR模型
1.集群类型分下3种:
LB: Load Balancing,负载均衡
HA:High Availability, 高可用
HP:High Performance, 高性能
2.LB负载均衡四层LVS类型分为以下3种:(Linux Virtual Server)
NAT:地址转换
DR: 直接路由
TUN:隧道
2.1.NAT:
集群节点跟director必须在同一个IP网络中;
RIP通常是私有地址,仅用于各集群节点间的通信;
director位于client和real server之间,并负责处理进出的所有通信;
realserver必须将网关指向DIP;
支持端口映射;
realserver可以使用任意OS;
较大规模应该场景中,director易成为系统瓶颈;
2.2.DR: 常用类型
集群节点跟director必须在同一个物理网络中;
RIP可以使用公网地址,实现便捷的远程管理和监控;
director仅负责处理入站请求,响应报文则由realserver直接发往客户端;
realserver不能将网关指向DIP;
不支持端口映射;
比NAT类型支持更多集群结点
kernel parameter:
arp_ignore: 定义接收到ARP请求时的响应级别;
0:只要本地配置的有相应地址,就给予响应;
1:仅在请求的目标地址配置请求到达的接口上的时候,才给予响应;
arp_announce:定义将自己地址向外通告时的通告级别;
0:将本地任何接口上的任何地址向外通告;
1:试图仅向目标网络通告与其网络匹配的地址;
2:仅向与本地接口上地址匹配的网络进行通告;
2.3.TUN:
集群节点可以跨越Internet;
RIP必须是公网地址;
director仅负责处理入站请求,响应报文则由realserver直接发往客户端;
realserver网关不能指向director;
只有支持隧道功能的OS才能用于realserver;
不支持端口映射;
比NAT类型支持更多集群结点
3.LVS调度方法: 默认调度方法:wlc
3.1.四种静态调度方法:
rr:轮询,round-robin
wrr:加权轮询,Weight round-robin
dh: 目标地址hash,Destinating Hashing
sh:源地址hash,Source Hashing
3.2.六种动态调度方法:
lc: 最少连接 Least-connection
active*256+inactive
wlc: 加权最少连接 Weighted Least-connection
(active*256+inactive)/weight
sed: 最短期望延迟 Shortest Excepted Delay
(active+1)*256/weight
nq: never queue
LBLC: 基于本地的最少连接 Locality-Based Least-Connection
LBLCR: 基于本地的带复制功能的最少连接
Locality-Based Least-Connection with Replication Scheduling
4.ipvsadm:管理集群服务命令行工具
4.1.管理集群服务
添加:-A -t|u|f service-address [-s scheduler]
-t: TCP协议的集群
-u: UDP协议的集群
service-address: IP:PORT
-f: FWM: 防火墙标记
service-address: Mark Number
修改:-E
删除:-D -t|u|f service-address
例如:# ipvsadm -A -t 202.100.1.8:80 -s rr
4.2.管理集群服务中的RS
添加:-a -t|u|f service-address -r server-address [-g|i|m] [-w weight]
-t|u|f service-address:事先定义好的某集群服务
-r server-address: 某RS的地址,在NAT模型中,可使用IP:PORT实现端口映射;
[-g|i|m]: LVS类型
-g: DR
-i: TUN
-m: NAT
[-w weight]: 定义服务器权重
修改:-e
删除:-d -t|u|f service-address -r server-address
例如:
# ipvsadm -a -t 202.100.1.8:80 -r 1.1.1.19 -m
# ipvsadm -a -t 202.100.1.8:80 -r 1.1.1.20 -m
查看
-L|l:列出
-n: 数字格式显示主机地址和端口
--stats:统计数据
--rate: 速率
--timeout: 显示tcp、tcpfin和udp的会话超时时长
-c: 显示当前的ipvs连接状况
删除所有集群服务:-C:清空ipvs规则
保存规则:# ipvsadm -S > /指定存储路径
载入还原此前的规则:# ipvsadm -R < /备份的存储路径
5.负载均衡集群 LVS之NAT类型 实例背景:
Director调度主机两张网卡,外网卡VIP为202.100.1.8,内网卡DIP为1.1.1.18
两台realserver主机RIP分别为1.1.1.19和1.1.1.20,网关必须指向1.1.1.18,并安装httpd服务
5.1.LVS_NAT类型实例web负载均衡,调度方法为rr
Director主机:配置如下
# ipvsadm -A -t 202.100.1.8:80 -s rr
# ipvsadm -a -t 202.100.1.8:80 -r 1.1.1.19 -m
# ipvsadm -a -t 202.100.1.8:80 -r 1.1.1.20 -m
# ipvsadm -L -n
# ipvsadm -L -n --stats
两台realserver主机仅安装httpd服务并启动...省略
5.2.LVS_NAT类型实例web负载均衡,修改调度方法为wrr,并修改Weight权重比例
Director主机:配置如下
# ipvsadm -E -t 202.100.1.8:80 -s wrr
# ipvsadm -e -t 202.100.1.8:80 -r 1.1.1.19 -w 4 -m
# ipvsadm -e -t 202.100.1.8:80 -r 1.1.1.20 -w 1 -m
# ipvsadm -L -n
# ipvsadm -L -n --stats
两台realserver主机仅安装httpd服务并启动...省略
6.负载均衡集群 LVS之DR类型 实例背景
Director调度主机仅一张网卡,网卡eth0:DIP为1.1.1.18,eth0:0 VIP 1.1.1.100,
一台realserver主机网卡 eth0:RIP分别为1.1.1.19 和 lo:0 VIP 1.1.1.100,
另一台realserver主机网卡 eth0:RIP分别为1.1.1.20 和 lo:0 VIP 1.1.1.100,
并都安装httpd服务
Director主机:配置如下
ifconfig eth0 1.1.1.18 netmask 255.255.255.0 up
ifconfig eth0:0 1.1.1.100 netmask 255.255.255.255 broadcast 1.1.1.100 up
route add -host 1.1.1.100 dev eth0:0
ipvsadm -C
ipvsadm -A -t 1.1.1.100:80 -s wlc
ipvsadm -a -t 1.1.1.100:80 -r 1.1.1.19 -g -w 2
ipvsadm -a -t 1.1.1.100:80 -r 1.1.1.20 -g -w 1
ipvsadm -L -n
ipvsadm -L -n --stats
一台realserver主机:
sysctl -w net.ipv4.conf.eth0.arp_ignore=1
sysctl -w net.ipv4.conf.all.arp_ignore=1
sysctl -w net.ipv4.conf.all.arp_announce=2
sysctl -w net.ipv4.conf.eth0.arp_announce=2
ifconfig eth0 1.1.1.19 netmask 255.255.255.0 up
ifconfig lo:0 1.1.1.100 netmask 255.255.255.255 broadcast 1.1.1.100 up
route add -host 1.1.1.100 dev lo:0
另一台realserver主机:
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/eth0/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
ifconfig eth0 1.1.1.20 netmask 255.255.255.0 up
ifconfig lo:0 1.1.1.100 netmask 255.255.255.255 broadcast 1.1.1.100 up
route add -host 1.1.1.100 dev lo:0
7.realserver健康检查脚本
#!/bin/bash
#
VIP=1.1.1.100
CPORT=80
FAIL_BACK=127.0.0.1
RS=("1.1.1.19" "1.1.1.20")
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]=1
else
RSSTATUS[$COUNT]=0
fi
let COUNT++
done
}
initstatus
while :; do
let COUNT=0
let FAIL=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
FAIL=$[$FAIL+${RSSTATUS[$COUNT]}]
let COUNT++
done
#以下部分检查当realserver主机全部掉线,自动切换至Director主机显示维护网页
#当其中有一台realserver主机上线,立即切换至正常业务,维护网页自动下线
if [ $FAIL -eq 0 ]; then
if ! ipvsadm -L -n | grep "$FAIL_BACK:$RPORT" &> /dev/null ; then
ipvsadm -a -t $VIP:$CPORT -r $FAIL_BACK:$RPORT
fi
else
if ipvsadm -L -n | grep "$FAIL_BACK:$RPORT" &> /dev/null;then
ipvsadm -d -t $VIP:$CPORT -r $FAIL_BACK:$RPORT
fi
fi
sleep 5
done
8.LVS持久连接
定义:无论使用何种算法,LVS持久都能实现在一定时间内,将来自同一个客户端请求派至此前选定的RS
定义格式:ipvsadm -A|E ... -p timeout:
timeout: 持久连接时长,默认300秒;单位是秒;
LVS持久连接可分为以下常用3类:
PPC:将来自于同一个客户端对同一个集群服务的请求,始终定向至此前选定的RS;即为:持久端口连接
PCC:将来自于同一个客户端对所有端口的请求,始终定向至此前选定的RS;即为:持久客户端连接
把所有端口统统定义为集群服务,一律向RS转发;
PNMPP:将部分指定的不同端口集群服务都标记成同一个标号,即为:持久防火墙标记连接
注意在PREROUTING时就要打上标记
LVS_PPC实例1:
ipvsadm -A -t 1.1.1.100:80 -s rr -p 600
ipvsadm -a -t 1.1.1.100:80 -r 1.1.1.19 -g -w 2
ipvsadm -a -t 1.1.1.100:80 -r 1.1.1.20 -g -w 1
LVS_PCC实例2:
ipvsadm -A -t 1.1.1.100:0 -s rr -p 600
ipvsadm -a -t 1.1.1.100:0 -r 1.1.1.19 -g -w 2
ipvsadm -a -t 1.1.1.100:0 -r 1.1.1.20 -g -w 1
LVS_PNMPP实例3:
iptables -t mangle -A PREROUTING -d 1.1.1.100 -i eth0 -p tcp --dport 80 -j MARK --set-mark 10
iptables -t mangle -A PREROUTING -d 1.1.1.100 -i eth0 -p tcp --dport 443 -j MARK --set-mark 10
iptables -t mangle -A PREROUTING -d 1.1.1.100 -i eth0 -p tcp --dport 23 -j MARK --set-mark 10
ipvsadm -A -f 10 -s rr -p 600
ipvsadm -a -f 10 -r 1.1.1.19 -g -w 3
ipvsadm -a -f 10 -r 1.1.1.20 -g -w 2
|