Linux lvs负载均衡

LVS 介绍: 

Linux Virtual Server(LVS)是一个基于Linux内核的开源软件项目,用于构建高性能、高可用性的服务器群集。LVS通过将客户端请求分发到一组后端服务器上的不同节点来实现负载均衡,从而提高系统的可扩展性和可靠性。

LVS的核心组件:

  1. IPVS(IP Virtual Server):IPVS是LVS的核心模块,它实现了负载均衡的功能。IPVS模块通过拦截传入的流量并进行调度,将请求分发给后端的实际服务器。它存储和管理负载均衡配置,并在内核空间进行数据包的转发。
  2. 负载均衡器 LB(Load Balancer):负载均衡器是LVS的中心组件,它是位于客户端和后端服务器之间的设备或软件。负载均衡器接收客户端请求,并根据配置的负载均衡策略将请求转发给后端服务器,以实现负载分发和高可用性。

  3. 后端服务器 RS(Real Server):后端服务器是LVS集群中实际处理客户端请求的服务器节点。它们分担负载并提供服务响应。
  4. 负载均衡调度算法:LVS支持多种负载均衡调度算法,用于确定请求应该转发到哪个后端服务器上。常见的调度算法包括轮询(Round Robin)、最少连接(Least Connection)、源地址哈希(Source IP Hash)等。通过选择适当的调度算法,可以根据应用需求在后端服务器之间平衡负载。

LVS的工作原理:

  1. 客户端发送请求:
    客户端向LVS负载均衡器发送请求,请求的目标是负载均衡器的虚拟IP(Virtual IP)地址。

  2. 负载均衡器接收请求:
    负载均衡器接收到来自客户端的请求,并根据预先配置的负载均衡算法选择一个后端服务器来处理该请求。

  3. 负载均衡算法选择后端服务器:
    LVS支持多种负载均衡调度算法,例如轮询(Round Robin)、最少连接(Least Connection)、源地址哈希(Source IP Hash)等。根据指定的算法,负载均衡器将请求转发给一个后端服务器。选择后端服务器时考虑服务器的负载情况、可用性和性能指标。

  4. 请求转发到后端服务器:
    负载均衡器将客户端请求转发给选定的后端服务器。根据配置的调度算法,请求可能会被平均地分发到多个后端服务器上,从而实现负载均衡。

  5. 后端服务器处理请求:
    后端服务器接收到来自负载均衡器的请求,并处理该请求。后端服务器执行请求所需的任务,并生成响应。

  6. 响应返回至客户端:
    后端服务器生成的响应流量经过负载均衡器,负载均衡器会将响应的目标地址重写为自己的地址,并将响应返回给客户端。

  7. 会话保持(可选):
    为了保持会话的连贯性,LVS可通过会话保持功能使来自同一客户端的请求始终被分发到同一后端服务器上。这可以通过IP地址、Cookie等方式实现。

LVS负载均衡方式:

  • NAT(Network Address Translation)方式:负载均衡器位于前端与客户端之间,调度器将客户端请求的源IP地址和端口转换为自己的IP地址和端口,并将请求转发到后端服务器。后端服务器的响应经过调度器再转发回客户端。
  • DR(Direct Routing)方式:负载均衡器位于前端与后端服务器之间,不会修改流量的目标地址。调度器将客户端请求的目标IP地址和端口保持不变,直接将请求转发到后端服务器。后端服务器的响应不经过调度器,直接返回给客户端。
  • TUN(IP Tunneling)方式:类似于DR方式,负载均衡器位于前端与后端服务器之间,并使用IP隧道将请求从客户端传递到后端服务器。负载均衡器将请求封装在一个新的IP包中,并将其发送到目标后端服务器上。后端服务器接收到请求后,解析IP隧道并响应客户端。也就是通过创建虚拟设备将数据包从调度器转发到后端服务器。

