LVS负载均衡

LVS是Linux Virtual Server的简称,是一种高性能、高可用的服务器集群系统。它通过NAT、TUN和DR三种工作模式实现负载均衡,适用于多服务器环境。LVS支持10种调度算法,如轮询、最少连接等。本文详细介绍了LVS的工作原理、模式和调度算法,并提供了实战案例,演示了如何搭建HTTP负载均衡集群。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

LVS负载均衡

一、lvs是什么?

LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。在linux内存2.6中,它已经成为内核的一部分,在此之前的内核版本则需要重新编译内核。

二、lvs的作用

LVS主要用于多服务器的负载均衡。它工作在传输层,可以实现高性能,高可用的服务器集群技术。
它廉价,可把许多低性能的服务器组合在一起形成一个超级服务器。
它易用,配置非常简单,且有多种负载均衡的方法。它稳定可靠,即使在集群的服务器中某台服务器无法正常工作,也不影响整体效果。
另外可扩展性也非常好。

因为lvs工作在传输层,所以相对于其他的负载均衡的解决办法(DNS域名轮流解析、应用层负载的调度、客户端的调度等,它的效率是非常高的)

LVS的通过控制IP来实现负载均衡。IPVS是其具体的实现模块。

三、lvs三种工作模式

NAT模式image-1664190859701

  • NAT(network address translation) 网络地址转换,其主要原理是修改数据报头,使得位于企业内部的私有ip地址可以访问外王,以及外部用户可以访问位于公司内部的私有的ip主机。

  • 工作过程:

    ​ (1):用户通过互联网DNS服务器解析到公司负载均衡设备上的外网地址,相对于真实服务器而言,LVS外网ip又称为vip,用户通过访问vip,即可连接后端的真实服务器,而此时用户对这一切都是不可知的,用户认为自己还在访问真实的后端服务器,也不知道自己访问的vip只是一个调度器。

    ​ (2):用户将请求发送至调度器上,此时LVS根据算法选择一个后端的真实服务器,将数据请求包转发给真实服务器,并在转发之前LVS会修改数据包中的目标地址以及目标端口,此时修改为真实的服务器ip地址

    ​ (3):真实的服务器将响应的数据包返回给LVS调度器,调度器在响应数据包后会将源地址和源端口修改为vip及调度器相应端口,修改完成后,由调度器响应数据包发送给终端

  • LVS调度器中有一个连接Hash表,该表会记录连接请求及其转发信息,当同一个连接下一个数据包发送给调度器时,该Hash’表可以直接找到之前连接的记录,并根据记录信息选出相同真实服务器及其端口信息。

  • NAT的优点是服务器可以运行在任何支持TCP/IP的操作系统,他只需要在调度器上配置一个ip 服务器组可以用私有的ip地址。

  • NAT的缺点是伸缩能力有限,当服务器节点数目上升到20时,调度器本身有可能成为系统的新瓶颈,因为请求和响应的报文都需要经过调度器。

TUN模式

image-1664191012323

  • LVS(NAT)模式的集群环境中,所有数据包的请求的回应的哦欧需要经过调度器处理,但是在TUN模式中,将NAT模式中的问题有所解决。因为数据包的请求包往往远远小于响应数据包的大小。因为响应数据包中有包含客户需要的具体数据所以,TUN的原理就是将请求与响应数据分离。,让调度器仅仅处理数据请求,让真实的服务器响应数据包直接返回给客户。
  • IP(隧道)是一种数据包分装技术,他可以经原始的数据包分装并添加新的包头(内容包括新的源地址及端口、目标地址及端口),从而实现将一个目标为调度器的vip地址的数据包分装,通过隧道转发给真实的后端服务器,通过将客户端发往调度器的原始数据包分装,并在其基础上添加新的数据包头(修改目标地址为调度器选择出来的真实服务的ip地址以及对应端口),lLVS(Tun)模式要求真实的服务器可以与外部网络连接,真实服务器在受到请求数据包后直接给客户端返回响应数据。
  • LVS(Tun)技术对服务器有要求,即所有服务器必须支持"IP Tunneling"或者IP Encapsulation”协议。目前,VS/TUN 的后端服务器主要运行 Linux 操作系统。

DR模式

image-1664191144612

  • 在LVS(TUN)模式中,需要LVS调度器与真实的服务器之间创建隧道连接,这样就会增加服务器的负担。DR模式也叫路由模式,该模式中LVS依然仅承担数据的请求以及根据算法调度出合理的后端服务器,最终由后端真实服务器负责响应数据包发送返回给客户端。与隧道模式不同的是,DR模式要求调度器与后端服务器必须在统一个局域网内u,VIP地址需要在调度器与后端所有服务器之间共享,因为最终的真实服务器会给客户端回应数据包时需要设置源IP为VIP,目标IP为客户端IP,这样客户端访问的时调度器VIP地址,回应的源地址也是VIP,这样客户端是感觉不到后端服务器的存在。由于多台计算机都设置了同样的VIP地址,所以在直接路由模式中要求调度器的VIP是对外可见的,客户端将请求数据包发送到调度器主机,而所有的真实服务器的VIP必须配置在Non-ARP的网络上ARP是一个协议。调度器根据算法在选出真实的服务器后,在不修改数据报文的情况下,将数据帧的MAC地址修改为选出的真实的MAC地址,通过交换机将该数据帧发给真实的服务器。

四、LVS的10种调度算法

  • 1 静态算法:

    • (1) rr(round robin):轮询调度算法:
      轮询调度算法的原理就是依次将用户的访问请求,平均的分配到每一台web服务节点上,从1开始,到最后一台服务器节点结束,然后在开始新一轮的循环,这种算法简单,但是没有考虑到每台节点服务器的具体性能
    • (2) wrr(weight):权重调度算法
      由于每台服务器的性能会高低不同,wrr将会根据管理员设定的权重值来分配访问请求,权重值越大的,被分到的请求数也就越多,此种算法有效的解决了rr轮询算法的缺点
    • (3) sh(source hashing)源地址散列:
      主要实现会话绑定,解决session会话共享问题,源地址散列会根据请求的源ip地址,作为关键字,在静态分配的hash表中找出对应的服务器,若该服务器没有超过负荷,就将请求分配到该服务器
    • (4) dh(destination hashing)目标地址散列,把同一个ip地址的请求,发送给同一个server
      目标地址散列调度算法是针对目标ip地址的负载均衡,是一种静态映射算法,把目标ip地址作为关键字,在静态分配的hash表中找到对应的服务器,若该服务器可用并没有超过负荷,则将请求发送到该服务器
  • 2 动态调度算法:

    • (1) LC(least connection)最少连接:
      当有用户发起访问请求时,lc算法将会把请求分配到集群中连接数最少的服务器上
    • (2) wlc(weight least connection scheduling)加权最少连接:
      加权最少连接算法是最少连接的升级版,各个服务器用想应的权重值表示其处理连接的性能,默认权重值为1,加权最少连接调度在调度访问请求时,会尽量使服务器的已建立连接和权重值成比例
      也就是活动的连接数除以权重,谁小,挑谁
    • (3) sed(shortest expected)最短延迟调度:
      在wlc基础上进行改进,不在考虑非活动状态,把当前处于活动状态的数目+1,数目最小的,则接受下次访问请求,+1的目的是为了考虑加权的时候,非活动链接过多,当权限过大,会导致非空闲的节点一直处于无连接状态
    • (4) nq(nerver queue)永不排队,改进的sed
      无需队列,如果有rs节点的连接数为0,那么直接将访问请求分配过去,不需要进行sed运算
    • (5) LBLC(locality based leastconnection)基于局部性的最少连接
      此算法是根据请求报文的目标ip地址的负载均衡调度,目前主要用于cache集群系统,因为cache集群中的客户请求报文的目标ip地址是变化的,这里假设任何后端服务器都可以处理任何请求,算法的设计目标在服务器的负载剧本平衡的请求下,将相同的目标ip地址的请求调度到同一个服务器,来提高整个web服务的访问局部性和主存cache的命中率,从而调整整个集群系统的处理能力
      基于局部性的最少连接调度算法根据请求的目标ip地址找出该目标地址最近使用的rs,若该rs可用,将发送请求,若该服务器不可用,则用最少连接的原则选出一台可用服务器来进行匹配
    • (6) LBLCR(Locality-Based Least Connections withReplication)带复制的基于局部性最少连接,此种算法是针对目标ip地址的负载均衡,该算法根据请求的目标地址ip找出该地址对应的服务组,按最少连接的原则从服务组中选出一台服务器,若服务器没有超载,则发送请求到该服务器,若该服务器超载或者不可用,则按照最小连接的原则从这个集群中选出一台服务器,将该服务器添加到服务组中,在将请求发送到该服务器,同时当该服务器组中有一段时间没有被修改,将最忙的服务器从组中剔除,以降低复制的程度

