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

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

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

相关文章

数据结构——队列(C语言版)

前言&#xff1a; 在学习完数据结构顺序表和链表之后&#xff0c;其实我们就可以做很多事情了&#xff0c;后面的栈和队列&#xff0c;其实就是对前面的顺序表和链表的灵活运用&#xff0c;今天我们就来学习一下队列的原理和应用。 准备工作&#xff1a;本人习惯将文件放在test…

美国大选献金项目数据分析

需求 加载数据查看数据的基本信息指定数据截取&#xff0c;将如下字段的数据进行提取&#xff0c;其他数据舍弃 cand_nm &#xff1a;候选人姓名contbr_nm &#xff1a; 捐赠人姓名contbr_st &#xff1a;捐赠人所在州contbr_employer &#xff1a; 捐赠人所在公司contbr_occu…

yarn安装和使用及与npm的区别

一、yarn安装和使用 要安装和使用yarn&#xff0c;您可以按照以下步骤进行操作&#xff1a; 安装Node.js&#xff1a;首先&#xff0c;您需要在您的计算机上安装Node.js。您可以从Node.js的官方网站&#xff08;https://nodejs.org/en/download/&#xff09;下载并安装适用于您…

Linux 中用grep命令 辅助excle筛查数据

问题&#xff1a;因为要对多个年度的多个工作的相关于人员进行匹配&#xff0c;以形成人员信息详细表&#xff0c;要从总表中根据项目人员名单进行筛出。最常用是excle 中的VULOOUP 函数&#xff0c;但是由于人员信息详表中有格式、内容方面的问题&#xff0c;无法实现&#xf…

搭建Flutter开发环境、从零基础到精通(文末送书【北大出版社】)

目录 搭建开发环境 1. 下载Flutter SDK 2. 设置镜像地址及环境变量 3. 安装与设置Android Studio 4. 安装Visual Studio Code与Flutter开发插件 5. IDE的使用和配置 6. 安装Xcode 7. 检查Flutter开发环境 好书推荐 内容简介 作者简介 搭建开发环境 Flutter可以跨平…

selenium完结篇,补充知识点

