LVS负载均衡+LVS-DR部署

LVS负载均衡+LVS-DR部署

文章目录

  • LVS负载均衡+LVS-DR部署
    • lvs的组成
    • lvs的工作原理
    • lvs的三种工作模式
        • 1、基于NAT的LVS模式负载均衡
        • 2、 基于TUN的LVS负载均衡
        • 3、LVS(DR)负载均衡
    • lVS的特点:
    • LVS-DR模型实战
      • 1. LVS-DR部署
        • 1.先下载所需要的安装包
        • 2.DR要配置1块网卡,分别配置DIP和VIP
        • 3.配置RS的ip地址信息:
        • 4.修改网卡内核参数:编辑/etc/sysctl.conf文件,添加如下内容:
        • 5.配置vip:
        • 6.配置路由信息: 在DR和所有RS上进行如下配置
        • 7.在DR上添加并保存规则:
        • 8.测试

IPVS(IP Virtual Server)是一种用于构建高性能、高可用的集群服务的技术。它是Linux内核的一部分,通过在内核中实现负载均衡、虚拟服务器和会话保持等功能,为应用程序提供了可靠、可扩展的服务。

lvs的组成

  1. 负载调度器(Load Balancer):负载调度器将请求分发给多个服务器,以实现负载均衡。它可以根据不同的算法(如轮询、权重等)决定将请求发送到哪个服务器。
  2. IP 虚拟服务器(IPVS):IPVS 是 LVS 的核心组件。它作为一个核心模块,能够截获并转发来自客户端的请求,并将请求转发到后端的真实服务器。
  3. 后端服务器(Real Servers):后端服务器是承载实际服务的物理或虚拟服务器。它们处理来自负载调度器的请求,并返回响应给客户端。
    1. 配置工具(Configuration Tool):LVS 提供了一些工具,帮助管理员配置和管理负载均衡集群。这些工具包括 ipvsadm、keepalived 等,它们可以帮助管理员设置负载调度算法、添加/删除后端服务器等。

lvs的工作原理

LVS(Linux Virtual Server)的工作原理可以简单概括为以下几个步骤:

  1. 客户端发送请求:当客户端发送请求时,请求将到达负载调度器(Load Balancer)。
  2. 负载调度器接收请求:负载调度器接收到客户端的请求,并根据预定义的负载均衡算法(如轮询、权重等)确定将请求发送给哪个后端服务器。
  3. 负载调度器转发请求:负载调度器将请求转发给后端服务器上的 IP 虚拟服务器(IPVS)。
  4. IP 虚拟服务器接收请求:IPVS 接收到请求后,根据配置的转发规则,将请求转发给实际的后端服务器。
  5. 后端服务器处理请求:后端服务器接收到请求后,处理该请求并生成响应。
  6. 响应返回给负载调度器:后端服务器将处理后的响应发送回负载调度器。
  7. 负载调度器返回响应给客户端:负载调度器接收到响应后,将响应转发给最初的客户端。

通过以上步骤,LVS 实现了负载均衡和高可用性。它将客户端的请求分发到多个后端服务器上,以提高系统的性能和可扩展性,并确保服务的高可用性,即使其中一台后端服务器发生故障,其他正常运行的服务器仍然可以继续提供服务。

lvs的三种工作模式

1、基于NAT的LVS模式负载均衡

NAT(network address translation) 网络地址转换,其主要原理是修改数据报头,使得位于企业内部的私有ip地址可以访问外王,以及外部用户可以访问位于公司内部的私有的ip主机。
LVS负载均衡+LVS-DR部署_第1张图片

2、 基于TUN的LVS负载均衡

LVS(NAT)模式的集群环境中,所有数据包的请求的回应的哦欧需要经过调度器处理,但是在TUN模式中,将NAT模式中的问题有所解决。因为数据包的请求包往往远远小于响应数据包的大小。因为响应数据包中有包含客户需要的具体数据所以,TUN的原理就是将请求与响应数据分离。,让调度器仅仅处理数据请求,让真实的服务器响应数据包直接返回给客户。
LVS负载均衡+LVS-DR部署_第2张图片

3、LVS(DR)负载均衡

在DR模式下,LVS负载均衡器作为网关插入到后端服务器和客户端之间。客户端请求到达LVS负载均衡器后,LVS负载均衡器会将请求直接转发给后端服务器,而响应流量则直接返回给客户端,绕过LVS负载均衡器。这样可以避免了请求流量经过LVS负载均衡器的转发,提高了性能。
LVS负载均衡+LVS-DR部署_第3张图片