五、LVS-实战:搭建HTTP负载均衡集群

1.搭建搭建lvs-nat模式的http负载集群

环境需求:

主机名主机作用IP/DIPVIP
DRLVS服务器(DR)192.168.133.148172.25.0.100
RS1apache服务器1(RS)192.168.133.150网关为DR网关
RS2apache服务器2(RS)192.168.133.154网关为DR网关
client客户端 (用于测试)192.168.133.155客户端不需要VIP

RS1配置

//关闭selinux和防火墙
[root@RS1 ~]# sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/selinux/config
[root@RS1 ~]# setenforce 0
[root@RS1 ~]# systemctl disable --now firewalld.service 
 
//配置ip
[root@RS1 ~]# nmcli connection modify ens33 ipv4.addresses 192.168.133.150/24 ipv4.gateway 172.25.0.100 ipv4.dns 114.114.114.114 ipv4.method manual autoconnect yes 
[root@RS1 ~]# nmcli connection up ens33 
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/2)
 
//配置好yum源,然后安装httpd,然后配置好网站首页
[root@RS1 ~]# dnf -y install httpd
[root@RS1 ~]# echo "RS1" > /var/www/html/index.html
[root@RS1 ~]# systemctl enable --now httpd

RS2配置

//关闭selinux和防火墙
[root@RS2 ~]# sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/selinux/config
[root@RS2 ~]# setenforce 0
[root@RS2 ~]# systemctl disable --now firewalld.service 
 
//配置ip
[root@RS2 ~]# nmcli connection modify ens33 ipv4.addresses 192.168.133.154/24 ipv4.gateway 172.25.0.100 ipv4.dns 114.114.114.114 ipv4.method manual autoconnect yes 
[root@RS2 ~]# nmcli connection up ens33 
 
//配置好yum源,然后安装httpd服务,然后配置好网站首页
[root@RS2 ~]# dnf -y install httpd
[root@RS2 ~]# echo "RS2" > /var/www/html/index.html
[root@RS2 ~]# systemctl enable --now httpd

DR配置

//关闭selinux和防火墙
[root@DR ~]# systemctl disable --now firewalld.service 
[root@DR ~]# setenforce 0
[root@DR ~]# sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/selinux/config
 
//再给DR,添加一块网卡,我这里添加的是仅主机模式网卡,以便区分,网段为:172.25.0.0
 
//设置网卡ip,172.25.0.100
[root@DR ~]# nmcli connection show 
NAME                UUID                                  TYPE      DEVICE 
ens33               2d8ea51b-2f19-4728-b52b-e396e30a4c3a  ethernet  ens33  
Wired connection 1  40dc9fe4-4f0e-30f8-898e-1c2d8422513d  ethernet  ens37  
[root@DR ~]# nmcli connection modify Wired\ connection\ 1 con-name ens37 ipv4.addresses 172.25.0.100/24 ipv4.dns 114.114.114.114 ipv4.method manual autoconnect yes
[root@DR ~]# nmcli connection up ens37 
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/3)
[root@DR ~]# ip a |grep ens37
3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    inet 172.25.0.100/24 brd 172.25.0.255 scope global noprefixroute ens37
 
