一,LVS组件
ipvs:工作在内核空间的一段代码,是真正实现调度的代码。
ipvsadm:工作在用户空间,用于编写框架规则,定义谁是集群服务,谁是后端服务器。
二,LVS算法
静态算法
- 轮询算法(rr):按顺序将请求发送给后端服务器,循环往复。
缺点:无法考虑服务器的性能,导致负载不均
- 加权轮询算法·(wrr):在轮询基础上赋予权重,权重高的获得更多的请求
缺点:无法动态感知服务器变化,权重需要人为干预
- 最小连接算法(lc):将新的请求分给当前连接数最少的服务器。
缺点:无法考虑服务器性能差异
- 加权最小连接算法(wlc):将最小连接算法赋予权重,将请求分配给(连接数/权重)最小的服务器
动态算法
- 源地址哈希(sh):根据客户端源ip的哈希值固定分配到某个固定的后台服务器。
缺点:可能会导致流量分配不均,来自同一台路由器的请求会都会被分发到同一台服务器。
- 目的地址哈希(dh):根据目标地址的hash值分配请求。
缺点:与sh类似,也可能会导致流量的分配不均。
- 最短预期延迟(sed):选择(当前连接数+1/权重)最小的服务器分配资源。
缺点:比WLC更加精细,但计算较为复杂,开销大。
- 永不排队(nq):再sed基础上,有空闲服务器则分配给空闲服务器,没有则使用sed算法
缺点:可能会导致服务其的频繁切换
三,LVS三层结构:
负载调度器:位于后端服务器与客户之间,负责将客户的请求流量按照调度算法转发到后端服务器
服务器池:一组真实工作的后端服务器,可作为web访问使用。
共享存储:为服务器提供一个共享存储区,使得整个服务器拥有相同的内容,避免新的流量访问到不同服务器时,出现存储错误。
四,LVS专业术语
RS:后端真实的服务器
DS:前端负载均衡器节点
DIP:用于和内部主机通信的ip
CIP:前端客户端ip
RIP:后端真实服务器ip
VIP:向外部直接暴露,用于用户请求的ip
五,LVS工作模式
NAT模式:
工作原理:
- 前端流量到达负载调度器,流量会首先到达内核层PREROUTING链,此时的源ip为cip,目标ip为vip。
- PREROUTING发现目标ip是本主机ip,就会将流量给到input链。
- ipvs发现对比数据包请求的服务是否为集群服务,如果是,就将数据包做修改,源ip为cip,目标ip改为rip,同时将流量给到POSTOUTING链,POSTOUTING将流量给到后端服务器。
- 后端服务器收到请求后,发现数据包ip为本主机IP,于是进行响应报文构建,源ip为rip,目标ip为cip。
- 流量在到达调度器时,将报文进行修改,目标ip为cip,源ip为vip,然后发给客户端主机。
实验环境:
一台客户机,网卡nat模式,ip:192.168.79.134/24,网关192.168.79.136
一台调度器,双网卡。nat模式,ip:192.168.79/136。仅主机模式,ip:192.168.80.2
两台后端服务器,仅主机模式,ip1:192.168.80.3/24,ip2:192.168.80.4/24。网关都为80.2
配置:
客户端:
chmod 600 ens160.nmconnection---给与文件权限
nmcli connection reload------重新加载配置文件
nmcliconnection up <id=>-----激活网卡生效
调度器:
1,网络配置
nat网卡:
仅主机网卡:
chmod 600 ens160.nmconnection---给与文件权限
nmcli connection reload------重新加载配置文件
nmcliconnection up <id=>-----激活网卡生
在 /etc/sysctl.conf文件下添加net.ipv4.ip_forward=1----内核转发
2,调度器配置
下载ipvsadm软件,编写规则。
server1:
chmod 600 ens160.nmconnection---给与文件权限
nmcli connection reload------重新加载配置文件
nmcliconnection up <id=>-----激活网卡生
配置nginx作为web网页访问
server2:
chmod 600 ens160.nmconnection---给与文件权限
nmcli connection reload------重新加载配置文件
nmcliconnection up <id=>-----激活网卡生
配置nginx作为网页访问
利用客户进行访问:

DR模式:
工作原理:
- 用户流量到负载调度器,流量首先会到内核层PREROUTING链,此时源ip为cip,目标IP为vip
- PREROUTING链查看数据包发现目标ip是本主机ip,于是将流量转发到input链。
- ipvs对比数据包查看请求是否找的是集群服务,如果是就将数据包的源MAC改为dip的MAC,目标ip改为rip的mac然后将流量发送到POSTOUTING链。
- DS与RS处于同一网段中,通过二层直接进行转发。
- 后端服务器收到请求后构建响应报文,源ip为vip,目标ip为cip通过lo接口向外发出
实验环境:
一台客户机:nat模式IP:192.168.79.134/24,网关192.168.79.136
一台路由器(双网卡):nat模式ip:192.168.79.136/24,仅主机模式ip:192.168.80.2/24
一台lvs:仅主机模式IP:192.168.80.5/24,网关192.168.80.2
server1:仅主机模式IP:192.168.80.3/24,网关192.168.80.2
server2:仅主机模式IP:192.168.80.4/24,网关192.168.80.2
配置:
网络配置与NAT工作模式类似,同时还要在lvs调度器,server1和server2上分别绑定vip
注:vip要与后端服务器在同一网段且未被使用的ip,同时vip如果绑定在lo接口上要使用32位掩码
以lvs为例,server1与server2相同
server1和server2解决vip响应
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
客户端测试:

tunnel模式:
- 客户端发送请求数据包,包内有源IP+vip+dport
- 到达vs调度器后对客户端发送过来的数据包重新封装添加IP报文头,新添加的IP报文头中包含 TUNSRCIP(DIP)+TUNDESTIP(RSIP1)并发送到RS1
- RS收到VS调度器发送过来的数据包做出响应,生成的响应报文中包含SRCIP(VIP)+DSTIP(CIP) +port,响应数据包通过网络直接回传给client
fullnat模式:
- VIP是公网地址,RIP和DIP是私网地址,且通常不在同一IP网络;因此,RIP的网关一般不会指向DIP
- RS收到的请求报文源地址是DIP,因此,只需响应给DIP;但Director还要将其发往Client
- 请求和响应报文都经由Director
六,防火墙解决轮询调度
当web服务开启多个端口的时候,默认轮询是分开调度的,这样就会出现调度错乱。
例如:web服务开启80和8080端口,当第一次访问80端口时会调度到server1上,当第二次访问8080端口时还会被调度到server1上,这样就会出现调度错误。通过在防火墙添加标签可以来解决这个问题。
**配置:**以nat工作模式为例:
1.两个server后端服务器都开启80和8080端口
2.调度器:
iptables -t mangle -A PREROUTING -d 192.168.79.136 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 666
ipvsadm -A -f 666 192.168.79.136 -s rr
ipvsadm -a -f 666 -r 192.168.80.3 -m
ipvsadm -a -f 666 -r 192.168.80.4 -m
3.客户端访问:
