LVS/NAT工作模式介绍及配置

1.1 LVS/NAT模式工作原理

LVS(Linux Virtual Server)的网络地址转换(NAT)模式是一种在网络层(第四层)实现负载均衡的方法。在NAT模式中,Director Server(DS)充当所有服务器节点的网关,既是客户端请求的入口,也是Real Server响应客户端的出口。以下是LVS NAT模式的工作原理:

  • VIP和DIP:DS拥有两个IP地址,一个是外部的VIP(虚拟IP),作为整个集群的对外服务地址;另一个是内部的DIP(Director IP),与后端的Real Server(RS)位于同一个物理网络中。RS通常使用私有IP地址。

  • 请求处理:客户端发送的请求数据包(源IP为CIP,即客户端IP;目标IP为VIP)首先到达DS。DS的内核空间检查到目标IP是VIP,IPVS模块判断请求的服务是否属于集群服务。

  • 负载均衡:如果是集群服务,DS使用预设的负载均衡算法选择一个RS,并修改请求数据包的目标IP地址为选定的RS的IP(RIP),同时修改源MAC地址为DS的MAC地址,目标MAC地址为RS的MAC地址,然后将数据包发送给RS。

  • RS处理:RS接收到请求后,处理它并准备响应。RS将响应数据包的源IP设置为RIP,目标IP设置为CIP。

  • 响应路由:RS将响应数据包发送回DS,DS再次修改数据包,将源IP更改为VIP,然后转发给客户端。

  • NAT转换:在整个过程中,DS作为NAT设备,负责将请求数据包的源IP从客户端IP转换为DS的VIP,并将响应数据包的源IP从RS的私有IP转换回VIP。

1.2 LVS/NAT模式特点

特点描述
地址转换使用NAT技术将请求的目标IP修改为RS的IP。
流量转发请求经LVS处理,响应直接从RS返回给客户端。
网关角色LVS作为RS的默认网关。
IP地址管理RS使用私有IP,VIP作为集群的公共IP。
性能考虑LVS可能成为瓶颈,因为所有流量都经过它。
安全性隐藏RS的真实IP,提高安全性。
易于配置灵活的配置,LVS和RS不需要在同一个物理网络。
适用性适用于多种网络环境,尤其是在RS分布广泛时。
健康检查LVS提供对RS的健康检查功能。
可扩展性通过增加RS数量水平扩展服务能力。
透明性对客户端透明,客户端不知道负载均衡的存在。
协议支持支持TCP、UDP等协议,适用于多种应用。

重点:在LVS中,NAT模式的请求和响应都经过负载调度器,而DR模式的请求经过负载调度器,但响应直接从真实服务器返回给客户端,不经过负载调度器。

1.3 LVS/NAT模式基本配置

机器名称IP地址子网掩码说明
LVS192.168.110.31255.255.255.0负载均衡器
RS1192.168.110.32255.255.255.0真实服务器1
RS2192.168.110.33255.255.255.0真实服务器2
Client10.10.10.24255.255.255.0客户端

VIP的配置:

VIP名称IP地址子网掩码配置位置
VIP10.10.10.10255.255.255.0LVS的ens224

1.3.1 网络配置

1.3.1.1 LVS网络配置

手动添加一块网卡!