//开启转发功能
[root@DR ~]# vim /etc/sysctl.conf 
net.ipv4.ip_forward = 1
 
[root@DR ~]# sysctl -p
net.ipv4.ip_forward = 1
 
//配置好好两台web服务器后,最后再安装ipvsadm并添加规则
[root@DR ~]# dnf -y install ipvsadm
[root@DR ~]# ipvsadm -A -t 172.25.0.100:80 -s rr
[root@DR ~]# ipvsadm -a -t 172.25.0.100:80 -r 192.168.133.150:80 -m
[root@DR ~]# ipvsadm -a -t 172.25.0.100:80 -r 192.168.133.154:80 -m
[root@DR ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.0.100:80 rr
  -> 192.168.133.150:80           Masq    1      0          0         
  -> 192.168.133.154:80           Masq    1      0          0   
[root@DR ~]# ipvsadm -Sn > /etc/sysconfig/ipvsadm
[root@DR ~]# systemctl restart ipvsadm.service 
[root@DR ~]# systemctl enable ipvsadm.service 

客户端进行测试,因为选择的是轮询(rr)

[root@client ~]# curl http://172.25.0.100
RS2
[root@client ~]# curl http://172.25.0.100
RS1
[root@client ~]# curl http://172.25.0.100
RS2
[root@client ~]# curl http://172.25.0.100
RS1

2.搭建搭建lvs-dr模式的http负载集群

环境需求:

主机名主机作用IP/DIPVIP
DRLVS服务器(DR)192.168.133.148lo:192.168.202.200
RS1apache服务器1(RS)192.168.133.150lo:192.168.202.200
RS2apache服务器2(RS)192.168.133.154lo:192.168.202.200
client客户端 (用于测试)192.168.133.155客户端不需要VIP

RS1配置

//关闭selinux和防火墙
[root@RS1 ~]# sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/selinux/config
[root@RS1 ~]# setenforce 0
[root@RS1 ~]# systemctl disable --now firewalld.service 
 
//RS1上配置内核参数
[root@RS1 ~]# vim /etc/sysctl.conf 
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1	(下面两条是为了保险,其实只需要关闭lo网卡的对外公布apr即可)
net.ipv4.conf.all.arp_announce = 2
 
[root@RS1 ~]# sysctl -p
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
 
//配置VIP
[root@RS1 ~]# dnf -y install net-tools (先安装ifconfig命令)
[root@RS1 ~]# ifconfig lo 192.168.202.200/32 broadcast 192.168.202.200 netmask 255.255.255.255 up
 
//永久生效lo网卡配置
[root@RS1 ~]# echo "ifconfig lo 192.168.202.200/32 broadcast 192.168.202.200 netmask 255.255.255.255 up" >> /etc/rc.d/rc.local 
[root@RS1 ~]# chmod +x /etc/rc.d/rc.local 
 
//添加路由
[root@RS1 ~]# route add -host 192.168.202.200/32 dev lo 
 
//安装httpd服务,然后配置好网站首页
[root@RS1 ~]# dnf -y install httpd
[root@RS1 ~]# echo "RS1" > /var/www/html/index.html
[root@RS1 ~]# systemctl enable --now httpd

RS2配置

//关闭selinux和防火墙
[root@RS2 ~]# sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/selinux/config
[root@RS2 ~]# setenforce 0
[root@RS2 ~]# systemctl disable --now firewalld.service 
 
//RS2上配置内核参数
[root@RS2 ~]# vim /etc/sysctl.conf 
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
 
[root@RS2 ~]# sysctl -p
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
 
//配置VIP
[root@RS2 ~]# dnf -y install net-tools
[root@RS2 ~]# ifconfig lo 192.168.202.200/32 broadcast 192.168.202.200 netmask 255.255.255.255 up
 
//永久生效lo网卡配置
[root@RS2 ~]# echo "ifconfig lo 192.168.202.200/32 broadcast 192.168.202.200 netmask 255.255.255.255 up" >> /etc/rc.d/rc.local 
[root@RS2 ~]# chmod +x /etc/rc.d/rc.local 
 
 
//添加路由
[root@RS2 ~]# route add -host 192.168.202.200/32 dev lo 
 
//安装httpd服务,然后配置好网站首页
[root@RS2 ~]# dnf -y install httpd
[root@RS2 ~]# echo "RS2" > /var/www/html/index.html
[root@RS2 ~]# systemctl enable --now httpd

DR配置

//关闭selinux和防火墙
[root@DR ~]# systemctl disable --now firewalld.service 
[root@DR ~]# setenforce 0
[root@DR ~]# sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/selinux/config
 
//配置lo网卡ip
[root@DR ~]# dnf -y install net-tools (先安装ifconfig命令)
[root@DR ~]# ifconfig lo 192.168.202.200/32 broadcast 192.168.202.200 netmask 255.255.255.255 up
[root@DR ~]# ip a |grep 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 192.168.202.200/0 brd 192.168.202.200 scope global lo
 
    
//永久生效lo网卡配置
[root@DR ~]# echo "ifconfig lo 192.168.202.200/32 broadcast 192.168.202.200 netmask 255.255.255.255 up" >> /etc/rc.d/rc.local 
[root@DR ~]# chmod +x /etc/rc.d/rc.local 
 
//配置好好两台web服务器后,最后再安装ipvsadm并添加规则
[root@DR ~]# dnf -y install ipvsadm
[root@DR ~]# ipvsadm -A -t 192.168.202.200:80 -s rr
[root@DR ~]# ipvsadm -a -t 192.168.202.200:80 -r 192.168.133.150:80 -g
[root@DR ~]# ipvsadm -a -t 192.168.202.200:80 -r 192.168.133.154:80 -g
[root@DR ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.202.200:80 rr
  -> 192.168.133.150:80           Route   1      0          0         
  -> 192.168.133.154:80           Route   1      0          0   
[root@DR ~]# ipvsadm -Sn > /etc/sysconfig/ipvsadm
[root@DR ~]# systemctl restart ipvsadm.service 
[root@DR ~]# systemctl enable ipvsadm.service 

客户端进行测试,因为选择的是轮询(rr)

[root@client ~]# curl 192.168.202.200
RS1
[root@client ~]# curl 192.168.202.200
RS2
[root@client ~]# curl 192.168.202.200
RS1
[root@client ~]# curl 192.168.202.200
RS2

3.搭建搭建lvs-tun模式的http负载集群

环境需求:

主机名主机作用IP/DIPVIP
DRLVS服务器(DR)192.168.133.148tunl0:192.168.202.201
RS1apache服务器1(RS)192.168.133.150tunl0:192.168.202.201
RS2apache服务器2(RS)192.168.133.154tunl0:192.168.202.201
client客户端 (用于测试)192.168.133.155客户端不需要VIP

RS1配置

//关闭selinux和防火墙
[root@RS1 ~]# sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/selinux/config
[root@RS1 ~]# setenforce 0
[root@RS1 ~]# systemctl disable --now firewalld.service 
 
//启用ipip模块,配置VIP
[root@RS1 ~]# dnf -y install net-tools
[root@RS1 ~]# modprobe ipip 
[root@RS1 ~]# ifconfig tunl0 192.168.202.201 broadcast 192.168.202.201 netmask 255.255.255.255
[root@RS1 ~]# echo "ifconfig tunl0 192.168.202.201 broadcast 192.168.202.201 netmask 255.255.255.255" >> /etc/rc.d/rc.local 
[root@RS1 ~]# chmod +x /etc/rc.d/rc.local
 
//修改内核参数
[root@RS1 ~]# vim /etc/sysctl.conf 
net.ipv4.conf.tunl0.arp_ignore = 1
net.ipv4.conf.tunl0.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.tunl0.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0
 
[root@RS1 ~]# sysctl -p
net.ipv4.conf.tunl0.arp_ignore = 1
net.ipv4.conf.tunl0.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.tunl0.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0
 
//安装httpd服务,然后配置好网站首页
[root@RS1 ~]# dnf -y install httpd
[root@RS1 ~]# echo "RS1" > /var/www/html/index.html
[root@RS1 ~]# systemctl enable --now httpd

RS2配置

//关闭selinux和防火墙
[root@RS2 ~]# sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/selinux/config
[root@RS2 ~]# setenforce 0
[root@RS2 ~]# systemctl disable --now firewalld.service 
 
//启用ipip模块,配置VIP
[root@RS2 ~]# dnf -y install net-tools
[root@RS2 ~]# modprobe ipip 
[root@RS2 ~]# ifconfig tunl0 192.168.202.201 broadcast 192.168.202.201 netmask 255.255.255.255
[root@RS2 ~]# echo "ifconfig tunl0 192.168.202.201 broadcast 192.168.202.201 netmask 255.255.255.255" >> /etc/rc.d/rc.local 
[root@RS2 ~]# chmod +x /etc/rc.d/rc.local
 
//修改内核参数
[root@RS2 ~]# vim /etc/sysctl.conf 
net.ipv4.conf.tunl0.arp_ignore = 1
net.ipv4.conf.tunl0.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.tunl0.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0
 
[root@RS2 ~]# sysctl -p
net.ipv4.conf.tunl0.arp_ignore = 1
net.ipv4.conf.tunl0.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.tunl0.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0
 
//安装httpd服务,然后配置好网站首页
[root@RS2 ~]# dnf -y install httpd
[root@RS2 ~]# echo "RS2" > /var/www/html/index.html
[root@RS2 ~]# systemctl enable --now httpd.service 

DR配置

//关闭selinux和防火墙
[root@DR ~]# systemctl disable --now firewalld.service 
[root@DR ~]# setenforce 0
[root@DR ~]# sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/selinux/config
 
//修改内核参数,开启IP转发
[root@DR ~]# vim /etc/sysctl.conf 
net.ipv4.ip_forward = 1
 
[root@DR ~]# sysctl -p
net.ipv4.ip_forward = 1
 
//配置VIP
[root@DR ~]# dnf -y install net-tools
[root@DR ~]# ifconfig tunl0 192.168.202.201 broadcast 192.168.202.201 netmask 255.255.255.255
[root@DR ~]# ip a |grep tunl0
3: tunl0@NONE: <NOARP,UP,LOWER_UP> mtu 1480 qdisc noqueue state UNKNOWN group default qlen 1000
    inet 192.168.202.201/32 brd 192.168.202.201 scope global tunl0
    
//永久生效
[root@DR ~]# echo "ifconfig tunl0 192.168.202.201 broadcast 192.168.202.201 netmask 255.255.255.255" >> /etc/rc.d/rc.local 
[root@DR ~]# chmod +x /etc/rc.d/rc.local 
 
//配置好好两台web服务器后,最后再安装ipvsadm并添加规则
[root@DR ~]# dnf -y install ipvsadm
[root@DR ~]# ipvsadm -A -t 192.168.202.201:80 -s rr
[root@DR ~]# ipvsadm -a -t 192.168.202.201:80 -r 192.168.133.150:80 -i
[root@DR ~]# ipvsadm -a -t 192.168.202.201:80 -r 192.168.133.154:80 -i
[root@DR ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.202.201:80 rr
  -> 192.168.133.150:80           Tunnel  1      0          0         
  -> 192.168.133.154:80           Tunnel  1      0          0         
[root@DR ~]# ipvsadm -Sn > /etc/sysconfig/ipvsadm
[root@DR ~]# systemctl restart ipvsadm.service 
[root@DR ~]# systemctl enable ipvsadm.service 

客户端进行测试,因为选择的是轮询(rr)

[root@client ~]# curl http://192.168.202.201
RS2-
[root@client ~]# curl http://192.168.202.201
RS1
[root@client ~]# curl http://192.168.202.201
RS2
[root@client ~]# curl http://192.168.202.201
RS1

4.搭建搭建lvs-dr模式的https负载集群

环境需求:

主机名主机作用IP/DIPVIP
DRLVS服务器(DR)192.168.133.148lo:192.168.133.133
RS1apache服务器1(RS)192.168.133.150lo:192.168.133.133
RS2apache服务器2(RS)192.168.133.154lo:192.168.133.133
client客户端 (用于测试)192.168.133.155客户端不需要VIP

RS1配置

//关闭selinux和防火墙
[root@RS1 ~]# sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/selinux/config
[root@RS1 ~]# setenforce 0
[root@RS1 ~]# systemctl disable --now firewalld.service 
 
//RS1上配置内核参数
[root@RS1 ~]# vim /etc/sysctl.conf 
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1	
net.ipv4.conf.all.arp_announce = 2
 
[root@RS1 ~]# sysctl -p
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
 
//配置VIP
[root@RS1 ~]# dnf -y install net-tools 
[root@RS1 ~]# ifconfig lo 192.168.133.133/32 broadcast 192.168.133.133 netmask 255.255.255.255 up
 
//永久生效lo网卡配置
[root@RS1 ~]# echo "ifconfig lo 192.168.133.133/32 broadcast 192.168.133.133 netmask 255.255.255.255 up" >> /etc/rc.d/rc.local 
[root@RS1 ~]# chmod +x /etc/rc.d/rc.local 
 
//添加路由
[root@RS1 ~]# route add -host 192.168.133.133/32 dev lo 
 
//安装httpd服务,然后配置好https网站首页
[root@RS1 ~]# dnf -y install httpd mod_ssl
[root@RS1 ~]# vim /etc/httpd/conf.modules.d/00-base.conf 
LoadModule ssl_module modules/mod_ssl.so
[root@RS1 ~]# mkdir /etc/httpd/ssl
[root@RS1 ~]# cd /etc/httpd/ssl
[root@RS1 ssl]# openssl genrsa -out httpd.key 2048
Generating RSA private key, 2048 bit long modulus (2 primes)
........+++++
................................................+++++
e is 65537 (0x010001)
[root@RS1 ssl]# openssl req -new -key httpd.key -out httpd.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:cn
State or Province Name (full name) []:hb
Locality Name (eg, city) [Default City]:wh
Organization Name (eg, company) [Default Company Ltd]:rt
Organizational Unit Name (eg, section) []:alg
Common Name (eg, your name or your server's hostname) []:www.wxh.com
Email Address []:111@11.com
 
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
[root@RS1 ssl]# openssl x509 -req -days 365 -in httpd.csr -signkey httpd.key -out httpd.crt
Signature ok
subject=C = cn, ST = hb, L = wh, O = rt, OU = alg, CN = www.wxh.com, emailAddress = 111@11.com
Getting Private key
[root@RS1 ssl]# ls
httpd.crt  httpd.csr  httpd.key
[root@RS1 ssl]# vi /etc/httpd/conf.d/ssl.conf 
SSLCertificateFile /etc/httpd/ssl/httpd.crt
SSLCertificateKeyFile /etc/httpd/ssl/httpd.key
 
[root@RS1 ~]# echo "RS1" > /var/www/html/index.html
[root@RS1 ~]# systemctl enable --now httpd
 
//检查https是否可用
[root@RS1 ssl]# curl -k https://192.168.133.150
RS1
 
[root@RS1 ssl]# scp /etc/httpd/ssl/* root@192.168.133.154:/root/
root@192.168.133.154's password: 
httpd.crt                               100% 1249     1.5MB/s   00:00    
httpd.csr                               100% 1021     1.4MB/s   00:00    
httpd.key                               100% 1679     2.0MB/s   00:00   

RS2配置

//关闭selinux和防火墙
[root@RS2 ~]# sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/selinux/config
[root@RS2 ~]# setenforce 0
[root@RS2 ~]# systemctl disable --now firewalld.service 
 
//RS2上配置内核参数
[root@RS2 ~]# vim /etc/sysctl.conf 
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
 
[root@RS2 ~]# sysctl -p
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
 
//配置VIP
[root@RS2 ~]# dnf -y install net-tools
[root@RS2 ~]# ifconfig lo 192.168.133.133/32 broadcast 192.168.133.133 netmask 255.255.255.255 up
 
//永久生效lo网卡配置
[root@RS2 ~]# echo "ifconfig lo 192.168.133.133/32 broadcast 192.168.133.133 netmask 255.255.255.255 up" >> /etc/rc.d/rc.local 
[root@RS2 ~]# chmod +x /etc/rc.d/rc.local 
 
 
//添加路由
[root@RS2 ~]# route add -host 192.168.133.133/32 dev lo 
 
//安装httpd服务,然后配置好https网站首页
[root@RS2 ~]# dnf -y install httpd mod_ssl
[root@RS2 ~]# vim /etc/httpd/conf.modules.d/00-base.conf 
LoadModule ssl_module modules/mod_ssl.so
 
[root@RS2 ~]# mkdir /etc/httpd/ssl
[root@RS2 ~]# ls
anaconda-ks.cfg  httpd.crt  httpd.csr  httpd.key
[root@RS2 ~]# mv httpd.* /etc/httpd/ssl/
[root@RS2 ~]# ls /etc/httpd/ssl/
httpd.crt  httpd.csr  httpd.key
[root@RS2 ~]# vim /etc/httpd/conf.d/ssl.conf 
SSLCertificateFile /etc/httpd/ssl/httpd.crt
SSLCertificateKeyFile /etc/httpd/ssl/httpd.key
 
[root@RS2 ~]# echo "RS2" > /var/www/html/index.html
[root@RS2 ~]# systemctl enable --now httpd
 
//检查https是否可用
[root@RS2 ~]# curl -k https://192.168.133.154
RS2

DR配置

//关闭selinux和防火墙
[root@DR ~]# systemctl disable --now firewalld.service 
[root@DR ~]# setenforce 0
[root@DR ~]# sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/selinux/config
 
//配置lo网卡ip
[root@DR ~]# dnf -y install net-tools 
[root@DR ~]# ifconfig lo 192.168.202.202/32 broadcast 192.168.202.202 netmask 255.255.255.255 up
[root@DR ~]# ip a |grep 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 192.168.202.202/0 brd 192.168.202.202 scope global lo
 
//永久生效lo网卡配置
[root@DR ~]# echo "ifconfig lo 192.168.202.202/32 broadcast 192.168.202.202 netmask 255.255.255.255 up" >> /etc/rc.d/rc.local 
[root@DR ~]# chmod +x /etc/rc.d/rc.local 
 
//配置好好两台web服务器后,最后再安装ipvsadm并添加规则
[root@DR ~]# dnf -y install ipvsadm
[root@DR ~]# ipvsadm -A -t 192.168.202.202:443 -s rr
[root@DR ~]# ipvsadm -a -t 192.168.202.202:443 -r 192.168.133.150:443 -g
[root@DR ~]# ipvsadm -a -t 192.168.202.202:443 -r 192.168.133.154:443 -g
[root@DR ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.202.202:443 rr
  -> 192.168.133.150:443          Route   1      0          0         
  -> 192.168.133.154:443          Route   1      0          0     
[root@DR ~]# ipvsadm -Sn > /etc/sysconfig/ipvsadm
[root@DR ~]# systemctl restart ipvsadm.service 
[root@DR ~]# systemctl enable ipvsadm.service 

客户端进行测试,因为选择的是轮询(rr)

[root@client ~]# curl -k https://192.168.133.133
RS2-
[root@client ~]# curl -k https://192.168.133.133
RS1
[root@client ~]# curl -k https://192.168.133.133
RS2
[root@client ~]# curl -k https://192.168.133.133
RS1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值