1、前两期没看的建议先去看前两期博客 2、选择框的勾选 getAttribute("type")是获取属性的意思 List<WebElement> webElementswebDriver.findElements(By.cssSelector("input"));for(int i0;i<webElements.size();i){if(webElements.get(i).getA…

使用npm i进行admin依赖安装的时候出现问题

提示&#xff1a; npm ERR! code CERT_HAS_EXPIRED npm ERR! errno CERT_HAS_EXPIRED npm ERR! request to https://registry.npm.taobao.org/string-width failed, reason: certificate has expired 切换淘宝源到http或者更换其他国内镜像 npm config set registry http:/…

C# get set 访问器

在C#中get 访问器set 访问器属性的优势例子 在C#中 get 和 set 是访问器&#xff08;accessors&#xff09;的关键词&#xff0c;它们用于定义属性的读取和写入行为。属性是一种特殊的类成员&#xff0c;它提供了对字段&#xff08;field&#xff09;或计算结果的灵活访问。 …

Vue2进阶——组件通信

文章目录 一、props配置项二、组件自定义事件三、全局事件总线四、消息订阅与发布 一、props配置项 作用&#xff1a;组件间通信传递数据 <Demo name"xxx"/>接收数据 1. 只接收 props:[name] 2. 限制类型 props&#xff1a;{name:string } 3.限制类型&#…

Salesforce宣布将停用Workflow Rules和Process Builder!

在近期的公告中&#xff0c;Salesforce透露在2025年12月31日之后将不再支持Workflow Rules和Process Builder。 Salesforce敦促用户在截止日期前将其自动化流程迁移到Flow Builder&#xff0c;以确保不间断的支持和漏洞修复。此举正值Salesforce将重点转向更现代、可扩展、低代…

rust中常用cfg属性和cfg!宏的使用说明,实现不同系统的条件编译

cfg有两种使用方式&#xff0c;一种是属性&#xff1a; #[cfg()]&#xff0c;一种是宏&#xff1a;cfg! &#xff0c;这两个都是非常常用的功能。 #[cfg()]是 Rust 中的一个属性 用于根据配置条件来选择性地包含或排除代码。cfg 是 "configuration" 的缩写&#xf…

Web举例:防火墙二层,上下行连接交换机的主备备份组网

Web举例&#xff1a;防火墙二层&#xff0c;上下行连接交换机的主备备份组网 介绍了业务接口工作在二层&#xff0c;上下行连接交换机的主备备份组网的Web举例。 组网需求 如图1所示&#xff0c;两台FW的业务接口都工作在二层&#xff0c;上下行分别连接交换机。FW的上下行业…

修改android11的默认桌面

要修改 Android 11 的默认桌面&#xff0c;通常需要使用第三方的启动器&#xff08;Launcher&#xff09;应用程序来替换系统默认的启动器。以下是一般步骤&#xff1a; 下载第三方启动器应用&#xff1a; 在 Google Play 商店或其他应用商店中搜索并下载你喜欢的第三方启动器应…

云服务器配置 docker-spark

云服务器配置 docker-spark 1. 安装2. 启动3. 查看4. 验证5. 其他 1. 安装 我的服务器是腾讯云轻量应用服务器&#xff0c;2 核 2 G&#xff0c;已经内置了 docker&#xff0c; 配置大概如下&#xff1a; ubuntuVM-20-5-ubuntu --------------------- OS: Ubuntu 22.04 LTS x…

中小型集群部署,Docker Swarm(集群)使用及部署应用介绍

1、Docker Swarm简介 说到集群&#xff0c;第一个想到的就是k8s&#xff0c;但docker官方也提供了集群和编排解决方案&#xff0c;它允许你将多个 Docker 主机连接在一起&#xff0c;形成一个“群集”&#xff08;Swarm&#xff09;&#xff0c;并可以在这个 Swarm 上运行和管…

企业安全建设与安全架构实践资料合集(附下载)

企业安全建设与安全架构实践资料合集&#xff0c;供大家参考学习。 知识星球下载&#xff1a;https://t.zsxq.com/18Kq8s0ov 一、企业安全建设与最佳实践 云时代企业安全建设.pdf 云安全服务管理指南.pdf 企业信息安全建设策略与实践.pdf 企业网络安全设计方案.pdf 企业安全建…

pytest和unittest 如何选择?

目录 如何选择?pytest和unittest哪个更强大pytest和unittest是否可同时应用如何选择? pytest和unittest都是Python中常用的测试框架,它们各自具有一些特点和优势,选择哪一个取决于你的具体需求和偏好。以下是一些关于这两个框架的对比和选择建议: 易用性和简洁性: pytes…

Go语言学习Day4:函数(上)

名人说&#xff1a;莫愁千里路&#xff0c;自有到来风。 ——钱珝 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 1、函数的概念与定义①函数的概念②函数的具体定义③多返回值 2、函数参数与作用域①可变参数②形…

【零基础C语言】文件操作

目录 理解文件操作 什么是文件 程序文件 数据文件 文件名字 二进制文件和文本文件 文件的打开和关闭 文件的打开和关闭操作 实验1&#xff0c;打开一个文件并且输入26个字母 打开读取文件text.txt ,并且将它拷贝进text_cpy.txt 使用 fputs 和 fgets 函数 使用 fprintf函…

设计模式|发布-订阅模式(Publish-Subscribe Pattern)

文章目录 初识发布-订阅模式发布-订阅模式的关键概念发布订阅模式的优缺点示例代码&#xff08;使用 Java 实现&#xff09;有哪些知名框架使用了发布-订阅模式常见面试题 初识发布-订阅模式 发布-订阅模式&#xff08;Publish-Subscribe Pattern&#xff09;是一种软件架构设…