lVS的特点:

  1. 负载均衡:IVS能够根据不同的调度算法(如轮询、源地址散列、最少连接等)将请求均匀地分发给集群中的多个真实服务器,从而实现负载均衡。这可以提高服务的性能和可扩展性。
  2. 高可用性:IVS支持对真实服务器进行健康检查,一旦某个服务器发生故障或不可用,IVS会将请求转发到其他可用服务器,确保服务的连续性和可靠性。
  3. 会话保持:IVS可以基于客户端IP地址或其他标识信息将同一个客户端的请求始终转发到同一个真实服务器上,实现会话保持。这对于需要保持会话状态的应用程序非常重要,如Web应用中的用户登录状态等。
  4. 灵活配置:IVS提供了丰富的配置选项,可以根据具体需求进行灵活定制。管理员可以设置负载均衡策略、健康检查方式、会话保持方式等,并实时监控和调整集群的状态。

环境说明:

服务器类型 IP地址 系统版本
DR 192.168.195.133 centos 8
RS1 192.168.195.134 centos 8
RS2 192.168.195.135 centos 8

在RS1和RS2上安装好httpd服务并且能成功访问
LVS负载均衡+LVS-DR部署_第4张图片
LVS负载均衡+LVS-DR部署_第5张图片

LVS-DR模型实战

1. LVS-DR部署

  • 需求:实现httpd服务的http的负载均衡
1.先下载所需要的安装包
在DR上配置

//关闭防火墙和selinux
[root@DR ~]# systemctl disable --now firewalld.service 
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@DR ~]# setenforce 0

//设置yum源并安装所需软件包
[root@DR ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
[root@DR ~]# yum -y install epel-release
[root@DR ~]# yum makecache
[root@DR ~]# yum -y install net-tools ipvsadm

在RS1上配置

//关闭防火墙和selinux
[root@RS1 ~]# systemctl disable --now firewalld.service 
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@RS1 ~]# setenforce 0

//设置yum源并安装所需软件包
[root@RS1 ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
[root@RS1 ~]# yum -y install epel-release
[root@RS1 ~]# yum makecache
[root@RS1 ~]# yum -y install net-tools

在RS2上配置

//关闭防火墙和selinux
[root@RS2 ~]# systemctl disable --now firewalld.service 
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@RS3 ~]# setenforce 0

