LVS负载均衡(load balance)

一 LVS

   LVS:Linux Virtaul Server,该软件的功能是实现 LB(load balance)

二LVS 的三种工作模式

1.NAT 模式(NAT)

LVS 服务器同时充当一台 NAT 网关,拥有公有 IP ,同时负责将针对此公共 IP 的请求依据算法将请求转发给 LAN 中的某台真实服务器(node) ,node 处理完成请求后将结果返回至 LVS Server, 在由 LVS Server 将结果返回给用户。可以将内部网络隐藏

2.IP 隧道模式(TUN)

 可以实现让集群中的节点处于不同网络段

3.直连路由模式(DR)

当参与集群的计算机和作为控制管理的计算机在同一个网段时可以使用此种方法。控制管理的计算机接收到请求包时直接送到参与集群的 node 上。当 node 处理完请求后将直接把结果返还至用户而不通过 LVS Server 返还。DR 的优势在于速度快、开销少。

三 、三种模式的对比

 NAT 方式适用于在同一个 LAN 中实现小型 LB

 TUN 方式适用于 node 部分在 Internet 上

 DR 方式使用与在同一个 LAN 中实现较为大型 LB

四 LVS 的八种算法

1.算法:将客户端的请求按照不同的算法转发给 web 服务器

2.算法的种类

 1)rr:轮询 rr 算法就是将外部请求顺序轮流分配到集群中的 node 上,但不考虑每台 node的负载情况。

 2)wrr:加权轮询 wrr 算法在 rr 算法的基础上会考察每台 node 的负载情况,并尝试让负较轻的 node 承担更多请求。

(权重为0表示不能接收,权重值越大越能接收)

 3)lc:最少连接 算法可以让 LVS 尝试把新的请求交给当前连接数最少的 node ,直到此node 连接数不再属于最少标准

 4)wlc:加权最少连接 wlc 算法也由权重的干预。LVS 会根据每台 node 的权重并综合连接数控制转发行为

 5)lblc:局部最少连接 算法会加上针对源请求 IP 地址的路由估算,并尝试把请求发送到源请求 IP 路由最近的 node 上。此种方法一般用于远程或者是大规模的集群组

 6)lblcr:带有复制的局部最少连接算法 lblcr 算法是在 lblc 算法的基础上增加了一个 node列表,先依据 lblc 算法计算出与源请求 IP 地址最近的一组 node ,然后在决定把请求发送

到最近一组中的最近的一台 node 。若此 node 没有超载则将请求转发给这台 node, 如果超载则依据”最少连接”原则找到最少连接的 node 并将此 node 加入集群组中。并将请求转

给此 node

 7)dh:目标地址散列算法 相当于随机

 8)sh:原地址散列算法 相当于随机

五 ipvsadm 语法格式

注:需安装 lvs 软件:yum install ipvsadm -y

1.ipvsadm -C:清空 kernel 中的 lvs 列表(清空虚拟主机及转发记录)

 ipvsadm -A -t 虚拟主机 IP:80 -s 算法 :声明一个虚拟主机

 ipvsadm -a -t 虚拟主机 IP:80 -r 接受连接的真实服务器 IP:80 lvs 的模式 -w 权重值 2.三种

模式

 -i TUN 模式

 -g DR 模式

 -m NAT 模式

六 NAT 模式

                                  <-->(192.168.1.2)web1

 client(172.16.0.2)<-->(172.16.0.1)lvs(192.168.1.1)

                                  <-->(192.168.1.3)web2

2.安装软件

 在 client:yum install elinks -y

 在 lvs 上:yum install ipvsadm iptables-services -y

 在 web1/web2 上:yum install httpd -y

3.在 web1/web2 上,配置好 httpd

 在 lvs 上,编辑脚本 vim lvs-nat.sh

#!/bin/bash

iptables -F

iptables -X

iptables -Z

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE

ipvsadm -C

ipvsadm -A -t 172.16.0.1:80 -s wrr

ipvsadm -a -t 172.16.0.1:80 -r 192.168.1.2:80 -m -w 2

ipvsadm -a -t 172.16.0.1:80 -r 192.168.1.3:80 -m -w 3

注:该 iptables 语句实现了隐藏内网的功能(内网服务器返回给外网客户端信息时,将自己的源 IP 地址伪装为 lvs 服务器的外网 IP 地址)

4.在 web1/web2 上:systemctl restart httpd

 在 lvs 上:bash lvs-nat.sh

5.在 client 上测试:elinks http://172.16.0.1 可见 web1/web2 上的网页交替出现(因为采用了 wrr 算法,web2 出现的频率高一些)在 web1/web2 上测试:ssh root@172.16.0.2 连接成功后,在 client 端:netstat -lantu |grep 22,可以看到,web1/web2 的源地址被伪装成 lvs 服务器的公网 IP 地址(172.16.0.1)

七 DR 模式

1.搭建网络拓扑

 clinet(192.168.1.2)<--->(192.168.1.1)router(192.168.0.1)

<-------->(192.168.0.3)web1

<------->(192.168.0.2)lvs

                          <--------<(192.168.0.4)web2

2.安装软件

 在 client:elinks

 在 lvs 上:ipvsadm

 在 web1、web2 上:httpd

3.在 lvs 上,vim lvs-dr.sh

#!/bin/bash

VIP=192.168.0.254

RIP1=192.168.0.3

RIP2=192.168.0.4

ipvsadm -C

ifconfig eno16777736:0 $VIP broadcast $VIP netmask 255.255.255.255 up

route add -host : dev eno16777736:0

ipvsadm -A -t $VIP:80 -s wlc

ipvsadm -a -t $VIP:80 -r $RIP1:80 -g -w 1

ipvsadm -a -t $VIP:80 -r $RIP2:80 -g -w 1

 在 web1 和 web2 上,vim web.sh

#!/bin/bash

VIP=192.168.0.254

ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP

route add -host $VIP dev lo:0

echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore

echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce

echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore

echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce

4.在 lvs 上:bash lvs-dr.sh

  在 web1、web2 上:bash web.sh

  配置好 httpd

5.在客户端测试:elinks http:192.168.0.254,可见 web1 和 web2 上的网页交替出现

八 TUN 模式

执行原理:

①LVS接收到请求包(目标IP为VIP),进行IP Tunnel封装(在原有 的包头上加上IP Tunnel的包头),然后发送出去。

②节点(需配置VIP)收到数据包后,解开IP Tunnel包头信息(逻 辑上的隐形隧道,LB和RS之间传输),得到客户的请求进行响应处理。

③回复过程:RS使用自己的公网,将数据直接回复给客户端。

1.网络拓扑:

                             <---->(192.168.0.2)web1

 client(192.168.0.4)<--->(192.168.0.1)lvs

                             <---->(192.168.0.3)web2

2.安装软件

 client:elinks

 lvs:ipvsadm

 web1、web2:httpd

3.在 web1、web2 上:

 配置好 httpd

 编辑脚本:vim web.sh

#!/bin/bash

VIP=192.168.0.88

ifconfig tunl0 down

ifconfig tunl0 $VIP broadcast $VIP netmask 255.255.255.255 up

route add -host $VIP dev tunl0

echo 1 > /proc/sys/net/ipv4/conf/tunl0/arp_ignore

echo 2 > /proc/sys/net/ipv4/conf/tunl0/arp_announce

echo 0 > /proc/sys/net/ipv4/conf/tunl0/rp_filter

echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

注:为了实现IP隧道,Linux定义了一种新的协议IPIP,产生一个成为tun10的网络设备用来封装数据。使用方式和普通网卡没有差异

4.在 lvs 上编辑脚本

 vim lvs-tun.sh

#!/bin/bash

VIP=192.168.0.88

RIP1=192.168.0.2

RIP2=192.168.0.3

ipvsadm -C

ifconfig eno16777736:0 $VIP broadcast $VIP netmask 255.255.255.255 up

route add -host $VIP dev eno16777736:0

ipvsadm -A -t $VIP:80 -s wlc

ipvsadm -a -t $VIP:80 -r $RIP1:80 -i -w 1

ipvsadm -a -t $VIP:80 -r $RIP2:80 -i -w 1