[root@LVS ~]# nmcli connection add type ethernet ifname ens224 con-name ens224
Connection 'ens224' (862fd4d0-b355-4837-9c0e-b44f65083edb) successfully added.
[root@LVS ~]# nmcli connection modify ens224 ipv4.addresses 10.10.10.10/24 ipv4.method manual
[root@LVS ~]# nmcli connection up ens224 
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/3)
[root@LVS ~]# nmcli connection show 
NAME                UUID                                  TYPE      DEVICE 
ens160              8c508417-bf3f-4c7d-b1f4-671fd135dd99  ethernet  ens160 
ens224              862fd4d0-b355-4837-9c0e-b44f65083edb  ethernet  ens224 
Wired connection 1  d3eafb69-d94d-36f8-b2ba-fa612d252638  ethernet  --   
[root@LVS ~]# ip address show ens224   #作为VIP
3: ens224: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000link/ether 00:0c:29:d1:a9:f5 brd ff:ff:ff:ff:ff:ffaltname enp19s0inet 10.10.10.10/24 brd 10.10.10.255 scope global noprefixroute ens224valid_lft forever preferred_lft foreverinet6 fe80::1c9c:5880:bcb6:4c2e/64 scope link noprefixroute valid_lft forever preferred_lft forever
​
[root@LVS ~]# ip address show ens160   #作为网关
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000link/ether 00:0c:29:d1:a9:eb brd ff:ff:ff:ff:ff:ffaltname enp3s0inet 192.168.110.31/24 brd 192.168.110.255 scope global noprefixroute ens160valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fed1:a9eb/64 scope link noprefixroute valid_lft forever preferred_lft forever
1.3.1.2 配置RS网关
1、LVS-RS1
[root@LVS-RS1 ~]# nmcli connection modify ens160 ipv4.gateway 192.168.110.31  #网关为LVS的ens160
[root@LVS-RS1 ~]# nmcli connection up ens160 
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/2)
[root@LVS-RS1 ~]# nmcli connection show ens160 | grep IP4.GATEWAY
IP4.GATEWAY:                            192.168.110.31
2、LVS-RS2
[root@LVS-RS2 ~]# nmcli connection modify ens160 ipv4.gateway 192.168.110.31
[root@LVS-RS2 ~]# nmcli connection up ens160 
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/2)
[root@LVS-RS2 ~]# nmcli connection show ens160 | grep IP4.GATEWAY
IP4.GATEWAY:                            192.168.110.31
1.3.1.3 配置客户端地址(SSH连接会断)
[root@Client ~]# nmcli connection modify ens160 ipv4.addresses 10.10.10.24/24
[root@Client ~]# nmcli connection up ens160 
[root@LVS ~]# ssh 10.10.10.24   #复制一个LVS的会话,ssh连接
The authenticity of host '10.10.10.24 (10.10.10.24)' can't be established.
ECDSA key fingerprint is SHA256:VZC8CrnTIve72qGMS4toH88Px76O0yQw6TVoFKQtsuY.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '10.10.10.24' (ECDSA) to the list of known hosts.
root@10.10.10.24's password: 
Activate the web console with: systemctl enable --now cockpit.socket
​
Last login: Fri Apr 26 14:53:04 2024
[root@Client ~]# ip address show ens160 
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000link/ether 00:0c:29:ed:bb:87 brd ff:ff:ff:ff:ff:ffaltname enp3s0inet 10.10.10.24/24 brd 10.10.10.255 scope global noprefixroute ens160valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:feed:bb87/64 scope link noprefixroute valid_lft forever preferred_lft forever 

1.3.2 LVS/NAT配置

