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主机。
在这里插入图片描述

2、 基于TUN的LVS负载均衡

LVS(NAT)模式的集群环境中,所有数据包的请求的回应的哦欧需要经过调度器处理,但是在TUN模式中,将NAT模式中的问题有所解决。因为数据包的请求包往往远远小于响应数据包的大小。因为响应数据包中有包含客户需要的具体数据所以,TUN的原理就是将请求与响应数据分离。,让调度器仅仅处理数据请求,让真实的服务器响应数据包直接返回给客户。
在这里插入图片描述

3、LVS(DR)负载均衡

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

lVS的特点:

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

环境说明:

服务器类型IP地址系统版本
DR192.168.195.133centos 8
RS1192.168.195.134centos 8
RS2192.168.195.135centos 8

在RS1和RS2上安装好httpd服务并且能成功访问
在这里插入图片描述
在这里插入图片描述

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<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 192.168.195.133  netmask 255.255.255.0  broadcast 192.168.195.255inet6 fe80::411e:cef7:14ab:7e28  prefixlen 64  scopeid 0x20<link>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 0TX packets 913  bytes 94925 (92.7 KiB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0ens160:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500   inet 192.168.195.100  netmask 0.0.0.0  broadcast 192.168.195.100ether 00:0c:29:1f:2f:75  txqueuelen 1000  (Ethernet)//此处我们可以查看到我们添加的vip
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536inet 127.0.0.1  netmask 255.0.0.0inet6 ::1  prefixlen 128  scopeid 0x10<host>loop  txqueuelen 1000  (Local Loopback)RX packets 0  bytes 0 (0.0 B)RX errors 0  dropped 0  overruns 0  frame 0TX 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: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet 192.168.195.100/0 brd 192.168.195.100 scope global lo:0valid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000link/ether 00:0c:29:8b:9b:af brd ff:ff:ff:ff:ff:ffinet 192.168.195.134/24 brd 192.168.195.255 scope global dynamic noprefixroute ens160valid_lft 1684sec preferred_lft 1684secinet6 fe80::3aa0:b2e5:ecf1:7bd1/64 scope link noprefixroute valid_lft forever preferred_lft forever[root@RS2 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet 192.168.195.100/0 brd 192.168.195.100 scope global lo:0valid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000link/ether 00:0c:29:bd:6c:95 brd ff:ff:ff:ff:ff:ffinet 192.168.195.135/24 brd 192.168.195.255 scope global dynamic noprefixroute ens160valid_lft 1688sec preferred_lft 1688secinet6 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<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 192.168.195.134  netmask 255.255.255.0  broadcast 192.168.195.255inet6 fe80::3aa0:b2e5:ecf1:7bd1  prefixlen 64  scopeid 0x20<link>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 0TX packets 576  bytes 63180 (61.6 KiB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536inet 127.0.0.1  netmask 255.0.0.0inet6 ::1  prefixlen 128  scopeid 0x10<host>loop  txqueuelen 1000  (Local Loopback)RX packets 0  bytes 0 (0.0 B)RX errors 0  dropped 0  overruns 0  frame 0TX packets 0  bytes 0 (0.0 B)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536inet 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<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 192.168.195.135  netmask 255.255.255.0  broadcast 192.168.195.255inet6 fe80::bccb:8e1a:5b03:dd61  prefixlen 64  scopeid 0x20<link>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 0TX packets 286  bytes 32632 (31.8 KiB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536inet 127.0.0.1  netmask 255.0.0.0inet6 ::1  prefixlen 128  scopeid 0x10<host>loop  txqueuelen 1000  (Local Loopback)RX packets 0  bytes 0 (0.0 B)RX errors 0  dropped 0  overruns 0  frame 0TX packets 0  bytes 0 (0.0 B)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536inet 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命令窗
在这里插入图片描述

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/131787.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据库基础篇二

函数 约束 概述 概念&#xff1a;约束是作用于表字段上的规则&#xff0c;用于限制存储在表中的数据。目的&#xff1a;保证数据库中数据的正确、有效性和完整性。分类&#xff1a; 外键约束 外键用来让两张表的数据之间建立连接&#xff0c;从而保证数据的一致性和完整性…

git push错误->Error: src refspec master does not match any

参考:https://blog.csdn.net/weixin_40908748/article/details/128574907 问题描述&#xff1a;在执行命令 git push origin master 时报错->Error: src refspec master does not match any 问题分析&#xff1a;在网上查找解决方法&#xff0c;大部分人说是暂存区没有文件…

【C进阶】内存函数

strcpy拷贝的仅仅是字符串&#xff0c;但是内存中的数据不仅仅是字符&#xff0c;所以就有了memcpy函数 1. memcpy void *memcpy &#xff08;void * destination &#xff0c;const void * source , size_t num) 函数memcpy从source的位置开始向后拷贝num个字节的数据到desti…

webrtc用clang编译支持h264,支持msvc调用库

webrtc遇到困扰&#xff1a; 如果msvc编译&#xff0c;ffmpeg编译失败&#xff0c;需要替换ffmpeg库。如果用clang编译&#xff0c;vs或qt调用dll又存在崩溃。 经过反复尝试找到解决方法&#xff1a; 一、编译 1、编译参数 //我得环境配置 set DEPOT_TOOLS_UPDATE0 set DEP…

$attrs 和 $listeners (vue2vue3)

目录 透传 Attributes Attributes 继承​ 对 class 和 style 的合并 v-on 监听器继承 深层组件继承 禁用 Attributes 继承 多根节点的 Attributes 继承 vue2 $attrs 和 $listeners $attrs 概念说明 $attrs 案例 $listeners 概念说明 $listeners案例 vue3 $attr…

zsh: command not found: conda问题解决

参考:https://zhuanlan.zhihu.com/p/158703094 一、问题介绍与环境介绍 系统为macOS Catalina 10.15.4 所用终端为zsh 安装了oh-my-zsh之后conda命令在终端中不可用。 二、原因分析 终端中zsh的可访问的程序一般放在/bin, /usr/bin, /usr/local/bin&#xff0c;/bin目录下&…

Android Studio git 取消本地 commit(未Push)

操作比较简单 1.选中项目然后依次选择&#xff1a;Git->Repository->Reset HEAD 2.然后再to Commit中输入HEAD^&#xff0c;表示退回到上一个版本。

区块链金融的开发流程

区块链金融应用的开发流程与一般的软件开发流程有许多相似之处&#xff0c;但它还涉及到智能合约的编写、区块链网络集成和加密货币处理等特定方面的工作。以下是一般区块链金融应用的开发流程&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件…

工程物料管理信息化建设(十二)——关于工程物料管理系统最后的思考

目录 1 功能回顾1.1 MTO模块1.2 请购模块1.3 采购模块1.4 催交模块1.5 现场管理模块1.6 数据分析和看板模块1.7 其它模块 2 最后几个问题2.1 按管线发料和直接发料重叠2.2 YHA 材料编码的唯一性问题2.3 “合同量单-箱单-入库单” 数据映射 3 关于未来的思考3.1 三个专业之间的关…

Springboot 订餐管理系统idea开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 springboot 订餐管理系统是一套完善的信息系统&#xff0c;结合springboot框架和bootstrap完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用springboot框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有 完整的源代码和数据库&…

PBA.客户需求分析管理

1 需求的三个层次: Requirement/Wants/Pains 大部分人认为&#xff0c;产品满足不了客户需要&#xff0c;是因为客户告知的需求是错误的&#xff0c;这听起来有一些道理&#xff0c;却没有任何意义。不同角色对于需求的理解是不一样的。在客户的需求和厂家的需求之间必然有一定…

vue3 + element Plus实现表格根据关键字合并行,并实现行的增删改操作

根据关键字合并表格 1.实现初始化表格2.实现添加班级与学生的功能3.添加的弹窗4.删除班级5.删除学生 首先看最终实现的效果 1.实现初始化表格 <template><div class"main-page"><div class"flex-end"><div class"public-search…