5.在 web1、web2 上:bash web.sh

 在 lvs 上:bash lvs-tun.sh

6.在 client:elinks http://192.168.0.88 可以看到 web1 和 web2 上的网页交替出现

九 检查 lvs 服务器的状态:ipvsadm

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

开源博客项目Blog .NET Core源码学习(11:App.Core项目结构分析)

开源博客项目Blog的App.Core项目主要定义数据库表对应的数据类&#xff0c;同时定义配置文件读取、日志记录、辅助缓存等辅助类。App.Core项目安装的Nuget包不多&#xff0c;仅包括SqlSugarCore和Microsoft.Extensions.DependencyInjectio两类。   App.Core项目的顶层文件夹如…

负氧离子监测站:创造健康生活环境

TH-FZ5在蓝天白云之下&#xff0c;那一座座高耸的全彩屏负氧离子监测站&#xff0c;如同一支支科技的绿芽&#xff0c;静静破土而出&#xff0c;为这片土地带来了新的生命力。这些现代化的设备不仅美化了环境&#xff0c;更是我们呼吸健康守护者&#xff0c;它们的存在让我们的…

OpenHarmony内核编程实战

在正式开始之前&#xff0c;对于刚接触OpenHarmony的伙伴们&#xff0c;面对大篇幅的源码可能无从下手&#xff0c;不知道怎么去编码写程序&#xff0c;下面用一个简单的例子带伙伴们入门。 ▍任务 编写程序&#xff0c;让开发板在串口调试工具中输出”Hello&#xff0c;Open…

TS函数类型

函数类型表达式 function hello(x: string) {console.log(x) } //greeter函数的参数是一个函数fn&#xff0c;fn也有一个string类型参数&#xff0c;无返回值。 function greeter(fn: (a: string) > void) {fn(hello) } greeter(hello)也可以把定义参数类型的语句单独提取出…

Ubuntu20.04下PCL安装,查看,卸载等操作

Ubuntu20.04下PCL安装&#xff0c;查看&#xff0c;卸载等操作 项目来源 https://github.com/PointCloudLibrary/pclhttps://pointclouds.org/documentation/modules.htmlhttps://pcl.readthedocs.io/projects/tutorials/en/master/ 点云学习&#xff1a; https://github.c…

Day57-Nginx反向代理与负载均衡初步应用

Day57-Nginx反向代理与负载均衡初步应用 1. Nginx代理介绍2. Nginx代理常见模式2.1 正向代理2.2 反向代理2.3 正向与反向代理区别 3. Nginx代理支持协议4. Nginx反向代理场景实践5. lb01安装部署nginx 1. Nginx代理介绍 1&#xff09;在没有代理的情况下&#xff0c;都是客户端…

苹果与百度合作,将在iPhone 16中使用生成式AI

3月25日&#xff0c;《科创板日报》消息&#xff0c;苹果将与百度进行技术合作&#xff0c;为今年即将发布的iPhone16、Mac系统和iOS 18提供生成式AI&#xff08;AIGC&#xff09;功能。 据悉&#xff0c;苹果曾与阿里巴巴以及另外一家国产大模型厂商进行了技术合作洽谈。最终…

信号处理--基于混合CNN和transfomer自注意力的多通道脑电信号的情绪分类的简单应用