1.3.2.1 开启路由转发(临时开启)
[root@LVS ~]# cat /proc/sys/net/ipv4/ip_forward
0
[root@LVS ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
[root@LVS ~]# cat /proc/sys/net/ipv4/ip_forward
1
1.3.2.2 LVS配置
[root@LVS ~]# ipvsadm -At 10.10.10.10:80 -s rr
[root@LVS ~]# ipvsadm -at 10.10.10.10:80 -r 192.168.110.32 -m   #注意-m为指定为nat模式
[root@LVS ~]# ipvsadm -at 10.10.10.10:80 -r 192.168.110.33 -m
[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  10.10.10.10:80 rr-> 192.168.110.32:80            Masq    1      0          0         -> 192.168.110.33:80            Masq    1      0          0   
1.3.2.3 客户端访问
[root@Client ~]# for ((i=1;i<=6;i++)); do curl http://10.10.10.10; done
This is LVS test IP=192.168.110.33  Host=LVS-RS2
This is LVS test IP=192.168.110.32  Host=LVS-RS1
This is LVS test IP=192.168.110.33  Host=LVS-RS2
This is LVS test IP=192.168.110.32  Host=LVS-RS1
This is LVS test IP=192.168.110.33  Host=LVS-RS2
This is LVS test IP=192.168.110.32  Host=LVS-RS1
1.3.2.4 修改调度算法
[root@LVS ~]# ipvsadm -Et 10.10.10.10:80 -s wrr
[root@LVS ~]# ipvsadm -et 10.10.10.10:80 -r 192.168.110.32 -m -w 1   #-w为指定权重比
[root@LVS ~]# ipvsadm -et 10.10.10.10:80 -r 192.168.110.33 -m -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  10.10.10.10:80 wrr-> 192.168.110.32:80            Masq    1      0          0         -> 192.168.110.33:80            Masq    2      0          0    #客户端访问测试
[root@Client ~]# for ((i=1;i<=6;i++)); do curl http://10.10.10.10; done
This is LVS test IP=192.168.110.33  Host=LVS-RS2
This is LVS test IP=192.168.110.32  Host=LVS-RS1
This is LVS test IP=192.168.110.33  Host=LVS-RS2
This is LVS test IP=192.168.110.33  Host=LVS-RS2
This is LVS test IP=192.168.110.32  Host=LVS-RS1
This is LVS test IP=192.168.110.33  Host=LVS-RS2

1.4 配置LVS/NAT服务脚本

1.4.1 清除环境

[root@LVS ~]# ipvsadm -C    #清楚服务器列表
[root@LVS ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn

1.4.2 服务脚本

[root@LVS ~]# vim /etc/init.d/LVS_DR 
#!/bin/bash
​
# Startup script handle the initialisation of LVS
# chkconfig: - 28 72
# description: Initialise the Linux Virtual Server for DR
# Provides: ipvsadm
# Required-Start: $local_fs $network $named
# Required-Stop: $local_fs $remote_fs $network
# Short-Description: Initialise the Linux Virtual Server
# Description: The Linux Virtual Server is a highly scalable and highly
# available server built on a cluster of real servers, with the load
# balancer running on Linux.LOCK=/var/lock/ipvsadm.lock
VIP=10.10.10.10
RIP1=192.168.110.32
RIP2=192.168.110.33
​
. /etc/rc.d/init.d/functions
​
start() {PID=`ipvsadm -Ln | grep ${VIP} | wc -l`if [ $PID -gt 0 ]; thenecho "The LVS-DR Server is already running !"else/sbin/ipvsadm -C/sbin/ipvsadm -At $VIP:80 -s rr/sbin/ipvsadm -at $VIP:80 -r $RIP1:80 -m/sbin/ipvsadm -at $VIP:80 -r $RIP2:80 -m/bin/touch $LOCKecho "starting LVS-DR Server is ok !"fi
}
​
stop() {/sbin/ipvsadm -Crm -rf $LOCKecho "stopping LVS-DR server is ok !"
}
​
status() {if [ -e $LOCK ]; thenecho "The LVS-DR Server is already running !"elseecho "The LVS-DR Server is not running !"fi
}
​
case "$1" instart)start;;stop)stop;;restart)stopstart;;status)status;;*)echo "Usage: $1 {start|stop|restart|status}"exit 1
esac
exit 0
​
​
[root@LVS ~]# chmod +x /etc/init.d/LVS_DR 
[root@LVS ~]# chkconfig --add LVS_DR   #添加为系统服务
[root@LVS ~]# systemctl start LVS_DR.service 
[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  10.10.10.10:80 rr-> 192.168.110.32:80            Masq    1      0          0         -> 192.168.110.33:80            Masq    1      0          0    
​
[root@LVS ~]# systemctl stop LVS_DR.service   #停止
[root@LVS ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn

1.4.3 客户端访问

[root@Client ~]# for ((i=1;i<=6;i++)); do curl http://10.10.10.10; done
This is LVS test IP=192.168.110.33  Host=LVS-RS2
This is LVS test IP=192.168.110.32  Host=LVS-RS1
This is LVS test IP=192.168.110.33  Host=LVS-RS2
This is LVS test IP=192.168.110.32  Host=LVS-RS1
This is LVS test IP=192.168.110.33  Host=LVS-RS2
This is LVS test IP=192.168.110.32  Host=LVS-RS1

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

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

相关文章

54.HarmonyOS鸿蒙系统 App(ArkTS)tcp socket套接字网络连接收发测试

工程代码https://download.csdn.net/download/txwtech/89258409?spm1001.2014.3001.5501 54.HarmonyOS鸿蒙系统 App(ArkTS)tcp socket套接字网络连接收发测试 import socket from ohos.net.socket; import process from ohos.process; import wifiManager from ohos.wifiMana…

sql 中having和where区别

where 是用于筛选表中满足条件的行&#xff0c;不可以和聚类函数一起使用 having 是用于筛选满足条件的组 &#xff0c;可与聚合函数一起使用 所以having语句中不能使用select中定义的名字

51单片机软件环境安装

keli5的安装 把CID放到破解程序中 破解程序会给一串数字然后填到那个框中 驱动程序的安装 安装完了以后 设备管理器会出现这个 同时c盘会出现这个文件夹

Flask教程3:jinja2模板引擎

文章目录 模板的导入与使用 模板的导入与使用 Flask通过render_template来实现模板的渲染&#xff0c;要使用这个方法&#xff0c;我们需要导入from flask import rander_template&#xff0c;模板中注释需放在{# #}中 模板的第一个参数为指定的模板文件名称&#xff0c;如自定…

Rust Rocket创建第一个hello world的Web程序 Rust Rocket开发常用网址和Rust常用命令

一、Rust Rocket简介 Rust Rocket 是一个用 Rust 语言编写的 Web 应用框架&#xff0c;它结合了 Rust 的安全性和性能优势&#xff0c;以及 Web 开发的便利性。以下是 Rust Rocket 框架的一些优点&#xff1a; 安全性&#xff1a;Rust 是一种注重安全性的编程语言&#xff0c;…

【C++】学习笔记——vector_2

文章目录 七、vector2. vecotr的使用3. vector的模拟实现 未完待续 七、vector 2. vecotr的使用 上节我们以二维数组结束&#xff0c;这一节我们以二维数组开始。 // 二维数组 vector<vector<int>> vv;二维数组在底层是连续的一维数组。vv[i][j] 是怎样访问的&a…

分布式与一致性协议之一致哈希算法(二)

一致哈希算法 使用哈希算法有什么问题 通过哈希算法&#xff0c;每个key都可以寻址到对应的服务器&#xff0c;比如&#xff0c;查询key是key-01,计算公式为hash(key-01)%3,警告过计算寻址到了编号为1的服务器节点A&#xff0c;如图所示。 但如果服务器数量发生变化&#x…

vue3使用el-autocomplete请求远程数据

服务器端 RestController RequestMapping("/teacher") public class TeacherController {Resourceprivate TeacherService teacherService;GetMapping({"/v1/getTop10TeacherByName/","/v1/getTop10TeacherByName/{name}"})public ResultBean&l…

快速批量重命名文件(夹)

首先&#xff0c;需要用到的这个工具&#xff1a; 度娘网盘 提取码&#xff1a;qwu2 蓝奏云 提取码&#xff1a;2r1z 我这里处理这4个文本&#xff0c;实际可以处理任意数量的文本和文件夹 1、打开工具&#xff0c;进入文件批量复制版块 2、点击“重命名” 3、把要重命名的…

使用Python爬取淘宝商品并做数据分析

使用Python爬取淘宝商品并做数据分析&#xff0c;可以按照以下步骤进行操作&#xff1a; 确定需求&#xff1a;确定要爬取的淘宝商品的种类、数量、关键词等信息。 编写爬虫程序&#xff1a;使用Python编写爬虫程序&#xff0c;通过模拟浏览器请求&#xff0c;获取淘宝商品的页…

Docker 中的 Nginx 服务为什么要启用 HTTPS

一安装容器 1 安装docker-20.10.17 2 安装所需的依赖 sudo yum install -y yum-utils device-mapper-persistent-data lvm23 添加Docker官方仓库 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo4 安装Docker CE 20.10.17 s…

第182期 23ai:惊喜的全功能缓存True Cache-2安装部署(20240505)

数据库管理182期 2024-05-05 数据库管理-第182期 23ai:惊喜的全功能缓存True Cache-2安装部署&#xff08;20240505&#xff09;1 主机配置2 操作系统配置2.1 基础配置2.2 配置hosts2.3 安装preinstall RPM包2.4 创建目录2.5 配置环境变量 3 部署数据库3.1 部署DB软件3.2 创建监…

机器学习:基于K-近邻(KNN)、高斯贝叶斯(GaussianNB)、SVC、随机森林(RF)、梯度提升树(GBDT)对葡萄酒质量进行预测

前言 系列专栏&#xff1a;机器学习&#xff1a;高级应用与实践【项目实战100】【2024】✨︎ 在本专栏中不仅包含一些适合初学者的最新机器学习项目&#xff0c;每个项目都处理一组不同的问题&#xff0c;包括监督和无监督学习、分类、回归和聚类&#xff0c;而且涉及创建深度学…

linux上如何排查JVM内存过高?

怎么排查JVM内存过高&#xff1f; 前言&#xff1a; 想必工作一两年以后的同学都会逐渐面临到&#xff0c;jvm等问题&#xff0c;但是可能苦于无法熟练的使用一些工具&#xff1b;本文将介绍几个比较常用分析工具的使用方法&#xff0c;带着大家一步步定位分析问题。 1、top 查…

springmvc下

第二类初始化操作 multipartResolver应用 localeResolver应用 themeResolver应用 handlerMapping应用 handlerAdapter应用 handlerExceptionReslver requestToViewNameTranslator应用 viewResolver应用 flashMapManager应用 dispatcherServlet逻辑处理 processRequest处理web请…

目标跟踪—卡尔曼滤波

目标跟踪—卡尔曼滤波 卡尔曼滤波引入 滤波是将信号中特定波段频率滤除的操作&#xff0c;是抑制和防止干扰的一项重要措施。是根据观察某一随机过程的结果&#xff0c;对另一与之有关的随机过程进行估计的概率理论与方法。 历史上最早考虑的是维纳滤波&#xff0c;后来R.E.卡…

【C语言】分支和循环(上)

【C语言】分支和循环&#xff08;上&#xff09; 1、if语句1.2 else1.3分支中包含多条语句1.4嵌套if1.5悬空else问题 2、关系操作符3、条件操作符4、逻辑操作符&#xff1a;与、或、非&#xff08;取反&#xff09;&#xff08;&&&#xff0c;||&#xff0c;&#xff0…

小猪APP分发平台 – 掌握移动应用的推广新途径

在移动互联网高速发展的背景下小猪APP分发平台 – 掌握移动应用的推广新途径&#xff0c;app分发已成为开发者和企业关注的重点。小猪APP分发平台作为行业内的新星小猪APP分发平台 – 掌握移动应用的推广新途径&#xff0c;提供了一个创新且高效的方式帮助开发者推广他们的应用…

ZOC8 for Mac v8.08.1激活版:卓越性能的SSH客户端

在远程连接和管理的世界中&#xff0c;ZOC8 for Mac以其卓越的性能和丰富的功能&#xff0c;成为了众多专业人士的首选SSH客户端。它支持SSH1、SSH2、Telnet、Rlogin、Serial等多种协议&#xff0c;让您轻松连接到远程服务器。ZOC8拥有简洁直观的界面和强大的功能设置&#xff…

SQL 基础 | JOIN 操作介绍

在SQL中&#xff0c;JOIN是一种强大的功能&#xff0c;用于将两个或多个表中的行结合起来&#xff0c;基于相关的列之间的关系。 JOIN操作通常用在SELECT语句中&#xff0c;以便从多个表中检索数据。 以下是几种基本的JOIN类型以及它们的用法&#xff1a; INNER JOIN&#xff1…