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 1000
    link/ether 00:0c:29:d1:a9:f5 brd ff:ff:ff:ff:ff:ff
    altname enp19s0
    inet 10.10.10.10/24 brd 10.10.10.255 scope global noprefixroute ens224
       valid_lft forever preferred_lft forever
    inet6 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 1000
    link/ether 00:0c:29:d1:a9:eb brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    inet 192.168.110.31/24 brd 192.168.110.255 scope global noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet6 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 1000
    link/ether 00:0c:29:ed:bb:87 brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    inet 10.10.10.24/24 brd 10.10.10.255 scope global noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet6 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 ]; then
        echo "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 $LOCK
        echo "starting LVS-DR Server is ok !"
    fi
}
​
stop() {
    /sbin/ipvsadm -C
    rm -rf $LOCK
    echo "stopping LVS-DR server is ok !"
}
​
status() {
    if [ -e $LOCK ]; then
        echo "The LVS-DR Server is already running !"
    else
        echo "The LVS-DR Server is not running !"
    fi
}
​
case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        stop
        start
        ;;
    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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

leetcode51.N皇后(困难)-回溯法

思路 都知道n皇后问题是回溯算法解决的经典问题&#xff0c;但是用回溯解决多了组合、切割、子集、排列问题之后&#xff0c;遇到这种二维矩阵还会有点不知所措。 首先来看一下皇后们的约束条件&#xff1a; 不能同行不能同列不能同斜线 确定完约束条件&#xff0c;来看看究…

UE5 体积云

写好的体积材质放这里面 效果如上 Begin Object Class/Script/UnrealEd.MaterialGraphNode Name"MaterialGraphNode_4"Begin Object Class/Script/Engine.MaterialExpressionVectorParameter Name"MaterialExpressionVectorParameter_0"End ObjectBegin O…

人工智能_大模型044_模型微调004_随机梯度下降优化_常见损失计算算法_手写简单神经网络_实现手写体识别---人工智能工作笔记0179

然后对于,梯度下降,为了让训练的速度更好,更快的下降,又做了很多算法,可以看到 这里要知道Transformer中最常用的Adam 和 AdamW这两种算法. 当然,这些算法都是用于优化神经网络中的参数,以最小化损失函数。下面我会尽量以通俗易懂的方式解释它们的原理和适用场景。 1. **L-…

关于电路设计的一些基本知识点

目录 一&#xff0c;BUCK降压电路1.1 布局与布线1.1.1 高频电流环路1.1.2 小信号的地1.1.3 其他要注意的地方 1.2 输入输出电容&#xff0c;电感的选择1.2.1 电感的选择1.2.2 输入输出电容的选择 三&#xff0c;电源芯片3.1 LM2596,LM2576 四&#xff0c;运放电路设计4.1 运放的…

亚马逊接入时遇到的相关问题和解决方法

1、签名获取 在做amazon的SDK接入时&#xff0c;发现需要应用签名的一些信息&#xff1a;MD5签名和SHA256签名。用命令java的命令 keytool -list -v -keystore xxx.keystore 如果是Java版本不是1.8的话&#xff0c;结果缺少MD5值 这里有3种解决方案&#xff1a; 1、将jav…

医生个人品牌网红IP孵化打造赋能运营方案

【干货资料持续更新&#xff0c;以防走丢】 医生个人品牌网红IP孵化打造赋能运营方案 部分资料预览 资料部分是网络整理&#xff0c;仅供学习参考。 PPT可编辑&#xff08;完整资料包含以下内容&#xff09; 目录 个人IP运营方案 1. 目标设定 - 个人定位&#xff1a;根据医生…

【论文阅读】IPT:Pre-TrainedImageProcessingTransformer

Pre-TrainedImageProcessingTransformer 论文地址摘要1. 简介2.相关作品2.1。图像处理2.2。 Transformer 3. 图像处理3.1. IPT 架构3.2 在 ImageNet 上进行预训练 4. 实验4.1. 超分辨率4.2. Denoising 5. 结论与讨论 论文地址 1、论文地址 2、源码 摘要 随着现代硬件的计算能…

ChatGPT理论分析

ChatGPT "ChatGPT"是一个基于GPT&#xff08;Generative Pre-trained Transformer&#xff09;架构的对话系统。GPT 是一个由OpenAI 开发的自然语言处理&#xff08;NLP&#xff09;模型&#xff0c;它使用深度学习来生成文本。以下是对ChatGPT进行理论分析的几个主…

科学高效备考AMC8和AMC10竞赛,吃透2000-2024年1850道真题和解析

