LVS: Linux virtual server,即 Linux 虚拟服务器。
LVS 自身是个负载均衡器(director),不直接处理请求,而是将请求转发至位于它后端真正的服务器 realserver 上。
LVS 是四层(传输层 tcp/udp)负载均衡工具
ipvs 是集成在内核中的框架,可以通过用户空间的程序 ipvsadm 工具来管理,该工具可以定义一些规则来管理内核中
的 ipvs。
lvs无法解决RS的健康检查,并且存在单点故障,建议使用keepalived高可用。
VS:virtual server,负责调度
RS:real server,负责真正提供服务
CIP:客户端 ip
VIP:VS 外网 IP
DIP:VS 内网 ip
RIP:后端真实 ip
-------------------------------
通过将请求报文中的目标地址和目标端口修改为某 RS 的 RIP 和 PORT 实现转发。
RIP 和 DIP 应在同一个 IP 网络,使用不同网络时,RS 和 lvs 需要指向到达互相的路由
请求报文和响应报文都必须经过 Director 转发,Director 易于成为系统瓶颈
支持端口映射,可修改请求报文的目标 PORT
VS 必须是 linux,RS 可以是其他系统
DR(Director routing,直接路由)。
lvs 默认模式,通过为请求报文重新封装一 个 MAC 首部进行转发,只会改变源和目的 MAC,不会修改源和目的 IP/PORT。
Director 和 RS 都配置 VIP
需要确保前端路由器将目标 VIP 的请求报文发往 Dircetor
RS 和 Dircetor 需要在同一物理网络(因为 lvs 将通过 arp 找到 RS), RS 的网关不用指向DIP
请求报文经过 Director,响应报文不经过 Director,由 RS 直接发往 Client
不支持端口映射
不修改请求报文的 IP 首部(源 IP 为 CIP,目标 IP 为 VIP),而在原 IP 报 文之外再封装一个 IP 首部(源 IP 是 DIP,
目标 IP 是 RIP),将报文发往挑 选出的目标 RS;RS 直接响应给客户端。
DIP、VIP、RIP 可以是公网地址
请求报文经过 Director,响应报文不经过 Director,由 RS 直接发往 Client
不支持端口映射
RS 的 OS 须支持隧道功能
RS 的网关不用指向 DIP
------------------------------------------------------------------
负载均衡器:ens33 192.168.8.10 ens33:0 192.168.8.200
节点1: ens33 192.168.8.20 lo:0 192.168.8.200
节点2: ens33 192.168.8.30 lo:0 192.168.8.200
ens33:192.168.8.10/24 ens33:0:192.168.8.200
yum install ipvsadm -y
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens33:0
vim ifcfg-ens33:0
修改:
TYPE="Ethernet"
BOOTPROTO="static"
DEVICE="ens33:0"
ONBOOT="yes"
IPADDR=192.168.8.200
NETMASK=255.255.255.0
保存退出
ifup ens33:0
ifconfig ens33:0
ipvsadm -A -t 192.168.8.200:80 -s rr
ipvsadm -a -t 192.168.8.200:80 -r 192.168.8.20:80 -g -w 1
ipvsadm -a -t 192.168.8.200:80 -r 192.168.8.30:80 -g -w 1
ipvsadm -Ln --stats
使用DR模式时,节点服务器也需要vip地址,并调整内核的ARP响应参数以阻止更新vip的MAC地址,避免发生冲突。
yum install ipvsadm -y
cd /etc/sysconfig/network-scripts
cp ifcfg-lo ifcfg-lo:0
vim ifcfg-lo:0
修改:
DEVICE=lo:0
IPADDR=192.168.8.200
NETMASK=255.255.255.255
ONBOOT=yes
保存退出
ifup lo:0
route add -host 192.168.8.200 dev lo:0
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce