负载均衡 lvs

1. 4层转发(L4) 与 7层转发(L7) 区别

|----|------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------|--------------------------|
| 4层转发(L4) 与 7层转发(L7) 区别 ||| |
| | 转发基于的信息 | 状态 | 常用的服务 |
| L4 | 基于网络层和传输层信息: L4转发主要依赖于网络层IP头部(源地址,目标地址,源端口,目标端口)和传输层头部(通常是TCP或UDP)中的信息来做出转发决策。 | 无状态转发: 大多数L4转发设备是无状态的,意味着它们不会维护会话状态,每个数据包都被独立地转发,而不考虑之前的数据包。这种无状态的转发机制使得L4转发设备具有高吞吐量和低延迟的优点。 | LVS,F5,nginx,haproxy |
| L7 | 基于应用层信息: L7转发深入到应用层协议中,可以解析HTTP、HTTPS等协议的头部信息,以及请求体中的内容。 | 有状态转发: L7转发通常是有状态的,转发设备需要维护连接状态,以便识别和处理完整的请求-响应周期 | nginx,haproxy |

2. LVS工作原理:

当用户向负载均衡调度器(Director Server)发起请求,调度器将请求发往至内核空间PREROUTING链首先会接收到用户请求,判断目标IP确定是本机IP,将数据包发往INPUT链,IPVS是工作在INPUT链上的,当用户请求到达INPUT时,IPVS会将用户请求和自己已定义好的集群服务进行比对,如果用户请求的就是定义的集群服务,那么此时IPVS会强行修改数据包里的目标IP地址及端口,并将新的数据包发往POSTROUTING链,POSTROUTING链接收数据包后发现目标IP地址刚好是自己的后端服务器,那么此时通过选路,将数据包最终发送给后端的服务器

组成部分:

ipvs(ip virtual server):一段代码工作在内核空间,叫ipvs,是真正生效实现调度的代码。ipvsadm:另外一段是工作在用户空间,叫ipvsadm,负责为ipvs内核框架编写规则,定义谁是集群服务,而谁是后端真实的服务器(Real Server)

3. LVS的工作模式

LVS的IP负载均衡技术是通过IPVS模块来实现的,IPVS是LVS集群系统的核心软件,它的主要作用是:安装在Director Server上,同时在Director Server上虚拟出一个IP地址,用户必须通过这个虚拟的IP地址访问服务。这个虚拟IP一般称为LVS的VIP,即Virtual IP。访问的请求首先经过VIP到达负载调度器,然后由负载调度器从Real Server列表中选取一个服务节点响应用户的请求。 当用户的请求到达负载调度器后,调度器如何将请求发送到提供服务的Real Server节点,而Real Server节点如何返回数据给用户,是IPVS实现的重点技术,IPVS实现负载均衡机制有几种,分别是NAT、DR、TUN及FULLNAT。

DS:director server,即负载均衡器,根据一定的负载均衡算法将流量分发到后端的真实服务器上
RS:real server 真实的提供服务的server,可被DS划分到一个或多个负载均衡组.
BDS:backup director server,为了保证负载均衡器的高可用衍生出的备份.
VS:vitual server,负载均衡集群对外提供的IP+Port.
VIP:VS的IP,client请求服务的DIP(destination IP address),定义在DS上,client或其网关需要有其路由
RIP: Real erver IP 真实服务器的ip地址
CIP: client ip 客户端ip地址
DIP: director ip 负载均衡本身的ip

4. NAT模式

概述:DS把客户端请求包做目标地址转换,回客户端的时候先做源地址转换

NAT(Network Address Translation)是一种外网和内网地址映射的技术。NAT模式下,LVS需要作为RS的网关,当网络包到达LVS时,LVS做目标地址转换(DNAT),将目标IP改为RS的IP。RS接收到包以后,处理完,返回响应时,源IP是RS IP,目标IP是客户端的IP,这时RS的包通过网关(LVS)中转,LVS会做源地址转换(SNAT),将包的源地址改为VIP,对于客户端只知道是LVS直接返回给它的。

5. DR模式

概述:DS转换目标MAC地址,RS的LO做VIP

LVS-DR(Direct Routing)模式是LVS负载均衡的一种实现方式,通过在前端负载均衡器和后端真实服务器之间建立虚拟IP地址和ARP代理,将请求直接路由到后端服务器上,避免了数据包的二次复制和转发,提高了系统的性能和可靠性。这种模式需要在后端服务器上配置虚拟IP地址和直接路由规则,并保证后端服务器之间的网络互通。

环境准备:RS的LO口设置VIP,RS抑制ARP解析(防止IP冲突)

DR配置流程

环境准备

|----------|----------|---------|
| 主机 | IP | 安装软件 |
| LVS | 10.0.0.5 | ipvsadm |
| VIP(无实体) | 10.0.03 | |
| WEB01 | 10.0.0.7 | nginx |
| WEB02 | 10.0.0.8 | nginx |

yum -y install ipvsadm
#软件包内容
#/etc/sysconfig/ipvsadm-config
#/usr/lib/systemd/system/ipvsadm.service
#/usr/sbin/ipvsadm           #管理lvs规则 ip_vs
#/usr/sbin/ipvsadm-restore   #恢复从文件中恢复lvs规则
#/usr/sbin/ipvsadm-save      #保存lvs规则

#00.加载ip_vs模块,
modprobe ip_vs

#01.临时手动添加vip(重启网卡失效),后面是由keepalived生成
ip addr add 10.0.0.3/24 dev eth0 label eth0:0

#02.查看lvs规则
ipvsadm -ln

#03.清空规则,要备份
ipvsadm -C

#04.设置tcp超时时间
ipvsadm --set 30 5 60   

#05.添加规则 ngx upstream
ipvsadm -A -t 10.0.0.3:80 -s wrr -p 20
#-A --add-service 创建池塘  
#-t --tcp-service tcp协议
#10.0.0.3:80 组名称
#-s scheduler 轮询算法   wrr weight 加权轮询   rr wlc
#-p persistent 会话保持时间

#06.向upsteam中添加server  
ipvsadm -a -t 10.0.0.3:80 -r 10.0.0.7:80 -g -w 1
ipvsadm -a -t 10.0.0.3:80 -r 10.0.0.8:80 -g -w 1
#-a 添加 rs服务器  
#-t tcp协议
#-r 指定rs服务器ip
#-g --gatewaying dr模式 默认的
#-w 权重

#07.查看规则状态
]# ipvsadm -ln --stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes
  -> RemoteAddress:Port
TCP  10.0.0.3:80                         0        0        0        0        0
  -> 10.0.0.7:80                         0        0        0        0        0
  -> 10.0.0.8:80                         0        0        0        0        0

#08.备份与恢复配置文件(有需要的时候操作)
ipvsadm-save -n > /root/ipvs.txt
ipvsadm-restore < /root/ipvs.txt

[root@web01 ~]# cat /etc/sysconfig/network-scripts/ifcfg-lo:1
DEVICE=lo:1
IPADDR=10.0.0.3
NETMASK=255.255.255.255
ONBOOT=yes
NAME=loopback
[root@web01 ~]# systemctl restart network
[root@web01 ~]# ip a s lo
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet 10.0.0.3/32 brd 10.0.0.3 scope global lo:1
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
#抑制arp解析
cat >>/etc/sysctl.conf<<EOF
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
EOF
sysctl -p

[root@web01 ~]# curl -H host:lvs.tom.com 10.0.0.3
lvs-01

[root@lb01 ~]# yum -y install keepalived
[root@lb01 ~]# cp /etc/keepalived/keepalived.conf{,.back}
[root@lb01 ~]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   router_id lb01 
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
      10.0.0.3/24 dev eth0 label eth0:0
    }
}

virtual_server 10.0.0.3 80 {
    delay_loop 6
    lb_algo wrr
    lb_kind DR
    persistence_timeout 20
    protocol TCP

    real_server 10.0.0.7 80 {
        weight 1
        TCP_CHECK{
          connect_timeout 8
          nb_get_retry 3
          delay_before_retry 3
          connect_port 80
        }
    }
    real_server 10.0.0.8 80 {
        weight 1
        TCP_CHECK{
          connect_timeout 8
          nb_get_retry 3
          delay_before_retry 3
          connect_port 80
        }
    }
}
[root@lb01 ~]# systemctl restart keepalived

6. TUN模式

概述:DS给数据包加上一层隧道,RS的LO做VIP

LVS-TUN(Tunneling)模式是LVS负载均衡的一种实现方式,通过在前端负载均衡器和后端真实服务器之间建立隧道连接,将客户端请求封装在隧道中传输到后端服务器上进行处理。这种模式需要在前端负载均衡器和后端服务器上配置隧道设备,并使用隧道协议进行数据传输。LVS-TUN模式适用于跨子网或跨网络的场景,可以实现灵活的负载均衡和高可用性,但会引入额外的网络开销和延迟。

IP Tunnel(ip隧道)解决DR模式下RS和DS处于同一网段的问题。ip隧道可以理解为IP in IP, 即发送方在IP头的外部再包装一个IP头,接收方先解出第一层IP头,然后再按照正常流程处理剩下的的IP数据包。

环境准备:RS的LO口设置VIP,RS抑制ARP解析(防止IP冲突)

7. 三种工作模式优缺点

|---------|---------------------------------------------------------------------------|-----------------------------------------------------------------------|---------|---------------------------------------------------------------------------|----------------------------------------------------------------------|---------|-----------------------------------------------------|----------------------------------------------------------------------|
| 模式 | 优点 | 缺点 |
| LVS-NAT | - 简单易配置,不需要对后端服务器进行额外配置 - 支持跨子网负载均衡 - 可以隐藏后端服务器的真实IP地址 | - 性能较低,数据包需要经过两次NAT转发 - 后端服务器的响应数据包需要经过前端负载均衡器再返回给客户端 - 单个NAT节点成为性能瓶颈 |
| LVS-NAT | - 简单易配置,不需要对后端服务器进行额外配置 - 支持跨子网负载均衡 - 可以隐藏后端服务器的真实IP地址 | - 性能较低,数据包需要经过两次NAT转发 - 后端服务器的响应数据包需要经过前端负载均衡器再返回给客户端 - 单个NAT节点成为性能瓶颈 | LVS-DR | - 性能高,请求直接路由到后端服务器,避免了数据包的二次复制 - 后端服务器可以直接与客户端通信,提高响应速度 - 可以支持大规模部署和高并发流量 | - 需要在后端服务器上配置虚拟IP地址和直接路由规则 - 后端服务器之间需要保证网络互通 - 不支持跨子网负载均衡 |
| LVS-NAT | - 简单易配置,不需要对后端服务器进行额外配置 - 支持跨子网负载均衡 - 可以隐藏后端服务器的真实IP地址 | - 性能较低,数据包需要经过两次NAT转发 - 后端服务器的响应数据包需要经过前端负载均衡器再返回给客户端 - 单个NAT节点成为性能瓶颈 | LVS-DR | - 性能高,请求直接路由到后端服务器,避免了数据包的二次复制 - 后端服务器可以直接与客户端通信,提高响应速度 - 可以支持大规模部署和高并发流量 | - 需要在后端服务器上配置虚拟IP地址和直接路由规则 - 后端服务器之间需要保证网络互通 - 不支持跨子网负载均衡 | LVS-TUN | - 支持跨子网和跨网络负载均衡 - 灵活配置,适用于复杂网络环境 - 可以实现灵活的负载均衡和高可用性 | - 引入额外的网络开销和延迟 - 需要在前端负载均衡器和后端服务器上配置隧道设备及协议 - 隧道连接的建立和维护需要额外的管理和资源消耗 |
| LVS-DR | - 性能高,请求直接路由到后端服务器,避免了数据包的二次复制 - 后端服务器可以直接与客户端通信,提高响应速度 - 可以支持大规模部署和高并发流量 | - 需要在后端服务器上配置虚拟IP地址和直接路由规则 - 后端服务器之间需要保证网络互通 - 不支持跨子网负载均衡 | LVS-TUN | - 支持跨子网和跨网络负载均衡 - 灵活配置,适用于复杂网络环境 - 可以实现灵活的负载均衡和高可用性 | - 引入额外的网络开销和延迟 - 需要在前端负载均衡器和后端服务器上配置隧道设备及协议 - 隧道连接的建立和维护需要额外的管理和资源消耗 |
| LVS-TUN | - 支持跨子网和跨网络负载均衡 - 灵活配置,适用于复杂网络环境 - 可以实现灵活的负载均衡和高可用性 | - 引入额外的网络开销和延迟 - 需要在前端负载均衡器和后端服务器上配置隧道设备及协议 - 隧道连接的建立和维护需要额外的管理和资源消耗 |

相关推荐
想学习java初学者10 分钟前
Docker compose部署elasticsearch(单机版)
运维·docker·容器
人类群星闪耀时37 分钟前
未来运维的发展趋势:运维领域的新技术与趋势
运维
落非42 分钟前
NFS存储基础操作
运维
Vanish_ran1 小时前
gitlab与jenkins
运维·gitlab·jenkins
朱容君1 小时前
Linux系统编程多线程之读写锁讲解
linux·开发语言
大风吹PP凉1 小时前
38配置管理工具(如Ansible、Puppet、Chef)
linux·运维·服务器·ansible·puppet
康熙38bdc2 小时前
Linux 进程间通信——共享内存
linux·运维·服务器
jwybobo20072 小时前
redis7.x源码分析:(3) dict字典
linux·redis
scoone2 小时前
ssh登陆服务器后支持Tab键命令补全
linux·shell
微刻时光2 小时前
Docker部署Nginx
运维·nginx·docker·容器·经验