//设置yum源并安装所需软件包
[root@RS2 ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
[root@RS2 ~]# yum -y install epel-release
[root@RS2 ~]# yum makecache
[root@RS2 ~]# yum -y install net-tools
2.DR要配置1块网卡,分别配置DIP和VIP

1.lvs-dr配置:director只需要一块网卡,vip配置在lo接口中即可,此处假设dip与rip在同一网段
配置director的ip地址信息(dip,vip)
配置dip(编辑物理网卡配置文件/etc/sysconfig/network-scripts/ifcfg-eth160)
配置vip:
ifconfig eth0:0 vip/32 broadcast vip up
由于我们的虚拟机本身是配置的DHCP自动下发ip,所以我们的dip不用再次设置,需要我们操作的就是添加一个vip

在DR上配置vip:
//此处我们设置的vip为192.168.195.100,需要与我们的RS处于同一网段
[root@DR ~]# ifconfig ifcfg-ens160:0 192.168.195.100/32 broadcast 192.168.195.100 up
[root@DR ~]# ifconfig 
ens160: flags=4163,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.195.133  netmask 255.255.255.0  broadcast 192.168.195.255
        inet6 fe80::411e:cef7:14ab:7e28  prefixlen 64  scopeid 0x20
        ether 00:0c:29:1f:2f:75  txqueuelen 1000  (Ethernet)
        RX packets 1307  bytes 435094 (424.8 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 913  bytes 94925 (92.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens160:0: flags=4163,BROADCAST,RUNNING,MULTICAST>  mtu 1500   
        inet 192.168.195.100  netmask 0.0.0.0  broadcast 192.168.195.100
        ether 00:0c:29:1f:2f:75  txqueuelen 1000  (Ethernet)
                                                 //此处我们可以查看到我们添加的vip
lo: flags=73,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
3.配置RS的ip地址信息:

配置rip(编辑物理网卡配置文件/etc/sysconfig/network-scripts/ifcfg-eth160)

同样,我们目前所演示的三台虚拟机都是以DHCP的方式下发ip地址,所以同样不用再次配置rip

[root@RS1 ~]# ip a
1: lo: ,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 192.168.195.100/0 brd 192.168.195.100 scope global lo:0
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens160: ,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:8b:9b:af brd ff:ff:ff:ff:ff:ff
    inet 192.168.195.134/24 brd 192.168.195.255 scope global dynamic noprefixroute ens160
       valid_lft 1684sec preferred_lft 1684sec
    inet6 fe80::3aa0:b2e5:ecf1:7bd1/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
       
[root@RS2 ~]# ip a
1: lo: ,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 192.168.195.100/0 brd 192.168.195.100 scope global lo:0
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens160: ,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:bd:6c:95 brd ff:ff:ff:ff:ff:ff
    inet 192.168.195.135/24 brd 192.168.195.255 scope global dynamic noprefixroute ens160
       valid_lft 1688sec preferred_lft 1688sec
    inet6 fe80::bccb:8e1a:5b03:dd61/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
4.修改网卡内核参数:编辑/etc/sysctl.conf文件,添加如下内容:
在RS1上配置:
[root@RS1 ~]# vim /etc/sysctl.conf
[root@RS1 ~]# cat /etc/sysctl.conf
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
net.ipv4.conf.all.arp_ignore = 1          //添加这两行内容
net.ipv4.conf.all.arp_announce = 2
[root@RS1 ~]# sysctl -p      //重新读配置
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2

在RS2上配置:
[root@RS2 ~]# vim /etc/sysctl.conf
[root@RS2 ~]# cat /etc/sysctl.conf
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
[root@RS2 ~]# sysctl -p    //重新读配置
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
5.配置vip:
在RS1上配置:
[root@RS1 ~]# ifconfig lo:0 192.168.195.100/32 broadcast 192.168.195.100 up
[root@RS1 ~]# ifconfig 
ens160: flags=4163,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.195.134  netmask 255.255.255.0  broadcast 192.168.195.255
        inet6 fe80::3aa0:b2e5:ecf1:7bd1  prefixlen 64  scopeid 0x20
        ether 00:0c:29:8b:9b:af  txqueuelen 1000  (Ethernet)
        RX packets 887  bytes 74380 (72.6 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 576  bytes 63180 (61.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo:0: flags=73,LOOPBACK,RUNNING>  mtu 65536
        inet 192.168.195.100  netmask 0.0.0.0     //添加成功
        loop  txqueuelen 1000  (Local Loopback)

在RS2上配置:
[root@RS2 ~]# ifconfig lo:0 192.168.195.100/32 broadcast 192.168.195.100 up
[root@RS2 ~]# ifconfig 
ens160: flags=4163,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.195.135  netmask 255.255.255.0  broadcast 192.168.195.255
        inet6 fe80::bccb:8e1a:5b03:dd61  prefixlen 64  scopeid 0x20
        ether 00:0c:29:bd:6c:95  txqueuelen 1000  (Ethernet)
        RX packets 372  bytes 32447 (31.6 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 286  bytes 32632 (31.8 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo:0: flags=73,LOOPBACK,RUNNING>  mtu 65536
        inet 192.168.195.100  netmask 0.0.0.0    //添加成功
        loop  txqueuelen 1000  (Local Loopback)

注:此处必须先修改网卡内核参数然后再配置vip,因为如果先配vip,vip配好后就会立马通告给别人,而修改内核参数就是为了不通告

6.配置路由信息: 在DR和所有RS上进行如下配置

route add -host vip dev interface:0

在DR上配置:
[root@DR ~]# route add -host 192.168.195.100 dev ens160:0
[root@DR ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.195.2   0.0.0.0         UG    100    0        0 ens160
192.168.195.0   0.0.0.0         255.255.255.0   U     100    0        0 ens160
192.168.195.100 0.0.0.0         255.255.255.255 UH    0      0        0 ens160

在RS1上配置:
[root@RS1 ~]# route add -host 192.168.195.100 dev lo:0
[root@RS1 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.195.2   0.0.0.0         UG    100    0        0 ens160
192.168.195.0   0.0.0.0         255.255.255.0   U     100    0        0 ens160
192.168.195.100 0.0.0.0         255.255.255.255 UH    0      0        0 lo

在RS上配置:
[root@RS2 ~]# route add -host 192.168.195.100 dev lo:0
[root@RS2 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.195.2   0.0.0.0         UG    100    0        0 ens160
192.168.195.0   0.0.0.0         255.255.255.0   U     100    0        0 ens160
192.168.195.100 0.0.0.0         255.255.255.255 UH    0      0        0 lo
7.在DR上添加并保存规则:
[root@DR ~]# ipvsadm -A -t 192.168.195.100:80 -s wrr
[root@DR ~]# ipvsadm -a -t 192.168.195.100:80 -r 192.168.195.134:80 -g
[root@DR ~]# ipvsadm -a -t 192.168.195.100:80 -r 192.168.195.135: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.195.100:80 wrr
  -> 192.168.195.134:80           Route   1      0          0         
  -> 192.168.195.135:80           Route   1      0          0
  
保存配置:
[root@DR ~]# ipvsadm -Sn > /etc/sysconfig/ipvsadm
[root@DR ~]# cat /etc/sysconfig/ipvsadm
-A -t 192.168.195.100:80 -s wrr
-a -t 192.168.195.100:80 -r 192.168.195.134:80 -g -w 1
-a -t 192.168.195.100:80 -r 192.168.195.135:80 -g -w 1
8.测试

进入真机的cmd命令窗
LVS负载均衡+LVS-DR部署_第6张图片

总的来说,IPVS是一种强大的集群服务技术,能够提供高性能、高可用的服务,并提供灵活的配置选项满足不同应用的需求。它在构建大规模、高并发的网络应用中得到广泛应用。

你可能感兴趣的:(lvs,负载均衡,linux,运维,网络,服务器)