【lvs】超干货,包含理论+实验(详细步骤)

news2024/11/18 7:38:57

lvs理论部分

LVS(Linux Virtual Server)是Linux虚拟服务器的简称,是一个基于Linux操作系统的虚拟服务器集群系统。LVS主要用于实现负载均衡和高可用性,通过将客户端的请求分发到多台后端服务器上,从而提高整体服务的处理能力和可靠性。以下是LVS的详细介绍:

一、基本概念

  • LVS架构:LVS架构从逻辑上可分为调度层、Server集群层和共享存储层。调度层负责接收客户端请求并根据一定的调度算法将请求分发到后端服务器;Server集群层由多台后端服务器组成,负责实际处理请求;共享存储层(可选)用于存储共享数据,保证数据的一致性。

  • 组件:LVS主要由IPVS(IP Virtual Server)和三种工作模式(LVS-NAT、LVS-DR、LVS-TUN)组成。IPVS是LVS的核心,负责实现IP负载均衡技术;三种工作模式则分别适用于不同的应用场景。

二、主要功能

  1. 负载均衡:LVS通过将客户端的请求分发到多台后端服务器上,实现负载均衡,提高整体服务的处理能力和响应速度。

  2. 高可用性:通过配置Keepalived等工具,LVS可以实现高可用性,确保服务的持续运行。即使某台后端服务器出现故障,LVS也能自动将请求转发到其他健康的服务器上。

  3. 灵活性强:LVS支持多种负载均衡算法和工作模式,适应不同的应用场景和需求。用户可以根据实际情况选择合适的算法和模式来优化系统性能。

三、工作原理

LVS工作在网络层,通过修改数据包的目标IP地址或MAC地址来实现请求的转发。具体工作原理如下:

  • LVS-NAT模式:在该模式下,负载均衡器不仅需要修改请求报文的目标地址,还需要修改响应报文的源地址。客户端的请求首先到达负载均衡器,负载均衡器将请求报文的目标IP地址修改为后端服务器的IP地址,然后将请求转发给后端服务器。后端服务器处理完请求后,将响应报文发送给负载均衡器,负载均衡器再将响应报文的源地址修改为自己的IP地址,然后返回给客户端。

  • LVS-DR模式:在该模式下,负载均衡器只修改请求报文的目标MAC地址,而不修改IP地址。客户端的请求到达负载均衡器后,负载均衡器将请求报文的目标MAC地址修改为后端服务器的MAC地址,然后将请求直接发送给后端服务器(不经过物理网络)。后端服务器处理完请求后,直接将响应报文发送给客户端(不经过负载均衡器)。

  • LVS-TUN模式:该模式通过IP隧道将请求转发到后端服务器。客户端的请求到达负载均衡器后,负载均衡器将请求报文封装在IP隧道中发送给后端服务器。后端服务器解封装后处理请求,并将响应报文直接发送给客户端(不经过负载均衡器)。

四、应用场景

LVS广泛应用于各大企业的生产环境中,特别是在需要处理大量并发请求的场景下。例如,LVS可以用于构建高可用的Web服务器集群、数据库的读写分离和负载均衡、以及需要处理大量并发请求的应用程序等。

五、优势

  • 高性能:LVS工作在内核层,性能高效,能够处理大量并发请求。

  • 高可用性:通过配置高可用性工具,LVS可以确保服务的持续运行。

  • 灵活性强:支持多种负载均衡算法和工作模式,适应不同的应用场景。

  • 成本低廉:LVS是开源软件,可以免费使用,并且可以将多台低性能的服务器组合成一个高性能的服务器集群。

综上所述,LVS是一个功能强大、灵活性强、性能高效的负载均衡解决方案,广泛应用于各大企业的生产环境中。

lvs实验部分

lvs的NAT模式

1、环境

lvs主机:

rh9

2块网卡

eth0:172.25.254.100 lvs.timinglee.org NAT模式

eth1:192.168.0.100 lvs.timinglee.org 仅主机模式