多做真题&#xff0c;吃透真题和背后的知识点是备考AMC8、AMC10有效的方法之一&#xff0c;通过做真题&#xff0c;可以帮助孩子找到真实竞赛的感觉&#xff0c;而且更加贴近比赛的内容&#xff0c;可以通过真题查漏补缺&#xff0c;更有针对性的补齐知识的短板。 AMC8和AMC10…

【HTTP协议】了解http需要学习哪些内容

HTTP&#xff08;Hypertext Transfer Protocol&#xff09;是超文本传输协议&#xff0c;互联网上应用最广泛的一种协议&#xff0c;它负责在客户端和服务器之间传输数据。本文将从HTTP协议的基本原理、请求-响应模型、常见特性以及应用场景等方面进行总结。 1. HTTP基本原理 …

31.基础乐理-首调与固定调

首调与固定调的概念&#xff1a; 首调 与 固定调 这两个词都是针对 唱名 来说的&#xff0c;针对唱名1234567 来说的&#xff0c;和别的没什么关系&#xff0c;这两个概念是唱名的两种不同表达方式 首调&#xff1a;虽然各个大调实际使用的按键、使用的音名都是不一样的&#x…

LeetCode - 129双周赛

目录 一&#xff0c;3127. 构造相同颜色的正方形 二&#xff0c;3128. 直角三角形 三&#xff0c;3129. 找出所有稳定的二进制数组 I ​编辑 四&#xff0c;3130. 找出所有稳定的二进制数组 II 一&#xff0c;3127. 构造相同颜色的正方形 本题就是问在一个3x3的正方形中是…

前端如何将接口传来的列表数据(数组)直接下载成csv文件

前言&#xff1a;最近遇到一个需求&#xff0c;需要实现一个下载表格数据的操作&#xff0c;一般来说是前端请求后端的下载接口&#xff0c;将文件流下载下来&#xff0c;但是因为这个项目任务时间比较紧&#xff0c;后端没时间做下载接口&#xff0c;所以暂时由前端直接调列表…

头歌实践教学平台:投影变换v1.0

第2关&#xff1a;立方体平行投影 一.任务描述 根据提示&#xff0c;在右侧修改代码&#xff0c;并自己绘制出图形。平台会对你编写的代码进行测试。 1.本关任务 学习了解三维图形几何变换原理。 理解掌握OpenGL三维图形几何变换的方法。 理解掌握OpenGL程序的模型视图变换…

ElasticSearch面试题2

Mapping属性详细介绍/常见的字段数据类型&#xff1a; 映射(mapping)︰mapping是对索引库中文档的约束信息&#xff08;例如字段名、数据类型&#xff09;&#xff0c;类似表的结构约束&#xff1b;每个索引库都应该有自己的映射 数据库一定要先创建表才能去添加数据…

Redis缓存介绍以及常见缓存问题:穿透、雪崩和击穿

概念 缓存就是数据交换的缓冲区&#xff08;Cache&#xff09;&#xff0c;是存贮数据的临时地方&#xff0c;一般读写性能较高。 作用&#xff1a; 降低后端负载 提高读写效率&#xff0c;降低相应时间 成本&#xff1a; 数据一致性成本 代码维护成本 运维成本 缓存更…

JAVA系列 小白入门参考资料 类和对象(3)

温馨提示&#xff1a; 此篇文章需要前两篇文章作为基础。 JAVA系列 小白入门参考资料 类和对象&#xff08;1&#xff09;​​​​​​​ JAVA系列 小白入门参考资料 类和对象&#xff08;2&#xff09; 目录 1. 封装 引入封装 访问修饰符 封装的具体实现 get方法和…

Elasticsearch 索引 blocks:深入探讨数据保护

Elasticsearch 作为搜索和分析数据的首选分布式引擎在技术领域脱颖而出&#xff0c;尤其是在处理日志、事件和综合文本搜索时。 它的与众不同之处在于它如何让你使用各种块选项调整对其索引的访问。 这对于那些负责技术项目的人&#xff08;比如管理员和编码员&#xff09;来说…

计算机系统概述试题(二)

一、单项选择题 01&#xff0e;关于CPU主频、CPI、MIPS、MFLOPS&#xff0c;说法正确的是( )。 A.CPU主频是指CPU系统执行指令的频率&#xff0c;CPI是执行一条指令平均使用的频率 B.CPI是执行一条指令平均使用CPU时钟的个数&#xff0c;MIPS描述一条CPU指令平均使用 的CPU时钟…

微信小程序与web-view网页进行通信的尝试

首先&#xff0c;微信小程序向web-view传递数据一般通过地址栏传参的形式&#xff08;给src赋值或者修改hash&#xff09;&#xff0c;这样一般就已经能够满足实际开发需求了&#xff0c;所以这里主要探讨web-view向微信小程序传参。下面&#xff0c;我们从官方文档入手&#x…