全网最详细教你学习LVS(Linux virual server)

news2024/11/23 19:18:39
LVS 官网 : http://www.linuxvirtualserver.org/                    //(可参考)

一、LVS定义:

是一个基于 Linux 操作系统的开源软件负载均衡项目。 LVS 主要用于实现服务器的负载均衡和高可用性。它工作在网络的第四层,可以对 TCP 和 UDP 协议进行负载均衡。通过将客户端的请求分发到多台服务器上,从而提高系统的整体性能和可靠性。

二、集群Cluster和分布式

Cluster常见三种类型

  • LB(LoadBalancing):负载均衡,由多个主机组成,每个主机只承担一部分访问
  • HA(High Availiablity):高可用SPOF(single Point Of failure); MTBF:Mean Time Between Failure 平均无故障时间,正常时间 MTTR:Mean Time To Restoration repair)平均恢复前时间,故障时间 A=MTBF/MTBF+MTTR (0,1)99%, 99.5%, 99.9%, 99.99%, 99.999% SLAService level agreement(服务等级协议)是在一定开销下为保障服务的性能和可用性,服 务提供商与用户间定义的一种双方认可的协定。通常这个开销是驱动提供服务质量的主要因素。在 常规的领域中,总是设定所谓的三个9,四个9来进行表示,当没有达到这种水平的时候,就会有一 些列的惩罚措施,而运维,最主要的目标就是达成这种服务水平。 停机时间又分为两种,一种是计划内停机时间,一种是计划外停机时间,而运维则主要关注计划外停机时间
  • HPC(High-performance computing

分布式

  • 分布式存储:Ceph,GlusterFs,FastDFS,MogileFs
  • 分布式计算:hadoop,Spark

应用:

  • 分布式应用-服务按照功能拆分,使用微服务
  • 分布式静态资源--静态资源放在不同的存储集群上
  • 分布式数据和存储--使用key-value缓存系统
  • 分布式计算--对特殊业务使用分布式计算,比如Hadoop集群

区别与联系

  • 集群:同一个业务系统,部署在多台服务器上,集群中,每一台服务器实现的功能没有差别,数据 和代码都是一样的;通过提高单位时间内执行的任务数 来提升效率。
  • 分布式:一个业务被拆成多个子业务,或者本身就是不同的业务,部署在多台服务器上。分布式中,每一台服务器实现的功能是有差别的,数据和代码也是不一样的,分布式每台服务器功能加起 来,才是完整的业务;以缩短单个任务的执行时间来提升效率的。

举例来说,对于大型网站,访问用户很多,实现一个群集,在前面部署一个负载均衡服务器,后面几台服务器 完成同一业务。如果有用户进行相应业务访问时,负载均衡器根据后端哪台服务器的负载情况,决定由给哪一台去完成响应,并且台服务器垮了,其它的服务器可以顶上来。分布式的每一个节点, 都完成不同的业务,如果一个节点垮了,那这个业务可能就会失败。

 三、LVS运行原理

  • VS: Virtual Server,负责调度。
  • RS:RealServer,负责真正提供服务。

1.LVS概念

VS
Virtual Server(虚拟服务器)
RS
Real Server(真实服务器)
CIP
Client IP(客户端IP地址)
VIP
Virtual serve IP VS 外网的IP(虚拟服务器的外网IP地址)
DIP
Director IP VS 内网的 IP(Director的内网IP地址)
RIP
Real server IP(真实服务器的IP地址)

访问流程:CIP---VIP==DIP---RIP

2、LVS集群类型

  •  lvs-nat: 修改请求报文的目标IP,多目标IP的DNAT
  • lvs-dr: 操纵封装新的MAC地址
  • lvs-tun: 在原请求IP报文之外新加一个IP首部
  • lvs-fullnat: 修改请求报文的源和目标IP

四、LVS的NAT模式

数据逻辑:

  1. 客户端发送访问请求,请求数据包中含有请求来源(cip),访问目标地址(VIP)访问目标端口 (9000port)
  2. VS服务器接收到访问请求做DNAT把请求数据包中的目的地由VIP换成RS的RIP和相应端口
  3. RS1相应请求,发送响应数据包,包中的相应保温为数据来源(RIP1)响应目标(CIP)相应端口 (9000port)
  4. VS服务器接收到响应数据包,改变包中的数据来源(RIP1-->VIP),响应目标端口(9000-->80)
  5. VS服务器把修改过报文的响应数据包回传给客户端
  6. lvs的NAT模式接收和返回客户端数据包时都要经过lvs的调度机,所以lvs的调度机容易阻塞

1、实验环境:

主机名IPVIP
lvs192.168.0.100172.25.254.100
server1192.168.0.10null
server192.168.0.20null

2、命令

(1)在server1和server2上

[root@server1 boot]#vmset.sh eth0 192.168.0.100 webserver1.hyl.org
[root@server1 boot]#vim /etc/NetworkManager/system-connections/eth0.nmconnection
[root@server1 boot]#nmcli connection reload
[root@server1 boot]#nmcli connection up eth0
[root@server1 boot]#route -n
[root@server1 boot]# yum install httpd -y
[root@server1 boot]# echo webserver - 192.168.0.10 > /var/www/html/index.html
[root@server boot]# systemctl enable  --now httpd
[root@server2 boot]#  echo webserver2 - 192.168.0.20 > /var/www/html/index.html
[root@server2 boot]# systemctl enable  --now httpd

(2)lvs

关闭防火墙

[root@lvs boot]# systemctl stop firewalld.service

配置 

[root@lvs boot]# vmset.sh eth0 172.25.254.100 lvs.hyl.org
[root@lvs boot]# vmset.sh eth1 192.168.0.100  lvs.hyl.org
[root@lvs boot]# vim /etc/NetworkManager/system-connections/eth1.nmconnection
[root@lvs boot]# nmcli connection reload
[root@lvs boot]# nmcli connection up eth1
[root@lvs boot]# sysctl -a | grep ip_forward
net.ipv4.ip_forward = 0
net.ipv4.ip_forward_update_priority = 1
net.ipv4.ip_forward_use_pmtu = 0
[root@lvs boot]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@lvs boot]# sysctl -p
net.ipv4.ip_forward = 1

测试

[root@lvs boot]# curl 192.168.0.10
[root@lvs boot]# curl 192.168.0.20

安装ipvsadm

[root@lvs boot]# yum install ipvsadm -y

 添加调度策略

[root@lvs boot]# ipvsadm -A -t 172.25.254.100:80 -s rr
[root@lvs boot]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.10:80 -m
[root@lvs boot]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.20:80 -m
[root@lvs boot]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
   -> RemoteAddress:Port     Forward Weight ActiveConn InActConn
TCP 172.25.254.100:80 rr
   -> 192.168.0.10:80   Masq   1   0   0
   -> 192.168.0.20:80

保存规则

[root@lvs boot]# ipvsadm-save -n  > /etc/sysconfig/ipvsadm
[root@lvs boot]# cat /etc/sysconfig/ipvsadm
-A -t 172.25.254.100:80 -s rr 
-a -t 172.25.254.100:80 -r 192.168.0.10:80 -m
-a -t 172.25.254.100:80 -r 192.168.0.20:80 -m
[root@lvs boot]# ipvsadm -C 
[root@lvs boot]# ipvsadm-restore < /etc/sysconfig/ipvsadm 
[root@lvs boot]# cat /etc/sysconfig/ipvsadm
-A -t 172.25.254.100:80 -s rr 
-a -t 172.25.254.100:80 -r 192.168.0.10:80 -m
-a -t 172.25.254.100:80 -r 192.168.0.20:80 -m

删除所有规则

[root@lvs boot]# ipvsadm -C
[root@lvs boot]# ipvsadm -Ln

重新加载规则

[root@lvs boot]# ipvsadm -R < /etc/sysconfig/ipvsadm-config
[root@lvs boot]# ipvsadm -Ln

测试 

[root@lvs boot]# for i in {1..10}; do curl 172.25.254.100; done

五、LVS的DR模式

定义:Direct Routing,直接路由,LVS默认模式,应用最广泛,通过为请求报文重新封装一个MAC首部进行 转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源 IP/PORT,以及目标IP/PORT均保持不变

1、实验环境

 

主机名IP网关VIP
client172.25.254.200172.25.254.100null
router172.25.254.100/仅主机192.168.0.100null
lvs192.168.0.50192.168.0.100192.168.0.200
server1192.168.0.10192.168.0.200192.168.0.200
server2192.168.0.20192.168.0.100192.168.0.200

