目录
一、What’s the LVS?
1、LVS(Linux Virtual Server,负载调度器)
2、LVS如何工作
二、LVS工作模式
1、LVS-NAT
2、LVS-TUN
3、LVS-DR
三、LVS的使用
1、LVS负载均衡调度算法
(1).轮询调度
(2).加权轮询调度
(3).最小连接调度
(4).加权最小连接调度
2、ipvsadm工具选项
四、NAT模式LVS负载均衡部署
1、LVS-NAT的NFS共享服务器
3、LVS-NAT负载调度器
编辑
3、LVS-NAT节点服务器
4、LVS-NAT客户机测试
五、DR模式LVS负载均衡部署
1、LVS-DR的特点
2、部署
3、LVS-DR的nfs服务器
4、LVS-DR节点服务器
6、LVS-DR负载调度器
7、LVS-DR客户端测试
一、What’s the LVS?
1、LVS(Linux Virtual Server,负载调度器)
LVS(Linux Virtual Server)即Linux虚拟服务器,是由章文嵩博士主导的开源负载均衡项目,目前LVS已经被集成到Linux内核模块中。该项目在Linux内核中实现了基于IP的数据请求负载均衡调度方案,其体系结构如图1所示,终端互联网用户从外部访问公司的外部负载均衡服务器,终端用户的Web请求会发送给LVS调度器,调度器根据自己预设的算法决定将该请求发送给后端的某台Web服务器,比如,轮询算法可以将外部的请求平均分发给后端的所有服务器,终端用户访问LVS调度器虽然会被转发到后端真实的服务器,但如果真实服务器连接的是相同的存储,提供的服务也是相同的服务,最终用户不管是访问哪台真实服务器,得到的服务内容都是一样的,整个集群对用户而言都是透明的。
内核集成,阿里的四层SLB(Server Load Balance)是基于LVS+keepalived实现.
整个SLB系统由3部分构成:
四层负载均衡 采用开源软件LVS (linux virtual server),并根据云计算需求对其进行了定制化;该技术已经在阿里巴巴内部业务全面上线应用2年;
七层负载均衡和控制 采用开源软件Tengine;该技术已经在阿里巴巴内部业务全面上线应用3年多;
控制系统 用于配置和监控负载均衡系统;
2、LVS如何工作
LVS根据请求报文的目标IP和目标协议及端口将其调度转发至某RS,根据调度算法来挑选RS。LVS是内核级功能,工作在INPUT链的位置,将发往INPUT的流量进行“处理”
VS:Virtual Server,Director Server(DS), Dispatcher(调度器),Load Balancer(lvs服务器)
RS:Real Server(lvs), upstream server(nginx), backend server(haproxy)(真实服务器)
CIP:Client IP
VIP:Virtual serve IP VS外网的IP
DIP:Director IP VS内网的IP
RIP:Real server IP (真实IP)
二、LVS工作模式
LVS的工作模式:
-
LVS-NAT:net address translate 修改请求报文的目标IP,多目标IP的DNAT
-
LVS-DR:direct routing 操纵封装新的MAC地址(直接路由)
-
LVS-TUN:隧道模式
1、LVS-NAT
本质是多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某处的RS的RIP和PORT实现转发
(1)RIP和DIP应在同一个IP网络,且应使用私网地址;RS的网关要指向DIP
(2)请求报文和响应报文都必须经由Director转发,Director易于成为系统瓶颈
(3)支持端口映射,可修改请求报文的目标PORT
(4)VS必须是Linux系统,RS可以是任意OS系统
2、LVS-TUN
(1)RIP和DIP可以不处于同一物理网络中,RS的网关一般不能指向DIP,且RIP可以和公网通信。也就是说集群节点可以跨互联网实现。DIP, VIP, RIP可以是公网地址。
(2)RealServer的通道接口上需要配置VIP地址,以便接收DIP转发过来的数据包,以及作为响应的报文源IP。
(3)DIP转发给RealServer时需要借助隧道,隧道外层的IP头部的源IP是DIP,目标IP是RIP,而RealServer响应给客户端的IP头部是根据隧道内层的IP头分析得到的,源IP是VIP,目标IP是CIP
(4)请求报文要经由Director,但响应不经由Director,响应由RealServer自己完成
(5)不支持端口映射
(6)RS的OS须支持隧道功能
3、LVS-DR
(1)采用半开放式的网络结构,与 TUN模式的结构类似,但各节点并不是分散在各地,而是与调度器位于同一个物理网络。
(2)负载调度器与各节点服务器通过本地网络连接,不需要建立专用的 IP 隧道
(3)直接路由,LVS默认模式,应用最广泛,通过请求报文重新封装一个MAC首部进行转发,
(4)源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;
(5)源IP/PORT,以及目标IP/PORT均保持不变
三、LVS的使用
1、LVS负载均衡调度算法
(1).轮询调度
轮询调度(Round Robin 简称'RR')算法就是按依次循环的方式将请求调度到不同的服务器上,该算法最大的特点就是实现简单。轮询算法假设所有的服务器处理请求的能力都一样的,调度器会将所有的请求平均分配给每个真实服务器。
(2).加权轮询调度
加权轮询(Weight Round Robin 简称'WRR')算法主要是对轮询算法的一种优化与补充,LVS会考虑每台服务器的性能,并给每台服务器添加一个权值,如果服务器A的权值为1,服务器B的权值为2,则调度器调度到服务器B的请求会是服务器A的两倍。权值越高的服务器,处理的请求越多。
(3).最小连接调度
最小连接调度(Least Connections 简称'LC')算法是把新的连接请求分配到当前连接数最小的服务器。最小连接调度是一种动态的调度算法,它通过服务器当前活跃的连接数来估计服务器的情况。调度器需要记录各个服务器已建立连接的数目,当一个请求被调度到某台服务器,其连接数加1;当连接中断或者超时,其连接数减1。
(4).加权最小连接调度
加权最少连接(Weight Least Connections 简称'WLC')算法是最小连接调度的超集,各个服务器相应的权值表示其处理性能。服务器的缺省权值为1,系统管理员可以动态地设置服务器的权值。加权最小连接调度在调度新连接时尽可能使服务器的已建立连接数和其权值成比例。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
2、ipvsadm工具选项
选项 解释
-A 添加虚拟服务器
-D 删除整个虚拟服务器
-s 指定负载调度算法(轮询:rr、加权轮询:wrr、最少连接:lc、加权最少连接:wlc)
-a 表示添加真实服务器(节点服务器)
-a 表示添加真实服务器(节点服务器)
-d 删除某一个节点
-t 指定VIP地址及TCP端口
-r 指定RIP地址及TCP端口
-m 表示使用NAT群集模式
-g 表示使用DR
-i 表示使用TUN模式
-w 设置权重(权重为0时表示暂停节点)
-p 60 表示保持长连接60秒
-l 列表产看LVS虚拟服务器(默认为查看所有)
-n 以数字形式显示地址、端口等信息,常与"-"选项组合使用。ipvsadm -ln
四、NAT模式LVS负载均衡部署
负载调度器:配置双网卡 内网:192.168.116.22(ens33) 外网:192.168.100.100(ens36)
二台WEB服务器(搭载http)集群池:192.168.116.23、192.168.116.120
一台NFS共享服务器:192.168.116.111一台windows客户端:192.168.100.42
1、LVS-NAT的NFS共享服务器
NFS具体配置可以看我的博客
https://blog.csdn.net/m0_71518373/article/details/125903736?spm=1001.2014.3001.5502
在NFS服务器上创建共享目录分别挂载给两台web服务器,然后在里面创建两个目录,分别创建index.html 文件并写入内容。
cd /opt/
mkdir 23 120
echo "this is server 192.168.116.23">/opt/23/index.html
echo "this is server 192.168.116.120">/opt/120/index.html
3、LVS-NAT负载调度器
准备工具和网卡设备
#安装ipvsadm
yum install -y ipvsadm*#添加一块网卡,配置网卡,重启网络
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens36#去掉网关、UUID、修改ens36的IP为192.168.100.100
vim ifcfg-ens36
vim ifcfg-ens33
#去掉网关systemctl restart network#打开路由转发功能
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p
ens33:192.168.116.22
ens36:192.168.100.100
添加的路由规则
#加载LVS内核模块
modprobe ip_vs
cat /proc/net/ip_vs#开启ipvsadm服务
ipvsadm-save >/etc/sysconfig/ipvsadm
systemctl start ipvsadm.service#清空策略
ipvsadm -C#指定IP地址 外网的入口 -s rr 轮询
ipvsadm -A -t 192.168.100.100:80 -s rr#先指定虚拟服务器再添加真实服务器地址,-r:真实服务器地址 -m指定nat模式
ipvsadm -a -t 192.168.100.100:80 -r 192.168.116.23:80 -m
ipvsadm -a -t 192.168.100.100:80 -r 192.168.116.120:80 -m#开启服务
ipvsadm#查看策略
ipvsadm -ln
配置LVS,确保前面的ipvsadm工具安装
#加载LVS内核模块
modprobe ip_vs
cat /proc/net/ip_vs#开启ipvsadm服务
ipvsadm-save >/etc/sysconfig/ipvsadm
systemctl start ipvsadm.service#清空策略 查看策略
ipvsadm -C ipvsadm -ln#指定IP地址 外网的入口 -s rr 轮询
ipvsadm -A -t 192.168.100.100:80 -s rr#先指定虚拟服务器再添加真实服务器地址,-r:真实服务器地址 -m指定nat模式
ipvsadm -a -t 10.0.0.10:80 -r 192.168.159.231:80 -m
ipvsadm -a -t 10.0.0.10:80 -r 192.168.159.235:80 -m#开启服务
ipvsadm-save >/etc/sysconfig/ipvsadm
systemctl start ipvsadm
systemctl status ipvsadm
服务状态:
这里在LVS机上设置策略时需要注意,被设置的机器http服务一定要先开启,否则会设置策略失败,报错:service not defined
3、LVS-NAT节点服务器
23服务器
showmount -e 192.168.116.111#挂载nfs目录
vim /etc/fstab
192.168.116.111:/opt/23/ /var/www/html/ nfs defaults,_netdev 0 0
mount -a#指定网关到192.168.116.22(LVS)
vim /etc/sysconfig/network-scripts/ifcfg-ens33
GATEWAY=192.168.116.22#重启网络服务
systemctl restart network
120服务器
showmount -e 192.168.116.111#挂载nfs目录
vim /etc/fstab
192.168.116.111:/opt/120/ /var/www/html/ nfs defaults,_netdev 0 0
mount -a#指定网关到192.168.116.22(LVS)
vim /etc/sysconfig/network-scripts/ifcfg-ens33
GATEWAY=192.168.116.22#重启网络服务
systemctl restart network
4、LVS-NAT客户机测试
打开客户机,设置windows客户机的ip:192.168.100.42,网关ip为192.168.100.100(LVS)
打开浏览器,搜索192.168.100.100
五、DR模式LVS负载均衡部署
1、LVS-DR的特点
Director Server 和 Real Server 必须在同一个物理网络中。
Real Server 可以使用私有地址,也可以使用公网地址。如果使用公网地址,可以通过 互联网对 RIP 进行直接访问。
所有的请求报文经由 Director Server,但回复响应报文不能经过 Director Server。
Real Server 的网关不允许指向 Director Server IP,即不允许数据包经过 Director S erver。
Real Server 上的 lo 接口配置 VIP 的 IP 地址。
2、部署
LVS-DR 服务器:192.168.116.22
web 服务器1:192.168.116.23
web 服务器2:192.168.116.120
nfs 服务器:192.168.116.111
vip(虚拟回环):192.168.116.21
客户端:192.168.100.42
3、LVS-DR的nfs服务器
cd /opt/
mkdir 23 120
echo "this is server 192.168.116.23">/opt/23/index.html
echo "this is server 192.168.116.120 “>/opt/120/index.html
如上文配置和挂载LVS-NAT的nfs服务器,这里配置LVS-DR略过此过程
4、LVS-DR节点服务器
192.168.116.23
挂载nfs目录到/var/www/html
添加回环网卡
cd /etc/sysconfig/network-scripts/cp ifcfg-lo ./ifcfg-lo:0vim ifcfg-lo:0[root@ljpbak network-scripts]# vim ifcfg-lo:0
DEVICE=lo
IPADDR=192.168.116.21
NETMASK=255.255.255.0
NETWORK=127.0.0.0
# If you're having problems with gated making 127.0.0.0/8 a martian,
# you can change this to something else (255.255.255.255, for example)
#BROADCAST=127.255.255.255
ONBOOT=yes
#NAME=loopback#启动网卡
ifup lo:0#重启网络
systemctl restart network#设置路由
route add -host 192.168.116.21 dev lo:0
route -n#添加系统只响应目的IP为本地IP的ARP请求系统不使用原地址来设置ARP请求的
源地址,而是物理mac地址上的IP
vim /etc/sysctl.confnet.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2sysctl -p
192.168.116.120
挂载nfs目录到/var/www/html
添加回环网卡
cd /etc/sysconfig/network-scripts/cp ifcfg-lo ./ifcfg-lo:0vim ifcfg-lo:0[root@ljpbak network-scripts]# vim ifcfg-lo:0
DEVICE=lo
IPADDR=192.168.116.21
NETMASK=255.255.255.0
NETWORK=127.0.0.0
# If you're having problems with gated making 127.0.0.0/8 a martian,
# you can change this to something else (255.255.255.255, for example)
#BROADCAST=127.255.255.255
ONBOOT=yes
#NAME=loopback#启动网卡
ifup lo:0#重启网络
systemctl restart network#设置路由
route add -host 192.168.116.21 dev lo:0
route -n#添加系统只响应目的IP为本地IP的ARP请求系统不使用原地址来设置ARP请求的
源地址,而是物理mac地址上的IP
vim /etc/sysctl.confnet.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2sysctl -p
6、LVS-DR负载调度器
#对于 DR 群集模式来说,由于 LVS 负载调度器和各节点需要共用 VIP 地址,
应该关闭 Linux 内核的重定向参数响应服务器不是一台路由器,那么它不会发
送重定向,所以可以关闭该功能vi /etc/sysctl.conf
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0#刷新配置
sysctl -p
配置虚拟IP地址
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens33:0
vim ifcfg-ens33:0#删除UUID,dns与网关,注意子网
NAME=ens33:0
DEVICE=ens33:0
IPADDR=192.168.116.21
NETMASK=255.255.255.255#重启网络服务、启动网卡
ifup ifcfg-ens33:0
systemctl restart network
ipvsadm工具管理
#加载模块
modprobe ip_vs
cat /proc/net/ip_vs#清空ipvsadm,并做策略
ipvsadm -C
ipvsadm -A -t 192.168.116.21:80 -s rr
ipvsadm -a -t 192.168.116.21:80 -r 192.168.116.120:80 -g
ipvsadm -a -t 192.168.116.21:80 -r 192.168.116.23:80 -g#保存设置
ipvsadm
ipvsadm -ln
ipvsadm-save >/etc/sysconfig/ipvsadm
systemctl start ipvsadm.service