LVS学习与练习

news2024/9/23 9:33:03

LVS (Linux Virtual Server) 是一种高性能的负载均衡解决方案,它基于 Linux 内核实现。LVS 可以用来构建高可用性和高性能的 Web 服务器集群。LVS 支持多种负载均衡算法和模式,可以有效地分发网络请求到多台后端服务器上。

 LVS 的主要组成部分

1. Director(调度器):
   - 负责接收客户端的请求,并根据一定的策略将请求分发给后端的真实服务器 (Real Server)。
   - Director 可以是一台专门的机器,也可以是集群中的一台或多台机器。

2. Real Servers(真实服务器):
   - 后端服务器,负责处理 Director 分发过来的请求,并将响应结果返回给 Director 或直接返回给客户端。

LVS 的工作模式

LVS 主要有三种工作模式:

1. NAT (Network Address Translation):
   - 在这种模式下,Director 负责接收客户端的请求,然后通过 NAT 技术将请求转发给后端的真实服务器。
   - 真实服务器处理请求后,将响应发送回 Director,Director 再将响应中的源 IP 地址转换为客户机 IP 地址,并转发给客户机。
   - NAT 模式下的 Director 必须有足够的性能来处理大量的转发请求。

2. DR (Direct Routing):
   - 在 DR 模式下,Director 和所有的真实服务器必须位于同一个物理网络中,并且共享同一个 IP 地址。
   - 当 Director 收到请求时,它会修改请求的目的 MAC 地址,使得请求直接路由到真实的服务器。
   - 真实服务器处理完请求后,直接将响应发回给客户端,无需经过 Director。

3. TUN (IP Tunneling):
   - TUN 模式下,Director 和真实服务器可以在不同的物理网络中,但必须支持 IP 隧道技术。
   - Director 收到请求后,将请求封装成一个新的 IP 数据包,并通过隧道发送给真实服务器。
   - 真实服务器处理完请求后,再将响应封装成新的 IP 数据包,并通过隧道发送回客户端。

LVS 调度算法分类

1. 静态调度算法:
   - 这些算法在调度时不会考虑后端服务器的实际负载情况。
   - 一旦调度决策做出后,后续的数据包会遵循同样的规则进行分发。

2. 动态调度算法:
   - 这些算法会根据后端服务器的当前负载情况以及其他条件实时地调整调度决策。
   - 能够更好地适应后端服务器的动态变化。

LVS 静态调度算法

1. Round Robin (RR):
   - 最基本的调度算法,按照顺序将请求分发给后端服务器。
   - 适用于所有服务器性能相当的情况。

2. Weighted Round Robin (WRR):
   - 为每台服务器分配一个权重值,根据权重值按比例分发请求。
   - 适用于服务器性能不一的情况,性能较好的服务器可以承担更多的请求。

3. Destination Hash (DH):
   - 根据目标 IP 地址进行哈希计算,将请求分发到特定的后端服务器。
   - 适合于特定 IP 地址对应特定服务器的情况。

4. Source Hash (SH):
   - 根据客户端 IP 地址进行哈希计算,将来自同一客户端的请求始终分发给同一台服务器。
   - 实现会话保持,适用于需要保持会话状态的应用。

5. Weighted Fail Over (WFO):
   - 当主服务器不可用时,将请求分发到备用服务器。
   - 可以为备用服务器设置权重,决定备用服务器的优先级。

 LVS 动态调度算法

1. Least Connections (LC):
   - 根据每台服务器当前的连接数来决定将请求分发给哪一台服务器。
   - 将请求分发给连接数最少的服务器。

2. Weighted Least Connections (WLC):
   - 考虑服务器的权重和当前连接数,优先将请求分发给权重较高且连接数较少的服务器。
   - 是 LVS 默认使用的调度算法。

3. Locality-Based Least Connections (LBLC):
   - 考虑客户端 IP 地址的地理位置信息,将请求分发给地理位置相近的服务器。
   - 适合于地理分布广泛的应用场景。

4. Locality-Based Least Connections with Replication (LBLCR):
   - 与 LBLC 类似,但在 LBLC 的基础上增加了复制机制,可以提高容错能力。

5. Shortest Expected Delay (SED):
   - 根据服务器的响应时间和连接数综合考虑,尽可能将请求分发给响应时间最短的服务器。

6. Never Queue (NQ):
   - 当所有服务器都繁忙时,丢弃新的请求而不是排队等待。
   - 适用于对响应时间要求较高的场景。

调度算法表格

ipvsadm 实验练习

一、NAT模式

实验前期准备

在使用虚拟机搭建环境时记得将往桥接lvs上添加对应网卡

lvs主机IP对应配置记得分nat和仅主机模式网卡对应的IP

vim /etc/NetworkManager/system-connections/eth0.nmconnection #打开配置文件
cat /etc/NetworkManager/system-connections/eth0.nmconnection #修改配置文件