[root@lvs ~]# cat /etc/NetworkManager/systemconnections/eth0.nmconnection
[connection]
id=eth0
type=ethernet
interface-name=eth0
​
[ipv4]
address1=172.25.254.100/24,172.25.254.2
method=manual
dns=114.114.114.114;
[root@lvs ~]# cat /etc/NetworkManager/systemconnections/eth1.nmconnection
[connection]
id=eth1
type=ethernet
interface-name=eth1
​
[ipv4]
address1=192.168.0.100/24
method=manual
[root@lvs ~]# nmcli connection reload
[root@lvs ~]# nmcli connection up eth0
​
#打开内核
[root@lvs ~]# sysctl -a | grep ip_forward
[root@lvs ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward=1
[root@lvs ~]# sysctl -p  #生效

RS:webserver1主机:

rh9

仅主机模式

192.168.0.10 webserver1.timinglee.org

[root@webserver1 ~]# cat /etc/NetworkManager/systemconnections/eth0.nmconnection 
[connection]
id=eth0
type=ethernet
interface-name=eth0
​
[ipv4]
address1=192.168.0.10/24,192.168.0.100
method=manual
dns=114.114.114.114;
[root@webserver1 ~]# nmcli connection reload
[root@webserver1 ~]# nmcli connection up eth0

RS:webserver2主机

rh9

仅主机模式

192.168.0.20 webserver2.timinglee.org

[root@webserver2 ~]# 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
dns=114.114.114.114;
[root@webserver2 ~]# nmcli connection reload
[root@webserver2 ~]# nmcli connection up eth0
2、正式部分
# webserver1
[root@webserver1 ~]# dnf install httpd -y
[root@webserver1 ~]# echo webserver1 - 192.168.0.10 > /var/www/html/index.html
[root@webserver1 ~]# systemctl enable --now httpd
​
# webserver2
[root@webserver2 ~]# dnf install httpd -y
[root@webserver2 ~]# echo webserver2 - 192.168.0.20 > /var/www/html/index.html
[root@webserver2 ~]# systemctl enable --now httpd
​
# 在lvs里检测 
[root@lvs ~]# curl 192.168.0.10
[root@lvs ~]# curl 192.168.0.20
# 在lvs 安装lvs软件
[root@lvs ~]# dnf search lvs
[root@lvs ~]# dnf install ipvsadm -y
​
# 查看策略
[root@lvs ~]# ipvsadm -Ln (无)
[root@lvs ~]# cat /etc/sysconfig/ipvsadm (无)
​
# 创建策略
# -A:用于添加一个新的虚拟服务器  -t:指定了虚拟服务器的地址和端口   -s:指定了调度算法    rr:轮询算法
[root@lvs ~]# ipvsadm -A -t 172.25.254.100:80 -s rr 
[root@lvs ~]# ipvsadm -Ln (有)
# -a:用于向虚拟服务器添加一个新的真实服务器   -t:虚拟服务器的地址和端口   -r:要添加的真实服务器的地址和端口    -m:指定了转发方法,即NAT(网络地址转换)模式
[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-save > /etc/sysconfig/ipvsadm
#永久保存
[root@lvs ~]# ipvsadm-save -n > /etc/sysconfig/ipvsadm

二、lvs的DR模式

1、环境

#环境
lvs: 
一张网卡
eth0
eth1:仅主机  192.168.0.50 lvs.timinglee.org (网关:192.168.0.100)
​
路由器router:
两张网卡
eth0:NAT  172.25.254.100 router.timinglee.org
eth1:仅主机  192.168.0.100 router.timinglee.org (不需要网关)
打开内核
​
客户端client:
一张网卡
eth0: NAT 172.25.254.200 client.timinglee.org  (网关:172.25.254.100)

客户端:

[root@client ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection 
[connection]
id=eth0
type=ethernet
interface-name=eth0
​
[ipv4]
address1=172.25.254.200/24,172.25.254.100
method=manual
[root@client ~]# nmcli c reload 
[root@client ~]# nmcli c up eth0

路由器:

[root@router ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection 
[connection]
id=eth0
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
type=ethernet
interface-name=eth1
​
[ipv4]
address1=192.168.0.100/24
method=manual
[root@router ~]# nmcli c reload 
[root@router ~]# nmcli c up eth1

lvs:

[root@lvs ~]# cat /etc/NetworkManager/system-connections/eth1.nmconnection 
[connection]
id=eth1
type=ethernet
interface-name=eth1
​
[ipv4]
address1=192.168.0.50/24,192.168.0.100
method=manual
[root@lvs ~]# nmcli c reload 
[root@lvs ~]# nmcli c up eth1
​
#内核路由功能打开
[root@lvs]# sysctl -a | grep ip_forward
[root@lvs]# cat /etc/sysctl.conf 
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
net.ipv4.ip_forward=1
#使其生效
[root@lvs ]#sysctl -p
#lvs、webserver1、webserver2上添加vip:
ip a a 192.168.0.200/32 dev lo
#删除 ip a d   查看 ip a show
2、lvs上做策略
# 在lvs 和 rs 中设定vip
 [root@lvs ~]# ip addr add dev lo 192.168.0.200/32
 [root@rs1 ~]# ip addr add dev lo 192.168.0.200/32
 [root@rs2 ~]# ip addr add dev lo 192.168.0.200/32
 
# 在RS1和RS2中解决响应问题
[root@webserver1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore 
[root@webserver1 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore 
[root@webserver1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_ignore 
[root@webserver1 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_ignore 
[root@webserver2 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@webserver2 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@webserver2 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@webserver2 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_ignore
​
 
# 在lvs中配置策略
[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
​
3、测试

三、防火墙标签解决轮询错误

1、火墙mark标记解决调度问题
#webserver1、webserver2
yum install mod_ssl -y #RS安装mod ssl模块 让rs支持https
systemctl restart httpd
netstat -antup | grep http
​
#lvs上
[root@lvs boot]# ipvsadm -A -t 192.168.0.200:80 -s rr
[root@lvs boot]# ipvsadm -A -t 192.168.0.200:443 -s rr
[root@lvs boot]# ipvsadm -a -t 192.168.0.200:443 -r 192.168.0.10:443 -g
[root@lvs boot]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10:80 -g
​
[root@lvs boot]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20:80 -g
[root@lvs boot]# ipvsadm -a -t 192.168.0.200:443 -r 192.168.0.20:443 -g
​
[root@lvs boot]# ipvsadm -Ln
​
​
#访问不对
[root@client ~]# for i in {1..10}; do curl 192.168.0.200; done
webserver2 - 192.168.0.20
webserver2 - 192.168.0.20
webserver2 - 192.168.0.20
​
#lvs主机为端口做标记
[root@lvs boot]# iptables -t mangle -nL
[root@lvs boot]# iptables -t mangle -A PREROUTING -d 192.168.0.200 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 66
[root@lvs boot]# iptables -t mangle -nL
​
#清空之前的策略
[root@lvs boot]# ipvsadm -C
​
#添加新策略
[root@lvs boot]# ipvsadm -A -f 66 -s rr
[root@lvs boot]# ipvsadm -a -f 66 -r 192.168.0.10 -g
[root@lvs boot]# ipvsadm -a -f 66 -r 192.168.0.20 -g
​
#访问(如果访问不是这样,应该是穿透,arp响应没关)
[root@client ~]# curl 192.168.0.200; curl -k https://192.168.0.200
webserver2 - 192.168.0.20
webserver1 - 192.168.0.10
​
2、lvs-session会话问题解决
在lvs调度器中设定
[root@lvs ~]# ipvsadm -E -f 66 -s rr -p 5   #5秒内会把流量打到同一个后端的webserver,之后根据调度策略重新打流量
[root@lvs ~]# ipvsadm -LnC
​
# 未成功可能存在arp绑定
# 查看arp绑定
[root@client ~]# arp -a
3、为什么会出现haproxy
#当我们停止一台主机的HTTP时,lvs会出现下面这种情况,但应该只去找另一台主机,所有需要使用haproxy来实现
[root@webserver1 ~]# systemctl stop httpd
[root@client ~]# curl 192.168.0.200; curl -k https://192.168.0.200
webserver2 - 192.168.0.20
crul: (7)

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

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

相关文章

JSON + AJAX + ThreadLocal

JSON数据交换 规则 JSON对象和字符串转换 <script type"text/javascript">var jsonPerson {"name": "jack","age": 20}console.log(jsonPerson);var strPerson JSON.stringify(jsonPerson);//对jsonPerson没有影响console.lo…

文件系统 --- 软硬链接

序言 经过上一篇的学习 在磁盘中的文件&#xff0c;我们大致了解了磁盘的物理结构&#xff0c;逻辑抽象结构以及文件在磁盘上的存储方式。在这篇文章中&#xff0c;我们会基于上一篇文章的部分知识点来介绍软链接&#xff0c;硬链接。 1. 软链接 1.1 软链接的概念 软链接是一个…

vue3+vite+ts 颜色选择器组件支持颜色吸取,透明度

ciw-color-picker-vue&#xff1a; vue3 vite ts 颜色选择器,支持颜色吸取,透明度&#xff0c;与浏览器原生颜色选择器相似,与饿了么颜色选择器相似 使用了ciw-color-picker-vue npm i ciw-color-picker-vue 安装 npm i ciw-color-picker-vue 全局引入方式 main.ts 或 m…

光伏检测室外气象站的重要性

在光伏产业的快速发展中&#xff0c;光伏检测室外气象站的重要性日益凸显。它不仅是光伏电站运维管理的“眼睛”&#xff0c;更是确保电站高效、稳定运行的关键因素。 首先&#xff0c;光伏检测室外气象站能够实时、准确地监测多种关键气象要素&#xff0c;如太阳辐射、风速、风…

【中间件】Redis从入门到精通-黑马点评综合实战

文章目录 一&#xff1a;Redis基础1.Redis是什么2.初识Redis3.Redis的数据结构A.通用命令B.String类型C.Key的层级格式D.Hash类型E.List类型F.Set类型G.SortedSet类型 二&#xff1a;Redis的Java客户端1.JedisA.引入依赖B.建立连接C.测试JedisD.释放资源 2.Jedis连接池3.Spring…

MM 13 -采购- 退货

思维导图 说明 情形1 直接冲销物料凭证 102 情形2 返货部分交货 情形3 退货PR贷项凭证 情形1 适用于已收货未开票&#xff0c;或者发票还可冲销的当月&#xff0c;冲销物料凭证所有数量 情形2 适用于跟情形1 一样&#xff0c;只是可以修改退货数量 情形3 如果已经跨越…

html+css+js网页设计字节跳动11个页面带js 效果很多

htmlcssjs网页设计字节跳动11个页面带js 效果很多 ui还原度100% 网页作品代码简单&#xff0c;可使用任意HTML编辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作&#xff0…

笔试练习day3

目录 BC149 简写单词题目解析代码 dd爱框框题目解析解析代码方法一暴力解法方法二同向双指针(滑动窗口) 除2!题目解析解法模拟贪心堆 感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接 &#x1f412;&#x1f412;&#x1f412; 个人主页 &#x1f978;&#x1…

【网络安全】玲珑安全第四期

鉴于玲珑安全漏洞挖掘前三期课程取得的优异成绩和获得的强烈反响,我们决定启动玲珑安全第四期漏洞挖掘培训计划。 文章目录 往期学员收获基础学员报喜(部分)课程反馈第四期课程课程内容免费课程往期学员收获 第一期课程总结及学员收获:->点我查看第一期学员收获<- …

leetcode 图论专题——(dfs+bfs+并查集 回顾)

DFS、BFS 回顾&#xff08;C语言代码&#xff09; map[i][j]里记录的是i点和j点的连接关系 基本DFS&#xff1a; int vis[101],n,map[101][101]; void dfs(int t) {int i;vis[t]1;for(i0;i<n;i)//找对t点所有有关联的点——“找路”{if(vis[i]!0&&map[t][i]1)//有…

怎么将jar注册为windows系统服务详细操作

将spring boot项目编译成jar,注册为windows系统服务 在网上了解到,winsw这个开源项目,去github看了下,作者常年维护更新,文档齐全,拥有不少,自己写了个小demo体验了下还不错,然后又运行了一个晚上,没啥问题,遂决定采用它 开源地址 源库地址 https://github.com/winsw/winsw R…

string类简单的底层实现,了解string底层以及string的补充知识

string类的简单实现 头文件 #define _CRT_SECURE_NO_WARNINGS 1 #pragma once #include<iostream> #include<assert.h> using namespace std; namespace exprience {class string {public:typedef char* iterator;iterator begin(){return _str;}iterator end()…

IPython使用技巧详解:提高Python编程效率的利器

目录 一、IPython基础设置与启动 1.1 安装IPython 1.2 IPython的配置 二、IPython交互式编程体验 2.1 魔术命令(Magic Commands) 2.2 变量自动补全与文档查看 2.3 历史命令与快速访问 三、IPython高级功能 3.1 列表推导式与生成器表达式 3.2 枚举与压缩函数 3.3 L…

Java NIO(Non-blocking I/O)简单理解

Java NIO是Java平台中用于高效输入/输出&#xff08;I/O&#xff09;操作的一套新的API&#xff0c;与标准的Java I/O&#xff08;基于流的阻塞I/O&#xff09;不同&#xff0c;Java NIO提供了非阻塞式的I/O操作。 Java NIO 的核心组件 Java NIO主要由以下几个核心部分组成&a…

服务器网络不通排查方案

服务器网络不通排查方案 最近遇到了服务器上服务已经启动&#xff0c;但是在浏览器上无法访问的问题&#xff0c;记录一下排查流程 文章目录 服务器网络不通排查方案netstart排查网络连接信息netstat 命令netstat -aptn 命令 iptables总结 netstart排查网络连接信息 netstat …

【Linux进程篇】进程终章:POSIX信号量线程池线程安全的单例模式自旋锁读者写者问题

W...Y的主页 &#x1f60a; 代码仓库分享 &#x1f495; 前言&#xff1a;在之前的进程间通信时我们就讲到过信号量&#xff0c;他的本质就是一个计数器&#xff0c;用来描述临界资源的一个计数器。我们当时使用电影院的例子来说明信号量。电影院的座位被我们称为临界资源&a…

LVS集群实现四层负载均衡详解(以nat,dr模式为例)

目录 一、LVS集群的介绍 1、LVS 相关术语&#xff1a; 2、lvs工作原理 3、相关名词概念 4、lvs集群的类型 二、lvs的nat模式 1、介绍&#xff1a; 2、数据逻辑&#xff1a; 3、nat实验部署 环境搭建&#xff1a; 1、lvs中要去打开内核路由功能&#xff0c;实现网络互联…

关于区块链的公共医疗应用开发

区块链的养老保险平台应用开发 任务一:环境准备 1.编译区块链网络 目录:/root/xuperchain/ 在区块链网络目录下执行make命令,编译网络,编译成功后输出compile done! 启动区块链网络 2.创建钱包账户 创建普通钱包账户userTest,命令如下 bin/xchain-cli account newke…

6.2 Python 标准库简介:编程世界的百宝箱

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

QT界面设计开发(Visual Studio 2019)—学习记录一

一、控件升级 简要介绍&#xff1a; 简单来说&#xff0c;控件提升就是将一个基础控件&#xff08;Base Widget&#xff09;转换为一个更特定、更复杂的自定义控件&#xff08;Custom Widget&#xff09;。这样做的目的是为了在设计界面时能够使用更多高级功能&#xff0c;而不…