2、配置

(1)server1和server2相同配置

使用vim,这里已经配置好,直接查看

[root@server1 ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection
[connection]
id=eth0
type=ethernet
interface-name=eth0

[ipv4]
address1=192.168.0.20/24,192.168.0.100
method=manual

RS主机中使VIP不对外响应

[root@server boot]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@server boot]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@server boot]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce  
[root@server boot]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

[root@server boot]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore 
[root@server boot]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@server boot]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce 
[root@server boot]#  echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore  

在server中设定VIP

[root@server boot]#  ip a a 192.168.0.200/32 dev lo
[root@server2 boot]# ip a a 192.168.0.200/32 dev lo

(2)client

[root@client ~]# vmset.sh eth0 172.25.254.200 client.hyl.org
[root@client ~]# vim /etc/NetworkManager/system-connections/eth0.nmconnection
[root@client ~]# nmcli connection reload
[root@client ~]# nmcli connection up eth1

(3)router

[root@router ~]# vmset.sh eth0 172.25.254.100 router.hyl.org
[root@router ~]# vmset.sh eth1 192.168.0.100 router.hyl.org
[root@router ~]# vim /etc/NetworkManager/system-connections/eth1.nmconnection
[root@router ~]# nmcli connection reload
[root@router ~]# nmcli  connection  up reth1
[root@router ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection
[connection]
id=eth0                     //eth0为nat网卡
type=ethernet
interface-name=eth0

[ipv4]
address1=172.25.254.100/24,172.25.254.2
method=manual
dns=114.114.114.114;
[root@router ~]# cat /etc/NetworkManager/system-connections/eth1.nmconnection
[connection]
id=eth1                    //eth1为仅主机网卡
type=ethernet
interface-name=eth1

[ipv4]
address1=192.168.0.100/24
method=manual

启用内核路由功能

[root@router ~]# sysctl -a | grep ip_forward
net.ipv4.ip_forward = 0
net.ipv4.ip_forward_update_priority = 1
net.ipv4.ip_forward_use_pmtu = 0
[root@router ~]# vim /etc/sysctl.conf
[root@router ~]# sysctl -p
net.ipv4.ip_forward = 1

(4)lvs

[root@lvs boot]# vmset.sh eth1 192.168.0.50 lvs.hyl.org
[root@lvs boot]#vim /etc/NetworkManager/system-connections/eth1.nmconnect ion
[root@lvs boot]# nmcli connection reload
[root@lvs boot]#nmcli  connection  up reth1

在lvs主机中添加VIP

[root@lvs ~]# ip a a 192.168.0.200/32 dev lo
[root@lvs ~]# nmcli connection reload 
[root@lvs ~]# nmcli connection up lo

配置策略

[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
[root@lvs ~]# ipvsadm -A -t 192.168.0.200:80 -s wrr
[root@lvs ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10:80 -g -w 1
[root@lvs ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20:80 -g -w 2
[root@lvs ~]# 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.0.200:80 wrr
  -> 192.168.0.10:80              Route   1      0          0
  -> 192.168.0.20:80              Route   2      0          0

测试

[root@client ~]# for i in {1..10}
> do
> curl 192.168.0.200
> done

六、LVS的防火墙标签解决轮询错误

以http和https为例,当我们在RS中同时开放80和443端口,那么默认控制是分开轮询的,这样我们就出现了一个轮询错乱的问题

1、安装mod_ssl模块,以此让RS支持https

[root@server1 ~]# yum install mod_ssl -y
[root@server2 ~]# yum install mod_ssl -y

安装完成之后都要重启

systemctl restart httpd

测试一下

[root@lvs ~]# curl -k https://192.168.0.20

当用client主机去访问会出现轮询错误,同时显示server1或server2上面的内容,按照轮询规则访问时出现一次内容

2、防火墙标记解决轮询调度问题

ipvsadm -AlE -tlulf service-address [-s scheduler] [-p [timeout]]  //默认360秒在lvs调度器中设定
[root@lvs ~]# ipvsadm -E -f 6666 -s rr -p [3000]
[root@lvs ~]# ipvsadm -LnC

例: 

[root@lvs ~]# ipvsadm -E -f 66 -s rr -p
[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
FWM  66 rr persistent 360
  -> 192.168.0.10:0               Route   1      0          0         
  -> 192.168.0.20:0               Route   1      0          0         

测试(在client主机里)

删除持久连接

[root@lvs ~]# ipvsadm -E -f 66 -s rr 
[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
FWM  66 rr
  -> 192.168.0.10:0               Route   1      0          0         
  -> 192.168.0.20:0               Route   1      0          0         

查看

至此,以上就是lvs的全部内容了 

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

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

相关文章

ERP帮助中心的卓越实践:以用友ERP为例的成功之路

引言 在数字化转型的浪潮中&#xff0c;企业资源规划&#xff08;ERP&#xff09;系统作为企业管理的核心工具&#xff0c;其有效应用直接关系到企业的运营效率与竞争力。然而&#xff0c;ERP系统的复杂性和多功能性往往让用户在初识阶段感到困惑。因此&#xff0c;构建一个高…

Boost搜索引擎:网络模块的构建

网页展示界面 每个网页界面都有他相应的代码构成 按F12键 就会出现.html文件代码 上图是csdn当前网页文件代码&#xff0c;所以说要想&#xff0c;设计好看的网页文件需要去学对应的只是&#xff0c;我没有怎么接触过&#xff0c;所以网页代码就不能为大家讲解了。 网页展示的…

软件设计之JavaScript(2)

软件设计之JavaScript(2) 【狂神说Java】JavaScript最新教程通俗易懂 学习内容&#xff1a; 软件开发技能点参照&#xff1a;软件开发&#xff0c;小白变大佬&#xff0c;这套学习路线让你少走弯路是认真的&#xff0c;欢迎讨论 软件开发技能点顺序参照&#xff1a;Java学习…

【鸿蒙开发基础学习】组件导航 (Navigation)

组件导航 (Navigation) Navigation 是路由容器组件&#xff0c;一般作为首页的根容器&#xff0c;包括单栏(Stack)、分栏(Split)和自适应(Auto)三种显示模式。Navigation 组件适用于模块内和跨模块的路由切换&#xff0c;一次开发&#xff0c;多端部署场景。通过组件级路由能力…

视频剪辑SDK,人脸美化与滤镜特效,焕发直播新活力

在数字化浪潮席卷全球的今天&#xff0c;直播已成为连接品牌与消费者、创作者与观众的重要桥梁。为了在激烈的直播竞争中脱颖而出&#xff0c;提供高质量、富有创意的直播内容成为关键。美摄科技&#xff0c;作为视频处理技术的先行者&#xff0c;携手其强大的视频剪辑SDK解决方…

Python:构建一个算法预测类型

准确工作&#xff1a;需要下载music.csv 已上传 构建模型内容&#xff1a; import pandas as pd music_data pd.read_csv(music.csv) # music_data Xmusic_data.drop(columns[genre]) # 删除的那一列的名字为genre Ymusic_data[genre] # 访问指定的列 Y 预测用的是决策树&…

leetcode日记(65)组合

一眼递归&#xff0c;第一版写出的代码写成了排列组合&#xff0c;然后修改后&#xff1a; class Solution { public:vector<vector<int>> combine(int n, int k) {vector<int> vec;vector<vector<int>> result;for(int i1;i<n;i){vec.push_…

[MAE] Masked Autoencoders Are Scalable Vision Learners

1、目的 NLP领域的自监督预训练非常成功&#xff0c;CV领域可以参考其masked autoencoding方法。主要挑战有&#xff1a; 1&#xff09;CNN不会直接用mask tokens或者positional embeddings&#xff0c;而是在规则网格上运算 -> Vision Transformers (ViT) 2&#xff09;Lan…

SQL注入sqli-labs-master关卡四

第四关如下&#xff1a; 查看其php代码&#xff1a;发现其与前三关的区别就在于id这里。即使用")进行逃离。 则步骤与前三关一致&#xff0c;细节上改变即可。 输入?id1判断是字符型还是数字型注入 输入?id-1") union select 1,2,3--只显示2&#xff0c;3列。 输入…

C++从入门到起飞之——深浅拷贝string类补充 全方位剖析!

​ &#x1f308;个人主页&#xff1a;秋风起&#xff0c;再归来~&#x1f525;系列专栏&#xff1a;C从入门到起飞 &#x1f516;克心守己&#xff0c;律己则安 目录 1、浅拷贝 2、深拷贝 3、现代版写法的拷贝构造和赋值重载 4、再探swap! 5、写实拷贝&#xff…

[开端]如何看待“低代码”开发平台的兴起

如何看待“低代码”开发平台的兴起&#xff1f; 近年来&#xff0c;“低代码”开发平台如雨后春笋般涌现&#xff0c;承诺让非专业人士也能快速构建应用程序。这种新兴技术正在挑战传统软件开发模式&#xff0c;引发了IT行业的广泛讨论。低代码平台是提高效率的利器&#xff0…

从零开始构建基于ChatGPT的嵌入式(Embedding)本地医疗客服问答机器人模型(看完就会,看到最后有惊喜)

1、前言 代码全部开源,GitHub地址为: github.com/aehyok/go-o… 前端完全也能搭建&#xff0c; 前端完全也能搭建&#xff0c; 前端完全也能搭建&#xff0c; 本文中我使用的是后端语言golang,来调用的所有外部接口&#xff0c;但它们均是restful api,所以如果你使用的是其他…

FPGA开发——IP核的FIFO调用

一、简介 FIFO 的英文全称是 First In First Out&#xff0c;即先进先出。 FPGA 使用的 FIFO 一般指的是对数据的存储具有先进先出特性的一个缓存器&#xff0c;常被用于数据的缓存或者高速异步数据的交互&#xff0c;也即所谓的跨时钟域信号传递。它与 FPGA 内部的 RAM 和 ROM…

C语言 | Leetcode C语言题解之第330题按要求补齐数组

题目&#xff1a; 题解&#xff1a; int minPatches(int* nums, int numsSize, int n) {int patches 0;long long x 1;int index 0;while (x < n) {if (index < numsSize && nums[index] < x) {x nums[index];index;} else {x << 1;patches;}}retu…

网通设备有关工程师产品设计时如何选择适合的集成网口座呢?

Hqst盈盛&#xff08;华强盛&#xff09;电子导读&#xff1a;今天分享的是网通设备有关工程师产品设计时如何选择集成网口座呢&#xff1f; 下面我们一起来看看网通设备有关工程师产品设计时是选择集成网口座的 综合多年与网通产品或相关…

微调LLama 3.1——七月论文审稿GPT第5.5版:拿早期paper-review数据集微调LLama 3.1

前言 对于llama3&#xff0c;我们之前已经做了针对llama3 早7数据微调后的测评 去pk llama2的早7数据微调后&#xff0c;推理测试集中的早期paper&#xff1a;出来7方面review去pk gpt4推理测试集中的早期paper&#xff1a;7方面reviewground truth是早期paper的7方面人工rev…

13.3 正则表达式的应用

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;欢迎订阅相关专栏&#xff1a; 工&#x1f497;重&#x1f497;hao&#x1f497;&#xff1a;野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典&#xff1a;收集整理全网各大IT互联网公司技术、项目、HR面试真题.…

vue 打包时候的分包

export default defineConfig({plugins: [vue()],resolve: {alias: {: fileURLToPath(new URL(./src/, import.meta.url))}},// 分包&#xff0c;node_modules中的单独打包成名字为vendor的js文件build: {rollupOptions: {manualChunks(id) {if (id.includes(node_modules)) {r…

汽车测试,引领国际

汽车测试及质量监控博览会&#xff08;中国&#xff09;(Testing Expo China 2024 - Automotive )是引领世界的领先国际展会&#xff0c;将于 2024 年 8 月 28-30日在上海世博展览馆举行。展示汽车测试、开发和验证技术的各个方面&#xff0c;每年在中国、欧洲和美国举办&#…

Openssh升级到>=9.6版本导致sftp不兼容的解决办法

因为要修复漏洞&#xff0c;所以得升级openssh&#xff0c;但从9.6开始&#xff0c;默认编译出来的openssh&#xff0c;无法兼容之前的sftp客户端了&#xff0c;大概的错误信息就是算法协商不一致。 解决办法其实也简单&#xff0c;就2步&#xff1a; 1. 编译的时候&#xff0c…