目录 关于 工具 数据集 数据集简述 方法实现 数据读取 ​编辑数据预处理 传统机器学习模型(逻辑回归&#xff0c;支持向量机&#xff0c;随机森林) 多层感知机模型 CNNtransfomer模型 代码获取 关于 本实验利用结合了卷积神经网络 (CNN) 和 Transformer 组件的混合…

Qt 作业 24/3/26

1、实现闹钟 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTime> #include <QLineEdit>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent …

FPGA之状态机学习

作为一名逻辑工程师&#xff0c;掌握和应用状态机设计是必不可少的。能够灵活的应用状态机是对逻辑工程师最基本的要求&#xff0c;状态机设计的好坏能够直接影响到设计系统的稳定性&#xff0c;所以学会状态机是非常的重要。 1.状态机的概念 状态机通过不同的状态迁移来完成特…

STM32之HAL开发——串口配置(源码)

串口收发原理框图&#xff08;F1系列&#xff09; 注意&#xff1a;数据寄存器有俩个一个是收一个是发&#xff0c;但是在标准库或者HAL库中没有特别区分开来是俩个寄存器&#xff01; USART 初始化结构体详解 HAL 库函数对每个外设都建立了一个初始化结构体&#xff0c;比如 …

如何快速在ESXi中嵌套部署一台ESXi服务器?

正文共&#xff1a;1234 字 26 图&#xff0c;预估阅读时间&#xff1a;2 分钟 我们之前介绍过VMWare ESXi服务器镜像的定制&#xff08;VMware ESXi部署镜像定制&#xff09;和部署&#xff08;惠普VMware ESXI 6.7定制版部署&#xff09;&#xff0c;但是还没有介绍过ESXi版本…

YOLOv8改进 | 主干篇 | 修复官方去除掉PP-HGNetV2的通道缩放功能(轻量又涨点,全网独家整理)

一、本文介绍 本文给大家带来的改进机制是大家在跑RT-DETR提供的HGNetV2时的一个通道缩放功能&#xff08;官方在前几个版本去除掉的一个功能&#xff09;&#xff0c;其中HGNetV2当我们将其集成在YOLOv8n的模型上作为特征提取主干的时候参数量仅为230W 计算量为6.7GFLOPs该网…

【机器学习之---数学】随机游走

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 随机游走 1. 概念 1.1 例1 在你的饮食俱乐部度过了一个富有成效的晚上后&#xff0c;你在不太清醒的状态下离开了。因此&#xff0c;你会醉醺醺地在展…

【opencv】实时位姿估计(real_time_pose_estimation)—3D模型注册

相机成像原理图 物体网格、关键点&#xff08;局内点、局外点&#xff09;图像 box.ply resized_IMG_3875.JPG 主程序main_registration.cpp 主要实现了利用OpenCV库进行3D模型的注册。主要步骤包括加载3D网格模型、使用鼠标事件选择对应的3D点进行2D到3D的注册、利用solvePnP算…

在django中使用kindeditor出现转圈问题

在django中使用kindeditor出现转圈问题 【一】基础检查 【1】前端检查 确保修改了uploadJson的默认地址 该地址需要在路由层有映射关系 确认有加载官方文件 kindeditor-all-min.js确保有传递csrfmiddlewaretoken 或者后端关闭了csrf验证 <textarea name"content&qu…

无人驾驶矿卡整体解决方案(5g物联网通信方案)

​无人驾驶矿卡是智能矿山的重要组成部分,通过远程操控替代人工驾驶,可以显著提高采矿效率和作业安全性。但要实现无人驾驶矿卡,需要依赖于可靠高效的通信网络,来传输现场视频、控制指令和运行数据。以下是某大型煤矿在部署无人驾驶矿卡时,所采用的星创易联物联网整体解决方案。…

如何区分模型文件是稳定扩散模型和LORA模型

区分模型文件是否为稳定扩散模型&#xff08;Stable Diffusion Models&#xff09;或LORA模型&#xff08;LowRank Adaptation&#xff09;通常需要对模型的结构和内容有一定的了解。以下是一些方法来区分这两种模型文件&#xff1a; 1. 文件格式和结构 稳定扩散模型&#xff1…

词根词缀基础

一&#xff0e;词根词缀方法&#xff1a; 1. 类似中文的偏旁部首&#xff08;比如“休”单人旁木→一个人靠木头上休息&#xff09; 2. 把单词拆分后&#xff0c;每一个部分都有它自己的意思&#xff0c;拼凑在一起就构成了这个单词的意思 3. 一个规律&#xff0c;适用大部分…

基于nodejs+vue多媒体素材管理系统python-flask-django-php

该系统采用了nodejs技术、express 框架&#xff0c;连接MySQL数据库&#xff0c;具有较高的信息传输速率与较强的数据处理能力。包含管理员、教师和用户三个层级的用户角色&#xff0c;系统管理员可以对个人中心、用户管理、教师管理、资源类型管理、资源信息管理、素材类型管理…