打开lvs内核路由功能

sysctl -a | grep ip_forward #查看内核路由是否开启

vim /etc/sysctl.conf #在文件末尾添加 
net.ipv4.ip_forward = 1

与配置lvs相同分别配置主机1 主机2

在两台主机上开启http功能

之后将参数上传并打开服务

检查初步配置是否正确

curl 192.168.0.10 

环境搭建完毕开始实验

安装对应软件

dnf install ipvsadm -y  #安装ipvsadm

配置信息实现简单的轮询调度

ipvsadm -A -t 172.25.254.100:80 -s rr
[root@lvs ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.10:80 -m
[root@lvs ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.20:80 -m
[root@lvs ~]# ipvsadm -Ln

在客户端测试是否正确

总结1 全部配置完成后一定要查看路由表是否生效。

实验二、DR模式

实验前期准备

保存上个实验所用的虚拟机在原有的主机上增加一台新的lvs 将原有lvs可以直接充当网关 

新加入的lvs选择仅主机模式

在新加入的lvs中安装对应的软件

同时修改IP和网关

vim /etc/NetworkManager/system-connections/eth0.nmconnection #打开配置文件
cat /etc/NetworkManager/system-connections/eth0.nmconnection #修改配置文件

刷新路由

在两台主机与新lvs上配置

ip a a 192.168.0.200/32 dev lo

在两台主机上配置VIP不对外相应

[root@web2 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@web2 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@web2 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@web2 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_ignore

测试

防火墙标签解决轮询错误

在两台主机中安装和启动mod_ssl ,apache。

yum install mod_ssl -y
systemctl restart httpd

在vs调度器中设定端口标签,让80和443端口成为一个整体

iptables -t mangle -A PREROUTING -d 192.168.0.200 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 666

配置调度规则

​
[root@apache ~]#  iptables -t mangle -A PREROUTING -d 192.168.0.200 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 666
[root@apache ~]# ipvsadm -C
[root@apache ~]# ipvsadm -A -f 666 -s rr
[root@apache ~]# ipvsadm -a -f 666 -r 192.168.0.10 -g
[root@apache ~]# ipvsadm -a -f 666 -r 192.168.0.20 -g

​

查看规则是否生效

ipvsadm -Ln

测试

curl -k https://192.168.0.200;curl 192.168.0.200

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

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

相关文章

InternLM+LlamaIndex RAG 实践

本期实战训练营介绍了使用书生葡语的InternLM和LlamaIndex框架进行RAG项目的实践。内容分为三个部分:回顾InternLM的发展历程,介绍RAG的基本概念和应用,以及实践一个RAG项目。RAG技术结合了检索与生成,通过外部知识库增强大模型的…

开源Docker图形化管理工具DockerUI

DockerUI 是一个 Web 用户界面,它允许用户通过浏览器与 Docker 守护进程进行交互,而无需在命令行中执行 Docker 命令。它为 Docker 容器、镜像、网络等提供了直观的图形界面管理。然而,需要注意的是,DockerUI 已经不再是最流行的 …

领先数年!这款ERP系统已成制造业趋势!

企业数字化转型的趋势不可阻挡,在全球化竞争的背景下,市场变化迅速,客户需求日益多样化,企业需要更加敏捷地响应市场变化,提高生产效率和产品质量,以满足客户的需求。 而在这一转型过程中,ERP …

怎么直接在PDF上修改内容?随心编辑PDF内容

PDF(Portable Document Format)作为一种专用于阅读而非编辑的文档格式,其设计的核心目的是保持文档格式的一致性,确保文档在不同平台和设备上都能以相同的布局和格式呈现。然而,在实际工作和生活中,我们经常需要对PDF文档进行编辑…

Python编写Word文档

目录 1. 创建word文档 2. 添加标题、居中、字体16大小 3. 添加标题一 4. 添加一段话并设置字体颜色 5. 换页 6. 插入表格 1. 创建word文档 from docx import Documentdoc Document() 2. 添加标题、居中、字体16大小 from docx.shared import Pt from docx.enum.text i…

AT360-6T杭州中科微授时模块场景应用

AT360-6T是一款高性能多系统卫星定位授时模块,基于自主研发的北斗多系统 SOC 芯片,可以同时接收中国的 BDS(北斗二号和北斗三号)、美国的 GPS、俄罗斯的 GLONASS、欧盟的 GALILEO 和日本的 QZSS 等多个卫星导航系统的 GNSS 信号来实现多系统联合定位授时…

实用篇 | 服务器查看监听端口的程序

对于一些程序员最痛苦的是接手一些“二手系统“, 由于年久失修, 加上裁员离职,系统文档不完善等原因, 只留下服务器配置和代码。 接手人,只能对着这些仅存的代码和服务器硬刚, 对服务器硬刚的第一步&#x…

高盛推荐包装食品行业两大首选股票

市场动荡与食品行业的防御性 近期市场的剧烈波动、7月份疲弱的就业报告以及对美联储可能降息的预期,引发了人们对经济衰退的担忧。尽管市场在本周有所反弹,投资者们开始调整策略,寻求更具防御性的投资方向。在这种背景下,包装食品…

Vue2移动端(H5项目)项目基于vant实现select单选(支持搜索、回显、自定义下拉label展示功能)

一 最终效果 二、参数配置 1、代码示例&#xff1a; <t-selectv-model"formData.materialNo"valueKey"materialNo"showLabel"materialName"labelKey"label"label"判定品级"input-align"right"placeholder&qu…

Google Earth Engine(GEE)——1986-2021年黄河入海口区域的逐年影像展示案例分析,并加载可以分享的URL链接

函数: size() Returns the number of elements in the collection. 返回集合中元素的数量。 Arguments: this:collection (FeatureCollection): The collection to count. Returns: Integer 融合影像可以一个接一个进行融合 merge(collection2) Merges two image co…

CAXA快捷键

1.左下角处选择导航&#xff0c;快捷键F6可以切换 2.自定义快捷键 鼠标右键点击菜单栏空白处 点击自定义&#xff0c;便可以修改快捷键

Leetcode—1239. 串联字符串的最大长度【中等】(unordered_set)

2024每日刷题&#xff08;155&#xff09; Leetcode—1239. 串联字符串的最大长度 实现代码 class Solution { public:bool charSet(string & s) {unordered_set<char> charSet(s.begin(), s.end());// true表示有重复// false表示唯一return s.size() ! charSet.s…

HTML原生手搓询盘

效果展示&#xff1a; 1、PC布局&#xff1a; 2、移动布局&#xff1a; 3、交互展示&#xff1a; 1、HTML代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"wid…

鸿蒙学习(一):基础知识

认识和存储数据 基础类型&#xff1a; 数字&#xff1a;number 布尔值&#xff1a;boolean 变量存储&#xff1a; let 变量名&#xff1a;类型 值 let title:string 你好 注意&#xff1a;1、字符串需要引号引起来&#xff1b;2、单引号双引号都可以&#xff1b;3、存储的内…

高校如何利用AIGC提高教学效率?

AIGC技术可按照模态分为文本、图像、语言以及多模态等&#xff0c;其中以图像发展最为迅速&#xff0c;AI绘画技术深入广告设计、营销、工业设计、游戏设计等各个领域&#xff0c;复合增长率将超过80% &#xff0c;未来以内容生产模式变革为根本将引爆生产力革命。目前AI人才缺…

HTML实现弹出层

leopard/ˈlepərd/ 豹子&#xff0c;豹纹 弹出层指的是鼠标悬停于某个元素之上时显示的一个界面组件。 关注和理解特性&#xff1a;z-index属性和动态生成HTML元素。 HTML5新增&#xff1a; figure:媒体内容(图像&#xff0c;音频&#xff0c;视频)&#xff0c;用于包含一…

uniapp本地打包app安装说明

uniapp本地打包app安装说明 目录 uniapp本地打包app安装说明一、打包说明1.HBuilder X 生成本地打包资源2.Android Studio和App离线SDK环境准备2.1 下载Android Studio和 App离线SDK2.2 资源替换2.3 id属性值修改。2.4 添加provider信息到AndroidManifest.xml中的<applicati…

人工智能领域颠覆性技术创新,数字人泛化AI时代来临

是先有鸡还是先有蛋&#xff0c;这个问题人类还没有搞清楚&#xff0c;这次又有一个新的问题产生了&#xff0c;是算法进化了AI&#xff0c;还是AI进化了算法。我们知道直播平台都是利用算法对数字人直播进行斟别&#xff0c;但这一次被数字人泛化技术颠覆了&#xff0c;AI回复…

连锁店:线下与线上数字化融合的强大优势

亲爱的朋友们&#xff0c;今天咱们来聊聊连锁店在当下数字化时代的新发展——线下与线上的数字化融合&#xff01; 扩大客户覆盖范围 这可是关键一招&#xff01;就像咱们熟悉的本地餐饮连锁店&#xff0c;借助线上外卖平台&#xff0c;美食能轻松送到更远的地方&#xff0c;客…

SQL SERVER 2008多表关联查询,关联条件用(=*、*=、=)无法使用,高版本数据库不兼容,报错“*=”附近有语法错误!

专业问题&#xff0c;已经习惯了先问AI 下图是百度AI的回复 下图是讯飞星火的回复 下面是SQL SERVER 2022数据库引擎&#xff0c;查询使用&#xff01; 报错&#xff1a;“*”附近有语法错误。 查询数据库版本语法 SELECT VERSION 得到数据库版本&#xff1a;SQL Server 202…