LVS名词解释:

  • VS:Virtual Server 虚拟服务器,通常是分发器,负载均衡集群对外提供的IP+Por
  • RS:Real Server 实际提供服务的真实服务器,可被DS划分到一个或多个负载均衡组.
  • DS:Director Server 负载均衡器,将流量分发到后端的真实服务器上.

  • BDS:Backup Director Server,为了保证负载均衡器的高可用衍生出的备份.

  • CIP:Client IP 客户的客户端IP。
  • VIP:Virtual Server IP,VS的IP。client请求服务的DIP(destination IP address),定义在DS上,client或其网关需要有其路由
  • DIP:Director IP 分发器的IP
  • RIP:Real Server IP 真实服务器的IP

CIP <–> VIP == DIP <–> RIP 客户端访问VIP,DIP将请求转发到RIP

1、NAT(Network Address Translation):

NAT 是通过网络地址转换的方法来实现调度的。

   

  1. 客户端发送请求:客户端向LVS负载均衡器发送请求,请求的目标地址是VIP。

  2. 负载均衡器接收请求:负载均衡器接收到来自客户端的请求,该请求VIP和CIP。

  3. NAT转换:NAT模式下,负载均衡器会将请求包的VIP进行NAT转换,将其替换为负载均衡器的RIP。这样,在后续的网络通信中,响应流量将通过负载均衡器经过NAT转换返回给客户端。

  4. 负载均衡算法选择后端服务器:LVS负载均衡器根据预先配置的负载均衡算法选择一个后端服务器来处理该请求。

  5. 请求转发到后端服务器:负载均衡器将经过NAT转换后的请求转发给选定的后端服务器。后端服务器接收到请求后,将其视为来自负载均衡器的请求。

  6. 后端服务器处理请求, 并生成响应

  7. 响应返回至客户端:响应经过负载均衡器,负载均衡器进行NAT转换将响应的RIP替换为VIP,然后将响应返回给客户端。

2、DR(Direct Routing):

DR通过修改目标MAC地址来实现调度。DR 模式中,input经过DR,output不经过DR。为了响应对整个群集的访问,DS与RS都需要配置有VIP地址, 且DS与RS要处在同一网段。

 

  1. 客户端发送请求:客户端向LVS负载均衡器发送请求,请求的目标地址是VIP。

  2. 负载均衡器接收请求,并根据预先配置的负载均衡算法选择一个后端服务器来处理该请求。

  3. 负载均衡器修改目标MAC地址:在DR模式下,负载均衡器会修改请求数据包的目标MAC地址为所选后端服务器的MAC地址,并将数据包转发给后端服务器。这样,数据包越过负载均衡器,直接到达后端服务器。

  4. 后端服务器接收到来自负载均衡器的请求,并进行相应的处理和计算。

  5. 后端服务器生成响应,并将响应发送回客户端。在DR模式下,响应数据包将直接发送到客户端,绕过负载均衡器。

3、TUN(IP Tunneling):

        在DR方式下,DS只修改数据包中数据链路层的MAC信息,IP信息不修改。于是DS通过MAC来定位RS,由此限制了DS和RS要处于同一网段。那么如果DS可以不通过MAC就可以定位到RS的话,也就不用限制RS和DS处于同一网段了。

        TUN模式下,负载均衡器通过建立IP隧道,将请求和响应数据通过隧道在负载均衡器和后端服务器之间进行传输。IP隧道可以理解为IP in IP, 即发送方在IP头的外部再包装一个IP头,接收方先解出第一层IP头,然后再按照正常流程处理剩下的的IP数据包。

 

  1. 客户端发送请求:客户端向LVS负载均衡器发送请求,请求的目标地址是VIP。
  2. 负载均衡器接收请求:负载均衡器接收到来自客户端的请求,并根据预先配置的负载均衡算法选择一个后端服务器来处理该请求。

  3. 负载均衡器建立隧道:在TUN模式下,负载均衡器会与所选后端服务器建立一个IP隧道,以便在负载均衡器和后端服务器之间传输请求和响应数据。
  4. 负载均衡器转发请求:负载均衡器将来自客户端的请求打包,并通过隧道发送给后端服务器。

  5. RS发现请求报文的IP地址是自己的eth0的IP地址,就剥掉IP隧道包头。

  6. RS处理请求,生成响应,并将响应通过隧道发送回客户端。

        LVS架构可以提供高性能和高可用性的负载均衡解决方案。通过将客户端请求分发到后端服务器上的多个节点,可以平衡系统负载并提供故障容错能力。同时,LVS具有开源、灵活和可定制的特点,可以根据实际需求进行配置和扩展。

        需要注意的是,LVS只提供负载均衡功能,并不处理应用层的逻辑。应用层的会话维护、数据同步等需要通过其他方式来实现,如使用Session Persistence和数据库复制等。

LVS NAT模式配置: 

环境说明:

主机名称 网卡信息(ens160为nat、ens192为仅主机)安装应用 系统
Client客户端192.168.100.200(ens160)RHEL8
DSDIP:192.168.253.142(ens160)–VIP:192.168.227.128(ens224)  ipvsadmRHEL8
RS1RIP:192.168.253.143(ens160)–192.168.253.142httpdRHEL8
RS2RIP:192.168.253.144(ens160)–192.168.253.142httpdRHEL8

1、DR、RS1、RS2三台主机都关闭防火墙和selinux

DS:
[root@DS ~]#  systemctl stop firewalld
[root@DS ~]# systemctl disable firewalld
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@DR ~]# vim /etc/sysconfig/selinux 
SELINUX=disabledRS1
[root@RS1 ~]# systemctl stop firewalld
[root@RS1 ~]# systemctl disable firewalld
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@RS1 ~]#  vi /etc/sysconfig/selinux
SELINUX=disabledRS2
[root@RS2 ~]#  systemctl stop firewalld
[root@RS2 ~]# systemctl disable firewalld
Removed /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@RS2 ~]#  vi /etc/sysconfig/selinux
SELINUX=disabled

2、配置IP信息

DS:添加ens224网卡信息

[root@DR ~]#  nmcli connection add con-name ens224 ifname ens224 type ethernet
Connection 'ens224' (922bcff0-35fd-43c2-a608-edb0d58ccec3) successfully added.
[root@DR ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens160
IPADDR=192.168.253.142
PREFIX=24
DNS1=8.8.8.8
[root@DR ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens224
IPADDR=182.168.227.128
PREFIX=24
DNS1=8.8.8.8
[root@DR ~]# systemctl restart NetworkManager
[root@DR ~]# nmcli connection up ens160
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/3)
[root@DR ~]# nmcli connection up ens224
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)

RS1: 

[root@RS1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens160
IPADDR=192.168.253.143
PREFIX=24
GATEWAY=192.168.253.142
DNS1=8.8.8.8
[root@RS1 ~]# systemctl restart NetworkManager
[root@RS1 ~]# nmcli connection up ens160
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/2)

RS2:

[root@RS2 ~]#  vim /etc/sysconfig/network-scripts/ifcfg-ens160
IPADDR=192.168.253.144
PREFIX=24
GATEWAY=192.168.253.142
DNS1=8.8.8.8
[root@RS2 ~]# systemctl restart NetworkManager
[root@RS2 ~]# nmcli connection up ens160
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/2)

3、后端RS1和RS2部署WEB服务器

[root@RS1 ~]# yum -y install httpd
[root@RS1 ~]# echo RS1 > /var/www/html/index.html
[root@RS1 ~]# systemctl restart httpd
[root@RS1 ~]#  systemctl enable httpd
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.
[root@RS2 ~]# yum -y install httpd
[root@RS2 ~]# echo RS2 > /var/www/html/index.html
[root@RS2 ~]# systemctl restart httpd
[root@RS2 ~]# systemctl enable httpd

4、配置DS

4.1、开启IP转发功能

[root@DR ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@DR ~]# sysctl -p
net.ipv4.ip_forward = 1

4.2、安装ipvsadm并添加规则

[root@DR ~]# yum -y install ipvsadm
[root@DR ~]# ipvsadm -A -t 192.168.227.128:80 -s rr
[root@DR ~]#  ipvsadm -a -t 192.168.227.128:80 -r 192.168.253.143:80 -m
[root@DR ~]#  ipvsadm -a -t 192.168.227.128:80 -r 192.168.253.144: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  192.168.227.128:80 rr-> 192.168.253.143:80           Masq    1      0          0         -> 192.168.253.144:80           Masq    1      0          0         
[root@DR ~]# ipvsadm -Sn > /etc/sysconfig/ipvsadm
[root@DR ~]# systemctl restart ipvsadm.service
[root@DR ~]#  systemctl enable ipvsadm.service
Created symlink /etc/systemd/system/multi-user.target.wants/ipvsadm.service → /usr/lib/systemd/system/ipvsadm.service.

5、客户端测试: 

[root@RS3 ~]# curl http://192.168.227.128
RS2
[root@RS3 ~]# curl http://192.168.227.128
RS1
[root@RS3 ~]# curl http://192.168.227.128
RS2
[root@RS3 ~]# curl http://192.168.227.128
RS1

配置信息转载自: LVS 教程

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

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

相关文章

PHP正则绕过解析

正则绕过 正则表达式PHP正则回溯PHP中的NULL和false回溯案例案例1案例2 正则表达式 在正则中有许多特殊的字符&#xff0c;不能直接使用&#xff0c;需要使用转义符\。如&#xff1a;$,(,),*,,.,?,[,,^,{。 这里大家会有疑问&#xff1a;为啥小括号(),这个就需要两个来转义&a…

智能制造企业如何建立大客户管理模型?

01、大客户管理依然是智能制造企业经营的黄金定律 《连线》杂志创始人凯文凯利&#xff08;Kevin Kelly&#xff09;在《技术元素》一书中写道&#xff1a;“数量不是目的&#xff0c;质量才是根本&#xff0c;重视1%的超级用户才是提高效率的关键。” 根据“二八定律”&…

filebeat介绍

1、filebeat概述 Filebeat是用于转发和集中日志数据的轻量级传送工具。Filebeat监视您指定的日志文件或位置&#xff0c;收集日志事件&#xff0c;并将它们转发到Elasticsearch或 Logstash或kafka进行索引 1.1 Filebeat两个主要组件 prospector 和 harvester。 prospector&a…

C++---list常用接口和模拟实现

list---模拟实现 list的简介list函数的使用构造函数迭代器的使用list的capacitylist element accesslist modifiers list的模拟实现构造函数&#xff0c;拷贝构造函数和迭代器begin和endinsert和eraseclear和析构函数 源码 list的简介 list是用双向带头联表实现的一个容器&…

C—数据的储存(下)

文章目录 前言&#x1f31f;一、练习一下&#x1f30f;1.例一&#x1f30f;2.例二&#x1f30f;3.例三&#x1f30f;4.例四 &#x1f31f;二、浮点型在内存中的储存&#x1f30f;1.浮点数&#x1f30f;2.浮点数存储&#x1f4ab;&#xff08;1&#xff09;.二进制浮点数&#x…

提高生产线效率:PDM系统的工艺优化智慧

在现代制造业中&#xff0c;提高生产线效率是企业追求高质量和降低成本的重要目标。PDM系统&#xff08;Product Data Management&#xff0c;产品数据管理&#xff09;作为一款强大的数字化工具&#xff0c;发挥着工艺优化智慧的作用&#xff0c;帮助企业实现生产线效率的提升…

C# 回文链表

234 回文链表 给你一个单链表的头节点 head &#xff0c;请你判断该链表是否为回文链表。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,2,1] 输出&#xff1a;true 示例 2&#xff1a; 输入&…

TPlink云路由器界面端口映射设置方法?快解析内网穿透能实现吗?

有很多网友在问&#xff1a;TPlink路由器端口映射怎么设置&#xff1f;因为不懂端口映射的原理&#xff0c;所以无从下手&#xff0c;下面小编就给大家分享TPlink云路由器界面端口映射设置方法&#xff0c;帮助大家快速入门TP路由器端口映射设置方法。 1.登录路由器管理界面&a…

性能测试/负载测试/压力测试之间的区别

做测试一年多来&#xff0c;虽然平时的工作都能很好的完成&#xff0c;但最近突然发现自己在关于测试的整体知识体系上面的了解很是欠缺&#xff0c;所以&#xff0c;在工作之余也做了一些测试方面的知识的补充。不足之处&#xff0c;还请大家多多交流&#xff0c;互相学习。 …

Amazon Aurora Serverless v2 正式发布:针对要求苛刻的工作负载的即时扩展

我们非常兴奋地宣布&#xff0c;Amazon Aurora Serverless v2 现已面向 Aurora PostgreSQL 和 MySQL 正式发布。Aurora Serverless 是一种面向 Amazon Aurora 的按需自动扩展配置&#xff0c;可让您的数据库根据应用程序的需求扩展或缩减容量。 亚马逊云科技开发者社区为开发者…

Hudi Flink SQL源码调试学习(1)

前言 本着学习hudi-flink源码的目的&#xff0c;利用之前总结的文章Hudi Flink SQL代码示例及本地调试中的代码进行调试,记录调试学习过程中主要的步骤及对应源码片段。 版本 Flink 1.15.4Hudi 0.13.0 目标 在文章Hudi Flink SQL代码示例及本地调试中提到&#xff1a;我们…

2023网络安全学习路线 非常详细 推荐学习

首先咱们聊聊&#xff0c;学习网络安全方向通常会有哪些问题 1、打基础时间太长 学基础花费很长时间&#xff0c;光语言都有几门&#xff0c;有些人会倒在学习 linux 系统及命令的路上&#xff0c;更多的人会倒在学习语言上&#xff1b; 2、知识点掌握程度不清楚 对于网络安…

Qsys介绍

文章目录 前言一、为什么需要Qsys1、简化了系统的设计流程2、Qsys涉及的技术 二、Qsys真身1、一种系统集成工具2、何为Nios II1、内核架构2、Nios II选型 三、Qsys设计涉及到的软件&工具四、总结五、参考资料 前言 Qsys是Altera下的一个系统集成工具&#xff0c;可用于搭建…

使用tinyxml解析和修改XML文件

首先要清楚XML文件包含哪些元素&#xff1a; 他是由元素、文本或者两者混合物组成。元素可以拥有属性&#xff0c;元素是指从开始标签到结束标签的部分。 <?xml version"1.0" encoding"UTF-8" ?> <books><book id"1001">&…

新一代开源流数据湖平台Apache Paimon入门实操-上

文章目录 概述定义核心功能适用场景架构原理总体架构统一存储基本概念文件布局 部署环境准备环境部署 实战Catalog文件系统Hive Catalog 创建表创建Catalog管理表查询创建表&#xff08;CTAS&#xff09;创建外部表创建临时表 修改表修改表修改列修改水印 概述 定义 Apache Pa…

Nginx安装和Nginx配置虚拟主机

Nginx安装 源码包获取地址&#xff1a;http://nginx.org/download/ RPM包获取地址&#xff1a;http://nginx.org/packages/centos/7Server/x86_64/RPMS/ RPM安装 这里选择的RPM包是 nginx-1.22.0-1.el7.ngx.x86_64.rpm [rootlocalhost ~]# yum install nginx-1.22.0-1.el7.…

快速排序——“数据结构与算法”

各位CSDN的uu们好呀&#xff0c;今天又是小雅兰的数据结构与算法专栏啦&#xff0c;下面&#xff0c;就让我们进入快速排序的世界吧&#xff01;&#xff01;&#xff01; 快速排序 快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法&#xff0c;其基本思想为&…

【C语言学习】数据类型转换

一、自动类型转换 1.当运算符两边的数据类型不同时&#xff0c;C语言会帮我们将其转换为较大的类型。即将数据转换成表达范围更大的类型。 将前一种类型转换为后一种类型 char --> short --> int --> long --> long long int --> float --> double2.对于…

C/C++的5大内存分区

1、堆区&#xff08;heap&#xff09;——由程序员分配和释放&#xff0c; 若程序员不释放&#xff0c;程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事 2、栈区&#xff08;stack&#xff09;——由编译器自动分配释放 &#xff0c;存放函数的参数值&#xff0c;局…

python基础

本篇博客的内容是《python编程从入门到实践》的精简版&#xff0c;主要是书中&#xff08;本人认为的&#xff09;重点精简&#xff0c;以及自己学习的一些理解。 文章目录 更好的阅读体验变量和简单的数据类型变量字符串字符串的几种定义方法字符串拼接 列表简介列表是什么运…