LVS-DR模式配置
Lvs
简介 LVS 的全称是 Linux virtual server,即 Linux 虚拟服务器。之所以是虚拟服 务器,是因为 LVS 自身是个负载均衡器(director),不直接处理请求,而是将请 求转发至位于它后端真正的服务器 realserver 上。
LVS 是四层(传输层 tcp/udp)、七层(应用层)的负载均衡工具,但是七层不怎么 完善。
ipvs 是集成在内核中的框架,可以通过用户空间的程序 ipvsadm 工具来管 理,该工具可以定义一些规则来管理内核中的 ipvs。就像 iptables 和 netfilter 的关系一样。
lvs无法解决RS的健康检查,并且存在单点故障
lvs 集群术语
VS:virtual server,负责调度
RS:real server,负责真正提供服务
CIP:客户端 ip
VIP:VS 外网 IP
DIP:VS 内网 ip
RIP:后端真实 ip
lvs 工作模式:
(1)nat 模式
本质时多目标 IP 的 DNAT,通过将请求报文中的目标地址和目标端口修改为某挑 出的 RS 的 RIP 和 PORT 实现转发。
- RIP 和 DIP 应在同一个 IP 网络,使用不同网络时,RS 和 lvs 需要指向到 达互相的路由
- 请求报文和响应报文都必须经过 Director 转发,Director 易于成为系统瓶 颈
- 支持端口映射,可修改请求报文的目标 PORT
- VS 必须是 linux,RS 可以是其他系统
(2)dr 模式
DR(Director routing,直接路由)。lvs 默认模式,通过为请求报文重新封装一 个 MAC 首部进行转发,只会改变源和目的 MAC,不会修改源和目的 IP/PORT。
- Director 和 RS 都配置 VIP
- 需要确保前端路由器将目标 VIP 的请求报文发往 Dircetor
- RS 和 Dircetor 需要在同一物理网络(因为 lvs 将通过 arp 找到 RS), RS 的网关不用指向 DIP
- 请求报文经过 Director,响应报文不经过 Director,由 RS 直接发往 Client
5. 不支持端口映射
(3)tun 模式
不修改请求报文的 IP 首部(源 IP 为 CIP,目标 IP 为 VIP),而在原 IP 报 文之外再封装一个 IP 首部(源 IP 是 DIP,目标 IP 是 RIP),将报文发往挑 选出的目标 RS;RS 直接响应给客户端。
- DIP、VIP、RIP 可以是公网地址
- 请求报文经过 Director,响应报文不经过 Director,由 RS 直接发往 Client
- 不支持端口映射
- RS 的 OS 须支持隧道功能 5. RS 的网关不用指向 DIP
lvs 工作模式比较
lvs 调度算法
ipvs schedule:根据其调度时是否考虑 RS 当前负载状态分为静态方法和动态方法
静态方法
仅仅根据算法本身进行调度
- RR:轮询
- WRR:加权轮询
- SH,source hashing:实现 session sticky,源 IP 地址 hash,将来自同一 个 IP 地址的请求始终发往第一次挑中的 RS,实现会话绑定
- DH,Destination Hashing:第一次轮询调度至 RS,后续将发往同一目标地址 的请求始终转发至第一此挑中的 RS,典型的使用场景是正向代理缓存场景中 的负载均衡
动态方法
根据 RS 当前负载状态及调度算法进行调度 Overhead(负载值)=value 较小的 RS 将被调度。
- LC:最短连接,适用与长连接 overhead=activeconns*256+inactiveconns
- WLC:weighted LC,默认调度算法 overhead=(activeconns*256+inactiveconns)/wegiht
- SED:初始连接高权重优先 overhead=(activeconns+1)*256/weight
- NQ:第一轮均匀分配,后续 SED
- 5. LBLC:动态 DH 算法 6. LBLCR:带复制功能的 LBLC,解决 LBLC 负载不均衡问题,从负载重的复制到 负载轻的 RS
内核版本 4.15 版本后新增 FO 和 OVF 算法
实例 nat 模式示例
环境:CentOS Linux release 7.9.2009 (Core)
开启路由转发 在 lvs 和 router 主机上配置路由转发:
$ sysctl -w net.ipv4.ip_forward=1
配置路由
LVS:
添加到 web 的路由
ROUTER
添加到 Client 的路由
web
网关指向 DIP
配置 ipvsadm
安装 ipvsadm
$ yum install ipvsadm -y
添加虚拟服务
$ ipvsadm -A -t 192.168.1.100:80 -s wrr
添加 RS 到 VS
#访问 vip 的 80 端口,将会映射到 RIP 的 80 端口
$ ipvsadm -a -t 192.168.1.100:80 -r 192.168.3.100:80 -m
$ ipvsadm -a -t 192.168.1.100:80 -r 192.168.3.101:80 -m -w 3
查看 VS 表 及连接状态
$ ipvsadm -Lnc
保存规则
#默认规则只放在内存中,将其保存在文件中
$ ipvsadm -Sn > /etc/sysconfig/ipvsadm
# ipvsadm 服务在启动时会加载/etc/sysconfig/ipvsadm 配置文件的内容
$ systemctl enable ipvsadm.service
dr 模式单网段示例
开启路由转发
router 开启路由转发:
$ sysctl -w net.ipv4.ip_forward=1
配置回环网卡
在 web 和 lvs 上配置
$ ip addr add 192.168.2.101/32 dev lo label lo:1
网络路由配置
client
route
lvs
web
内核参数修改
arp_ignore
0:回应任何网口上收到的对任何本机 IP 地址的 ARP 查询请求(默认)
1:只回应 Target IP 是接收网口的 IP 的 ARP 查询请求
2:只回应 Target IP 是接收网口的 IP 的 ARP 查询请求,且 Sender IP 必
须与该网口属于同一网段
4-7:保留未使用
8:不回应所有的 arp 查询
arp_announce
0:使用发送(或转发)的数据包的源 IP 作为发送 ARP 请求的 Sender IP
(默认) ;(可使用 ping -I 验证)
1:IP 数据包的目的 IP 属于本地某个接口的网段时,Sender IP 则使用 IP
数据包源 IP,不属于则按 2 处理;
2:忽略数据包的源 IP,使用能与目标主机会话的最佳地址来作为发送 ARP
的 Sender IP,优先选择对外接口的主 IP;(loopback 不是对外接口)
修改RS的内核参数
# 用来响应router的arp请求
$ sysctl -w net.ipv4.conf.all.arp_ignore=1
# 用来发送lvs的arp响应
$ sysctl -w net.ipv4.conf.all.arp_announce=2
$ sysctl -w net.ipv4.conf.lo.arp_ignore=1
$ sysctl -w net.ipv4.conf.lo.arp_announce=2
配置ipvsadm
创建虚拟服务
$ ipvsadm -A -t 192.168.2.101:80
添加rs到vs
$ ipvsadm -a -t 192.168.2.101:80 -r 192.168.2.102 -g
$ ipvsadm -a -t 192.168.2.101:80 -r 192.168.2.103 -g
注意事项
lvs需要配置网关(网关可以随意配置),不然无法调度到后端RS上
---------------------------------------------------------------------
Lvs
简介 LVS 的全称是 Linux virtual server,即 Linux 虚拟服务器。之所以是虚拟服 务器,是因为 LVS 自身是个负载均衡器(director),不直接处理请求,而是将请 求转发至位于它后端真正的服务器 realserver 上。
LVS 是四层(传输层 tcp/udp)、七层(应用层)的负载均衡工具,但是七层不怎么 完善。
ipvs 是集成在内核中的框架,可以通过用户空间的程序 ipvsadm 工具来管 理,该工具可以定义一些规则来管理内核中的 ipvs。就像 iptables 和 netfilter 的关系一样。
lvs无法解决RS的健康检查,并且存在单点故障
lvs 集群术语
VS:virtual server,负责调度
RS:real server,负责真正提供服务
CIP:客户端 ip
VIP:VS 外网 IP
DIP:VS 内网 ip
RIP:后端真实 ip
lvs 工作模式:
(1)nat 模式
本质时多目标 IP 的 DNAT,通过将请求报文中的目标地址和目标端口修改为某挑 出的 RS 的 RIP 和 PORT 实现转发。
- RIP 和 DIP 应在同一个 IP 网络,使用不同网络时,RS 和 lvs 需要指向到 达互相的路由
- 请求报文和响应报文都必须经过 Director 转发,Director 易于成为系统瓶 颈
- 支持端口映射,可修改请求报文的目标 PORT
- VS 必须是 linux,RS 可以是其他系统
(2)dr 模式
DR(Director routing,直接路由)。lvs 默认模式,通过为请求报文重新封装一 个 MAC 首部进行转发,只会改变源和目的 MAC,不会修改源和目的 IP/PORT。
- Director 和 RS 都配置 VIP
- 需要确保前端路由器将目标 VIP 的请求报文发往 Dircetor
- RS 和 Dircetor 需要在同一物理网络(因为 lvs 将通过 arp 找到 RS), RS 的网关不用指向 DIP
- 请求报文经过 Director,响应报文不经过 Director,由 RS 直接发往 Client
5. 不支持端口映射
(3)tun 模式
不修改请求报文的 IP 首部(源 IP 为 CIP,目标 IP 为 VIP),而在原 IP 报 文之外再封装一个 IP 首部(源 IP 是 DIP,目标 IP 是 RIP),将报文发往挑 选出的目标 RS;RS 直接响应给客户端。
- DIP、VIP、RIP 可以是公网地址
- 请求报文经过 Director,响应报文不经过 Director,由 RS 直接发往 Client
- 不支持端口映射
- RS 的 OS 须支持隧道功能 5. RS 的网关不用指向 DIP
------------------------------------------------------------------
LVS-DR模式配置
负载均衡器:eth0 192.168.124.134 eth0:0 192.168.124.135
节点1: eth0 192.168.124.133 lo:0 192.168.124.135
1、LVS负载调度器(192.168.124.134):采用虚接口方式(eth0:0),为网卡eth0绑定VIP地址,以便响应群集访问。
eth0:192.168.124.134/24 eth0:0:192.168.124.135
配置命令如下:
# yum install ipvsadm -y
# cd /etc/sysconfig/network-scripts/;cp ifcfg-eth0 ifcfg-eth0:0
# vim ifcfg-eth0:0
==>BOOTPROTO=static
==>DEVICE=eth0:0
==>IPADDR=192.168.124.135
==>NETMASK=255.255.255.0
# ifup eth0:0
# ifconfig eth0:0
配置LVS负载分配策略:
#ipvsadm -A -t 192.168.124.135:80 -s rr
#ipvsadm -a -t 192.168.124.135:80 -r 192.168.124.133:80 -g -w 1
#ipvsadm -a -t 192.168.124.135:80 -r 192.168.124.134:80 -g -w 1
添加vip本地访问路由
ip addr add 192.168.124.1/32 dev lo label eth0:0
2、配置RS节点服务器(192.168.124.133):
使用DR模式时,节点服务器也需要vip地址,并调整内核的ARP响应参数以阻止更新vip的MAC地址,避免发生冲突。除此以外,web服务器配置和NAT模式一样。
配置虚拟IP地址
每个节点服务器同样需要具有vip,192.168.20.139,但此地地址仅用作发送web响应数据包的源地址,并不需要监听客户机的访问请求(由调度器监听并分发)。因此使用虚接口lo:0来承载vip地址,并为本机添加一条路由记录,将访问vip的数据限制在本地,以免通信紊乱。
配置命令:
# 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.124.135
==>NETMASK=255.255.255.255
==>ONBOOT=yes<br>ifup lo:0
添加vip本地访问路由
#route add -host 192.168.124.135 dev lo:0
配置RS节点的arp响应和通告级别
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
测试前
#ipvsadm -Ln
访问192.168.124.135:80
测试后: